diff --git a/.mailmap b/.mailmap index fdd7989492fc35c441554944b7ccf37eff521131..bbb6a077d2276e153c5567de351c1526006428dc 100644 --- a/.mailmap +++ b/.mailmap @@ -29,6 +29,7 @@ Alexandre Belloni Alexei Starovoitov Alexei Starovoitov +Alex Hung Alex Shi Alex Shi Alex Shi @@ -382,6 +383,7 @@ Santosh Shilimkar Santosh Shilimkar Sarangdhar Joshi Sascha Hauer +Satya Priya S.Çağlar Onur Sean Christopherson Sean Nyekjaer @@ -389,6 +391,7 @@ Sebastian Reichel Sebastian Reichel Sedat Dilek Seth Forshee +Shannon Nelson Shiraz Hashim Shuah Khan Shuah Khan @@ -416,6 +419,7 @@ TripleX Chung TripleX Chung Tsuneo Yoshioka Tycho Andersen +Tzung-Bi Shih Uwe Kleine-König Uwe Kleine-König Uwe Kleine-König diff --git a/CREDITS b/CREDITS index 1841184c834d2f8be7c8c1f55c90917b3332e495..198f675c419e37d2b963646b4fb12937979329cd 100644 --- a/CREDITS +++ b/CREDITS @@ -918,6 +918,11 @@ S: Ottawa, Ontario S: K1N 6Z9 S: CANADA +N: Vivien Didelot +E: vivien.didelot@gmail.com +D: DSA framework and MV88E6XXX driver +S: Montreal, Quebec, Canada + N: Jeff Dike E: jdike@karaya.com W: http://user-mode-linux.sourceforge.net @@ -2447,6 +2452,10 @@ S: 482 Shadowgraph Dr. S: San Jose, CA 95110 S: USA +N: Michal Marek +E: michal.lkml@markovi.net +D: Kbuild Maintainer 2009-2017 + N: Martin Mares E: mj@ucw.cz W: http://www.ucw.cz/~mj/ diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index a465d5242774af8f89779121b5acca4439b7f5f0..42af9ca0127e522beaa8113a02d2568cd1c56a6a 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -6959,3 +6959,14 @@ memory, and other data can't be written using xmon commands. off xmon is disabled. + + amd_pstate= [X86] + disable + Do not enable amd_pstate as the default + scaling driver for the supported processors + passive + Use amd_pstate as a scaling driver, driver requests a + desired performance on this abstract scale and the power + management firmware translates the requests into actual + hardware states (core frequency, data fabric and memory + clocks etc.) diff --git a/Documentation/admin-guide/pm/amd-pstate.rst b/Documentation/admin-guide/pm/amd-pstate.rst index 8f3d30c5a0d8fffe5820d66d1190dcc484d46efd..06e23538f79c30a134f079e3f577c29702489027 100644 --- a/Documentation/admin-guide/pm/amd-pstate.rst +++ b/Documentation/admin-guide/pm/amd-pstate.rst @@ -283,23 +283,19 @@ efficiency frequency management method on AMD processors. Kernel Module Options for ``amd-pstate`` ========================================= -.. _shared_mem: - -``shared_mem`` -Use a module param (shared_mem) to enable related processors manually with -**amd_pstate.shared_mem=1**. -Due to the performance issue on the processors with `Shared Memory Support -`_, we disable it presently and will re-enable this by default -once we address performance issue with this solution. - -To check whether the current processor is using `Full MSR Support `_ -or `Shared Memory Support `_ : :: - - ray@hr-test1:~$ lscpu | grep cppc - Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr rdpru wbnoinvd cppc arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif v_spec_ctrl umip pku ospke vaes vpclmulqdq rdpid overflow_recov succor smca fsrm - -If the CPU flags have ``cppc``, then this processor supports `Full MSR Support -`_. Otherwise, it supports `Shared Memory Support `_. +Passive Mode +------------ + +``amd_pstate=passive`` + +It will be enabled if the ``amd_pstate=passive`` is passed to the kernel in the command line. +In this mode, ``amd_pstate`` driver software specifies a desired QoS target in the CPPC +performance scale as a relative number. This can be expressed as percentage of nominal +performance (infrastructure max). Below the nominal sustained performance level, +desired performance expresses the average performance level of the processor subject +to the Performance Reduction Tolerance register. Above the nominal performance level, +processor must provide at least nominal performance requested and go higher if current +operating conditions allow. ``cpupower`` tool support for ``amd-pstate`` diff --git a/Documentation/arm64/booting.rst b/Documentation/arm64/booting.rst index 8aefa1001ae522c0a09ac87608f2b4d8d94ff296..8c324ad638de2b27f37a00874924af97c1febc72 100644 --- a/Documentation/arm64/booting.rst +++ b/Documentation/arm64/booting.rst @@ -340,6 +340,14 @@ Before jumping into the kernel, the following conditions must be met: - SMCR_EL2.LEN must be initialised to the same value for all CPUs the kernel will execute on. + - HWFGRTR_EL2.nTPIDR2_EL0 (bit 55) must be initialised to 0b01. + + - HWFGWTR_EL2.nTPIDR2_EL0 (bit 55) must be initialised to 0b01. + + - HWFGRTR_EL2.nSMPRI_EL1 (bit 54) must be initialised to 0b01. + + - HWFGWTR_EL2.nSMPRI_EL1 (bit 54) must be initialised to 0b01. + For CPUs with the Scalable Matrix Extension FA64 feature (FEAT_SME_FA64) - If EL3 is present: diff --git a/Documentation/arm64/cpu-feature-registers.rst b/Documentation/arm64/cpu-feature-registers.rst index 04ba83e1965fb8766aef330cd53c71d975ee9885..c7adc7897df606a6ed07114e42e7480bddf70f91 100644 --- a/Documentation/arm64/cpu-feature-registers.rst +++ b/Documentation/arm64/cpu-feature-registers.rst @@ -92,7 +92,7 @@ operation if the source belongs to the supported system register space. The infrastructure emulates only the following system register space:: - Op0=3, Op1=0, CRn=0, CRm=0,4,5,6,7 + Op0=3, Op1=0, CRn=0, CRm=0,2,3,4,5,6,7 (See Table C5-6 'System instruction encodings for non-Debug System register accesses' in ARMv8 ARM DDI 0487A.h, for the list of @@ -293,6 +293,42 @@ infrastructure: | WFXT | [3-0] | y | +------------------------------+---------+---------+ + 10) MVFR0_EL1 - AArch32 Media and VFP Feature Register 0 + + +------------------------------+---------+---------+ + | Name | bits | visible | + +------------------------------+---------+---------+ + | FPDP | [11-8] | y | + +------------------------------+---------+---------+ + + 11) MVFR1_EL1 - AArch32 Media and VFP Feature Register 1 + + +------------------------------+---------+---------+ + | Name | bits | visible | + +------------------------------+---------+---------+ + | SIMDFMAC | [31-28] | y | + +------------------------------+---------+---------+ + | SIMDSP | [19-16] | y | + +------------------------------+---------+---------+ + | SIMDInt | [15-12] | y | + +------------------------------+---------+---------+ + | SIMDLS | [11-8] | y | + +------------------------------+---------+---------+ + + 12) ID_ISAR5_EL1 - AArch32 Instruction Set Attribute Register 5 + + +------------------------------+---------+---------+ + | Name | bits | visible | + +------------------------------+---------+---------+ + | CRC32 | [19-16] | y | + +------------------------------+---------+---------+ + | SHA2 | [15-12] | y | + +------------------------------+---------+---------+ + | SHA1 | [11-8] | y | + +------------------------------+---------+---------+ + | AES | [7-4] | y | + +------------------------------+---------+---------+ + Appendix I: Example ------------------- diff --git a/Documentation/dev-tools/kmsan.rst b/Documentation/dev-tools/kmsan.rst index 2a53a801198cbf5fe8f132cd6293b707b3d5ad16..55fa82212eb2550ad6889f33aee2db77f1cbff4c 100644 --- a/Documentation/dev-tools/kmsan.rst +++ b/Documentation/dev-tools/kmsan.rst @@ -67,6 +67,7 @@ uninitialized in the local variable, as well as the stack where the value was copied to another memory location before use. A use of uninitialized value ``v`` is reported by KMSAN in the following cases: + - in a condition, e.g. ``if (v) { ... }``; - in an indexing or pointer dereferencing, e.g. ``array[v]`` or ``*v``; - when it is copied to userspace or hardware, e.g. ``copy_to_user(..., &v, ...)``; diff --git a/Documentation/devicetree/bindings/clock/samsung,exynosautov9-clock.yaml b/Documentation/devicetree/bindings/clock/samsung,exynosautov9-clock.yaml index 2ab4642679c06720ec31c31dfda6d219f5f195d6..55c4f94a14d182d2a4a2a78d80a7c78e884732ea 100644 --- a/Documentation/devicetree/bindings/clock/samsung,exynosautov9-clock.yaml +++ b/Documentation/devicetree/bindings/clock/samsung,exynosautov9-clock.yaml @@ -148,7 +148,7 @@ allOf: items: - const: oscclk - const: dout_clkcmu_fsys1_bus - - const: dout_clkcmu_fsys1_mmc_card + - const: gout_clkcmu_fsys1_mmc_card - const: dout_clkcmu_fsys1_usbdrd - if: diff --git a/Documentation/devicetree/bindings/hwlock/qcom-hwspinlock.yaml b/Documentation/devicetree/bindings/hwlock/qcom-hwspinlock.yaml index 1c7149f7d171a1e6a6a7b64d05f7e57299507065..ee2726149cf35fcb73da517fd76cfffc77352177 100644 --- a/Documentation/devicetree/bindings/hwlock/qcom-hwspinlock.yaml +++ b/Documentation/devicetree/bindings/hwlock/qcom-hwspinlock.yaml @@ -15,9 +15,22 @@ description: properties: compatible: - enum: - - qcom,sfpb-mutex - - qcom,tcsr-mutex + oneOf: + - enum: + - qcom,sfpb-mutex + - qcom,tcsr-mutex + - items: + - enum: + - qcom,apq8084-tcsr-mutex + - qcom,ipq6018-tcsr-mutex + - qcom,msm8226-tcsr-mutex + - qcom,msm8994-tcsr-mutex + - const: qcom,tcsr-mutex + - items: + - enum: + - qcom,msm8974-tcsr-mutex + - const: qcom,tcsr-mutex + - const: syscon reg: maxItems: 1 @@ -34,9 +47,9 @@ additionalProperties: false examples: - | - tcsr_mutex: hwlock@1f40000 { - compatible = "qcom,tcsr-mutex"; - reg = <0x01f40000 0x40000>; - #hwlock-cells = <1>; - }; + hwlock@1f40000 { + compatible = "qcom,tcsr-mutex"; + reg = <0x01f40000 0x40000>; + #hwlock-cells = <1>; + }; ... diff --git a/Documentation/devicetree/bindings/iio/adc/aspeed,ast2600-adc.yaml b/Documentation/devicetree/bindings/iio/adc/aspeed,ast2600-adc.yaml index b283c8ca2bbfccc32f738ecb20979f4da1036d6c..5c08d8b6e9951deaf7085d3bda4cfec885a5052a 100644 --- a/Documentation/devicetree/bindings/iio/adc/aspeed,ast2600-adc.yaml +++ b/Documentation/devicetree/bindings/iio/adc/aspeed,ast2600-adc.yaml @@ -62,13 +62,6 @@ properties: description: Inform the driver that last channel will be used to sensor battery. - aspeed,trim-data-valid: - type: boolean - description: | - The ADC reference voltage can be calibrated to obtain the trimming - data which will be stored in otp. This property informs the driver that - the data store in the otp is valid. - required: - compatible - reg diff --git a/Documentation/devicetree/bindings/input/goodix,gt7375p.yaml b/Documentation/devicetree/bindings/input/goodix,gt7375p.yaml index fe1c5016f7f316601b9f54124f74eacec1a8a5f1..1c191bc5a17823ec88eccddaf59dd31071c796e6 100644 --- a/Documentation/devicetree/bindings/input/goodix,gt7375p.yaml +++ b/Documentation/devicetree/bindings/input/goodix,gt7375p.yaml @@ -16,8 +16,11 @@ description: properties: compatible: - items: + oneOf: - const: goodix,gt7375p + - items: + - const: goodix,gt7986u + - const: goodix,gt7375p reg: enum: diff --git a/Documentation/devicetree/bindings/interconnect/qcom,msm8998-bwmon.yaml b/Documentation/devicetree/bindings/interconnect/qcom,msm8998-bwmon.yaml index 2684562df4d91115c674022481cb2eb22e6fd01b..be29e0b80995e0a6ea7d0cbea61055d6a028b4d1 100644 --- a/Documentation/devicetree/bindings/interconnect/qcom,msm8998-bwmon.yaml +++ b/Documentation/devicetree/bindings/interconnect/qcom,msm8998-bwmon.yaml @@ -24,7 +24,7 @@ properties: oneOf: - items: - enum: - - qcom,sc7280-bwmon + - qcom,sc7280-cpu-bwmon - qcom,sdm845-bwmon - const: qcom,msm8998-bwmon - const: qcom,msm8998-bwmon # BWMON v4 diff --git a/Documentation/devicetree/bindings/media/allwinner,sun50i-h6-vpu-g2.yaml b/Documentation/devicetree/bindings/media/allwinner,sun50i-h6-vpu-g2.yaml index 24d7bf21499e4f1c94ff2907be1059ede0dc6857..9d44236f2debdca6df9386ce5bf660d8b8a48c2f 100644 --- a/Documentation/devicetree/bindings/media/allwinner,sun50i-h6-vpu-g2.yaml +++ b/Documentation/devicetree/bindings/media/allwinner,sun50i-h6-vpu-g2.yaml @@ -36,6 +36,9 @@ properties: resets: maxItems: 1 + iommus: + maxItems: 1 + required: - compatible - reg @@ -43,6 +46,7 @@ required: - clocks - clock-names - resets + - iommus additionalProperties: false @@ -59,6 +63,7 @@ examples: clocks = <&ccu CLK_BUS_VP9>, <&ccu CLK_VP9>; clock-names = "bus", "mod"; resets = <&ccu RST_BUS_VP9>; + iommus = <&iommu 5>; }; ... diff --git a/Documentation/devicetree/bindings/net/engleder,tsnep.yaml b/Documentation/devicetree/bindings/net/engleder,tsnep.yaml index 5bd964a46a9d0324b92a7fbfd3d0ec0e925a6d7d..a6921e805e37e6200aaaaa5645b8ba637877c6d9 100644 --- a/Documentation/devicetree/bindings/net/engleder,tsnep.yaml +++ b/Documentation/devicetree/bindings/net/engleder,tsnep.yaml @@ -47,7 +47,7 @@ properties: nvmem-cells: true - nvmem-cells-names: true + nvmem-cell-names: true phy-connection-type: enum: diff --git a/Documentation/devicetree/bindings/power/fsl,imx-gpcv2.yaml b/Documentation/devicetree/bindings/power/fsl,imx-gpcv2.yaml index 58022ae7d5ddcc0dee8d08b9cedd49516d7930dd..dfdb8dfb6b6538dbafbdc3eaf236726861d3a301 100644 --- a/Documentation/devicetree/bindings/power/fsl,imx-gpcv2.yaml +++ b/Documentation/devicetree/bindings/power/fsl,imx-gpcv2.yaml @@ -81,6 +81,9 @@ properties: power-supply: true + power-domains: + maxItems: 1 + resets: description: | A number of phandles to resets that need to be asserted during diff --git a/Documentation/devicetree/bindings/sound/google,cros-ec-codec.yaml b/Documentation/devicetree/bindings/sound/google,cros-ec-codec.yaml index c3e9f3485449e33ede0ba10509de7021e5404879..dea293f403d906d6546be1f43bfbc937ea5d21e1 100644 --- a/Documentation/devicetree/bindings/sound/google,cros-ec-codec.yaml +++ b/Documentation/devicetree/bindings/sound/google,cros-ec-codec.yaml @@ -8,7 +8,7 @@ title: Audio codec controlled by ChromeOS EC maintainers: - Cheng-Yi Chiang - - Tzung-Bi Shih + - Tzung-Bi Shih description: | Google's ChromeOS EC codec is a digital mic codec provided by the diff --git a/Documentation/devicetree/bindings/sound/realtek,rt1015p.yaml b/Documentation/devicetree/bindings/sound/realtek,rt1015p.yaml index 1d73204451b157bc39a2633c4ac49950daf3ce50..ea7d4900ee4a563d00755aff6b587e0dbfd2d21c 100644 --- a/Documentation/devicetree/bindings/sound/realtek,rt1015p.yaml +++ b/Documentation/devicetree/bindings/sound/realtek,rt1015p.yaml @@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# title: Realtek rt1015p codec devicetree bindings maintainers: - - Tzung-Bi Shih + - Tzung-Bi Shih description: | Rt1015p is a rt1015 variant which does not support I2C and diff --git a/Documentation/driver-api/driver-model/devres.rst b/Documentation/driver-api/driver-model/devres.rst index 687adb58048ec203239069bef32475634d2f7a88..56082265e8e501e5c50b4df5c2cac2010721c696 100644 --- a/Documentation/driver-api/driver-model/devres.rst +++ b/Documentation/driver-api/driver-model/devres.rst @@ -279,6 +279,7 @@ GPIO devm_gpio_request_one() I2C + devm_i2c_add_adapter() devm_i2c_new_dummy_device() IIO diff --git a/Documentation/driver-api/miscellaneous.rst b/Documentation/driver-api/miscellaneous.rst index 304ffb146cf9c195832cae3a998eb4712910488a..4a5104a368ac6b65d7907e972674e0a8b10c45b4 100644 --- a/Documentation/driver-api/miscellaneous.rst +++ b/Documentation/driver-api/miscellaneous.rst @@ -16,12 +16,11 @@ Parallel Port Devices 16x50 UART Driver ================= -.. kernel-doc:: drivers/tty/serial/serial_core.c - :export: - .. kernel-doc:: drivers/tty/serial/8250/8250_core.c :export: +See serial/driver.rst for related APIs. + Pulse-Width Modulation (PWM) ============================ diff --git a/Documentation/kbuild/reproducible-builds.rst b/Documentation/kbuild/reproducible-builds.rst index 071f0151a7a4e2414edeafb5d41f349cb46f55d6..f2dcc39044e66ddd165646e0b51ccb0209aca7dd 100644 --- a/Documentation/kbuild/reproducible-builds.rst +++ b/Documentation/kbuild/reproducible-builds.rst @@ -119,6 +119,16 @@ To avoid this, you can make the vDSO different for different kernel versions by including an arbitrary string of "salt" in it. This is specified by the Kconfig symbol ``CONFIG_BUILD_SALT``. +Git +--- + +Uncommitted changes or different commit ids in git can also lead +to different compilation results. For example, after executing +``git reset HEAD^``, even if the code is the same, the +``include/config/kernel.release`` generated during compilation +will be different, which will eventually lead to binary differences. +See ``scripts/setlocalversion`` for details. + .. _KBUILD_BUILD_TIMESTAMP: kbuild.html#kbuild-build-timestamp .. _KBUILD_BUILD_USER and KBUILD_BUILD_HOST: kbuild.html#kbuild-build-user-kbuild-build-host .. _KCFLAGS: kbuild.html#kcflags diff --git a/Documentation/kernel-hacking/hacking.rst b/Documentation/kernel-hacking/hacking.rst index 9a1f020c84498b501f7526798167d4fc5f419c2b..1717348a4404e085777affcd80648fe8d1813b34 100644 --- a/Documentation/kernel-hacking/hacking.rst +++ b/Documentation/kernel-hacking/hacking.rst @@ -120,7 +120,7 @@ You can tell you are in a softirq (or tasklet) using the .. warning:: Beware that this will return a false positive if a - :ref:`botton half lock ` is held. + :ref:`bottom half lock ` is held. Some Basic Rules ================ diff --git a/Documentation/networking/generic_netlink.rst b/Documentation/networking/generic_netlink.rst index 59e04ccf80c1859a6ccba9ba09b84128a5172b39..d960dbd7e80efe3f52f0052af86050933bc0cd23 100644 --- a/Documentation/networking/generic_netlink.rst +++ b/Documentation/networking/generic_netlink.rst @@ -6,4 +6,4 @@ Generic Netlink A wiki document on how to use Generic Netlink can be found here: - * http://www.linuxfoundation.org/collaborate/workgroups/networking/generic_netlink_howto + * https://wiki.linuxfoundation.org/networking/generic_netlink_howto diff --git a/Documentation/process/2.Process.rst b/Documentation/process/2.Process.rst index e05fb1b8f8b6b2921743138d89e2e42778e4b70c..6a919cffcbfd753fad7e74cb3290f1d561a38550 100644 --- a/Documentation/process/2.Process.rst +++ b/Documentation/process/2.Process.rst @@ -126,17 +126,10 @@ than one development cycle past their initial release. So, for example, the 5.2.21 was the final stable update of the 5.2 release. Some kernels are designated "long term" kernels; they will receive support -for a longer period. As of this writing, the current long term kernels -and their maintainers are: - - ====== ================================ ======================= - 3.16 Ben Hutchings (very long-term kernel) - 4.4 Greg Kroah-Hartman & Sasha Levin (very long-term kernel) - 4.9 Greg Kroah-Hartman & Sasha Levin - 4.14 Greg Kroah-Hartman & Sasha Levin - 4.19 Greg Kroah-Hartman & Sasha Levin - 5.4 Greg Kroah-Hartman & Sasha Levin - ====== ================================ ======================= +for a longer period. Please refer to the following link for the list of active +long term kernel versions and their maintainers: + + https://www.kernel.org/category/releases.html The selection of a kernel for long-term support is purely a matter of a maintainer having the need and the time to maintain that release. There diff --git a/Documentation/process/code-of-conduct-interpretation.rst b/Documentation/process/code-of-conduct-interpretation.rst index 922e0b547bc39b81d7e7edcd6e7db89aa6e128ea..66b07f14714c28508e254947595f7c751aff4466 100644 --- a/Documentation/process/code-of-conduct-interpretation.rst +++ b/Documentation/process/code-of-conduct-interpretation.rst @@ -51,7 +51,7 @@ the Technical Advisory Board (TAB) or other maintainers if you're uncertain how to handle situations that come up. It will not be considered a violation report unless you want it to be. If you are uncertain about approaching the TAB or any other maintainers, please -reach out to our conflict mediator, Joanna Lee . +reach out to our conflict mediator, Joanna Lee . In the end, "be kind to each other" is really what the end goal is for everybody. We know everyone is human and we all fail at times, but the diff --git a/Documentation/process/howto.rst b/Documentation/process/howto.rst index bd15c393ba3cdbdaa693f437092e6917c673005a..cb6abcb2b6d07728a2de3cf9031d1825a76e067e 100644 --- a/Documentation/process/howto.rst +++ b/Documentation/process/howto.rst @@ -36,7 +36,7 @@ experience, the following books are good for, if anything, reference: - "C: A Reference Manual" by Harbison and Steele [Prentice Hall] The kernel is written using GNU C and the GNU toolchain. While it -adheres to the ISO C89 standard, it uses a number of extensions that are +adheres to the ISO C11 standard, it uses a number of extensions that are not featured in the standard. The kernel is a freestanding C environment, with no reliance on the standard C library, so some portions of the C standard are not supported. Arbitrary long long diff --git a/Documentation/trace/histogram.rst b/Documentation/trace/histogram.rst index c1b685a38f6b4c75c27dbef236610d7a26c4ab2f..87bd772836c0c56ee93e37b5386128c728c3c03f 100644 --- a/Documentation/trace/histogram.rst +++ b/Documentation/trace/histogram.rst @@ -39,7 +39,7 @@ Documentation written by Tom Zanussi will use the event's kernel stacktrace as the key. The keywords 'keys' or 'key' can be used to specify keys, and the keywords 'values', 'vals', or 'val' can be used to specify values. Compound - keys consisting of up to two fields can be specified by the 'keys' + keys consisting of up to three fields can be specified by the 'keys' keyword. Hashing a compound key produces a unique entry in the table for each unique combination of component keys, and can be useful for providing more fine-grained summaries of event data. diff --git a/Documentation/translations/it_IT/process/howto.rst b/Documentation/translations/it_IT/process/howto.rst index 15c08aea1dfea27ef92170ac485b2c11b6bc6b2e..052f1b3610cb1ff95a271932da53493c193ce39e 100644 --- a/Documentation/translations/it_IT/process/howto.rst +++ b/Documentation/translations/it_IT/process/howto.rst @@ -44,7 +44,7 @@ altro, utili riferimenti: - "C: A Reference Manual" di Harbison and Steele [Prentice Hall] Il kernel è stato scritto usando GNU C e la toolchain GNU. -Sebbene si attenga allo standard ISO C89, esso utilizza una serie di +Sebbene si attenga allo standard ISO C11, esso utilizza una serie di estensioni che non sono previste in questo standard. Il kernel è un ambiente C indipendente, che non ha alcuna dipendenza dalle librerie C standard, così alcune parti del C standard non sono supportate. diff --git a/Documentation/translations/ja_JP/howto.rst b/Documentation/translations/ja_JP/howto.rst index b47a682d8dedcc81a2466d622995cfd917ad1437..b8eeb45a02d460339bdfd27a229a47eda367efec 100644 --- a/Documentation/translations/ja_JP/howto.rst +++ b/Documentation/translations/ja_JP/howto.rst @@ -65,7 +65,7 @@ Linux カーネル開発のやり方 - 『新・詳説 C 言語 H&S リファレンス』 (サミュエル P ハービソン/ガイ L スティール共著 斉藤 信男監訳)[ソフトバンク] カーネルは GNU C と GNU ツールチェインを使って書かれています。カーネル -は ISO C89 仕様に準拠して書く一方で、標準には無い言語拡張を多く使って +は ISO C11 仕様に準拠して書く一方で、標準には無い言語拡張を多く使って います。カーネルは標準 C ライブラリに依存しない、C 言語非依存環境です。 そのため、C の標準の中で使えないものもあります。特に任意の long long の除算や浮動小数点は使えません。カーネルがツールチェインや C 言語拡張 diff --git a/Documentation/translations/ko_KR/howto.rst b/Documentation/translations/ko_KR/howto.rst index df53fafd1b10ade31b54615e0708328e7089b747..969e91a95bb0ca970dcf4b2035fb5cc706468357 100644 --- a/Documentation/translations/ko_KR/howto.rst +++ b/Documentation/translations/ko_KR/howto.rst @@ -62,7 +62,7 @@ Documentation/process/howto.rst - "Practical C Programming" by Steve Oualline [O'Reilly] - "C: A Reference Manual" by Harbison and Steele [Prentice Hall] -커널은 GNU C와 GNU 툴체인을 사용하여 작성되었다. 이 툴들은 ISO C89 표준을 +커널은 GNU C와 GNU 툴체인을 사용하여 작성되었다. 이 툴들은 ISO C11 표준을 따르는 반면 표준에 있지 않은 많은 확장기능도 가지고 있다. 커널은 표준 C 라이브러리와는 관계없이 freestanding C 환경이어서 C 표준의 일부는 지원되지 않는다. 임의의 long long 나누기나 floating point는 지원되지 않는다. diff --git a/Documentation/translations/zh_CN/loongarch/introduction.rst b/Documentation/translations/zh_CN/loongarch/introduction.rst index 128878f5bb70518ac9a292f4bc435e5fcff938ad..f3ec25b163d702933925518d5298adbb09bb3610 100644 --- a/Documentation/translations/zh_CN/loongarch/introduction.rst +++ b/Documentation/translations/zh_CN/loongarch/introduction.rst @@ -70,8 +70,8 @@ LA64中每个寄存器为64位宽。 ``$r0`` 的内容总是固定为0,而其 ================= ================== =================== ========== .. note:: - 注意:在一些遗留代码中有时可能见到 ``$v0`` 和 ``$v1`` ,它们是 - ``$a0`` 和 ``$a1`` 的别名,属于已经废弃的用法。 + 注意:在一些遗留代码中有时可能见到 ``$fv0`` 和 ``$fv1`` ,它们是 + ``$fa0`` 和 ``$fa1`` 的别名,属于已经废弃的用法。 向量寄存器 diff --git a/Documentation/translations/zh_CN/process/howto.rst b/Documentation/translations/zh_CN/process/howto.rst index 5bf953146929f00245489c6594343c8bba95657a..888978a62db3bb1c3bd02e89bbbe54a18fe15e6c 100644 --- a/Documentation/translations/zh_CN/process/howto.rst +++ b/Documentation/translations/zh_CN/process/howto.rst @@ -45,7 +45,7 @@ Linux内核大部分是由C语言写成的,一些体系结构相关的代码 - "C: A Reference Manual" by Harbison and Steele [Prentice Hall] 《C语言参考手册(原书第5版)》(邱仲潘 等译)[机械工业出版社] -Linux内核使用GNU C和GNU工具链开发。虽然它遵循ISO C89标准,但也用到了一些 +Linux内核使用GNU C和GNU工具链开发。虽然它遵循ISO C11标准,但也用到了一些 标准中没有定义的扩展。内核是自给自足的C环境,不依赖于标准C库的支持,所以 并不支持C标准中的部分定义。比如long long类型的大数除法和浮点运算就不允许 使用。有时候确实很难弄清楚内核对工具链的要求和它所使用的扩展,不幸的是目 diff --git a/Documentation/translations/zh_TW/process/howto.rst b/Documentation/translations/zh_TW/process/howto.rst index 86b0d4c6d6f9757abe13c40633bf3553fbf1c158..8fb8edcaee66525d4cd140a6259d083ad2a65279 100644 --- a/Documentation/translations/zh_TW/process/howto.rst +++ b/Documentation/translations/zh_TW/process/howto.rst @@ -48,7 +48,7 @@ Linux內核大部分是由C語言寫成的,一些體系結構相關的代碼 - "C: A Reference Manual" by Harbison and Steele [Prentice Hall] 《C語言參考手冊(原書第5版)》(邱仲潘 等譯)[機械工業出版社] -Linux內核使用GNU C和GNU工具鏈開發。雖然它遵循ISO C89標準,但也用到了一些 +Linux內核使用GNU C和GNU工具鏈開發。雖然它遵循ISO C11標準,但也用到了一些 標準中沒有定義的擴展。內核是自給自足的C環境,不依賴於標準C庫的支持,所以 並不支持C標準中的部分定義。比如long long類型的大數除法和浮點運算就不允許 使用。有時候確實很難弄清楚內核對工具鏈的要求和它所使用的擴展,不幸的是目 diff --git a/Documentation/virt/kvm/devices/vm.rst b/Documentation/virt/kvm/devices/vm.rst index 0aa5b1cfd700c485bbbb4385ff63a94e231c3dcf..60acc39e0e937c52d5e98c160ccf5f8fb9825264 100644 --- a/Documentation/virt/kvm/devices/vm.rst +++ b/Documentation/virt/kvm/devices/vm.rst @@ -215,6 +215,7 @@ KVM_S390_VM_TOD_EXT). :Parameters: address of a buffer in user space to store the data (u8) to :Returns: -EFAULT if the given address is not accessible from kernel space; -EINVAL if setting the TOD clock extension to != 0 is not supported + -EOPNOTSUPP for a PV guest (TOD managed by the ultravisor) 3.2. ATTRIBUTE: KVM_S390_VM_TOD_LOW ----------------------------------- @@ -224,6 +225,7 @@ the POP (u64). :Parameters: address of a buffer in user space to store the data (u64) to :Returns: -EFAULT if the given address is not accessible from kernel space + -EOPNOTSUPP for a PV guest (TOD managed by the ultravisor) 3.3. ATTRIBUTE: KVM_S390_VM_TOD_EXT ----------------------------------- @@ -237,6 +239,7 @@ it, it is stored as 0 and not allowed to be set to a value != 0. (kvm_s390_vm_tod_clock) to :Returns: -EFAULT if the given address is not accessible from kernel space; -EINVAL if setting the TOD clock extension to != 0 is not supported + -EOPNOTSUPP for a PV guest (TOD managed by the ultravisor) 4. GROUP: KVM_S390_VM_CRYPTO ============================ diff --git a/MAINTAINERS b/MAINTAINERS index 4db8e4e02c05f4ba28379f46154efe4c49eb5eef..67a8d221a20053557f0e5f89776f75682346147f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2197,7 +2197,7 @@ M: Wei Xu L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Supported W: http://www.hisilicon.com -T: git git://github.com/hisilicon/linux-hisi.git +T: git https://github.com/hisilicon/linux-hisi.git F: arch/arm/boot/dts/hi3* F: arch/arm/boot/dts/hip* F: arch/arm/boot/dts/hisi* @@ -3984,7 +3984,7 @@ M: Rafał Miłecki R: Broadcom internal kernel review list L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained -T: git git://github.com/broadcom/stblinux.git +T: git https://github.com/broadcom/stblinux.git F: Documentation/devicetree/bindings/arm/bcm/brcm,bcmbca.yaml F: arch/arm64/boot/dts/broadcom/bcmbca/* N: bcmbca @@ -4009,7 +4009,7 @@ R: Broadcom internal kernel review list L: linux-rpi-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained -T: git git://github.com/broadcom/stblinux.git +T: git https://github.com/broadcom/stblinux.git F: Documentation/devicetree/bindings/pci/brcm,stb-pcie.yaml F: drivers/pci/controller/pcie-brcmstb.c F: drivers/staging/vc04_services @@ -4023,7 +4023,7 @@ M: Ray Jui M: Scott Branden R: Broadcom internal kernel review list S: Maintained -T: git git://github.com/broadcom/mach-bcm +T: git https://github.com/broadcom/mach-bcm F: arch/arm/mach-bcm/ N: bcm281* N: bcm113* @@ -4088,7 +4088,7 @@ M: Florian Fainelli R: Broadcom internal kernel review list L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained -T: git git://github.com/broadcom/stblinux.git +T: git https://github.com/broadcom/stblinux.git F: Documentation/devicetree/bindings/pci/brcm,stb-pcie.yaml F: arch/arm/boot/dts/bcm7*.dts* F: arch/arm/include/asm/hardware/cache-b15-rac.h @@ -4121,7 +4121,7 @@ M: Florian Fainelli R: Broadcom internal kernel review list L: linux-mips@vger.kernel.org S: Maintained -T: git git://github.com/broadcom/stblinux.git +T: git https://github.com/broadcom/stblinux.git F: arch/mips/bmips/* F: arch/mips/boot/dts/brcm/bcm*.dts* F: arch/mips/include/asm/mach-bmips/* @@ -4262,7 +4262,7 @@ M: Scott Branden R: Broadcom internal kernel review list L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained -T: git git://github.com/broadcom/stblinux.git +T: git https://github.com/broadcom/stblinux.git F: arch/arm64/boot/dts/broadcom/northstar2/* F: arch/arm64/boot/dts/broadcom/stingray/* F: drivers/clk/bcm/clk-ns* @@ -4332,7 +4332,7 @@ M: Florian Fainelli R: Broadcom internal kernel review list L: linux-pm@vger.kernel.org S: Maintained -T: git git://github.com/broadcom/stblinux.git +T: git https://github.com/broadcom/stblinux.git F: drivers/soc/bcm/bcm63xx/bcm-pmb.c F: include/dt-bindings/soc/bcm-pmb.h @@ -4809,7 +4809,7 @@ R: Jeff Layton L: ceph-devel@vger.kernel.org S: Supported W: http://ceph.com/ -T: git git://github.com/ceph/ceph-client.git +T: git https://github.com/ceph/ceph-client.git F: include/linux/ceph/ F: include/linux/crush/ F: net/ceph/ @@ -4821,7 +4821,7 @@ R: Jeff Layton L: ceph-devel@vger.kernel.org S: Supported W: http://ceph.com/ -T: git git://github.com/ceph/ceph-client.git +T: git https://github.com/ceph/ceph-client.git F: Documentation/filesystems/ceph.rst F: fs/ceph/ @@ -4911,7 +4911,7 @@ F: drivers/platform/chrome/ CHROMEOS EC CODEC DRIVER M: Cheng-Yi Chiang -M: Tzung-Bi Shih +M: Tzung-Bi Shih R: Guenter Roeck L: chrome-platform@lists.linux.dev S: Maintained @@ -5041,7 +5041,7 @@ F: drivers/scsi/snic/ CISCO VIC ETHERNET NIC DRIVER M: Christian Benvenuti -M: Govindarajulu Varadarajan <_govind@gmx.com> +M: Satish Kharat S: Supported F: drivers/net/ethernet/cisco/enic/ @@ -5585,8 +5585,6 @@ F: drivers/scsi/cxgbi/cxgb3i CXGB4 CRYPTO DRIVER (chcr) M: Ayush Sawal -M: Vinay Kumar Yadav -M: Rohit Maheshwari L: linux-crypto@vger.kernel.org S: Supported W: http://www.chelsio.com @@ -5594,8 +5592,6 @@ F: drivers/crypto/chelsio CXGB4 INLINE CRYPTO DRIVER M: Ayush Sawal -M: Vinay Kumar Yadav -M: Rohit Maheshwari L: netdev@vger.kernel.org S: Supported W: http://www.chelsio.com @@ -8602,8 +8598,8 @@ F: include/asm-generic/ F: include/uapi/asm-generic/ GENERIC PHY FRAMEWORK -M: Kishon Vijay Abraham I M: Vinod Koul +M: Kishon Vijay Abraham I L: linux-phy@lists.infradead.org S: Supported Q: https://patchwork.kernel.org/project/linux-phy/list/ @@ -9217,7 +9213,7 @@ W: https://www.hisilicon.com F: drivers/i2c/busses/i2c-hisi.c HISILICON LPC BUS DRIVER -M: john.garry@huawei.com +M: Jay Fang S: Maintained W: http://www.hisilicon.com F: Documentation/devicetree/bindings/arm/hisilicon/low-pin-count.yaml @@ -9341,7 +9337,7 @@ S: Maintained F: drivers/crypto/hisilicon/trng/trng.c HISILICON V3XX SPI NOR FLASH Controller Driver -M: John Garry +M: Jay Fang S: Maintained W: http://www.hisilicon.com F: drivers/spi/spi-hisi-sfc-v3xx.c @@ -9507,7 +9503,6 @@ F: drivers/media/i2c/hi847.c Hyper-V/Azure CORE AND DRIVERS M: "K. Y. Srinivasan" M: Haiyang Zhang -M: Stephen Hemminger M: Wei Liu M: Dexuan Cui L: linux-hyperv@vger.kernel.org @@ -9779,7 +9774,10 @@ S: Supported F: drivers/pci/hotplug/rpaphp* IBM Power SRIOV Virtual NIC Device Driver -M: Dany Madden +M: Haren Myneni +M: Rick Lindsley +R: Nick Child +R: Dany Madden R: Thomas Falcon L: netdev@vger.kernel.org S: Supported @@ -10286,7 +10284,7 @@ T: git https://github.com/intel/gvt-linux.git F: drivers/gpu/drm/i915/gvt/ INTEL HID EVENT DRIVER -M: Alex Hung +M: Alex Hung L: platform-driver-x86@vger.kernel.org S: Maintained F: drivers/platform/x86/intel/hid.c @@ -11034,6 +11032,7 @@ KCONFIG M: Masahiro Yamada L: linux-kbuild@vger.kernel.org S: Maintained +Q: https://patchwork.kernel.org/project/linux-kbuild/list/ T: git git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git kconfig F: Documentation/kbuild/kconfig* F: scripts/Kconfig.include @@ -11091,10 +11090,12 @@ F: fs/autofs/ KERNEL BUILD + files below scripts/ (unless maintained elsewhere) M: Masahiro Yamada -M: Michal Marek +R: Nathan Chancellor R: Nick Desaulniers +R: Nicolas Schier L: linux-kbuild@vger.kernel.org S: Maintained +Q: https://patchwork.kernel.org/project/linux-kbuild/list/ T: git git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git F: Documentation/kbuild/ F: Makefile @@ -11249,7 +11250,7 @@ L: kvm@vger.kernel.org L: kvm-riscv@lists.infradead.org L: linux-riscv@lists.infradead.org S: Maintained -T: git git://github.com/kvm-riscv/linux.git +T: git https://github.com/kvm-riscv/linux.git F: arch/riscv/include/asm/kvm* F: arch/riscv/include/uapi/asm/kvm* F: arch/riscv/kvm/ @@ -12224,7 +12225,6 @@ F: arch/mips/boot/dts/img/pistachio* MARVELL 88E6XXX ETHERNET SWITCH FABRIC DRIVER M: Andrew Lunn -M: Vivien Didelot L: netdev@vger.kernel.org S: Maintained F: Documentation/devicetree/bindings/net/dsa/marvell.txt @@ -13625,6 +13625,12 @@ S: Supported F: drivers/misc/atmel-ssc.c F: include/linux/atmel-ssc.h +MICROCHIP SOC DRIVERS +M: Conor Dooley +S: Supported +T: git https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux.git/ +F: drivers/soc/microchip/ + MICROCHIP USB251XB DRIVER M: Richard Leitner L: linux-usb@vger.kernel.org @@ -14331,7 +14337,6 @@ F: drivers/net/wireless/ NETWORKING [DSA] M: Andrew Lunn -M: Vivien Didelot M: Florian Fainelli M: Vladimir Oltean S: Maintained @@ -15640,7 +15645,7 @@ F: drivers/input/serio/gscps2.c F: drivers/input/serio/hp_sdc* F: drivers/parisc/ F: drivers/parport/parport_gsc.* -F: drivers/tty/serial/8250/8250_gsc.c +F: drivers/tty/serial/8250/8250_parisc.c F: drivers/video/console/sti* F: drivers/video/fbdev/sti* F: drivers/video/logo/logo_parisc* @@ -15953,6 +15958,7 @@ Q: https://patchwork.kernel.org/project/linux-pci/list/ B: https://bugzilla.kernel.org C: irc://irc.oftc.net/linux-pci T: git git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/pci.git +F: Documentation/devicetree/bindings/pci/ F: drivers/pci/controller/ F: drivers/pci/pci-bridge-emul.c F: drivers/pci/pci-bridge-emul.h @@ -16059,7 +16065,7 @@ F: Documentation/devicetree/bindings/pci/microchip* F: drivers/pci/controller/*microchip* PCIE DRIVER FOR QUALCOMM MSM -M: Stanimir Varbanov +M: Manivannan Sadhasivam L: linux-pci@vger.kernel.org L: linux-arm-msm@vger.kernel.org S: Maintained @@ -16149,7 +16155,8 @@ F: include/linux/peci-cpu.h F: include/linux/peci.h PENSANDO ETHERNET DRIVERS -M: Shannon Nelson +M: Shannon Nelson +M: Brett Creeley M: drivers@pensando.io L: netdev@vger.kernel.org S: Supported @@ -17232,7 +17239,7 @@ R: Dongsheng Yang L: ceph-devel@vger.kernel.org S: Supported W: http://ceph.com/ -T: git git://github.com/ceph/ceph-client.git +T: git https://github.com/ceph/ceph-client.git F: Documentation/ABI/testing/sysfs-bus-rbd F: drivers/block/rbd.c F: drivers/block/rbd_types.h @@ -17485,10 +17492,8 @@ S: Maintained F: drivers/net/wireless/realtek/rtw89/ REDPINE WIRELESS DRIVER -M: Amitkumar Karwar -M: Siva Rebbagondla L: linux-wireless@vger.kernel.org -S: Maintained +S: Orphan F: drivers/net/wireless/rsi/ REGISTER MAP ABSTRACTION @@ -17733,7 +17738,7 @@ F: arch/riscv/ N: riscv K: riscv -RISC-V/MICROCHIP POLARFIRE SOC SUPPORT +RISC-V MICROCHIP FPGA SUPPORT M: Conor Dooley M: Daire McNamara L: linux-riscv@lists.infradead.org @@ -17751,17 +17756,26 @@ F: Documentation/devicetree/bindings/usb/microchip,mpfs-musb.yaml F: arch/riscv/boot/dts/microchip/ F: drivers/char/hw_random/mpfs-rng.c F: drivers/clk/microchip/clk-mpfs.c -F: drivers/i2c/busses/i2c-microchip-core.c +F: drivers/i2c/busses/i2c-microchip-corei2c.c F: drivers/mailbox/mailbox-mpfs.c F: drivers/pci/controller/pcie-microchip-host.c F: drivers/reset/reset-mpfs.c F: drivers/rtc/rtc-mpfs.c -F: drivers/soc/microchip/ +F: drivers/soc/microchip/mpfs-sys-controller.c F: drivers/spi/spi-microchip-core-qspi.c F: drivers/spi/spi-microchip-core.c F: drivers/usb/musb/mpfs.c F: include/soc/microchip/mpfs.h +RISC-V MISC SOC SUPPORT +M: Conor Dooley +L: linux-riscv@lists.infradead.org +S: Maintained +Q: https://patchwork.kernel.org/project/linux-riscv/list/ +T: git https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux.git/ +F: Documentation/devicetree/bindings/riscv/ +F: arch/riscv/boot/dts/ + RNBD BLOCK DRIVERS M: Md. Haris Iqbal M: Jack Wang @@ -18002,7 +18016,7 @@ L: linux-fbdev@vger.kernel.org S: Maintained F: drivers/video/fbdev/savage/ -S390 +S390 ARCHITECTURE M: Heiko Carstens M: Vasily Gorbik M: Alexander Gordeev @@ -18057,6 +18071,15 @@ L: netdev@vger.kernel.org S: Supported F: drivers/s390/net/ +S390 MM +M: Alexander Gordeev +M: Gerald Schaefer +L: linux-s390@vger.kernel.org +S: Supported +T: git git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux.git +F: arch/s390/include/asm/pgtable.h +F: arch/s390/mm + S390 PCI SUBSYSTEM M: Niklas Schnelle M: Gerald Schaefer @@ -18788,7 +18811,6 @@ M: Palmer Dabbelt M: Paul Walmsley L: linux-riscv@lists.infradead.org S: Supported -T: git https://github.com/sifive/riscv-linux.git N: sifive K: [^@]sifive @@ -18807,6 +18829,13 @@ S: Maintained F: Documentation/devicetree/bindings/dma/sifive,fu540-c000-pdma.yaml F: drivers/dma/sf-pdma/ +SIFIVE SOC DRIVERS +M: Conor Dooley +L: linux-riscv@lists.infradead.org +S: Maintained +T: git https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux.git/ +F: drivers/soc/sifive/ + SILEAD TOUCHSCREEN DRIVER M: Hans de Goede L: linux-input@vger.kernel.org @@ -19608,6 +19637,11 @@ M: Ion Badulescu S: Odd Fixes F: drivers/net/ethernet/adaptec/starfire* +STARFIVE DEVICETREES +M: Emil Renner Berthing +S: Maintained +F: arch/riscv/boot/dts/starfive/ + STARFIVE JH7100 CLOCK DRIVERS M: Emil Renner Berthing S: Maintained diff --git a/Makefile b/Makefile index 28026d1ebb9d84a5a95b5a6e05de74d5cd5cd5e1..0992f827888dd98263cca610cdc5420a37f94ef8 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ VERSION = 6 PATCHLEVEL = 1 SUBLEVEL = 0 -EXTRAVERSION = -rc3 +EXTRAVERSION = -rc8 NAME = Hurr durr I'ma ninja sloth # *DOCUMENTATION* @@ -1218,7 +1218,7 @@ quiet_cmd_ar_vmlinux.a = AR $@ cmd_ar_vmlinux.a = \ rm -f $@; \ $(AR) cDPrST $@ $(KBUILD_VMLINUX_OBJS); \ - $(AR) mPiT $$($(AR) t $@ | head -n1) $@ $$($(AR) t $@ | grep -F --file=$(srctree)/scripts/head-object-list.txt) + $(AR) mPiT $$($(AR) t $@ | sed -n 1p) $@ $$($(AR) t $@ | grep -F -f $(srctree)/scripts/head-object-list.txt) targets += vmlinux.a vmlinux.a: $(KBUILD_VMLINUX_OBJS) scripts/head-object-list.txt autoksyms_recursive FORCE diff --git a/arch/arm/boot/dts/am335x-pcm-953.dtsi b/arch/arm/boot/dts/am335x-pcm-953.dtsi index dae448040a97b4abfa39889728a661d4c335ba33..94749741397788b0cc4cbfa7425cdc75ab2452a4 100644 --- a/arch/arm/boot/dts/am335x-pcm-953.dtsi +++ b/arch/arm/boot/dts/am335x-pcm-953.dtsi @@ -12,22 +12,20 @@ / { compatible = "phytec,am335x-pcm-953", "phytec,am335x-phycore-som", "ti,am33xx"; /* Power */ - regulators { - vcc3v3: fixedregulator@1 { - compatible = "regulator-fixed"; - regulator-name = "vcc3v3"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-boot-on; - }; + vcc3v3: fixedregulator1 { + compatible = "regulator-fixed"; + regulator-name = "vcc3v3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-boot-on; + }; - vcc1v8: fixedregulator@2 { - compatible = "regulator-fixed"; - regulator-name = "vcc1v8"; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-boot-on; - }; + vcc1v8: fixedregulator2 { + compatible = "regulator-fixed"; + regulator-name = "vcc1v8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-boot-on; }; /* User IO */ diff --git a/arch/arm/boot/dts/at91rm9200.dtsi b/arch/arm/boot/dts/at91rm9200.dtsi index 7a113325abb9ed958274e59a1abf477060a268eb..6f9004ebf42456f61cd71af5a734e2a8afa54f27 100644 --- a/arch/arm/boot/dts/at91rm9200.dtsi +++ b/arch/arm/boot/dts/at91rm9200.dtsi @@ -666,7 +666,7 @@ usb1: gadget@fffb0000 { compatible = "atmel,at91rm9200-udc"; reg = <0xfffb0000 0x4000>; interrupts = <11 IRQ_TYPE_LEVEL_HIGH 2>; - clocks = <&pmc PMC_TYPE_PERIPHERAL 11>, <&pmc PMC_TYPE_SYSTEM 2>; + clocks = <&pmc PMC_TYPE_PERIPHERAL 11>, <&pmc PMC_TYPE_SYSTEM 1>; clock-names = "pclk", "hclk"; status = "disabled"; }; diff --git a/arch/arm/boot/dts/at91sam9g20ek_common.dtsi b/arch/arm/boot/dts/at91sam9g20ek_common.dtsi index 60d61291f34445142c31b511ad349948c517407b..024af2db638ebe10537ee358463ae60ed4ae3faf 100644 --- a/arch/arm/boot/dts/at91sam9g20ek_common.dtsi +++ b/arch/arm/boot/dts/at91sam9g20ek_common.dtsi @@ -39,6 +39,13 @@ pinctrl_pck0_as_mck: pck0_as_mck { }; + usb1 { + pinctrl_usb1_vbus_gpio: usb1_vbus_gpio { + atmel,pins = + ; /* PC5 GPIO */ + }; + }; + mmc0_slot1 { pinctrl_board_mmc0_slot1: mmc0_slot1-board { atmel,pins = @@ -84,6 +91,8 @@ macb0: ethernet@fffc4000 { }; usb1: gadget@fffa4000 { + pinctrl-0 = <&pinctrl_usb1_vbus_gpio>; + pinctrl-names = "default"; atmel,vbus-gpio = <&pioC 5 GPIO_ACTIVE_HIGH>; status = "okay"; }; diff --git a/arch/arm/boot/dts/imx6q-prti6q.dts b/arch/arm/boot/dts/imx6q-prti6q.dts index b4605edfd2ab807ec67153163860b23cc7d5d411..d8fa83effd63863f373cdf67697a1f780015d5e4 100644 --- a/arch/arm/boot/dts/imx6q-prti6q.dts +++ b/arch/arm/boot/dts/imx6q-prti6q.dts @@ -364,8 +364,8 @@ wifi { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_wifi>; interrupts-extended = <&gpio1 30 IRQ_TYPE_LEVEL_HIGH>; - ref-clock-frequency = "38400000"; - tcxo-clock-frequency = "19200000"; + ref-clock-frequency = <38400000>; + tcxo-clock-frequency = <19200000>; }; }; diff --git a/arch/arm/boot/dts/imx6q-yapp4-crux.dts b/arch/arm/boot/dts/imx6q-yapp4-crux.dts index 15f4824a5142aec4e4437f088353c3bd2d1e4182..bddf3822ebf73ea309b3b8dfb5b3a519777e5cb3 100644 --- a/arch/arm/boot/dts/imx6q-yapp4-crux.dts +++ b/arch/arm/boot/dts/imx6q-yapp4-crux.dts @@ -33,6 +33,10 @@ &oled_1309 { status = "okay"; }; +®_pu { + regulator-always-on; +}; + ®_usb_h1_vbus { status = "okay"; }; diff --git a/arch/arm/boot/dts/imx6qdl-gw5910.dtsi b/arch/arm/boot/dts/imx6qdl-gw5910.dtsi index 68e5ab2e27e2218f3f5ec8c89d2f0a8af848c26d..6bb4855d13ce51ec179d82c622b1b24e05d15cfe 100644 --- a/arch/arm/boot/dts/imx6qdl-gw5910.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw5910.dtsi @@ -29,7 +29,7 @@ gpio-keys { user-pb { label = "user_pb"; - gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>; + gpios = <&gsc_gpio 2 GPIO_ACTIVE_LOW>; linux,code = ; }; diff --git a/arch/arm/boot/dts/imx6qdl-gw5913.dtsi b/arch/arm/boot/dts/imx6qdl-gw5913.dtsi index 8e23cec7149e5338d8569b3f14516b4e37bc4ff2..696427b487f0122a8e31af2c931dd4f32754e062 100644 --- a/arch/arm/boot/dts/imx6qdl-gw5913.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw5913.dtsi @@ -26,7 +26,7 @@ gpio-keys { user-pb { label = "user_pb"; - gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>; + gpios = <&gsc_gpio 2 GPIO_ACTIVE_LOW>; linux,code = ; }; diff --git a/arch/arm/boot/dts/imx6qp-yapp4-crux-plus.dts b/arch/arm/boot/dts/imx6qp-yapp4-crux-plus.dts index cea165f2161a3501139fdd87fc33dc5e04b64d1e..afaf4a6759d4b91e2e817c16fc63ac7f12761430 100644 --- a/arch/arm/boot/dts/imx6qp-yapp4-crux-plus.dts +++ b/arch/arm/boot/dts/imx6qp-yapp4-crux-plus.dts @@ -33,6 +33,10 @@ &oled_1309 { status = "okay"; }; +®_pu { + regulator-always-on; +}; + ®_usb_h1_vbus { status = "okay"; }; diff --git a/arch/arm/boot/dts/imx7s.dtsi b/arch/arm/boot/dts/imx7s.dtsi index 0fc9e6b8b05dcfdcbc5b5da02236655afb5aa6e3..03d2e8544a4ebbeee13cfc10abaa4815d50462f6 100644 --- a/arch/arm/boot/dts/imx7s.dtsi +++ b/arch/arm/boot/dts/imx7s.dtsi @@ -1270,10 +1270,10 @@ dma_apbh: dma-apbh@33000000 { clocks = <&clks IMX7D_NAND_USDHC_BUS_RAWNAND_CLK>; }; - gpmi: nand-controller@33002000{ + gpmi: nand-controller@33002000 { compatible = "fsl,imx7d-gpmi-nand"; #address-cells = <1>; - #size-cells = <1>; + #size-cells = <0>; reg = <0x33002000 0x2000>, <0x33004000 0x4000>; reg-names = "gpmi-nand", "bch"; interrupts = ; diff --git a/arch/arm/boot/dts/lan966x-pcb8291.dts b/arch/arm/boot/dts/lan966x-pcb8291.dts index f4f054cdf2a87afa9de1a3966f2e9166b701772d..3a3d76af86122cbeb4171cf166bc70682756be39 100644 --- a/arch/arm/boot/dts/lan966x-pcb8291.dts +++ b/arch/arm/boot/dts/lan966x-pcb8291.dts @@ -69,6 +69,12 @@ can0_b_pins: can0-b-pins { pins = "GPIO_35", "GPIO_36"; function = "can0_b"; }; + + sgpio_a_pins: sgpio-a-pins { + /* SCK, D0, D1, LD */ + pins = "GPIO_32", "GPIO_33", "GPIO_34", "GPIO_35"; + function = "sgpio_a"; + }; }; &can0 { @@ -118,6 +124,20 @@ &serdes { status = "okay"; }; +&sgpio { + pinctrl-0 = <&sgpio_a_pins>; + pinctrl-names = "default"; + microchip,sgpio-port-ranges = <0 3>, <8 11>; + status = "okay"; + + gpio@0 { + ngpios = <64>; + }; + gpio@1 { + ngpios = <64>; + }; +}; + &switch { status = "okay"; }; diff --git a/arch/arm/boot/dts/rk3036-evb.dts b/arch/arm/boot/dts/rk3036-evb.dts index 9fd4d9db9f8f67c665eefd4bc12fbb96b2f3f21e..becdc0b664bfa422f81e79d7bea076c20ab69732 100644 --- a/arch/arm/boot/dts/rk3036-evb.dts +++ b/arch/arm/boot/dts/rk3036-evb.dts @@ -35,11 +35,10 @@ phy0: ethernet-phy@0 { &i2c1 { status = "okay"; - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>; - clock-frequency = <32768>; clock-output-names = "xin32k"; }; }; diff --git a/arch/arm/boot/dts/rk3066a-mk808.dts b/arch/arm/boot/dts/rk3066a-mk808.dts index cfa318a506eb03c10afe4e07cba074203acd8177..2db5ba7062086c3d6c08ebd9363c6215ca1ff911 100644 --- a/arch/arm/boot/dts/rk3066a-mk808.dts +++ b/arch/arm/boot/dts/rk3066a-mk808.dts @@ -32,7 +32,7 @@ adc-keys { keyup-threshold-microvolt = <2500000>; poll-interval = <100>; - recovery { + button-recovery { label = "recovery"; linux,code = ; press-threshold-microvolt = <0>; diff --git a/arch/arm/boot/dts/rk3188-radxarock.dts b/arch/arm/boot/dts/rk3188-radxarock.dts index e7cf18823558abb2c438176d0528cdf07555f393..118deacd38c4a6f6b86c960f2be626342a193087 100644 --- a/arch/arm/boot/dts/rk3188-radxarock.dts +++ b/arch/arm/boot/dts/rk3188-radxarock.dts @@ -71,7 +71,7 @@ spdif_out: spdif-out { #sound-dai-cells = <0>; }; - ir_recv: gpio-ir-receiver { + ir_recv: ir-receiver { compatible = "gpio-ir-receiver"; gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>; pinctrl-names = "default"; diff --git a/arch/arm/boot/dts/rk3188.dtsi b/arch/arm/boot/dts/rk3188.dtsi index cdd4a0bd5133d45fbf33a8eaabe9cec82eaec350..44b54af0bbf9fa328b1c1917474945cc09b1102d 100644 --- a/arch/arm/boot/dts/rk3188.dtsi +++ b/arch/arm/boot/dts/rk3188.dtsi @@ -379,7 +379,7 @@ lcdc1_vsync: lcdc1-vsync { rockchip,pins = <2 RK_PD3 1 &pcfg_pull_none>; }; - lcdc1_rgb24: ldcd1-rgb24 { + lcdc1_rgb24: lcdc1-rgb24 { rockchip,pins = <2 RK_PA0 1 &pcfg_pull_none>, <2 RK_PA1 1 &pcfg_pull_none>, <2 RK_PA2 1 &pcfg_pull_none>, @@ -607,7 +607,6 @@ &emac { &global_timer { interrupts = ; - status = "disabled"; }; &local_timer { diff --git a/arch/arm/boot/dts/rk3288-evb-act8846.dts b/arch/arm/boot/dts/rk3288-evb-act8846.dts index be695b8c1f672eae4b51217acb1e716188e443df..8a635c243127418459dd3e899386326f194c42ae 100644 --- a/arch/arm/boot/dts/rk3288-evb-act8846.dts +++ b/arch/arm/boot/dts/rk3288-evb-act8846.dts @@ -54,7 +54,7 @@ vdd_gpu: syr828@41 { vin-supply = <&vcc_sys>; }; - hym8563@51 { + rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; diff --git a/arch/arm/boot/dts/rk3288-evb.dtsi b/arch/arm/boot/dts/rk3288-evb.dtsi index 399d6b9c5fd4bbc054619280e7d56bbef2834fd6..382d2839cf472c0a95b46c9d1901fba374e770fb 100644 --- a/arch/arm/boot/dts/rk3288-evb.dtsi +++ b/arch/arm/boot/dts/rk3288-evb.dtsi @@ -28,19 +28,19 @@ button-down { press-threshold-microvolt = <300000>; }; - menu { + button-menu { label = "Menu"; linux,code = ; press-threshold-microvolt = <640000>; }; - esc { + button-esc { label = "Esc"; linux,code = ; press-threshold-microvolt = <1000000>; }; - home { + button-home { label = "Home"; linux,code = ; press-threshold-microvolt = <1300000>; diff --git a/arch/arm/boot/dts/rk3288-firefly.dtsi b/arch/arm/boot/dts/rk3288-firefly.dtsi index 052afe5543e2ada206a316669ee810c7d359ed47..3836c61cfb76138f529a236445023ee5e735220f 100644 --- a/arch/arm/boot/dts/rk3288-firefly.dtsi +++ b/arch/arm/boot/dts/rk3288-firefly.dtsi @@ -233,11 +233,10 @@ vdd_gpu: syr828@41 { vin-supply = <&vcc_sys>; }; - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>; - clock-frequency = <32768>; clock-output-names = "xin32k"; interrupt-parent = <&gpio7>; interrupts = ; diff --git a/arch/arm/boot/dts/rk3288-miqi.dts b/arch/arm/boot/dts/rk3288-miqi.dts index 713f55e143c691a437513eca4d680a6bdcfe1e5b..db1eb648e0e1a21fd4ef3619a65190eed72a459e 100644 --- a/arch/arm/boot/dts/rk3288-miqi.dts +++ b/arch/arm/boot/dts/rk3288-miqi.dts @@ -162,11 +162,10 @@ vdd_gpu: syr828@41 { vin-supply = <&vcc_sys>; }; - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>; - clock-frequency = <32768>; clock-output-names = "xin32k"; }; diff --git a/arch/arm/boot/dts/rk3288-rock2-square.dts b/arch/arm/boot/dts/rk3288-rock2-square.dts index 80e0f07c8e878a9a412f4db2bbf4652b65973bb1..13cfdaa95cc7d70c40d73cbfb3cfc5fd63342c74 100644 --- a/arch/arm/boot/dts/rk3288-rock2-square.dts +++ b/arch/arm/boot/dts/rk3288-rock2-square.dts @@ -165,11 +165,10 @@ &hdmi { }; &i2c0 { - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>; - clock-frequency = <32768>; clock-output-names = "xin32k"; interrupt-parent = <&gpio0>; interrupts = ; diff --git a/arch/arm/boot/dts/rk3288-vmarc-som.dtsi b/arch/arm/boot/dts/rk3288-vmarc-som.dtsi index 0ae2bd150e37287902b29fdb02155b0dcbf9d072..793951655b73b84812c8ac78898b299858514712 100644 --- a/arch/arm/boot/dts/rk3288-vmarc-som.dtsi +++ b/arch/arm/boot/dts/rk3288-vmarc-som.dtsi @@ -241,7 +241,6 @@ hym8563: rtc@51 { interrupt-parent = <&gpio5>; interrupts = ; #clock-cells = <0>; - clock-frequency = <32768>; clock-output-names = "hym8563"; pinctrl-names = "default"; pinctrl-0 = <&hym8563_int>; diff --git a/arch/arm/boot/dts/rk3xxx.dtsi b/arch/arm/boot/dts/rk3xxx.dtsi index bf285091a9eb11b15d527218051043a726cd8dad..cb4e42ede56a9a93c3edc5bdbf01b4a576fe4596 100644 --- a/arch/arm/boot/dts/rk3xxx.dtsi +++ b/arch/arm/boot/dts/rk3xxx.dtsi @@ -76,6 +76,13 @@ global_timer: global-timer@1013c200 { reg = <0x1013c200 0x20>; interrupts = ; clocks = <&cru CORE_PERI>; + status = "disabled"; + /* The clock source and the sched_clock provided by the arm_global_timer + * on Rockchip rk3066a/rk3188 are quite unstable because their rates + * depend on the CPU frequency. + * Keep the arm_global_timer disabled in order to have the + * DW_APB_TIMER (rk3066a) or ROCKCHIP_TIMER (rk3188) selected by default. + */ }; local_timer: local-timer@1013c600 { diff --git a/arch/arm/boot/dts/sama7g5-pinfunc.h b/arch/arm/boot/dts/sama7g5-pinfunc.h index 4eb30445d205742d559b41e67620caa6be1f92f8..6e87f0d4b8fce2b77116e7a14196c9c070ce1b3f 100644 --- a/arch/arm/boot/dts/sama7g5-pinfunc.h +++ b/arch/arm/boot/dts/sama7g5-pinfunc.h @@ -261,7 +261,7 @@ #define PIN_PB2__FLEXCOM6_IO0 PINMUX_PIN(PIN_PB2, 2, 1) #define PIN_PB2__ADTRG PINMUX_PIN(PIN_PB2, 3, 1) #define PIN_PB2__A20 PINMUX_PIN(PIN_PB2, 4, 1) -#define PIN_PB2__FLEXCOM11_IO0 PINMUX_PIN(PIN_PB2, 6, 3) +#define PIN_PB2__FLEXCOM11_IO1 PINMUX_PIN(PIN_PB2, 6, 3) #define PIN_PB3 35 #define PIN_PB3__GPIO PINMUX_PIN(PIN_PB3, 0, 0) #define PIN_PB3__RF1 PINMUX_PIN(PIN_PB3, 1, 1) diff --git a/arch/arm/boot/dts/ste-href.dtsi b/arch/arm/boot/dts/ste-href.dtsi index fbaa0ce46427179d478a8797c0afda9b331c8d69..8f1bb78fc1e48bd20abba7df9ea3caef536f9269 100644 --- a/arch/arm/boot/dts/ste-href.dtsi +++ b/arch/arm/boot/dts/ste-href.dtsi @@ -24,6 +24,14 @@ battery-thermal { polling-delay = <0>; polling-delay-passive = <0>; thermal-sensors = <&bat_therm>; + + trips { + battery-crit-hi { + temperature = <70000>; + hysteresis = <2000>; + type = "critical"; + }; + }; }; }; diff --git a/arch/arm/boot/dts/ste-snowball.dts b/arch/arm/boot/dts/ste-snowball.dts index 1c9094f248939a00719afa0e15e60564ae4d4cb2..e2f0cdacba7d1417fab287b0b019db80a9357d60 100644 --- a/arch/arm/boot/dts/ste-snowball.dts +++ b/arch/arm/boot/dts/ste-snowball.dts @@ -28,6 +28,14 @@ battery-thermal { polling-delay = <0>; polling-delay-passive = <0>; thermal-sensors = <&bat_therm>; + + trips { + battery-crit-hi { + temperature = <70000>; + hysteresis = <2000>; + type = "critical"; + }; + }; }; }; diff --git a/arch/arm/boot/dts/ste-ux500-samsung-codina-tmo.dts b/arch/arm/boot/dts/ste-ux500-samsung-codina-tmo.dts index d6940e0afa8639314c2adee33f6e69ec2025bbde..27a3ab7e25e13e2ff4e980fe1fec17ff4c90ea06 100644 --- a/arch/arm/boot/dts/ste-ux500-samsung-codina-tmo.dts +++ b/arch/arm/boot/dts/ste-ux500-samsung-codina-tmo.dts @@ -44,6 +44,14 @@ battery-thermal { polling-delay = <0>; polling-delay-passive = <0>; thermal-sensors = <&bat_therm>; + + trips { + battery-crit-hi { + temperature = <70000>; + hysteresis = <2000>; + type = "critical"; + }; + }; }; }; diff --git a/arch/arm/boot/dts/ste-ux500-samsung-codina.dts b/arch/arm/boot/dts/ste-ux500-samsung-codina.dts index 5f41256d7f4b4ed75a62fb10dbabd7dc9fde57ee..b88f0c07873ddc6f4f0015aa8c442be0f6c821cc 100644 --- a/arch/arm/boot/dts/ste-ux500-samsung-codina.dts +++ b/arch/arm/boot/dts/ste-ux500-samsung-codina.dts @@ -57,6 +57,14 @@ battery-thermal { polling-delay = <0>; polling-delay-passive = <0>; thermal-sensors = <&bat_therm>; + + trips { + battery-crit-hi { + temperature = <70000>; + hysteresis = <2000>; + type = "critical"; + }; + }; }; }; diff --git a/arch/arm/boot/dts/ste-ux500-samsung-gavini.dts b/arch/arm/boot/dts/ste-ux500-samsung-gavini.dts index 806da3fc33cd7ee4b8b2de10ed1a764a17eff213..7231bc7452000cada3f7d5d6deb9d36008e02cce 100644 --- a/arch/arm/boot/dts/ste-ux500-samsung-gavini.dts +++ b/arch/arm/boot/dts/ste-ux500-samsung-gavini.dts @@ -30,6 +30,14 @@ battery-thermal { polling-delay = <0>; polling-delay-passive = <0>; thermal-sensors = <&bat_therm>; + + trips { + battery-crit-hi { + temperature = <70000>; + hysteresis = <2000>; + type = "critical"; + }; + }; }; }; diff --git a/arch/arm/boot/dts/ste-ux500-samsung-golden.dts b/arch/arm/boot/dts/ste-ux500-samsung-golden.dts index b0dce91aff4bee78a8f2a57cbea42f3f3c72783f..9604695edf5307fcfa37f5fa7b0e4c6c69366d12 100644 --- a/arch/arm/boot/dts/ste-ux500-samsung-golden.dts +++ b/arch/arm/boot/dts/ste-ux500-samsung-golden.dts @@ -35,6 +35,14 @@ battery-thermal { polling-delay = <0>; polling-delay-passive = <0>; thermal-sensors = <&bat_therm>; + + trips { + battery-crit-hi { + temperature = <70000>; + hysteresis = <2000>; + type = "critical"; + }; + }; }; }; diff --git a/arch/arm/boot/dts/ste-ux500-samsung-janice.dts b/arch/arm/boot/dts/ste-ux500-samsung-janice.dts index ed5c79c3d04b0ce85b6f527eb17fef373bf6e27d..69387e8754a95bf5bc8a2ebff440f3b4067045cf 100644 --- a/arch/arm/boot/dts/ste-ux500-samsung-janice.dts +++ b/arch/arm/boot/dts/ste-ux500-samsung-janice.dts @@ -30,6 +30,14 @@ battery-thermal { polling-delay = <0>; polling-delay-passive = <0>; thermal-sensors = <&bat_therm>; + + trips { + battery-crit-hi { + temperature = <70000>; + hysteresis = <2000>; + type = "critical"; + }; + }; }; }; diff --git a/arch/arm/boot/dts/ste-ux500-samsung-kyle.dts b/arch/arm/boot/dts/ste-ux500-samsung-kyle.dts index c57676faf181bd514b44a2e6286a89d364249f3e..167846df310451006be28ff38be2fb9faae490ee 100644 --- a/arch/arm/boot/dts/ste-ux500-samsung-kyle.dts +++ b/arch/arm/boot/dts/ste-ux500-samsung-kyle.dts @@ -34,6 +34,14 @@ battery-thermal { polling-delay = <0>; polling-delay-passive = <0>; thermal-sensors = <&bat_therm>; + + trips { + battery-crit-hi { + temperature = <70000>; + hysteresis = <2000>; + type = "critical"; + }; + }; }; }; diff --git a/arch/arm/boot/dts/ste-ux500-samsung-skomer.dts b/arch/arm/boot/dts/ste-ux500-samsung-skomer.dts index 81b341a5ae45134f692a8e743acec3e996badd18..93e5f5ed888d1c139981d350d4c5b3b27d51241e 100644 --- a/arch/arm/boot/dts/ste-ux500-samsung-skomer.dts +++ b/arch/arm/boot/dts/ste-ux500-samsung-skomer.dts @@ -30,6 +30,14 @@ battery-thermal { polling-delay = <0>; polling-delay-passive = <0>; thermal-sensors = <&bat_therm>; + + trips { + battery-crit-hi { + temperature = <70000>; + hysteresis = <2000>; + type = "critical"; + }; + }; }; }; diff --git a/arch/arm/include/asm/perf_event.h b/arch/arm/include/asm/perf_event.h index fe87397c3d8c6abb30b4eaefdfd07f3973888be0..bdbc1e590891e5e4bbd73a214108fa98cea10862 100644 --- a/arch/arm/include/asm/perf_event.h +++ b/arch/arm/include/asm/perf_event.h @@ -17,7 +17,7 @@ extern unsigned long perf_misc_flags(struct pt_regs *regs); #define perf_arch_fetch_caller_regs(regs, __ip) { \ (regs)->ARM_pc = (__ip); \ - (regs)->ARM_fp = (unsigned long) __builtin_frame_address(0); \ + frame_pointer((regs)) = (unsigned long) __builtin_frame_address(0); \ (regs)->ARM_sp = current_stack_pointer; \ (regs)->ARM_cpsr = SVC_MODE; \ } diff --git a/arch/arm/include/asm/pgtable-nommu.h b/arch/arm/include/asm/pgtable-nommu.h index d16aba48fa0a411d7ee851ba8ded85fe383d8e5c..090011394477f1090abe0c21ab0095b48da73ab9 100644 --- a/arch/arm/include/asm/pgtable-nommu.h +++ b/arch/arm/include/asm/pgtable-nommu.h @@ -44,12 +44,6 @@ typedef pte_t *pte_addr_t; -/* - * ZERO_PAGE is a global shared page that is always zero: used - * for zero-mapped memory areas etc.. - */ -#define ZERO_PAGE(vaddr) (virt_to_page(0)) - /* * Mark the prot value as uncacheable and unbufferable. */ diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index 78a532068fec2ccb083886afba64d665e8441206..ef48a55e9af83bd56c5f4ab21f684a1876b0ae44 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h @@ -10,6 +10,15 @@ #include #include +#ifndef __ASSEMBLY__ +/* + * ZERO_PAGE is a global shared page that is always zero: used + * for zero-mapped memory areas etc.. + */ +extern struct page *empty_zero_page; +#define ZERO_PAGE(vaddr) (empty_zero_page) +#endif + #ifndef CONFIG_MMU #include @@ -139,13 +148,6 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn, */ #ifndef __ASSEMBLY__ -/* - * ZERO_PAGE is a global shared page that is always zero: used - * for zero-mapped memory areas etc.. - */ -extern struct page *empty_zero_page; -#define ZERO_PAGE(vaddr) (empty_zero_page) - extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; diff --git a/arch/arm/mach-at91/pm_suspend.S b/arch/arm/mach-at91/pm_suspend.S index ffed4d9490428b30d1f87f5a5d82d6a1a7ce56fb..e4904faf17532ee524fe222ad2c182962db741a4 100644 --- a/arch/arm/mach-at91/pm_suspend.S +++ b/arch/arm/mach-at91/pm_suspend.S @@ -169,10 +169,15 @@ sr_ena_2: cmp tmp1, #UDDRC_STAT_SELFREF_TYPE_SW bne sr_ena_2 - /* Put DDR PHY's DLL in bypass mode for non-backup modes. */ + /* Disable DX DLLs for non-backup modes. */ cmp r7, #AT91_PM_BACKUP beq sr_ena_3 + /* Do not soft reset the AC DLL. */ + ldr tmp1, [r3, DDR3PHY_ACDLLCR] + bic tmp1, tmp1, DDR3PHY_ACDLLCR_DLLSRST + str tmp1, [r3, DDR3PHY_ACDLLCR] + /* Disable DX DLLs. */ ldr tmp1, [r3, #DDR3PHY_DX0DLLCR] orr tmp1, tmp1, #DDR3PHY_DXDLLCR_DLLDIS diff --git a/arch/arm/mach-mxs/mach-mxs.c b/arch/arm/mach-mxs/mach-mxs.c index 25c9d184fa4c6da8caef30bdac7306a0caef2165..1c57ac401649382f8db912a54d3d46c512656e44 100644 --- a/arch/arm/mach-mxs/mach-mxs.c +++ b/arch/arm/mach-mxs/mach-mxs.c @@ -393,8 +393,10 @@ static void __init mxs_machine_init(void) root = of_find_node_by_path("/"); ret = of_property_read_string(root, "model", &soc_dev_attr->machine); - if (ret) + if (ret) { + kfree(soc_dev_attr); return; + } soc_dev_attr->family = "Freescale MXS Family"; soc_dev_attr->soc_id = mxs_get_soc_id(); diff --git a/arch/arm/mm/nommu.c b/arch/arm/mm/nommu.c index c42debaded95c3486f02bf08f695650912af935f..c1494a4dee25b535f9153be56050520eb6c3521b 100644 --- a/arch/arm/mm/nommu.c +++ b/arch/arm/mm/nommu.c @@ -26,6 +26,13 @@ unsigned long vectors_base; +/* + * empty_zero_page is a special page that is used for + * zero-initialized data and COW. + */ +struct page *empty_zero_page; +EXPORT_SYMBOL(empty_zero_page); + #ifdef CONFIG_ARM_MPU struct mpu_rgn_info mpu_rgn_info; #endif @@ -148,9 +155,21 @@ void __init adjust_lowmem_bounds(void) */ void __init paging_init(const struct machine_desc *mdesc) { + void *zero_page; + early_trap_init((void *)vectors_base); mpu_setup(); + + /* allocate the zero page. */ + zero_page = memblock_alloc(PAGE_SIZE, PAGE_SIZE); + if (!zero_page) + panic("%s: Failed to allocate %lu bytes align=0x%lx\n", + __func__, PAGE_SIZE, PAGE_SIZE); + bootmem_init(); + + empty_zero_page = virt_to_page(zero_page); + flush_dcache_page(empty_zero_page); } /* diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi index 53f6660656ac59ef98273edfbf1435786920bb91..ca1d287a0a01d981f12cccf5f990303085a60462 100644 --- a/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi +++ b/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi @@ -161,6 +161,7 @@ video-codec-g2@1c00000 { clocks = <&ccu CLK_BUS_VP9>, <&ccu CLK_VP9>; clock-names = "bus", "mod"; resets = <&ccu RST_BUS_VP9>; + iommus = <&iommu 5>; }; video-codec@1c0e000 { diff --git a/arch/arm64/boot/dts/arm/juno-base.dtsi b/arch/arm64/boot/dts/arm/juno-base.dtsi index 2f27619d8abd59855c46cd6f899575ae278f75e1..8b4d280b1e7e78831604ac1520164328cf3a727c 100644 --- a/arch/arm64/boot/dts/arm/juno-base.dtsi +++ b/arch/arm64/boot/dts/arm/juno-base.dtsi @@ -751,12 +751,26 @@ pmic { polling-delay = <1000>; polling-delay-passive = <100>; thermal-sensors = <&scpi_sensors0 0>; + trips { + pmic_crit0: trip0 { + temperature = <90000>; + hysteresis = <2000>; + type = "critical"; + }; + }; }; soc { polling-delay = <1000>; polling-delay-passive = <100>; thermal-sensors = <&scpi_sensors0 3>; + trips { + soc_crit0: trip0 { + temperature = <80000>; + hysteresis = <2000>; + type = "critical"; + }; + }; }; big_cluster_thermal_zone: big-cluster { diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1088a.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1088a.dtsi index 421d879013d7ffece57a077a3a8a44e15839aad0..260d045dbd9a87863fb0954029b4046a6f44e0e8 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1088a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1088a.dtsi @@ -779,6 +779,9 @@ emdio1: mdio@8b96000 { little-endian; #address-cells = <1>; #size-cells = <0>; + clock-frequency = <2500000>; + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL + QORIQ_CLK_PLL_DIV(1)>; status = "disabled"; }; @@ -788,6 +791,9 @@ emdio2: mdio@8b97000 { little-endian; #address-cells = <1>; #size-cells = <0>; + clock-frequency = <2500000>; + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL + QORIQ_CLK_PLL_DIV(1)>; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi index f1b9cc8714dc0b40722583f28cc3cf40e156cb0a..348d9e3a91252cfde1323b0b2c42166d2868f112 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi @@ -532,6 +532,9 @@ emdio1: mdio@8b96000 { little-endian; #address-cells = <1>; #size-cells = <0>; + clock-frequency = <2500000>; + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL + QORIQ_CLK_PLL_DIV(2)>; status = "disabled"; }; @@ -541,6 +544,9 @@ emdio2: mdio@8b97000 { little-endian; #address-cells = <1>; #size-cells = <0>; + clock-frequency = <2500000>; + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL + QORIQ_CLK_PLL_DIV(2)>; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi b/arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi index 6680fb2a6dc92332eb1340e8073aa79adbbf8e54..8c76d86cb7566778a5e13a8c328b436408a0374c 100644 --- a/arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi @@ -1385,6 +1385,9 @@ emdio1: mdio@8b96000 { #address-cells = <1>; #size-cells = <0>; little-endian; + clock-frequency = <2500000>; + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL + QORIQ_CLK_PLL_DIV(2)>; status = "disabled"; }; @@ -1395,6 +1398,9 @@ emdio2: mdio@8b97000 { little-endian; #address-cells = <1>; #size-cells = <0>; + clock-frequency = <2500000>; + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL + QORIQ_CLK_PLL_DIV(2)>; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/freescale/imx8-ss-conn.dtsi b/arch/arm64/boot/dts/freescale/imx8-ss-conn.dtsi index 82a1c448837861988feb0b9570db6aef544e2c89..10370d1a6c6defebd3b83e83f3188d79473eefc2 100644 --- a/arch/arm64/boot/dts/freescale/imx8-ss-conn.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8-ss-conn.dtsi @@ -38,9 +38,9 @@ usdhc1: mmc@5b010000 { interrupts = ; reg = <0x5b010000 0x10000>; clocks = <&sdhc0_lpcg IMX_LPCG_CLK_4>, - <&sdhc0_lpcg IMX_LPCG_CLK_5>, - <&sdhc0_lpcg IMX_LPCG_CLK_0>; - clock-names = "ipg", "per", "ahb"; + <&sdhc0_lpcg IMX_LPCG_CLK_0>, + <&sdhc0_lpcg IMX_LPCG_CLK_5>; + clock-names = "ipg", "ahb", "per"; power-domains = <&pd IMX_SC_R_SDHC_0>; status = "disabled"; }; @@ -49,9 +49,9 @@ usdhc2: mmc@5b020000 { interrupts = ; reg = <0x5b020000 0x10000>; clocks = <&sdhc1_lpcg IMX_LPCG_CLK_4>, - <&sdhc1_lpcg IMX_LPCG_CLK_5>, - <&sdhc1_lpcg IMX_LPCG_CLK_0>; - clock-names = "ipg", "per", "ahb"; + <&sdhc1_lpcg IMX_LPCG_CLK_0>, + <&sdhc1_lpcg IMX_LPCG_CLK_5>; + clock-names = "ipg", "ahb", "per"; power-domains = <&pd IMX_SC_R_SDHC_1>; fsl,tuning-start-tap = <20>; fsl,tuning-step = <2>; @@ -62,9 +62,9 @@ usdhc3: mmc@5b030000 { interrupts = ; reg = <0x5b030000 0x10000>; clocks = <&sdhc2_lpcg IMX_LPCG_CLK_4>, - <&sdhc2_lpcg IMX_LPCG_CLK_5>, - <&sdhc2_lpcg IMX_LPCG_CLK_0>; - clock-names = "ipg", "per", "ahb"; + <&sdhc2_lpcg IMX_LPCG_CLK_0>, + <&sdhc2_lpcg IMX_LPCG_CLK_5>; + clock-names = "ipg", "ahb", "per"; power-domains = <&pd IMX_SC_R_SDHC_2>; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/freescale/imx8mm-mx8menlo.dts b/arch/arm64/boot/dts/freescale/imx8mm-mx8menlo.dts index 32f6f2f50c10ca29c4c80bac23614df665657337..43e89859c0445bec6928e5a47b9f56d7164520a0 100644 --- a/arch/arm64/boot/dts/freescale/imx8mm-mx8menlo.dts +++ b/arch/arm64/boot/dts/freescale/imx8mm-mx8menlo.dts @@ -250,21 +250,21 @@ MX8MM_IOMUXC_SAI1_RXD1_GPIO4_IO3 0x1c4 /* SODIMM 96 */ MX8MM_IOMUXC_SAI1_RXD2_GPIO4_IO4 0x1c4 /* CPLD_D[7] */ - MX8MM_IOMUXC_SAI1_RXD3_GPIO4_IO5 0x1c4 + MX8MM_IOMUXC_SAI1_RXD3_GPIO4_IO5 0x184 /* CPLD_D[6] */ - MX8MM_IOMUXC_SAI1_RXFS_GPIO4_IO0 0x1c4 + MX8MM_IOMUXC_SAI1_RXFS_GPIO4_IO0 0x184 /* CPLD_D[5] */ - MX8MM_IOMUXC_SAI1_TXC_GPIO4_IO11 0x1c4 + MX8MM_IOMUXC_SAI1_TXC_GPIO4_IO11 0x184 /* CPLD_D[4] */ - MX8MM_IOMUXC_SAI1_TXD0_GPIO4_IO12 0x1c4 + MX8MM_IOMUXC_SAI1_TXD0_GPIO4_IO12 0x184 /* CPLD_D[3] */ - MX8MM_IOMUXC_SAI1_TXD1_GPIO4_IO13 0x1c4 + MX8MM_IOMUXC_SAI1_TXD1_GPIO4_IO13 0x184 /* CPLD_D[2] */ - MX8MM_IOMUXC_SAI1_TXD2_GPIO4_IO14 0x1c4 + MX8MM_IOMUXC_SAI1_TXD2_GPIO4_IO14 0x184 /* CPLD_D[1] */ - MX8MM_IOMUXC_SAI1_TXD3_GPIO4_IO15 0x1c4 + MX8MM_IOMUXC_SAI1_TXD3_GPIO4_IO15 0x184 /* CPLD_D[0] */ - MX8MM_IOMUXC_SAI1_TXD4_GPIO4_IO16 0x1c4 + MX8MM_IOMUXC_SAI1_TXD4_GPIO4_IO16 0x184 /* KBD_intK */ MX8MM_IOMUXC_SAI2_MCLK_GPIO4_IO27 0x1c4 /* DISP_reset */ diff --git a/arch/arm64/boot/dts/freescale/imx8mm-tqma8mqml-mba8mx.dts b/arch/arm64/boot/dts/freescale/imx8mm-tqma8mqml-mba8mx.dts index 7e0aeb2db30549b7c9469b7b1d3d1ee908e7e2a1..a0aeac61992996bf56bf741ef1dcd21ca7898a14 100644 --- a/arch/arm64/boot/dts/freescale/imx8mm-tqma8mqml-mba8mx.dts +++ b/arch/arm64/boot/dts/freescale/imx8mm-tqma8mqml-mba8mx.dts @@ -34,11 +34,25 @@ reg_usdhc2_vmmc: regulator-vmmc { off-on-delay-us = <12000>; }; - extcon_usbotg1: extcon-usbotg1 { - compatible = "linux,extcon-usb-gpio"; + connector { + compatible = "gpio-usb-b-connector", "usb-b-connector"; + type = "micro"; + label = "X19"; pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_usb1_extcon>; - id-gpio = <&gpio1 10 GPIO_ACTIVE_HIGH>; + pinctrl-0 = <&pinctrl_usb1_connector>; + id-gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + usb_dr_connector: endpoint { + remote-endpoint = <&usb1_drd_sw>; + }; + }; + }; }; }; @@ -105,13 +119,19 @@ &usbotg1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usbotg1>; dr_mode = "otg"; - extcon = <&extcon_usbotg1>; srp-disable; hnp-disable; adp-disable; power-active-high; over-current-active-low; + usb-role-switch; status = "okay"; + + port { + usb1_drd_sw: endpoint { + remote-endpoint = <&usb_dr_connector>; + }; + }; }; &usbotg2 { @@ -231,7 +251,7 @@ pinctrl_usbotg1: usbotg1grp { ; }; - pinctrl_usb1_extcon: usb1-extcongrp { + pinctrl_usb1_connector: usb1-connectorgrp { fsl,pins = ; }; diff --git a/arch/arm64/boot/dts/freescale/imx8mm.dtsi b/arch/arm64/boot/dts/freescale/imx8mm.dtsi index afb90f59c83c5df18fa78e35fc409c621e6501b9..50ef92915c6719d12c06ca7efd74d328e0cf71b9 100644 --- a/arch/arm64/boot/dts/freescale/imx8mm.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8mm.dtsi @@ -276,6 +276,7 @@ usbphynop1: usbphynop1 { assigned-clocks = <&clk IMX8MM_CLK_USB_PHY_REF>; assigned-clock-parents = <&clk IMX8MM_SYS_PLL1_100M>; clock-names = "main_clk"; + power-domains = <&pgc_otg1>; }; usbphynop2: usbphynop2 { @@ -285,6 +286,7 @@ usbphynop2: usbphynop2 { assigned-clocks = <&clk IMX8MM_CLK_USB_PHY_REF>; assigned-clock-parents = <&clk IMX8MM_SYS_PLL1_100M>; clock-names = "main_clk"; + power-domains = <&pgc_otg2>; }; soc: soc@0 { @@ -674,13 +676,11 @@ pgc_pcie: power-domain@1 { pgc_otg1: power-domain@2 { #power-domain-cells = <0>; reg = ; - power-domains = <&pgc_hsiomix>; }; pgc_otg2: power-domain@3 { #power-domain-cells = <0>; reg = ; - power-domains = <&pgc_hsiomix>; }; pgc_gpumix: power-domain@4 { @@ -1186,7 +1186,7 @@ usbotg1: usb@32e40000 { assigned-clock-parents = <&clk IMX8MM_SYS_PLL2_500M>; phys = <&usbphynop1>; fsl,usbmisc = <&usbmisc1 0>; - power-domains = <&pgc_otg1>; + power-domains = <&pgc_hsiomix>; status = "disabled"; }; @@ -1206,7 +1206,7 @@ usbotg2: usb@32e50000 { assigned-clock-parents = <&clk IMX8MM_SYS_PLL2_500M>; phys = <&usbphynop2>; fsl,usbmisc = <&usbmisc2 0>; - power-domains = <&pgc_otg2>; + power-domains = <&pgc_hsiomix>; status = "disabled"; }; @@ -1244,10 +1244,10 @@ dma_apbh: dma-controller@33000000 { clocks = <&clk IMX8MM_CLK_NAND_USDHC_BUS_RAWNAND_CLK>; }; - gpmi: nand-controller@33002000{ + gpmi: nand-controller@33002000 { compatible = "fsl,imx8mm-gpmi-nand", "fsl,imx7d-gpmi-nand"; #address-cells = <1>; - #size-cells = <1>; + #size-cells = <0>; reg = <0x33002000 0x2000>, <0x33004000 0x4000>; reg-names = "gpmi-nand", "bch"; interrupts = ; diff --git a/arch/arm64/boot/dts/freescale/imx8mn.dtsi b/arch/arm64/boot/dts/freescale/imx8mn.dtsi index cb2836bfbd95c7a3d7d354a6b63bea2e885f5925..67b554ba690ca9def8c833858e5ec3f07db5b945 100644 --- a/arch/arm64/boot/dts/freescale/imx8mn.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8mn.dtsi @@ -662,7 +662,6 @@ pgc_hsiomix: power-domain@0 { pgc_otg1: power-domain@1 { #power-domain-cells = <0>; reg = ; - power-domains = <&pgc_hsiomix>; }; pgc_gpumix: power-domain@2 { @@ -1076,7 +1075,7 @@ usbotg1: usb@32e40000 { assigned-clock-parents = <&clk IMX8MN_SYS_PLL2_500M>; phys = <&usbphynop1>; fsl,usbmisc = <&usbmisc1 0>; - power-domains = <&pgc_otg1>; + power-domains = <&pgc_hsiomix>; status = "disabled"; }; @@ -1103,7 +1102,7 @@ dma_apbh: dma-controller@33000000 { gpmi: nand-controller@33002000 { compatible = "fsl,imx8mn-gpmi-nand", "fsl,imx7d-gpmi-nand"; #address-cells = <1>; - #size-cells = <1>; + #size-cells = <0>; reg = <0x33002000 0x2000>, <0x33004000 0x4000>; reg-names = "gpmi-nand", "bch"; interrupts = ; @@ -1175,5 +1174,6 @@ usbphynop1: usbphynop1 { assigned-clocks = <&clk IMX8MN_CLK_USB_PHY_REF>; assigned-clock-parents = <&clk IMX8MN_SYS_PLL1_100M>; clock-names = "main_clk"; + power-domains = <&pgc_otg1>; }; }; diff --git a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts index 9f1469db554d3e0f85c8dccc962726a20a722c64..b4c1ef2559f2045920504b3ff26669163fc70009 100644 --- a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts +++ b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts @@ -544,14 +544,14 @@ MX8MP_IOMUXC_SPDIF_TX__I2C5_SCL 0x400001c2 pinctrl_pcie0: pcie0grp { fsl,pins = < - MX8MP_IOMUXC_I2C4_SCL__PCIE_CLKREQ_B 0x61 /* open drain, pull up */ - MX8MP_IOMUXC_SD1_DATA5__GPIO2_IO07 0x41 + MX8MP_IOMUXC_I2C4_SCL__PCIE_CLKREQ_B 0x60 /* open drain, pull up */ + MX8MP_IOMUXC_SD1_DATA5__GPIO2_IO07 0x40 >; }; pinctrl_pcie0_reg: pcie0reggrp { fsl,pins = < - MX8MP_IOMUXC_SD1_DATA4__GPIO2_IO06 0x41 + MX8MP_IOMUXC_SD1_DATA4__GPIO2_IO06 0x40 >; }; diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi index 7b712d1888eadfc6e4eb60282bc6cb3ddc32f9f9..5dcd1de586b52731fd543dbc84bcd34f21eef131 100644 --- a/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi @@ -354,16 +354,6 @@ &gpio2 { "SODIMM_82", "SODIMM_70", "SODIMM_72"; - - ctrl-sleep-moci-hog { - gpio-hog; - /* Verdin CTRL_SLEEP_MOCI# (SODIMM 256) */ - gpios = <29 GPIO_ACTIVE_HIGH>; - line-name = "CTRL_SLEEP_MOCI#"; - output-high; - pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_ctrl_sleep_moci>; - }; }; &gpio3 { @@ -432,6 +422,16 @@ &gpio4 { "SODIMM_256", "SODIMM_48", "SODIMM_44"; + + ctrl-sleep-moci-hog { + gpio-hog; + /* Verdin CTRL_SLEEP_MOCI# (SODIMM 256) */ + gpios = <29 GPIO_ACTIVE_HIGH>; + line-name = "CTRL_SLEEP_MOCI#"; + output-high; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_ctrl_sleep_moci>; + }; }; /* On-module I2C */ diff --git a/arch/arm64/boot/dts/freescale/imx93-pinfunc.h b/arch/arm64/boot/dts/freescale/imx93-pinfunc.h old mode 100755 new mode 100644 diff --git a/arch/arm64/boot/dts/freescale/imx93.dtsi b/arch/arm64/boot/dts/freescale/imx93.dtsi index 3a5713bb4880e44d8d78b94374aa5266c6f0b28b..0247866fc86b0d753c4102f3d317229bd9932c5f 100644 --- a/arch/arm64/boot/dts/freescale/imx93.dtsi +++ b/arch/arm64/boot/dts/freescale/imx93.dtsi @@ -451,7 +451,7 @@ gpio2: gpio@43810080 { clocks = <&clk IMX93_CLK_GPIO2_GATE>, <&clk IMX93_CLK_GPIO2_GATE>; clock-names = "gpio", "port"; - gpio-ranges = <&iomuxc 0 32 32>; + gpio-ranges = <&iomuxc 0 4 30>; }; gpio3: gpio@43820080 { @@ -465,7 +465,8 @@ gpio3: gpio@43820080 { clocks = <&clk IMX93_CLK_GPIO3_GATE>, <&clk IMX93_CLK_GPIO3_GATE>; clock-names = "gpio", "port"; - gpio-ranges = <&iomuxc 0 64 32>; + gpio-ranges = <&iomuxc 0 84 8>, <&iomuxc 8 66 18>, + <&iomuxc 26 34 2>, <&iomuxc 28 0 4>; }; gpio4: gpio@43830080 { @@ -479,7 +480,7 @@ gpio4: gpio@43830080 { clocks = <&clk IMX93_CLK_GPIO4_GATE>, <&clk IMX93_CLK_GPIO4_GATE>; clock-names = "gpio", "port"; - gpio-ranges = <&iomuxc 0 96 32>; + gpio-ranges = <&iomuxc 0 38 28>, <&iomuxc 28 36 2>; }; gpio1: gpio@47400080 { @@ -493,7 +494,7 @@ gpio1: gpio@47400080 { clocks = <&clk IMX93_CLK_GPIO1_GATE>, <&clk IMX93_CLK_GPIO1_GATE>; clock-names = "gpio", "port"; - gpio-ranges = <&iomuxc 0 0 32>; + gpio-ranges = <&iomuxc 0 92 16>; }; s4muap: mailbox@47520000 { @@ -501,7 +502,7 @@ s4muap: mailbox@47520000 { reg = <0x47520000 0x10000>; interrupts = , ; - interrupt-names = "txirq", "rxirq"; + interrupt-names = "tx", "rx"; #mbox-cells = <2>; }; diff --git a/arch/arm64/boot/dts/qcom/ipq8074.dtsi b/arch/arm64/boot/dts/qcom/ipq8074.dtsi index a47acf9bdf24f1c22f086aee7855f48c03d8bb30..a721cdd80489ee4dcbba997efd7a1fcc37244ff3 100644 --- a/arch/arm64/boot/dts/qcom/ipq8074.dtsi +++ b/arch/arm64/boot/dts/qcom/ipq8074.dtsi @@ -668,7 +668,7 @@ watchdog: watchdog@b017000 { apcs_glb: mailbox@b111000 { compatible = "qcom,ipq8074-apcs-apps-global"; - reg = <0x0b111000 0x6000>; + reg = <0x0b111000 0x1000>; #clock-cells = <1>; #mbox-cells = <1>; diff --git a/arch/arm64/boot/dts/qcom/msm8996.dtsi b/arch/arm64/boot/dts/qcom/msm8996.dtsi index c0a2baffa49d530f8663128f5cfffe1881e23001..aba717644391950e65fb9b66f06aced99fc1581c 100644 --- a/arch/arm64/boot/dts/qcom/msm8996.dtsi +++ b/arch/arm64/boot/dts/qcom/msm8996.dtsi @@ -3504,7 +3504,7 @@ frame@98c0000 { }; saw3: syscon@9a10000 { - compatible = "qcom,tcsr-msm8996", "syscon"; + compatible = "syscon"; reg = <0x09a10000 0x1000>; }; diff --git a/arch/arm64/boot/dts/qcom/sa8155p-adp.dts b/arch/arm64/boot/dts/qcom/sa8155p-adp.dts index 87ab0e1ecd16d5d5453e975bb009fccb9e9cf847..4dee790f1049dc1b2ed0764106912ab508bd5ec6 100644 --- a/arch/arm64/boot/dts/qcom/sa8155p-adp.dts +++ b/arch/arm64/boot/dts/qcom/sa8155p-adp.dts @@ -43,7 +43,6 @@ vreg_s4a_1p8: smps4 { regulator-always-on; regulator-boot-on; - regulator-allow-set-load; vin-supply = <&vreg_3p3>; }; @@ -137,6 +136,9 @@ vreg_l5a_0p88: ldo5 { regulator-max-microvolt = <880000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l7a_1p8: ldo7 { @@ -152,6 +154,9 @@ vreg_l10a_2p96: ldo10 { regulator-max-microvolt = <2960000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l11a_0p8: ldo11 { @@ -258,6 +263,9 @@ vreg_l5c_1p2: ldo5 { regulator-max-microvolt = <1200000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l7c_1p8: ldo7 { @@ -273,6 +281,9 @@ vreg_l8c_1p2: ldo8 { regulator-max-microvolt = <1200000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l10c_3p3: ldo10 { diff --git a/arch/arm64/boot/dts/qcom/sa8295p-adp.dts b/arch/arm64/boot/dts/qcom/sa8295p-adp.dts index b608b82dff03c177261cb0bc14501bb26aab4d07..2c62ba6a49c5bcd4feb01da64e72d4e840fc5a4f 100644 --- a/arch/arm64/boot/dts/qcom/sa8295p-adp.dts +++ b/arch/arm64/boot/dts/qcom/sa8295p-adp.dts @@ -83,6 +83,9 @@ vreg_l3c: ldo3 { regulator-max-microvolt = <1200000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l4c: ldo4 { @@ -98,6 +101,9 @@ vreg_l6c: ldo6 { regulator-max-microvolt = <1200000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l7c: ldo7 { @@ -113,6 +119,9 @@ vreg_l10c: ldo10 { regulator-max-microvolt = <2504000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l17c: ldo17 { @@ -121,6 +130,9 @@ vreg_l17c: ldo17 { regulator-max-microvolt = <2504000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; }; diff --git a/arch/arm64/boot/dts/qcom/sc7280.dtsi b/arch/arm64/boot/dts/qcom/sc7280.dtsi index 212580316d3e6a46e750b8cc8f466d4bd39dd14e..4cdc88d339445413957ca5fcfa7d6f02837652d5 100644 --- a/arch/arm64/boot/dts/qcom/sc7280.dtsi +++ b/arch/arm64/boot/dts/qcom/sc7280.dtsi @@ -2296,7 +2296,8 @@ swr1: soundwire@3230000 { lpass_audiocc: clock-controller@3300000 { compatible = "qcom,sc7280-lpassaudiocc"; - reg = <0 0x03300000 0 0x30000>; + reg = <0 0x03300000 0 0x30000>, + <0 0x032a9000 0 0x1000>; clocks = <&rpmhcc RPMH_CXO_CLK>, <&lpass_aon LPASS_AON_CC_MAIN_RCG_CLK_SRC>; clock-names = "bi_tcxo", "lpass_aon_cc_main_rcg_clk_src"; diff --git a/arch/arm64/boot/dts/qcom/sc8280xp-crd.dts b/arch/arm64/boot/dts/qcom/sc8280xp-crd.dts index fea7d8273ccde66c775ab36920191c0a2953937f..5e30349efd20459f5f1f51bb865210f96b141bb3 100644 --- a/arch/arm64/boot/dts/qcom/sc8280xp-crd.dts +++ b/arch/arm64/boot/dts/qcom/sc8280xp-crd.dts @@ -124,6 +124,9 @@ vreg_l7c: ldo7 { regulator-max-microvolt = <2504000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l13c: ldo13 { @@ -146,6 +149,9 @@ vreg_l3d: ldo3 { regulator-max-microvolt = <1200000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l4d: ldo4 { diff --git a/arch/arm64/boot/dts/qcom/sc8280xp.dtsi b/arch/arm64/boot/dts/qcom/sc8280xp.dtsi index c32bcded2aef19b30b375b2332c8cb9d6a1abc14..212d63d5cbf28a94ff7d4d7a2cd3491bc1e3d678 100644 --- a/arch/arm64/boot/dts/qcom/sc8280xp.dtsi +++ b/arch/arm64/boot/dts/qcom/sc8280xp.dtsi @@ -885,13 +885,13 @@ ufs_mem_hc: ufs@1d84000 { ufs_mem_phy: phy@1d87000 { compatible = "qcom,sc8280xp-qmp-ufs-phy"; - reg = <0 0x01d87000 0 0xe10>; + reg = <0 0x01d87000 0 0x1c8>; #address-cells = <2>; #size-cells = <2>; ranges; clock-names = "ref", "ref_aux"; - clocks = <&rpmhcc RPMH_CXO_CLK>, + clocks = <&gcc GCC_UFS_REF_CLKREF_CLK>, <&gcc GCC_UFS_PHY_PHY_AUX_CLK>; resets = <&ufs_mem_hc 0>; @@ -953,13 +953,13 @@ ufs_card_hc: ufs@1da4000 { ufs_card_phy: phy@1da7000 { compatible = "qcom,sc8280xp-qmp-ufs-phy"; - reg = <0 0x01da7000 0 0xe10>; + reg = <0 0x01da7000 0 0x1c8>; #address-cells = <2>; #size-cells = <2>; ranges; clock-names = "ref", "ref_aux"; - clocks = <&gcc GCC_UFS_1_CARD_CLKREF_CLK>, + clocks = <&gcc GCC_UFS_REF_CLKREF_CLK>, <&gcc GCC_UFS_CARD_PHY_AUX_CLK>; resets = <&ufs_card_hc 0>; @@ -1181,26 +1181,16 @@ usb_0_qmpphy: phy-wrapper@88ec000 { usb_0_ssphy: usb3-phy@88eb400 { reg = <0 0x088eb400 0 0x100>, <0 0x088eb600 0 0x3ec>, - <0 0x088ec400 0 0x1f0>, + <0 0x088ec400 0 0x364>, <0 0x088eba00 0 0x100>, <0 0x088ebc00 0 0x3ec>, - <0 0x088ec700 0 0x64>; + <0 0x088ec200 0 0x18>; #phy-cells = <0>; #clock-cells = <0>; clocks = <&gcc GCC_USB3_PRIM_PHY_PIPE_CLK>; clock-names = "pipe0"; clock-output-names = "usb0_phy_pipe_clk_src"; }; - - usb_0_dpphy: dp-phy@88ed200 { - reg = <0 0x088ed200 0 0x200>, - <0 0x088ed400 0 0x200>, - <0 0x088eda00 0 0x200>, - <0 0x088ea600 0 0x200>, - <0 0x088ea800 0 0x200>; - #clock-cells = <1>; - #phy-cells = <0>; - }; }; usb_1_hsphy: phy@8902000 { @@ -1242,8 +1232,8 @@ usb_1_qmpphy: phy-wrapper@8904000 { usb_1_ssphy: usb3-phy@8903400 { reg = <0 0x08903400 0 0x100>, - <0 0x08903c00 0 0x3ec>, - <0 0x08904400 0 0x1f0>, + <0 0x08903600 0 0x3ec>, + <0 0x08904400 0 0x364>, <0 0x08903a00 0 0x100>, <0 0x08903c00 0 0x3ec>, <0 0x08904200 0 0x18>; @@ -1253,16 +1243,6 @@ usb_1_ssphy: usb3-phy@8903400 { clock-names = "pipe0"; clock-output-names = "usb1_phy_pipe_clk_src"; }; - - usb_1_dpphy: dp-phy@8904200 { - reg = <0 0x08904200 0 0x200>, - <0 0x08904400 0 0x200>, - <0 0x08904a00 0 0x200>, - <0 0x08904600 0 0x200>, - <0 0x08904800 0 0x200>; - #clock-cells = <1>; - #phy-cells = <0>; - }; }; system-cache-controller@9200000 { diff --git a/arch/arm64/boot/dts/qcom/sm8150-sony-xperia-kumano.dtsi b/arch/arm64/boot/dts/qcom/sm8150-sony-xperia-kumano.dtsi index 014fe3a315489b03b6326ad90cd88d928e6b5e4c..fb6e5a140c9f6b2f0b5ec273973424f31e5799ee 100644 --- a/arch/arm64/boot/dts/qcom/sm8150-sony-xperia-kumano.dtsi +++ b/arch/arm64/boot/dts/qcom/sm8150-sony-xperia-kumano.dtsi @@ -348,6 +348,9 @@ vreg_l6c_2p9: ldo6 { regulator-max-microvolt = <2960000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l7c_3p0: ldo7 { @@ -367,6 +370,9 @@ vreg_l9c_2p9: ldo9 { regulator-max-microvolt = <2960000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l10c_3p3: ldo10 { diff --git a/arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi b/arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi index 549e0a2aa9fe4ff29d9a56d6dfeff183b53a5e77..5428aab3058dd975c3a2937846dda94ab6bcdc27 100644 --- a/arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi +++ b/arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi @@ -317,6 +317,9 @@ vreg_l6c_2p9: ldo6 { regulator-max-microvolt = <2960000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l7c_2p85: ldo7 { @@ -339,6 +342,9 @@ vreg_l9c_2p9: ldo9 { regulator-max-microvolt = <2960000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l10c_3p3: ldo10 { diff --git a/arch/arm64/boot/dts/qcom/sm8250.dtsi b/arch/arm64/boot/dts/qcom/sm8250.dtsi index a5b62cadb1298b52d8e8b56bcfd48ebd43b3d072..e276eed1f8e2c300c06563670d5d730d79aa74cb 100644 --- a/arch/arm64/boot/dts/qcom/sm8250.dtsi +++ b/arch/arm64/boot/dts/qcom/sm8250.dtsi @@ -334,6 +334,7 @@ CLUSTER_SLEEP_0: cluster-sleep-0 { exit-latency-us = <6562>; min-residency-us = <9987>; local-timer-stop; + status = "disabled"; }; }; }; diff --git a/arch/arm64/boot/dts/qcom/sm8350-hdk.dts b/arch/arm64/boot/dts/qcom/sm8350-hdk.dts index 0fcf5bd88fc7d83a2893ca4ee7ea7360198e78be..69ae6503c2f66f36efe9a9cb773f079294803048 100644 --- a/arch/arm64/boot/dts/qcom/sm8350-hdk.dts +++ b/arch/arm64/boot/dts/qcom/sm8350-hdk.dts @@ -107,6 +107,9 @@ vreg_l5b_0p88: ldo5 { regulator-max-microvolt = <888000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l6b_1p2: ldo6 { @@ -115,6 +118,9 @@ vreg_l6b_1p2: ldo6 { regulator-max-microvolt = <1208000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l7b_2p96: ldo7 { @@ -123,6 +129,9 @@ vreg_l7b_2p96: ldo7 { regulator-max-microvolt = <2504000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; vreg_l9b_1p2: ldo9 { @@ -131,6 +140,9 @@ vreg_l9b_1p2: ldo9 { regulator-max-microvolt = <1200000>; regulator-initial-mode = ; regulator-allow-set-load; + regulator-allowed-modes = + ; }; }; diff --git a/arch/arm64/boot/dts/rockchip/px30-evb.dts b/arch/arm64/boot/dts/rockchip/px30-evb.dts index 07008d84434c19a7331edc16ec3cea774bc65153..c1bbd555f5f5b2cc4b51456dbf459da86912f65e 100644 --- a/arch/arm64/boot/dts/rockchip/px30-evb.dts +++ b/arch/arm64/boot/dts/rockchip/px30-evb.dts @@ -30,31 +30,31 @@ adc-keys { keyup-threshold-microvolt = <1800000>; poll-interval = <100>; - esc-key { + button-esc { label = "esc"; linux,code = ; press-threshold-microvolt = <1310000>; }; - home-key { + button-home { label = "home"; linux,code = ; press-threshold-microvolt = <624000>; }; - menu-key { + button-menu { label = "menu"; linux,code = ; press-threshold-microvolt = <987000>; }; - vol-down-key { + button-down { label = "volume down"; linux,code = ; press-threshold-microvolt = <300000>; }; - vol-up-key { + button-up { label = "volume up"; linux,code = ; press-threshold-microvolt = <17000>; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-evb.dts b/arch/arm64/boot/dts/rockchip/rk3308-evb.dts index 9fe9b0d11003a8681b8317c2166ba24e14f0fedf..184b84fdde075a751b063e4b7784eea77b7efec0 100644 --- a/arch/arm64/boot/dts/rockchip/rk3308-evb.dts +++ b/arch/arm64/boot/dts/rockchip/rk3308-evb.dts @@ -23,7 +23,7 @@ adc-keys0 { poll-interval = <100>; keyup-threshold-microvolt = <1800000>; - func-key { + button-func { linux,code = ; label = "function"; press-threshold-microvolt = <18000>; @@ -37,31 +37,31 @@ adc-keys1 { poll-interval = <100>; keyup-threshold-microvolt = <1800000>; - esc-key { + button-esc { linux,code = ; label = "micmute"; press-threshold-microvolt = <1130000>; }; - home-key { + button-home { linux,code = ; label = "mode"; press-threshold-microvolt = <901000>; }; - menu-key { + button-menu { linux,code = ; label = "play"; press-threshold-microvolt = <624000>; }; - vol-down-key { + button-down { linux,code = ; label = "volume down"; press-threshold-microvolt = <300000>; }; - vol-up-key { + button-up { linux,code = ; label = "volume up"; press-threshold-microvolt = <18000>; diff --git a/arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts index ea6820902ede0401ccc7161025084ddbed6c8b34..7ea48167747c62b606a6308b179161638e2411af 100644 --- a/arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts @@ -19,7 +19,7 @@ chosen { stdout-path = "serial2:1500000n8"; }; - ir_rx { + ir-receiver { compatible = "gpio-ir-receiver"; gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; diff --git a/arch/arm64/boot/dts/rockchip/rk3318-a95x-z2.dts b/arch/arm64/boot/dts/rockchip/rk3318-a95x-z2.dts index 43c928ac98f0fb606c3bf6cde17187dee4446305..1deef53a4c9407694fa71184c9eb08d691cf9a62 100644 --- a/arch/arm64/boot/dts/rockchip/rk3318-a95x-z2.dts +++ b/arch/arm64/boot/dts/rockchip/rk3318-a95x-z2.dts @@ -25,7 +25,7 @@ adc-keys { keyup-threshold-microvolt = <1800000>; poll-interval = <100>; - recovery { + button-recovery { label = "recovery"; linux,code = ; press-threshold-microvolt = <17000>; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-orion-r68-meta.dts b/arch/arm64/boot/dts/rockchip/rk3368-orion-r68-meta.dts index 7f5bba0c600146f09b0e1b6ded04ca16b9e84375..81d1064fdb2154e7d8e9f74ef4c18597992d6f9e 100644 --- a/arch/arm64/boot/dts/rockchip/rk3368-orion-r68-meta.dts +++ b/arch/arm64/boot/dts/rockchip/rk3368-orion-r68-meta.dts @@ -208,11 +208,10 @@ vdd_cpu: syr827@40 { vin-supply = <&vcc_sys>; }; - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>; - clock-frequency = <32768>; clock-output-names = "xin32k"; /* rtc_int is not connected */ }; diff --git a/arch/arm64/boot/dts/rockchip/rk3368-r88.dts b/arch/arm64/boot/dts/rockchip/rk3368-r88.dts index 38d757c00548823ac83e13c610e1d583ba431346..5589f3db6b36b42053883073a03e13161ca53c70 100644 --- a/arch/arm64/boot/dts/rockchip/rk3368-r88.dts +++ b/arch/arm64/boot/dts/rockchip/rk3368-r88.dts @@ -192,11 +192,10 @@ vdd_cpu: syr827@40 { vin-supply = <&vcc_sys>; }; - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>; - clock-frequency = <32768>; clock-output-names = "xin32k"; /* rtc_int is not connected */ }; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi index ed3348b558f8e3b161a75aece6f32e249b1ad6d5..a47d9f758611e2dfc11894b0edc7ff0fc39445ce 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-gru-scarlet.dtsi @@ -734,10 +734,6 @@ qca_bt: bluetooth@1 { }; /* PINCTRL OVERRIDES */ -&ec_ap_int_l { - rockchip,pins = <1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_up>; -}; - &ap_fw_wp { rockchip,pins = <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dtsi index 2a332763c35cd4130816a2dee9ae8976cda5d039..9d9297bc5f04a051ebff86aa5f92fa1b98180c3a 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dtsi @@ -123,7 +123,7 @@ adc-keys { keyup-threshold-microvolt = <1800000>; poll-interval = <100>; - recovery { + button-recovery { label = "Recovery"; linux,code = ; press-threshold-microvolt = <18000>; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts b/arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts index 452728b82e42c64788974e23894443a281e9f232..3bf8f959e42c4484532faf6e1613fed334309410 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-nanopc-t4.dts @@ -39,7 +39,7 @@ adc-keys { keyup-threshold-microvolt = <1800000>; poll-interval = <100>; - recovery { + button-recovery { label = "Recovery"; linux,code = ; press-threshold-microvolt = <18000>; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-nanopi-m4b.dts b/arch/arm64/boot/dts/rockchip/rk3399-nanopi-m4b.dts index 72182c58cc46aa17a644381aa7ab7890cb727541..65cb21837b0cac715ec9ce84c58755f1aa7a2119 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-nanopi-m4b.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-nanopi-m4b.dts @@ -19,7 +19,7 @@ adc-keys { keyup-threshold-microvolt = <1500000>; poll-interval = <100>; - recovery { + button-recovery { label = "Recovery"; linux,code = ; press-threshold-microvolt = <18000>; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi index 278123b4f911195f579ff657cfa537d54af6369f..b6e082f1f6d9791bd910a31227c06004efc87644 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi @@ -167,6 +167,7 @@ &cpu_l3 { }; &emmc_phy { + rockchip,enable-strobe-pulldown; status = "okay"; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-orangepi.dts b/arch/arm64/boot/dts/rockchip/rk3399-orangepi.dts index 9e2e246e0bab7ced29257394bbcb41c2d009d924..dba4d03bfc2b84e4a373d1e30ab2f9c4e0cb9ba3 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-orangepi.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-orangepi.dts @@ -52,13 +52,13 @@ button-down { press-threshold-microvolt = <300000>; }; - back { + button-back { label = "Back"; linux,code = ; press-threshold-microvolt = <985000>; }; - menu { + button-menu { label = "Menu"; linux,code = ; press-threshold-microvolt = <1314000>; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts b/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts index 04c752f49be98dfb7db9662b3acbfd8e1a83eedd..115c14c0a3c68c44be5c2ed1dc772c5d1496910b 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts @@ -207,7 +207,7 @@ &sdmmc { cap-sd-highspeed; cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>; disable-wp; - max-frequency = <150000000>; + max-frequency = <40000000>; pinctrl-names = "default"; pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>; vmmc-supply = <&vcc3v3_baseboard>; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-roc-pc-plus.dts b/arch/arm64/boot/dts/rockchip/rk3399-roc-pc-plus.dts index 5a2661ae0131ce407ce7f2283f1e2ba91e68da7e..7ba1c28f70a9a86bdeeb3b6a5fab91b43d1c55b0 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-roc-pc-plus.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-roc-pc-plus.dts @@ -98,13 +98,12 @@ &fusb0 { }; &i2c0 { - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; interrupt-parent = <&gpio0>; interrupts = ; #clock-cells = <0>; - clock-frequency = <32768>; clock-output-names = "xin32k"; pinctrl-names = "default"; pinctrl-0 = <&hym8563_int>; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-roc-pc.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-roc-pc.dtsi index 2f4b1b2e3ac7cc98d2995abea3bed15a9e8eb0b8..bbf1e3f245857452c01e4bb78f20aecab8d5f832 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-roc-pc.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-roc-pc.dtsi @@ -41,7 +41,7 @@ adc-keys { keyup-threshold-microvolt = <1500000>; poll-interval = <100>; - recovery { + button-recovery { label = "Recovery"; linux,code = ; press-threshold-microvolt = <18000>; diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi index 645ced6617a65380fedd729b5b8952769e1d4903..1f76d3501bda31fdbb66636c3562cd9e7f291b5a 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi @@ -509,7 +509,6 @@ i2s0_p0_0: endpoint { &i2s1 { rockchip,playback-channels = <2>; rockchip,capture-channels = <2>; - status = "okay"; }; &i2s2 { diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator.dts b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator.dts index 13927e7d0724ebb7995ce75a8f8a685fcbd38c32..dbec2b7173a0b677a032fa71b5d6e65e33a1ab24 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator.dts +++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator.dts @@ -33,13 +33,13 @@ button-down { press-threshold-microvolt = <300000>; }; - back { + button-back { label = "Back"; linux,code = ; press-threshold-microvolt = <985000>; }; - menu { + button-menu { label = "Menu"; linux,code = ; press-threshold-microvolt = <1314000>; diff --git a/arch/arm64/boot/dts/rockchip/rk3399pro-vmarc-som.dtsi b/arch/arm64/boot/dts/rockchip/rk3399pro-vmarc-som.dtsi index 935b8c68a71d6c60db9c8d8b9070809c852d8b27..bf9eb0405b62724ede3dea0a424ebb09b6f4523f 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399pro-vmarc-som.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399pro-vmarc-som.dtsi @@ -297,11 +297,10 @@ &i2c2 { clock-frequency = <400000>; status = "okay"; - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>; - clock-frequency = <32768>; clock-output-names = "hym8563"; pinctrl-names = "default"; pinctrl-0 = <&hym8563_int>; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-pinenote.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-pinenote.dtsi index 0d45868132b9d7e0da91405f0d346cc8514bc13a..8d61f824c12dc8cdb5627ec3344ee8708a3666ca 100644 --- a/arch/arm64/boot/dts/rockchip/rk3566-pinenote.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3566-pinenote.dtsi @@ -23,7 +23,7 @@ adc-keys { io-channel-names = "buttons"; keyup-threshold-microvolt = <1750000>; - recovery { + button-recovery { label = "recovery"; linux,code = ; press-threshold-microvolt = <0>; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-quartz64-a.dts b/arch/arm64/boot/dts/rockchip/rk3566-quartz64-a.dts index a05460b924153ec3df73fb9e311096b9ed3e4f87..25a8c781f4e755fda3b7364ae514359a3cad422d 100644 --- a/arch/arm64/boot/dts/rockchip/rk3566-quartz64-a.dts +++ b/arch/arm64/boot/dts/rockchip/rk3566-quartz64-a.dts @@ -740,7 +740,7 @@ &uart0 { &uart1 { pinctrl-names = "default"; - pinctrl-0 = <&uart1m0_xfer &uart1m0_ctsn>; + pinctrl-0 = <&uart1m0_xfer &uart1m0_ctsn &uart1m0_rtsn>; status = "okay"; uart-has-rtscts; @@ -748,13 +748,14 @@ bluetooth { compatible = "brcm,bcm43438-bt"; clocks = <&rk817 1>; clock-names = "lpo"; - device-wakeup-gpios = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>; - host-wakeup-gpios = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>; + host-wakeup-gpios = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>; + device-wakeup-gpios = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>; shutdown-gpios = <&gpio2 RK_PB7 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&bt_host_wake_l &bt_wake_l &bt_enable_h>; vbat-supply = <&vcc_sys>; vddio-supply = <&vcca1v8_pmu>; + max-speed = <3000000>; }; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-quartz64-b.dts b/arch/arm64/boot/dts/rockchip/rk3566-quartz64-b.dts index 77b179cd20e729d05e16c8af7fb2e596db572018..b276eb0810c70e692a6a3b6792480d77a8e618a4 100644 --- a/arch/arm64/boot/dts/rockchip/rk3566-quartz64-b.dts +++ b/arch/arm64/boot/dts/rockchip/rk3566-quartz64-b.dts @@ -246,7 +246,7 @@ rk809: pmic@20 { compatible = "rockchip,rk809"; reg = <0x20>; interrupt-parent = <&gpio0>; - interrupts = ; + interrupts = ; assigned-clocks = <&cru I2S1_MCLKOUT_TX>; assigned-clock-parents = <&cru CLK_I2S1_8CH_TX>; clock-names = "mclk"; diff --git a/arch/arm64/boot/dts/rockchip/rk3566-roc-pc.dts b/arch/arm64/boot/dts/rockchip/rk3566-roc-pc.dts index dba648c2f57e87294e8c7dc32b831dc3b13c02f7..9fd262334d77dad41bdf37092a74f715d2e018e8 100644 --- a/arch/arm64/boot/dts/rockchip/rk3566-roc-pc.dts +++ b/arch/arm64/boot/dts/rockchip/rk3566-roc-pc.dts @@ -142,7 +142,7 @@ &gmac1 { assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1_RGMII_SPEED>, <&cru SCLK_GMAC1>; assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>, <&cru SCLK_GMAC1>, <&gmac1_clkin>; clock_in_out = "input"; - phy-mode = "rgmii-id"; + phy-mode = "rgmii"; phy-supply = <&vcc_3v3>; pinctrl-names = "default"; pinctrl-0 = <&gmac1m0_miim @@ -432,11 +432,7 @@ &i2c2 { &i2c3 { pinctrl-names = "default"; - pinctrl-0 = <&i2c3m1_xfer>; - status = "okay"; -}; - -&i2c5 { + pinctrl-0 = <&i2c3m0_xfer>; status = "okay"; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-bpi-r2-pro.dts b/arch/arm64/boot/dts/rockchip/rk3568-bpi-r2-pro.dts index c282f6e7996078da5c6dbcb1ad45a4e31f8b9b15..26d7fda275edb69d4d0b11144320282b05c95655 100644 --- a/arch/arm64/boot/dts/rockchip/rk3568-bpi-r2-pro.dts +++ b/arch/arm64/boot/dts/rockchip/rk3568-bpi-r2-pro.dts @@ -500,7 +500,6 @@ hym8563: rtc@51 { interrupt-parent = <&gpio0>; interrupts = ; #clock-cells = <0>; - clock-frequency = <32768>; clock-output-names = "rtcic_32kout"; pinctrl-names = "default"; pinctrl-0 = <&hym8563_int>; diff --git a/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts b/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts index fb87a168fe9676e2cafd79dec8787a0301bba7a3..539ef8cc7792347074def4d98cc45d32b24bcfb5 100644 --- a/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts +++ b/arch/arm64/boot/dts/rockchip/rk3568-rock-3a.dts @@ -509,7 +509,6 @@ hym8563: rtc@51 { interrupt-parent = <&gpio0>; interrupts = ; #clock-cells = <0>; - clock-frequency = <32768>; clock-output-names = "rtcic_32kout"; pinctrl-names = "default"; pinctrl-0 = <&hym8563_int>; diff --git a/arch/arm64/include/asm/cputype.h b/arch/arm64/include/asm/cputype.h index abc418650fec04fda7f79c2c46f3ec255124781d..65e53ef5a3960126f22661a9c2b6127931256a44 100644 --- a/arch/arm64/include/asm/cputype.h +++ b/arch/arm64/include/asm/cputype.h @@ -41,7 +41,7 @@ (((midr) & MIDR_IMPLEMENTOR_MASK) >> MIDR_IMPLEMENTOR_SHIFT) #define MIDR_CPU_MODEL(imp, partnum) \ - (((imp) << MIDR_IMPLEMENTOR_SHIFT) | \ + ((_AT(u32, imp) << MIDR_IMPLEMENTOR_SHIFT) | \ (0xf << MIDR_ARCHITECTURE_SHIFT) | \ ((partnum) << MIDR_PARTNUM_SHIFT)) diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h index 71a1af42f0e89775163c9d6428c22901b9a6f1e9..edf6625ce9654bcda0e7e281d56c71f3a62c9888 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h @@ -863,12 +863,12 @@ static inline bool pte_user_accessible_page(pte_t pte) static inline bool pmd_user_accessible_page(pmd_t pmd) { - return pmd_present(pmd) && (pmd_user(pmd) || pmd_user_exec(pmd)); + return pmd_leaf(pmd) && (pmd_user(pmd) || pmd_user_exec(pmd)); } static inline bool pud_user_accessible_page(pud_t pud) { - return pud_present(pud) && pud_user(pud); + return pud_leaf(pud) && pud_user(pud); } #endif diff --git a/arch/arm64/include/asm/syscall_wrapper.h b/arch/arm64/include/asm/syscall_wrapper.h index b383b4802a7bdcf1b5851377529a03ef1b5bf536..d30217c21eff78f99fbefdb20a85e3c6bae06b14 100644 --- a/arch/arm64/include/asm/syscall_wrapper.h +++ b/arch/arm64/include/asm/syscall_wrapper.h @@ -8,7 +8,7 @@ #ifndef __ASM_SYSCALL_WRAPPER_H #define __ASM_SYSCALL_WRAPPER_H -struct pt_regs; +#include #define SC_ARM64_REGS_TO_ARGS(x, ...) \ __MAP(x,__SC_ARGS \ diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 6062454a9067431769a7ad64c1c7d59336406e7d..b3f37e2209ad378f85d2688c3e6358d4062dbee0 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -428,6 +428,30 @@ static const struct arm64_ftr_bits ftr_id_aa64dfr0[] = { ARM64_FTR_END, }; +static const struct arm64_ftr_bits ftr_mvfr0[] = { + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR0_FPROUND_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR0_FPSHVEC_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR0_FPSQRT_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR0_FPDIVIDE_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR0_FPTRAP_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, MVFR0_FPDP_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR0_FPSP_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR0_SIMD_SHIFT, 4, 0), + ARM64_FTR_END, +}; + +static const struct arm64_ftr_bits ftr_mvfr1[] = { + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, MVFR1_SIMDFMAC_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR1_FPHP_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR1_SIMDHP_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, MVFR1_SIMDSP_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, MVFR1_SIMDINT_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, MVFR1_SIMDLS_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR1_FPDNAN_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR1_FPFTZ_SHIFT, 4, 0), + ARM64_FTR_END, +}; + static const struct arm64_ftr_bits ftr_mvfr2[] = { ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR2_FPMISC_SHIFT, 4, 0), ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, MVFR2_SIMDMISC_SHIFT, 4, 0), @@ -458,10 +482,10 @@ static const struct arm64_ftr_bits ftr_id_isar0[] = { static const struct arm64_ftr_bits ftr_id_isar5[] = { ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_RDM_SHIFT, 4, 0), - ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_CRC32_SHIFT, 4, 0), - ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_SHA2_SHIFT, 4, 0), - ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_SHA1_SHIFT, 4, 0), - ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_AES_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_CRC32_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_SHA2_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_SHA1_SHIFT, 4, 0), + ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_AES_SHIFT, 4, 0), ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_ISAR5_SEVL_SHIFT, 4, 0), ARM64_FTR_END, }; @@ -574,7 +598,7 @@ static const struct arm64_ftr_bits ftr_smcr[] = { * Common ftr bits for a 32bit register with all hidden, strict * attributes, with 4bit feature fields and a default safe value of * 0. Covers the following 32bit registers: - * id_isar[1-4], id_mmfr[1-3], id_pfr1, mvfr[0-1] + * id_isar[1-3], id_mmfr[1-3] */ static const struct arm64_ftr_bits ftr_generic_32bits[] = { ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, 28, 4, 0), @@ -645,8 +669,8 @@ static const struct __ftr_reg_entry { ARM64_FTR_REG(SYS_ID_ISAR6_EL1, ftr_id_isar6), /* Op1 = 0, CRn = 0, CRm = 3 */ - ARM64_FTR_REG(SYS_MVFR0_EL1, ftr_generic_32bits), - ARM64_FTR_REG(SYS_MVFR1_EL1, ftr_generic_32bits), + ARM64_FTR_REG(SYS_MVFR0_EL1, ftr_mvfr0), + ARM64_FTR_REG(SYS_MVFR1_EL1, ftr_mvfr1), ARM64_FTR_REG(SYS_MVFR2_EL1, ftr_mvfr2), ARM64_FTR_REG(SYS_ID_PFR2_EL1, ftr_id_pfr2), ARM64_FTR_REG(SYS_ID_DFR1_EL1, ftr_id_dfr1), @@ -3339,7 +3363,7 @@ static void __maybe_unused cpu_enable_cnp(struct arm64_cpu_capabilities const *c /* * We emulate only the following system register space. - * Op0 = 0x3, CRn = 0x0, Op1 = 0x0, CRm = [0, 4 - 7] + * Op0 = 0x3, CRn = 0x0, Op1 = 0x0, CRm = [0, 2 - 7] * See Table C5-6 System instruction encodings for System register accesses, * ARMv8 ARM(ARM DDI 0487A.f) for more details. */ @@ -3349,7 +3373,7 @@ static inline bool __attribute_const__ is_emulated(u32 id) sys_reg_CRn(id) == 0x0 && sys_reg_Op1(id) == 0x0 && (sys_reg_CRm(id) == 0 || - ((sys_reg_CRm(id) >= 4) && (sys_reg_CRm(id) <= 7)))); + ((sys_reg_CRm(id) >= 2) && (sys_reg_CRm(id) <= 7)))); } /* diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index e1be6c429810d0d583b645fcc6e0b3cbb2ea06a4..a908a37f03678b6ba819998652a41d7de44288e3 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c @@ -12,6 +12,14 @@ #include +static bool region_is_misaligned(const efi_memory_desc_t *md) +{ + if (PAGE_SIZE == EFI_PAGE_SIZE) + return false; + return !PAGE_ALIGNED(md->phys_addr) || + !PAGE_ALIGNED(md->num_pages << EFI_PAGE_SHIFT); +} + /* * Only regions of type EFI_RUNTIME_SERVICES_CODE need to be * executable, everything else can be mapped with the XN bits @@ -25,14 +33,22 @@ static __init pteval_t create_mapping_protection(efi_memory_desc_t *md) if (type == EFI_MEMORY_MAPPED_IO) return PROT_DEVICE_nGnRE; - if (WARN_ONCE(!PAGE_ALIGNED(md->phys_addr), - "UEFI Runtime regions are not aligned to 64 KB -- buggy firmware?")) + if (region_is_misaligned(md)) { + static bool __initdata code_is_misaligned; + /* - * If the region is not aligned to the page size of the OS, we - * can not use strict permissions, since that would also affect - * the mapping attributes of the adjacent regions. + * Regions that are not aligned to the OS page size cannot be + * mapped with strict permissions, as those might interfere + * with the permissions that are needed by the adjacent + * region's mapping. However, if we haven't encountered any + * misaligned runtime code regions so far, we can safely use + * non-executable permissions for non-code regions. */ - return pgprot_val(PAGE_KERNEL_EXEC); + code_is_misaligned |= (type == EFI_RUNTIME_SERVICES_CODE); + + return code_is_misaligned ? pgprot_val(PAGE_KERNEL_EXEC) + : pgprot_val(PAGE_KERNEL); + } /* R-- */ if ((attr & (EFI_MEMORY_XP | EFI_MEMORY_RO)) == @@ -63,19 +79,16 @@ int __init efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md) bool page_mappings_only = (md->type == EFI_RUNTIME_SERVICES_CODE || md->type == EFI_RUNTIME_SERVICES_DATA); - if (!PAGE_ALIGNED(md->phys_addr) || - !PAGE_ALIGNED(md->num_pages << EFI_PAGE_SHIFT)) { - /* - * If the end address of this region is not aligned to page - * size, the mapping is rounded up, and may end up sharing a - * page frame with the next UEFI memory region. If we create - * a block entry now, we may need to split it again when mapping - * the next region, and support for that is going to be removed - * from the MMU routines. So avoid block mappings altogether in - * that case. - */ + /* + * If this region is not aligned to the page size used by the OS, the + * mapping will be rounded outwards, and may end up sharing a page + * frame with an adjacent runtime memory region. Given that the page + * table descriptor covering the shared page will be rewritten when the + * adjacent region gets mapped, we must avoid block mappings here so we + * don't have to worry about splitting them when that happens. + */ + if (region_is_misaligned(md)) page_mappings_only = true; - } create_pgd_mapping(mm, md->phys_addr, md->virt_addr, md->num_pages << EFI_PAGE_SHIFT, @@ -102,6 +115,9 @@ int __init efi_set_mapping_permissions(struct mm_struct *mm, BUG_ON(md->type != EFI_RUNTIME_SERVICES_CODE && md->type != EFI_RUNTIME_SERVICES_DATA); + if (region_is_misaligned(md)) + return 0; + /* * Calling apply_to_page_range() is only safe on regions that are * guaranteed to be mapped down to pages. Since we are only called diff --git a/arch/arm64/kernel/entry-common.c b/arch/arm64/kernel/entry-common.c index 9173fad279af9333ff4bee8cb0b8153132f2af4a..27369fa1c032cb7c6525200eb3bed570633bea4a 100644 --- a/arch/arm64/kernel/entry-common.c +++ b/arch/arm64/kernel/entry-common.c @@ -329,7 +329,8 @@ static void cortex_a76_erratum_1463225_svc_handler(void) __this_cpu_write(__in_cortex_a76_erratum_1463225_wa, 0); } -static bool cortex_a76_erratum_1463225_debug_handler(struct pt_regs *regs) +static __always_inline bool +cortex_a76_erratum_1463225_debug_handler(struct pt_regs *regs) { if (!__this_cpu_read(__in_cortex_a76_erratum_1463225_wa)) return false; diff --git a/arch/arm64/kernel/entry-ftrace.S b/arch/arm64/kernel/entry-ftrace.S index 795344ab4ec45889530a6352684d1fe3f08d86cf..322a831f8ede13eeae165309764d79978b42b985 100644 --- a/arch/arm64/kernel/entry-ftrace.S +++ b/arch/arm64/kernel/entry-ftrace.S @@ -299,11 +299,11 @@ SYM_TYPED_FUNC_START(ftrace_stub) ret SYM_FUNC_END(ftrace_stub) +#ifdef CONFIG_FUNCTION_GRAPH_TRACER SYM_TYPED_FUNC_START(ftrace_stub_graph) ret SYM_FUNC_END(ftrace_stub_graph) -#ifdef CONFIG_FUNCTION_GRAPH_TRACER /* * void return_to_handler(void) * diff --git a/arch/arm64/kvm/hyp/exception.c b/arch/arm64/kvm/hyp/exception.c index b7557b25ed568935b32409efc49865fc19917704..791d3de767713c8ad6f48d81b1e371fdbcab9063 100644 --- a/arch/arm64/kvm/hyp/exception.c +++ b/arch/arm64/kvm/hyp/exception.c @@ -13,6 +13,7 @@ #include #include #include +#include #if !defined (__KVM_NVHE_HYPERVISOR__) && !defined (__KVM_VHE_HYPERVISOR__) #error Hypervisor code only! @@ -115,7 +116,7 @@ static void enter_exception64(struct kvm_vcpu *vcpu, unsigned long target_mode, new |= (old & PSR_C_BIT); new |= (old & PSR_V_BIT); - if (kvm_has_mte(vcpu->kvm)) + if (kvm_has_mte(kern_hyp_va(vcpu->kvm))) new |= PSR_TCO_BIT; new |= (old & PSR_DIT_BIT); diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h b/arch/arm64/kvm/hyp/include/hyp/switch.h index 6cbbb6c02f663e73c7fd643022b2b4de295b8e2c..3330d1b76bdd2015592d35e9a6ef55502050e885 100644 --- a/arch/arm64/kvm/hyp/include/hyp/switch.h +++ b/arch/arm64/kvm/hyp/include/hyp/switch.h @@ -87,6 +87,17 @@ static inline void __activate_traps_common(struct kvm_vcpu *vcpu) vcpu->arch.mdcr_el2_host = read_sysreg(mdcr_el2); write_sysreg(vcpu->arch.mdcr_el2, mdcr_el2); + + if (cpus_have_final_cap(ARM64_SME)) { + sysreg_clear_set_s(SYS_HFGRTR_EL2, + HFGxTR_EL2_nSMPRI_EL1_MASK | + HFGxTR_EL2_nTPIDR2_EL0_MASK, + 0); + sysreg_clear_set_s(SYS_HFGWTR_EL2, + HFGxTR_EL2_nSMPRI_EL1_MASK | + HFGxTR_EL2_nTPIDR2_EL0_MASK, + 0); + } } static inline void __deactivate_traps_common(struct kvm_vcpu *vcpu) @@ -96,6 +107,15 @@ static inline void __deactivate_traps_common(struct kvm_vcpu *vcpu) write_sysreg(0, hstr_el2); if (kvm_arm_support_pmu_v3()) write_sysreg(0, pmuserenr_el0); + + if (cpus_have_final_cap(ARM64_SME)) { + sysreg_clear_set_s(SYS_HFGRTR_EL2, 0, + HFGxTR_EL2_nSMPRI_EL1_MASK | + HFGxTR_EL2_nTPIDR2_EL0_MASK); + sysreg_clear_set_s(SYS_HFGWTR_EL2, 0, + HFGxTR_EL2_nSMPRI_EL1_MASK | + HFGxTR_EL2_nTPIDR2_EL0_MASK); + } } static inline void ___activate_traps(struct kvm_vcpu *vcpu) diff --git a/arch/arm64/kvm/hyp/nvhe/mem_protect.c b/arch/arm64/kvm/hyp/nvhe/mem_protect.c index 1e78acf9662eb17490f2973ccd5a8831c876ee9b..07f9dc9848ef114849103110ee97aef91e95d5b6 100644 --- a/arch/arm64/kvm/hyp/nvhe/mem_protect.c +++ b/arch/arm64/kvm/hyp/nvhe/mem_protect.c @@ -516,7 +516,7 @@ static enum pkvm_page_state hyp_get_page_state(kvm_pte_t pte) if (!kvm_pte_valid(pte)) return PKVM_NOPAGE; - return pkvm_getstate(kvm_pgtable_stage2_pte_prot(pte)); + return pkvm_getstate(kvm_pgtable_hyp_pte_prot(pte)); } static int __hyp_check_page_state_range(u64 addr, u64 size, diff --git a/arch/arm64/kvm/hyp/nvhe/switch.c b/arch/arm64/kvm/hyp/nvhe/switch.c index 8e9d49a964be61690d02998ec84e06e985265f66..c2cb46ca4fb667e9885601e40a91721e896947e7 100644 --- a/arch/arm64/kvm/hyp/nvhe/switch.c +++ b/arch/arm64/kvm/hyp/nvhe/switch.c @@ -55,18 +55,6 @@ static void __activate_traps(struct kvm_vcpu *vcpu) write_sysreg(val, cptr_el2); write_sysreg(__this_cpu_read(kvm_hyp_vector), vbar_el2); - if (cpus_have_final_cap(ARM64_SME)) { - val = read_sysreg_s(SYS_HFGRTR_EL2); - val &= ~(HFGxTR_EL2_nTPIDR2_EL0_MASK | - HFGxTR_EL2_nSMPRI_EL1_MASK); - write_sysreg_s(val, SYS_HFGRTR_EL2); - - val = read_sysreg_s(SYS_HFGWTR_EL2); - val &= ~(HFGxTR_EL2_nTPIDR2_EL0_MASK | - HFGxTR_EL2_nSMPRI_EL1_MASK); - write_sysreg_s(val, SYS_HFGWTR_EL2); - } - if (cpus_have_final_cap(ARM64_WORKAROUND_SPECULATIVE_AT)) { struct kvm_cpu_context *ctxt = &vcpu->arch.ctxt; @@ -110,20 +98,6 @@ static void __deactivate_traps(struct kvm_vcpu *vcpu) write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2); - if (cpus_have_final_cap(ARM64_SME)) { - u64 val; - - val = read_sysreg_s(SYS_HFGRTR_EL2); - val |= HFGxTR_EL2_nTPIDR2_EL0_MASK | - HFGxTR_EL2_nSMPRI_EL1_MASK; - write_sysreg_s(val, SYS_HFGRTR_EL2); - - val = read_sysreg_s(SYS_HFGWTR_EL2); - val |= HFGxTR_EL2_nTPIDR2_EL0_MASK | - HFGxTR_EL2_nSMPRI_EL1_MASK; - write_sysreg_s(val, SYS_HFGWTR_EL2); - } - cptr = CPTR_EL2_DEFAULT; if (vcpu_has_sve(vcpu) && (vcpu->arch.fp_state == FP_STATE_GUEST_OWNED)) cptr |= CPTR_EL2_TZ; diff --git a/arch/arm64/kvm/hyp/vhe/switch.c b/arch/arm64/kvm/hyp/vhe/switch.c index 7acb87eaa0925a75e6f1843fd80b925bad0d3c85..1a97391fedd29335647796ce491f5bda03a3f189 100644 --- a/arch/arm64/kvm/hyp/vhe/switch.c +++ b/arch/arm64/kvm/hyp/vhe/switch.c @@ -63,10 +63,6 @@ static void __activate_traps(struct kvm_vcpu *vcpu) __activate_traps_fpsimd32(vcpu); } - if (cpus_have_final_cap(ARM64_SME)) - write_sysreg(read_sysreg(sctlr_el2) & ~SCTLR_ELx_ENTP2, - sctlr_el2); - write_sysreg(val, cpacr_el1); write_sysreg(__this_cpu_read(kvm_hyp_vector), vbar_el1); @@ -88,10 +84,6 @@ static void __deactivate_traps(struct kvm_vcpu *vcpu) */ asm(ALTERNATIVE("nop", "isb", ARM64_WORKAROUND_SPECULATIVE_AT)); - if (cpus_have_final_cap(ARM64_SME)) - write_sysreg(read_sysreg(sctlr_el2) | SCTLR_ELx_ENTP2, - sctlr_el2); - write_sysreg(CPACR_EL1_DEFAULT, cpacr_el1); if (!arm64_kernel_unmapped_at_el0()) diff --git a/arch/arm64/mm/pageattr.c b/arch/arm64/mm/pageattr.c index d107c3d434e224552ae34011a4df3319cc977516..5922178d7a064c1c98af43ad97d72fa4a6b8d79b 100644 --- a/arch/arm64/mm/pageattr.c +++ b/arch/arm64/mm/pageattr.c @@ -26,7 +26,7 @@ bool can_set_direct_map(void) * mapped at page granularity, so that it is possible to * protect/unprotect single pages. */ - return rodata_full || debug_pagealloc_enabled() || + return (rodata_enabled && rodata_full) || debug_pagealloc_enabled() || IS_ENABLED(CONFIG_KFENCE); } @@ -102,7 +102,8 @@ static int change_memory_common(unsigned long addr, int numpages, * If we are manipulating read-only permissions, apply the same * change to the linear mapping of the pages that back this VM area. */ - if (rodata_full && (pgprot_val(set_mask) == PTE_RDONLY || + if (rodata_enabled && + rodata_full && (pgprot_val(set_mask) == PTE_RDONLY || pgprot_val(clear_mask) == PTE_RDONLY)) { for (i = 0; i < area->nr_pages; i++) { __change_memory_common((u64)page_address(area->pages[i]), diff --git a/arch/loongarch/Makefile b/arch/loongarch/Makefile index f4cb54d5afd669b7f177f1f60c8937dc4b05e7eb..01b57b7263225d195fddf7cfc4d47a84967d6901 100644 --- a/arch/loongarch/Makefile +++ b/arch/loongarch/Makefile @@ -97,7 +97,7 @@ KBUILD_LDFLAGS += -m $(ld-emul) ifdef CONFIG_LOONGARCH CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \ - egrep -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \ + grep -E -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \ sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g') endif diff --git a/arch/loongarch/include/asm/irq.h b/arch/loongarch/include/asm/irq.h index d06d4542b634c35a9e29992f68a6a572cc730e03..5332b1433f384a11d19b621b36f1166845e2d381 100644 --- a/arch/loongarch/include/asm/irq.h +++ b/arch/loongarch/include/asm/irq.h @@ -117,7 +117,7 @@ extern struct fwnode_handle *liointc_handle; extern struct fwnode_handle *pch_lpc_handle; extern struct fwnode_handle *pch_pic_handle[MAX_IO_PICS]; -extern irqreturn_t loongson3_ipi_interrupt(int irq, void *dev); +extern irqreturn_t loongson_ipi_interrupt(int irq, void *dev); #include diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/asm/pgtable.h index 946704bee599ee843c9abc154355683550b1c6e0..79d5bfd913e0fb4843b2fc96a109ceb3e7bb6087 100644 --- a/arch/loongarch/include/asm/pgtable.h +++ b/arch/loongarch/include/asm/pgtable.h @@ -349,13 +349,17 @@ static inline pte_t pte_mkclean(pte_t pte) static inline pte_t pte_mkdirty(pte_t pte) { - pte_val(pte) |= (_PAGE_DIRTY | _PAGE_MODIFIED); + pte_val(pte) |= _PAGE_MODIFIED; + if (pte_val(pte) & _PAGE_WRITE) + pte_val(pte) |= _PAGE_DIRTY; return pte; } static inline pte_t pte_mkwrite(pte_t pte) { - pte_val(pte) |= (_PAGE_WRITE | _PAGE_DIRTY); + pte_val(pte) |= _PAGE_WRITE; + if (pte_val(pte) & _PAGE_MODIFIED) + pte_val(pte) |= _PAGE_DIRTY; return pte; } @@ -455,7 +459,9 @@ static inline int pmd_write(pmd_t pmd) static inline pmd_t pmd_mkwrite(pmd_t pmd) { - pmd_val(pmd) |= (_PAGE_WRITE | _PAGE_DIRTY); + pmd_val(pmd) |= _PAGE_WRITE; + if (pmd_val(pmd) & _PAGE_MODIFIED) + pmd_val(pmd) |= _PAGE_DIRTY; return pmd; } @@ -478,10 +484,13 @@ static inline pmd_t pmd_mkclean(pmd_t pmd) static inline pmd_t pmd_mkdirty(pmd_t pmd) { - pmd_val(pmd) |= (_PAGE_DIRTY | _PAGE_MODIFIED); + pmd_val(pmd) |= _PAGE_MODIFIED; + if (pmd_val(pmd) & _PAGE_WRITE) + pmd_val(pmd) |= _PAGE_DIRTY; return pmd; } +#define pmd_young pmd_young static inline int pmd_young(pmd_t pmd) { return !!(pmd_val(pmd) & _PAGE_ACCESSED); diff --git a/arch/loongarch/include/asm/smp.h b/arch/loongarch/include/asm/smp.h index 71189b28bfb2723b5a066ad6990337848c2a1baf..3dd172d9ffea0bce5edb52c2d299b94fb901b33a 100644 --- a/arch/loongarch/include/asm/smp.h +++ b/arch/loongarch/include/asm/smp.h @@ -19,21 +19,21 @@ extern cpumask_t cpu_sibling_map[]; extern cpumask_t cpu_core_map[]; extern cpumask_t cpu_foreign_map[]; -void loongson3_smp_setup(void); -void loongson3_prepare_cpus(unsigned int max_cpus); -void loongson3_boot_secondary(int cpu, struct task_struct *idle); -void loongson3_init_secondary(void); -void loongson3_smp_finish(void); -void loongson3_send_ipi_single(int cpu, unsigned int action); -void loongson3_send_ipi_mask(const struct cpumask *mask, unsigned int action); +void loongson_smp_setup(void); +void loongson_prepare_cpus(unsigned int max_cpus); +void loongson_boot_secondary(int cpu, struct task_struct *idle); +void loongson_init_secondary(void); +void loongson_smp_finish(void); +void loongson_send_ipi_single(int cpu, unsigned int action); +void loongson_send_ipi_mask(const struct cpumask *mask, unsigned int action); #ifdef CONFIG_HOTPLUG_CPU -int loongson3_cpu_disable(void); -void loongson3_cpu_die(unsigned int cpu); +int loongson_cpu_disable(void); +void loongson_cpu_die(unsigned int cpu); #endif static inline void plat_smp_setup(void) { - loongson3_smp_setup(); + loongson_smp_setup(); } static inline int raw_smp_processor_id(void) @@ -85,28 +85,28 @@ extern void show_ipi_list(struct seq_file *p, int prec); */ static inline void smp_send_reschedule(int cpu) { - loongson3_send_ipi_single(cpu, SMP_RESCHEDULE); + loongson_send_ipi_single(cpu, SMP_RESCHEDULE); } static inline void arch_send_call_function_single_ipi(int cpu) { - loongson3_send_ipi_single(cpu, SMP_CALL_FUNCTION); + loongson_send_ipi_single(cpu, SMP_CALL_FUNCTION); } static inline void arch_send_call_function_ipi_mask(const struct cpumask *mask) { - loongson3_send_ipi_mask(mask, SMP_CALL_FUNCTION); + loongson_send_ipi_mask(mask, SMP_CALL_FUNCTION); } #ifdef CONFIG_HOTPLUG_CPU static inline int __cpu_disable(void) { - return loongson3_cpu_disable(); + return loongson_cpu_disable(); } static inline void __cpu_die(unsigned int cpu) { - loongson3_cpu_die(cpu); + loongson_cpu_die(cpu); } extern void play_dead(void); diff --git a/arch/loongarch/kernel/acpi.c b/arch/loongarch/kernel/acpi.c index 3353984820388349b4e961e79a4767717be92a6f..8319cc40900908fb2c88ae28ef094afaf9464641 100644 --- a/arch/loongarch/kernel/acpi.c +++ b/arch/loongarch/kernel/acpi.c @@ -56,23 +56,6 @@ void __iomem *acpi_os_ioremap(acpi_physical_address phys, acpi_size size) return ioremap_cache(phys, size); } -void __init acpi_boot_table_init(void) -{ - /* - * If acpi_disabled, bail out - */ - if (acpi_disabled) - return; - - /* - * Initialize the ACPI boot-time table parser. - */ - if (acpi_table_init()) { - disable_acpi(); - return; - } -} - #ifdef CONFIG_SMP static int set_processor_mask(u32 id, u32 flags) { @@ -156,13 +139,21 @@ static void __init acpi_process_madt(void) loongson_sysconf.nr_cpus = num_processors; } -int __init acpi_boot_init(void) +void __init acpi_boot_table_init(void) { /* * If acpi_disabled, bail out */ if (acpi_disabled) - return -1; + return; + + /* + * Initialize the ACPI boot-time table parser. + */ + if (acpi_table_init()) { + disable_acpi(); + return; + } loongson_sysconf.boot_cpu_id = read_csr_cpuid(); @@ -173,8 +164,6 @@ int __init acpi_boot_init(void) /* Do not enable ACPI SPCR console by default */ acpi_parse_spcr(earlycon_acpi_spcr_enable, false); - - return 0; } #ifdef CONFIG_ACPI_NUMA diff --git a/arch/loongarch/kernel/irq.c b/arch/loongarch/kernel/irq.c index 1ba19c76563e9bd7fe0381f54bde68f67f7a7768..0524bf1169b7415de0135669b08314df2185cc7a 100644 --- a/arch/loongarch/kernel/irq.c +++ b/arch/loongarch/kernel/irq.c @@ -117,7 +117,7 @@ void __init init_IRQ(void) if (ipi_irq < 0) panic("IPI IRQ mapping failed\n"); irq_set_percpu_devid(ipi_irq); - r = request_percpu_irq(ipi_irq, loongson3_ipi_interrupt, "IPI", &ipi_dummy_dev); + r = request_percpu_irq(ipi_irq, loongson_ipi_interrupt, "IPI", &ipi_dummy_dev); if (r < 0) panic("IPI IRQ request failed\n"); #endif diff --git a/arch/loongarch/kernel/process.c b/arch/loongarch/kernel/process.c index 2526b68f1c0f0257071b5fe28ba0bc6670be0ba2..ddb8ba4eb399dcbaf89eff2b686c90e7e3255e48 100644 --- a/arch/loongarch/kernel/process.c +++ b/arch/loongarch/kernel/process.c @@ -152,7 +152,7 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args) childregs->csr_crmd = p->thread.csr_crmd; childregs->csr_prmd = p->thread.csr_prmd; childregs->csr_ecfg = p->thread.csr_ecfg; - return 0; + goto out; } /* user thread */ @@ -171,14 +171,15 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args) */ childregs->csr_euen = 0; + if (clone_flags & CLONE_SETTLS) + childregs->regs[2] = tls; + +out: clear_tsk_thread_flag(p, TIF_USEDFPU); clear_tsk_thread_flag(p, TIF_USEDSIMD); clear_tsk_thread_flag(p, TIF_LSX_CTX_LIVE); clear_tsk_thread_flag(p, TIF_LASX_CTX_LIVE); - if (clone_flags & CLONE_SETTLS) - childregs->regs[2] = tls; - return 0; } diff --git a/arch/loongarch/kernel/setup.c b/arch/loongarch/kernel/setup.c index 1eb63fa9bc81aa7af2640b6bdaed95b57e7a4498..ae436def7ee98792d875317607fe6fe45ea33e84 100644 --- a/arch/loongarch/kernel/setup.c +++ b/arch/loongarch/kernel/setup.c @@ -257,7 +257,6 @@ void __init platform_init(void) #ifdef CONFIG_ACPI acpi_gbl_use_default_register_widths = false; acpi_boot_table_init(); - acpi_boot_init(); #endif #ifdef CONFIG_NUMA diff --git a/arch/loongarch/kernel/smp.c b/arch/loongarch/kernel/smp.c index 781a4d4bdddc994f6f6c6c8e473382ccad1fe355..6ed72f7ff27894a40848d54c865fefb301bf53ce 100644 --- a/arch/loongarch/kernel/smp.c +++ b/arch/loongarch/kernel/smp.c @@ -136,12 +136,12 @@ static void ipi_write_action(int cpu, u32 action) } } -void loongson3_send_ipi_single(int cpu, unsigned int action) +void loongson_send_ipi_single(int cpu, unsigned int action) { ipi_write_action(cpu_logical_map(cpu), (u32)action); } -void loongson3_send_ipi_mask(const struct cpumask *mask, unsigned int action) +void loongson_send_ipi_mask(const struct cpumask *mask, unsigned int action) { unsigned int i; @@ -149,7 +149,7 @@ void loongson3_send_ipi_mask(const struct cpumask *mask, unsigned int action) ipi_write_action(cpu_logical_map(i), (u32)action); } -irqreturn_t loongson3_ipi_interrupt(int irq, void *dev) +irqreturn_t loongson_ipi_interrupt(int irq, void *dev) { unsigned int action; unsigned int cpu = smp_processor_id(); @@ -169,7 +169,7 @@ irqreturn_t loongson3_ipi_interrupt(int irq, void *dev) return IRQ_HANDLED; } -void __init loongson3_smp_setup(void) +void __init loongson_smp_setup(void) { cpu_data[0].core = cpu_logical_map(0) % loongson_sysconf.cores_per_package; cpu_data[0].package = cpu_logical_map(0) / loongson_sysconf.cores_per_package; @@ -178,7 +178,7 @@ void __init loongson3_smp_setup(void) pr_info("Detected %i available CPU(s)\n", loongson_sysconf.nr_cpus); } -void __init loongson3_prepare_cpus(unsigned int max_cpus) +void __init loongson_prepare_cpus(unsigned int max_cpus) { int i = 0; @@ -193,7 +193,7 @@ void __init loongson3_prepare_cpus(unsigned int max_cpus) /* * Setup the PC, SP, and TP of a secondary processor and start it running! */ -void loongson3_boot_secondary(int cpu, struct task_struct *idle) +void loongson_boot_secondary(int cpu, struct task_struct *idle) { unsigned long entry; @@ -205,13 +205,13 @@ void loongson3_boot_secondary(int cpu, struct task_struct *idle) csr_mail_send(entry, cpu_logical_map(cpu), 0); - loongson3_send_ipi_single(cpu, SMP_BOOT_CPU); + loongson_send_ipi_single(cpu, SMP_BOOT_CPU); } /* * SMP init and finish on secondary CPUs */ -void loongson3_init_secondary(void) +void loongson_init_secondary(void) { unsigned int cpu = smp_processor_id(); unsigned int imask = ECFGF_IP0 | ECFGF_IP1 | ECFGF_IP2 | @@ -231,7 +231,7 @@ void loongson3_init_secondary(void) cpu_logical_map(cpu) / loongson_sysconf.cores_per_package; } -void loongson3_smp_finish(void) +void loongson_smp_finish(void) { local_irq_enable(); iocsr_write64(0, LOONGARCH_IOCSR_MBUF0); @@ -240,7 +240,7 @@ void loongson3_smp_finish(void) #ifdef CONFIG_HOTPLUG_CPU -int loongson3_cpu_disable(void) +int loongson_cpu_disable(void) { unsigned long flags; unsigned int cpu = smp_processor_id(); @@ -262,7 +262,7 @@ int loongson3_cpu_disable(void) return 0; } -void loongson3_cpu_die(unsigned int cpu) +void loongson_cpu_die(unsigned int cpu) { while (per_cpu(cpu_state, cpu) != CPU_DEAD) cpu_relax(); @@ -300,19 +300,19 @@ void play_dead(void) */ #ifdef CONFIG_PM -static int loongson3_ipi_suspend(void) +static int loongson_ipi_suspend(void) { return 0; } -static void loongson3_ipi_resume(void) +static void loongson_ipi_resume(void) { iocsr_write32(0xffffffff, LOONGARCH_IOCSR_IPI_EN); } -static struct syscore_ops loongson3_ipi_syscore_ops = { - .resume = loongson3_ipi_resume, - .suspend = loongson3_ipi_suspend, +static struct syscore_ops loongson_ipi_syscore_ops = { + .resume = loongson_ipi_resume, + .suspend = loongson_ipi_suspend, }; /* @@ -321,7 +321,7 @@ static struct syscore_ops loongson3_ipi_syscore_ops = { */ static int __init ipi_pm_init(void) { - register_syscore_ops(&loongson3_ipi_syscore_ops); + register_syscore_ops(&loongson_ipi_syscore_ops); return 0; } @@ -425,7 +425,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) { init_new_context(current, &init_mm); current_thread_info()->cpu = 0; - loongson3_prepare_cpus(max_cpus); + loongson_prepare_cpus(max_cpus); set_cpu_sibling_map(0); set_cpu_core_map(0); calculate_cpu_foreign_map(); @@ -436,7 +436,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) int __cpu_up(unsigned int cpu, struct task_struct *tidle) { - loongson3_boot_secondary(cpu, tidle); + loongson_boot_secondary(cpu, tidle); /* Wait for CPU to start and be ready to sync counters */ if (!wait_for_completion_timeout(&cpu_starting, @@ -465,7 +465,7 @@ asmlinkage void start_secondary(void) cpu_probe(); constant_clockevent_init(); - loongson3_init_secondary(); + loongson_init_secondary(); set_cpu_sibling_map(cpu); set_cpu_core_map(cpu); @@ -487,11 +487,11 @@ asmlinkage void start_secondary(void) complete(&cpu_running); /* - * irq will be enabled in loongson3_smp_finish(), enabling it too + * irq will be enabled in loongson_smp_finish(), enabling it too * early is dangerous. */ WARN_ON_ONCE(!irqs_disabled()); - loongson3_smp_finish(); + loongson_smp_finish(); cpu_startup_entry(CPUHP_AP_ONLINE_IDLE); } diff --git a/arch/loongarch/kernel/unwind_prologue.c b/arch/loongarch/kernel/unwind_prologue.c index b206d91592051b6d0da2b0b7ce9d985db4502f7f..4571c3c87cd4c0dc8da5515d82fecd8da1b7397e 100644 --- a/arch/loongarch/kernel/unwind_prologue.c +++ b/arch/loongarch/kernel/unwind_prologue.c @@ -43,7 +43,8 @@ static bool unwind_by_prologue(struct unwind_state *state) { struct stack_info *info = &state->stack_info; union loongarch_instruction *ip, *ip_end; - unsigned long frame_size = 0, frame_ra = -1; + long frame_ra = -1; + unsigned long frame_size = 0; unsigned long size, offset, pc = state->pc; if (state->sp >= info->end || state->sp < info->begin) diff --git a/arch/microblaze/Makefile b/arch/microblaze/Makefile index 3f8a86c4336a86329728678fcbc0a8d3d1380686..02e6be9c5b0dcaabad5a7bfcc1ba32bd8be486c2 100644 --- a/arch/microblaze/Makefile +++ b/arch/microblaze/Makefile @@ -67,12 +67,12 @@ linux.bin.ub linux.bin.gz: linux.bin linux.bin: vmlinux linux.bin linux.bin.gz linux.bin.ub: $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ - @echo 'Kernel: $(boot)/$@ is ready' ' (#'`cat .version`')' + @echo 'Kernel: $(boot)/$@ is ready' ' (#'$(or $(KBUILD_BUILD_VERSION),`cat .version`)')' PHONY += simpleImage.$(DTB) simpleImage.$(DTB): vmlinux $(Q)$(MAKE) $(build)=$(boot) $(addprefix $(boot)/$@., ub unstrip strip) - @echo 'Kernel: $(boot)/$@ is ready' ' (#'`cat .version`')' + @echo 'Kernel: $(boot)/$@ is ready' ' (#'$(or $(KBUILD_BUILD_VERSION),`cat .version`)')' define archhelp echo '* linux.bin - Create raw binary' diff --git a/arch/mips/alchemy/common/gpiolib.c b/arch/mips/alchemy/common/gpiolib.c index a17d7a8909c42a2533985eb8cb875f8860233bd6..1b16daaa86aeefcad956b480de3502fb5a955d7f 100644 --- a/arch/mips/alchemy/common/gpiolib.c +++ b/arch/mips/alchemy/common/gpiolib.c @@ -31,7 +31,7 @@ #include #include #include -#include +#include #include #include diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c index 5b38a802e101466f88f3459f66138fb20919c10c..c5dd415254d3d60379025d53a71745e44cccac74 100644 --- a/arch/mips/boot/compressed/decompress.c +++ b/arch/mips/boot/compressed/decompress.c @@ -9,6 +9,7 @@ #define DISABLE_BRANCH_PROFILING +#define __NO_FORTIFY #include #include #include diff --git a/arch/mips/include/asm/fw/fw.h b/arch/mips/include/asm/fw/fw.h index d0ef8b4892bbe6af327a0b351df93f948c413b37..d0494ce4b3373a751597d063c6b9bece9379b431 100644 --- a/arch/mips/include/asm/fw/fw.h +++ b/arch/mips/include/asm/fw/fw.h @@ -26,6 +26,6 @@ extern char *fw_getcmdline(void); extern void fw_meminit(void); extern char *fw_getenv(char *name); extern unsigned long fw_getenvl(char *name); -extern void fw_init_early_console(char port); +extern void fw_init_early_console(void); #endif /* __ASM_FW_H_ */ diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h index 6caec386ad2f6861566588dc3a3b0a5570fe84a8..4678627673dfea0ef7369382cd8021229ebc52d4 100644 --- a/arch/mips/include/asm/pgtable.h +++ b/arch/mips/include/asm/pgtable.h @@ -622,6 +622,7 @@ static inline pmd_t pmd_mkdirty(pmd_t pmd) return pmd; } +#define pmd_young pmd_young static inline int pmd_young(pmd_t pmd) { return !!(pmd_val(pmd) & _PAGE_ACCESSED); diff --git a/arch/mips/kernel/jump_label.c b/arch/mips/kernel/jump_label.c index 71a882c8c6eb15bddbcafff2df73235a2f75567a..f7978d50a2ba59ab9234a40998cc06292daa4d1e 100644 --- a/arch/mips/kernel/jump_label.c +++ b/arch/mips/kernel/jump_label.c @@ -56,7 +56,7 @@ void arch_jump_label_transform(struct jump_entry *e, * The branch offset must fit in the instruction's 26 * bit field. */ - WARN_ON((offset >= BIT(25)) || + WARN_ON((offset >= (long)BIT(25)) || (offset < -(long)BIT(25))); insn.j_format.opcode = bc6_op; diff --git a/arch/mips/kernel/relocate_kernel.S b/arch/mips/kernel/relocate_kernel.S index cfde14b48fd8dbf9601d45c600fcddc5b09fb325..f5b2ef979b4378c692607b84d7d10a5368e8b681 100644 --- a/arch/mips/kernel/relocate_kernel.S +++ b/arch/mips/kernel/relocate_kernel.S @@ -145,8 +145,7 @@ LEAF(kexec_smp_wait) * kexec_args[0..3] are used to prepare register values. */ -kexec_args: - EXPORT(kexec_args) +EXPORT(kexec_args) arg0: PTR_WD 0x0 arg1: PTR_WD 0x0 arg2: PTR_WD 0x0 @@ -159,8 +158,7 @@ arg3: PTR_WD 0x0 * their registers a0-a3. secondary_kexec_args[0..3] are used * to prepare register values. */ -secondary_kexec_args: - EXPORT(secondary_kexec_args) +EXPORT(secondary_kexec_args) s_arg0: PTR_WD 0x0 s_arg1: PTR_WD 0x0 s_arg2: PTR_WD 0x0 @@ -171,19 +169,16 @@ kexec_flag: #endif -kexec_start_address: - EXPORT(kexec_start_address) +EXPORT(kexec_start_address) PTR_WD 0x0 .size kexec_start_address, PTRSIZE -kexec_indirection_page: - EXPORT(kexec_indirection_page) +EXPORT(kexec_indirection_page) PTR_WD 0 .size kexec_indirection_page, PTRSIZE relocate_new_kernel_end: -relocate_new_kernel_size: - EXPORT(relocate_new_kernel_size) +EXPORT(relocate_new_kernel_size) PTR_WD relocate_new_kernel_end - relocate_new_kernel .size relocate_new_kernel_size, PTRSIZE diff --git a/arch/mips/loongson64/reset.c b/arch/mips/loongson64/reset.c index 758d5d26aaaa24e46e7bac7d7e040f2fb4c34240..e420800043b0897b70f0775a452233db6f50d810 100644 --- a/arch/mips/loongson64/reset.c +++ b/arch/mips/loongson64/reset.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -159,8 +160,17 @@ static int __init mips_reboot_setup(void) #ifdef CONFIG_KEXEC kexec_argv = kmalloc(KEXEC_ARGV_SIZE, GFP_KERNEL); + if (WARN_ON(!kexec_argv)) + return -ENOMEM; + kdump_argv = kmalloc(KEXEC_ARGV_SIZE, GFP_KERNEL); + if (WARN_ON(!kdump_argv)) + return -ENOMEM; + kexec_envp = kmalloc(KEXEC_ENVP_SIZE, GFP_KERNEL); + if (WARN_ON(!kexec_envp)) + return -ENOMEM; + fw_arg1 = KEXEC_ARGV_ADDR; memcpy(kexec_envp, (void *)fw_arg2, KEXEC_ENVP_SIZE); diff --git a/arch/mips/pic32/pic32mzda/early_console.c b/arch/mips/pic32/pic32mzda/early_console.c index 25372e62783b584456162362d6765aca7a73b829..3cd1b408fa1cb039f917f2d92e82fd00d8a44574 100644 --- a/arch/mips/pic32/pic32mzda/early_console.c +++ b/arch/mips/pic32/pic32mzda/early_console.c @@ -27,7 +27,7 @@ #define U_BRG(x) (UART_BASE(x) + 0x40) static void __iomem *uart_base; -static char console_port = -1; +static int console_port = -1; static int __init configure_uart_pins(int port) { @@ -47,7 +47,7 @@ static int __init configure_uart_pins(int port) return 0; } -static void __init configure_uart(char port, int baud) +static void __init configure_uart(int port, int baud) { u32 pbclk; @@ -60,7 +60,7 @@ static void __init configure_uart(char port, int baud) uart_base + PIC32_SET(U_STA(port))); } -static void __init setup_early_console(char port, int baud) +static void __init setup_early_console(int port, int baud) { if (configure_uart_pins(port)) return; @@ -130,16 +130,15 @@ static int __init get_baud_from_cmdline(char *arch_cmdline) return baud; } -void __init fw_init_early_console(char port) +void __init fw_init_early_console(void) { char *arch_cmdline = pic32_getcmdline(); - int baud = -1; + int baud, port; uart_base = ioremap(PIC32_BASE_UART, 0xc00); baud = get_baud_from_cmdline(arch_cmdline); - if (port == -1) - port = get_port_from_cmdline(arch_cmdline); + port = get_port_from_cmdline(arch_cmdline); if (port == -1) port = EARLY_CONSOLE_PORT; diff --git a/arch/mips/pic32/pic32mzda/init.c b/arch/mips/pic32/pic32mzda/init.c index 08c46cf122d73576c9998c861ebe1fcd3f4076f7..53b227a9074cc6caba948fe33762aaa80ee65e10 100644 --- a/arch/mips/pic32/pic32mzda/init.c +++ b/arch/mips/pic32/pic32mzda/init.c @@ -47,7 +47,7 @@ void __init plat_mem_setup(void) strscpy(arcs_cmdline, boot_command_line, COMMAND_LINE_SIZE); #ifdef CONFIG_EARLY_PRINTK - fw_init_early_console(-1); + fw_init_early_console(); #endif pic32_config_init(); } diff --git a/arch/nios2/boot/Makefile b/arch/nios2/boot/Makefile index 8c3ad76602f3e4a3aaa11f22cfcc38eb969c9989..29c11a06b750ad6f4bacd4cfb8c539df320df02f 100644 --- a/arch/nios2/boot/Makefile +++ b/arch/nios2/boot/Makefile @@ -20,7 +20,7 @@ $(obj)/vmlinux.bin: vmlinux FORCE $(obj)/vmlinux.gz: $(obj)/vmlinux.bin FORCE $(call if_changed,gzip) -$(obj)/vmImage: $(obj)/vmlinux.gz +$(obj)/vmImage: $(obj)/vmlinux.gz FORCE $(call if_changed,uimage) @$(kecho) 'Kernel: $@ is ready' diff --git a/arch/parisc/include/asm/hardware.h b/arch/parisc/include/asm/hardware.h index 9d3d7737c58b1214f4844395678e0ad77360be3a..a005ebc547793eabf654ecc2afcf0f94f9239313 100644 --- a/arch/parisc/include/asm/hardware.h +++ b/arch/parisc/include/asm/hardware.h @@ -10,12 +10,12 @@ #define SVERSION_ANY_ID PA_SVERSION_ANY_ID struct hp_hardware { - unsigned short hw_type:5; /* HPHW_xxx */ - unsigned short hversion; - unsigned long sversion:28; - unsigned short opt; - const char name[80]; /* The hardware description */ -}; + unsigned int hw_type:8; /* HPHW_xxx */ + unsigned int hversion:12; + unsigned int sversion:12; + unsigned char opt; + unsigned char name[59]; /* The hardware description */ +} __packed; struct parisc_device; diff --git a/arch/parisc/include/uapi/asm/pdc.h b/arch/parisc/include/uapi/asm/pdc.h index e794e143ec5f89f44849e82ffa9027a7fb660b35..7a90070136e8239da57cd6e791669bf6bf038735 100644 --- a/arch/parisc/include/uapi/asm/pdc.h +++ b/arch/parisc/include/uapi/asm/pdc.h @@ -363,20 +363,25 @@ #if !defined(__ASSEMBLY__) -/* flags of the device_path */ +/* flags for hardware_path */ #define PF_AUTOBOOT 0x80 #define PF_AUTOSEARCH 0x40 #define PF_TIMER 0x0F -struct device_path { /* page 1-69 */ - unsigned char flags; /* flags see above! */ - unsigned char bc[6]; /* bus converter routing info */ - unsigned char mod; - unsigned int layers[6];/* device-specific layer-info */ -} __attribute__((aligned(8))) ; +struct hardware_path { + unsigned char flags; /* see bit definitions below */ + signed char bc[6]; /* Bus Converter routing info to a specific */ + /* I/O adaptor (< 0 means none, > 63 resvd) */ + signed char mod; /* fixed field of specified module */ +}; + +struct pdc_module_path { /* page 1-69 */ + struct hardware_path path; + unsigned int layers[6]; /* device-specific info (ctlr #, unit # ...) */ +} __attribute__((aligned(8))); struct pz_device { - struct device_path dp; /* see above */ + struct pdc_module_path dp; /* see above */ /* struct iomod *hpa; */ unsigned int hpa; /* HPA base address */ /* char *spa; */ @@ -611,21 +616,6 @@ struct pdc_initiator { /* PDC_INITIATOR */ int mode; }; -struct hardware_path { - char flags; /* see bit definitions below */ - char bc[6]; /* Bus Converter routing info to a specific */ - /* I/O adaptor (< 0 means none, > 63 resvd) */ - char mod; /* fixed field of specified module */ -}; - -/* - * Device path specifications used by PDC. - */ -struct pdc_module_path { - struct hardware_path path; - unsigned int layers[6]; /* device-specific info (ctlr #, unit # ...) */ -}; - /* Only used on some pre-PA2.0 boxes */ struct pdc_memory_map { /* PDC_MEMORY_MAP */ unsigned long hpa; /* mod's register set address */ diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c index d126e78e101ae0b4d4222fca8feaa43e69afc103..e7ee0c0c91d3558dff03df65910510bda71a2c58 100644 --- a/arch/parisc/kernel/drivers.c +++ b/arch/parisc/kernel/drivers.c @@ -882,15 +882,13 @@ void __init walk_central_bus(void) &root); } -static void print_parisc_device(struct parisc_device *dev) +static __init void print_parisc_device(struct parisc_device *dev) { - char hw_path[64]; - static int count; + static int count __initdata; - print_pa_hwpath(dev, hw_path); - pr_info("%d. %s at %pap [%s] { %d, 0x%x, 0x%.3x, 0x%.5x }", - ++count, dev->name, &(dev->hpa.start), hw_path, dev->id.hw_type, - dev->id.hversion_rev, dev->id.hversion, dev->id.sversion); + pr_info("%d. %s at %pap { type:%d, hv:%#x, sv:%#x, rev:%#x }", + ++count, dev->name, &(dev->hpa.start), dev->id.hw_type, + dev->id.hversion, dev->id.sversion, dev->id.hversion_rev); if (dev->num_addrs) { int k; @@ -1079,7 +1077,7 @@ static __init int qemu_print_iodc_data(struct device *lin_dev, void *data) -static int print_one_device(struct device * dev, void * data) +static __init int print_one_device(struct device * dev, void * data) { struct parisc_device * pdev = to_parisc_device(dev); diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 699df27b0e2fc2f413c481e3e44ac22e2f134ce2..2ca5418457ed2102b56aef6d742530c1df1c7a63 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -147,6 +147,7 @@ config PPC select ARCH_MIGHT_HAVE_PC_SERIO select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT + select ARCH_SPLIT_ARG64 if PPC32 select ARCH_STACKWALK select ARCH_SUPPORTS_ATOMIC_RMW select ARCH_SUPPORTS_DEBUG_PAGEALLOC if PPC_BOOK3S || PPC_8xx || 40x @@ -285,7 +286,7 @@ config PPC # config PPC_LONG_DOUBLE_128 - depends on PPC64 + depends on PPC64 && ALTIVEC def_bool $(success,test "$(shell,echo __LONG_DOUBLE_128__ | $(CC) -E -P -)" = 1) config PPC_BARRIER_NOSPEC diff --git a/arch/powerpc/include/asm/interrupt.h b/arch/powerpc/include/asm/interrupt.h index 4745bb9998bd7fa902b8c9826132d17317cc44fc..6d8492b6e2b83394e199f19c53341f23a8e08e4d 100644 --- a/arch/powerpc/include/asm/interrupt.h +++ b/arch/powerpc/include/asm/interrupt.h @@ -602,6 +602,7 @@ ____##func(struct pt_regs *regs) /* kernel/traps.c */ DECLARE_INTERRUPT_HANDLER_NMI(system_reset_exception); #ifdef CONFIG_PPC_BOOK3S_64 +DECLARE_INTERRUPT_HANDLER_RAW(machine_check_early_boot); DECLARE_INTERRUPT_HANDLER_ASYNC(machine_check_exception_async); #endif DECLARE_INTERRUPT_HANDLER_NMI(machine_check_exception); diff --git a/arch/powerpc/include/asm/syscalls.h b/arch/powerpc/include/asm/syscalls.h index a1142496cd588569e99dc18c2f8fb4f5670d0bab..6d51b007b59e53ac9f13028ace431220d3a907c5 100644 --- a/arch/powerpc/include/asm/syscalls.h +++ b/arch/powerpc/include/asm/syscalls.h @@ -104,6 +104,13 @@ long sys_ppc_ftruncate64(unsigned int fd, u32 reg4, unsigned long len1, unsigned long len2); long sys_ppc32_fadvise64(int fd, u32 unused, u32 offset1, u32 offset2, size_t len, int advice); +long sys_ppc_sync_file_range2(int fd, unsigned int flags, + unsigned int offset1, + unsigned int offset2, + unsigned int nbytes1, + unsigned int nbytes2); +long sys_ppc_fallocate(int fd, int mode, u32 offset1, u32 offset2, + u32 len1, u32 len2); #endif #ifdef CONFIG_COMPAT long compat_sys_mmap2(unsigned long addr, size_t len, diff --git a/arch/powerpc/kernel/sys_ppc32.c b/arch/powerpc/kernel/sys_ppc32.c index 1ab4a4d95abafa50649f0848d41bcf09a1b847f0..d451a8229223a3625d2d77886f036afc4c668acc 100644 --- a/arch/powerpc/kernel/sys_ppc32.c +++ b/arch/powerpc/kernel/sys_ppc32.c @@ -112,7 +112,7 @@ PPC32_SYSCALL_DEFINE6(ppc32_fadvise64, advice); } -COMPAT_SYSCALL_DEFINE6(ppc_sync_file_range2, +PPC32_SYSCALL_DEFINE6(ppc_sync_file_range2, int, fd, unsigned int, flags, unsigned int, offset1, unsigned int, offset2, unsigned int, nbytes1, unsigned int, nbytes2) @@ -122,3 +122,14 @@ COMPAT_SYSCALL_DEFINE6(ppc_sync_file_range2, return ksys_sync_file_range(fd, offset, nbytes, flags); } + +#ifdef CONFIG_PPC32 +SYSCALL_DEFINE6(ppc_fallocate, + int, fd, int, mode, + u32, offset1, u32, offset2, u32, len1, u32, len2) +{ + return ksys_fallocate(fd, mode, + merge_64(offset1, offset2), + merge_64(len1, len2)); +} +#endif diff --git a/arch/powerpc/kernel/syscalls/syscall.tbl b/arch/powerpc/kernel/syscalls/syscall.tbl index e9e0df4f9a61a494a2344bd6589a02d29170179a..a0be127475b1f7614d79f3c85e950c5805e54cd8 100644 --- a/arch/powerpc/kernel/syscalls/syscall.tbl +++ b/arch/powerpc/kernel/syscalls/syscall.tbl @@ -394,8 +394,11 @@ 305 common signalfd sys_signalfd compat_sys_signalfd 306 common timerfd_create sys_timerfd_create 307 common eventfd sys_eventfd -308 common sync_file_range2 sys_sync_file_range2 compat_sys_ppc_sync_file_range2 -309 nospu fallocate sys_fallocate compat_sys_fallocate +308 32 sync_file_range2 sys_ppc_sync_file_range2 compat_sys_ppc_sync_file_range2 +308 64 sync_file_range2 sys_sync_file_range2 +308 spu sync_file_range2 sys_sync_file_range2 +309 32 fallocate sys_ppc_fallocate compat_sys_fallocate +309 64 fallocate sys_fallocate 310 nospu subpage_prot sys_subpage_prot 311 32 timerfd_settime sys_timerfd_settime32 311 64 timerfd_settime sys_timerfd_settime diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S index 7786e3ac7611cf8dcbce38ab1fe3b2f4c83c5df4..8c3862b4c259d6a2b89d40cfd712ce4d2f974179 100644 --- a/arch/powerpc/kernel/vmlinux.lds.S +++ b/arch/powerpc/kernel/vmlinux.lds.S @@ -142,7 +142,7 @@ SECTIONS #endif .data.rel.ro : AT(ADDR(.data.rel.ro) - LOAD_OFFSET) { - *(.data.rel.ro*) + *(.data.rel.ro .data.rel.ro.*) } .branch_lt : AT(ADDR(.branch_lt) - LOAD_OFFSET) { diff --git a/arch/powerpc/net/bpf_jit_comp32.c b/arch/powerpc/net/bpf_jit_comp32.c index 43f1c76d48cea9d8e1bb7260b43b3476bd356f32..a379b0ce19ffad4dc4e5140a0e50b940db3d708c 100644 --- a/arch/powerpc/net/bpf_jit_comp32.c +++ b/arch/powerpc/net/bpf_jit_comp32.c @@ -113,23 +113,19 @@ void bpf_jit_build_prologue(u32 *image, struct codegen_context *ctx) { int i; - /* First arg comes in as a 32 bits pointer. */ - EMIT(PPC_RAW_MR(bpf_to_ppc(BPF_REG_1), _R3)); - EMIT(PPC_RAW_LI(bpf_to_ppc(BPF_REG_1) - 1, 0)); + /* Initialize tail_call_cnt, to be skipped if we do tail calls. */ + EMIT(PPC_RAW_LI(_R4, 0)); + +#define BPF_TAILCALL_PROLOGUE_SIZE 4 + EMIT(PPC_RAW_STWU(_R1, _R1, -BPF_PPC_STACKFRAME(ctx))); - /* - * Initialize tail_call_cnt in stack frame if we do tail calls. - * Otherwise, put in NOPs so that it can be skipped when we are - * invoked through a tail call. - */ if (ctx->seen & SEEN_TAILCALL) - EMIT(PPC_RAW_STW(bpf_to_ppc(BPF_REG_1) - 1, _R1, - bpf_jit_stack_offsetof(ctx, BPF_PPC_TC))); - else - EMIT(PPC_RAW_NOP()); + EMIT(PPC_RAW_STW(_R4, _R1, bpf_jit_stack_offsetof(ctx, BPF_PPC_TC))); -#define BPF_TAILCALL_PROLOGUE_SIZE 16 + /* First arg comes in as a 32 bits pointer. */ + EMIT(PPC_RAW_MR(bpf_to_ppc(BPF_REG_1), _R3)); + EMIT(PPC_RAW_LI(bpf_to_ppc(BPF_REG_1) - 1, 0)); /* * We need a stack frame, but we don't necessarily need to @@ -170,24 +166,24 @@ static void bpf_jit_emit_common_epilogue(u32 *image, struct codegen_context *ctx for (i = BPF_PPC_NVR_MIN; i <= 31; i++) if (bpf_is_seen_register(ctx, i)) EMIT(PPC_RAW_LWZ(i, _R1, bpf_jit_stack_offsetof(ctx, i))); -} - -void bpf_jit_build_epilogue(u32 *image, struct codegen_context *ctx) -{ - EMIT(PPC_RAW_MR(_R3, bpf_to_ppc(BPF_REG_0))); - - bpf_jit_emit_common_epilogue(image, ctx); - - /* Tear down our stack frame */ if (ctx->seen & SEEN_FUNC) EMIT(PPC_RAW_LWZ(_R0, _R1, BPF_PPC_STACKFRAME(ctx) + PPC_LR_STKOFF)); + /* Tear down our stack frame */ EMIT(PPC_RAW_ADDI(_R1, _R1, BPF_PPC_STACKFRAME(ctx))); if (ctx->seen & SEEN_FUNC) EMIT(PPC_RAW_MTLR(_R0)); +} + +void bpf_jit_build_epilogue(u32 *image, struct codegen_context *ctx) +{ + EMIT(PPC_RAW_MR(_R3, bpf_to_ppc(BPF_REG_0))); + + bpf_jit_emit_common_epilogue(image, ctx); + EMIT(PPC_RAW_BLR()); } @@ -244,7 +240,6 @@ static int bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 o EMIT(PPC_RAW_RLWINM(_R3, b2p_index, 2, 0, 29)); EMIT(PPC_RAW_ADD(_R3, _R3, b2p_bpf_array)); EMIT(PPC_RAW_LWZ(_R3, _R3, offsetof(struct bpf_array, ptrs))); - EMIT(PPC_RAW_STW(_R0, _R1, bpf_jit_stack_offsetof(ctx, BPF_PPC_TC))); /* * if (prog == NULL) @@ -255,19 +250,14 @@ static int bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 o /* goto *(prog->bpf_func + prologue_size); */ EMIT(PPC_RAW_LWZ(_R3, _R3, offsetof(struct bpf_prog, bpf_func))); - - if (ctx->seen & SEEN_FUNC) - EMIT(PPC_RAW_LWZ(_R0, _R1, BPF_PPC_STACKFRAME(ctx) + PPC_LR_STKOFF)); - EMIT(PPC_RAW_ADDIC(_R3, _R3, BPF_TAILCALL_PROLOGUE_SIZE)); - - if (ctx->seen & SEEN_FUNC) - EMIT(PPC_RAW_MTLR(_R0)); - EMIT(PPC_RAW_MTCTR(_R3)); EMIT(PPC_RAW_MR(_R3, bpf_to_ppc(BPF_REG_1))); + /* Put tail_call_cnt in r4 */ + EMIT(PPC_RAW_MR(_R4, _R0)); + /* tear restore NVRs, ... */ bpf_jit_emit_common_epilogue(image, ctx); diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index fa78595a608993af50d20120db753da12d372b62..593cf09264d80a6afbe3704b176d44ff0f024929 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -317,9 +317,9 @@ config SMP config NR_CPUS int "Maximum number of CPUs (2-512)" depends on SMP - range 2 512 if !SBI_V01 - range 2 32 if SBI_V01 && 32BIT - range 2 64 if SBI_V01 && 64BIT + range 2 512 if !RISCV_SBI_V01 + range 2 32 if RISCV_SBI_V01 && 32BIT + range 2 64 if RISCV_SBI_V01 && 64BIT default "32" if 32BIT default "64" if 64BIT diff --git a/arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts b/arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts index ced0d4e479385aa54ae571be1a05c2bd519f0286..900a50526d77199930b30c6c2db1a859b30eecb8 100644 --- a/arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts +++ b/arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts @@ -3,6 +3,8 @@ #include "fu540-c000.dtsi" #include +#include +#include /* Clock frequency (in Hz) of the PCB crystal for rtcclk */ #define RTCCLK_FREQ 1000000 @@ -42,6 +44,42 @@ gpio-restart { compatible = "gpio-restart"; gpios = <&gpio 10 GPIO_ACTIVE_LOW>; }; + + led-controller { + compatible = "pwm-leds"; + + led-d1 { + pwms = <&pwm0 0 7812500 PWM_POLARITY_INVERTED>; + active-low; + color = ; + max-brightness = <255>; + label = "d1"; + }; + + led-d2 { + pwms = <&pwm0 1 7812500 PWM_POLARITY_INVERTED>; + active-low; + color = ; + max-brightness = <255>; + label = "d2"; + }; + + led-d3 { + pwms = <&pwm0 2 7812500 PWM_POLARITY_INVERTED>; + active-low; + color = ; + max-brightness = <255>; + label = "d3"; + }; + + led-d4 { + pwms = <&pwm0 3 7812500 PWM_POLARITY_INVERTED>; + active-low; + color = ; + max-brightness = <255>; + label = "d4"; + }; + }; }; &uart0 { diff --git a/arch/riscv/include/asm/asm.h b/arch/riscv/include/asm/asm.h index 1b471ff731788608a1715f6f25796483a5077da0..816e753de636d48f8bb6f08c8d321824b144ecaa 100644 --- a/arch/riscv/include/asm/asm.h +++ b/arch/riscv/include/asm/asm.h @@ -23,6 +23,7 @@ #define REG_L __REG_SEL(ld, lw) #define REG_S __REG_SEL(sd, sw) #define REG_SC __REG_SEL(sc.d, sc.w) +#define REG_AMOSWAP_AQ __REG_SEL(amoswap.d.aq, amoswap.w.aq) #define REG_ASM __REG_SEL(.dword, .word) #define SZREG __REG_SEL(8, 4) #define LGREG __REG_SEL(3, 2) diff --git a/arch/riscv/include/asm/efi.h b/arch/riscv/include/asm/efi.h index f74879a8f1ea17bc3476d5559b6a43b43241d2ea..e229d7be4b665d39a9dbf350901807b8ccc229b1 100644 --- a/arch/riscv/include/asm/efi.h +++ b/arch/riscv/include/asm/efi.h @@ -10,6 +10,7 @@ #include #include #include +#include #ifdef CONFIG_EFI extern void efi_init(void); @@ -20,7 +21,10 @@ extern void efi_init(void); int efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md); int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md); -#define arch_efi_call_virt_setup() efi_virtmap_load() +#define arch_efi_call_virt_setup() ({ \ + sync_kernel_mappings(efi_mm.pgd); \ + efi_virtmap_load(); \ + }) #define arch_efi_call_virt_teardown() efi_virtmap_unload() #define ARCH_EFI_IRQ_FLAGS_MASK (SR_IE | SR_SPIE) diff --git a/arch/riscv/include/asm/pgalloc.h b/arch/riscv/include/asm/pgalloc.h index 947f23d7b6af5e22a5928087cadc79abf0335966..59dc12b5b7e8fd76394a54387889a4f7af88d7f8 100644 --- a/arch/riscv/include/asm/pgalloc.h +++ b/arch/riscv/include/asm/pgalloc.h @@ -127,6 +127,13 @@ static inline void p4d_free(struct mm_struct *mm, p4d_t *p4d) #define __p4d_free_tlb(tlb, p4d, addr) p4d_free((tlb)->mm, p4d) #endif /* __PAGETABLE_PMD_FOLDED */ +static inline void sync_kernel_mappings(pgd_t *pgd) +{ + memcpy(pgd + USER_PTRS_PER_PGD, + init_mm.pgd + USER_PTRS_PER_PGD, + (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); +} + static inline pgd_t *pgd_alloc(struct mm_struct *mm) { pgd_t *pgd; @@ -135,9 +142,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm) if (likely(pgd != NULL)) { memset(pgd, 0, USER_PTRS_PER_PGD * sizeof(pgd_t)); /* Copy kernel mappings */ - memcpy(pgd + USER_PTRS_PER_PGD, - init_mm.pgd + USER_PTRS_PER_PGD, - (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); + sync_kernel_mappings(pgd); } return pgd; } diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h index 7ec936910a96e12d1994ceb2719eb98a2b0820d3..92ec2d9d7273f450a03d17ce7682d9b6f7d5c240 100644 --- a/arch/riscv/include/asm/pgtable.h +++ b/arch/riscv/include/asm/pgtable.h @@ -600,6 +600,7 @@ static inline int pmd_dirty(pmd_t pmd) return pte_dirty(pmd_pte(pmd)); } +#define pmd_young pmd_young static inline int pmd_young(pmd_t pmd) { return pte_young(pmd_pte(pmd)); diff --git a/arch/riscv/include/asm/smp.h b/arch/riscv/include/asm/smp.h index d3443be7eedc5f72937b039bc17485134a381a18..3831b638ecabcd16d0b3aea2d05af085efad17d2 100644 --- a/arch/riscv/include/asm/smp.h +++ b/arch/riscv/include/asm/smp.h @@ -50,6 +50,9 @@ void riscv_set_ipi_ops(const struct riscv_ipi_ops *ops); /* Clear IPI for current CPU */ void riscv_clear_ipi(void); +/* Check other CPUs stop or not */ +bool smp_crash_stop_failed(void); + /* Secondary hart entry */ asmlinkage void smp_callin(void); diff --git a/arch/riscv/kernel/entry.S b/arch/riscv/kernel/entry.S index b9eda3fcbd6d74e4e2b3aa6e10cc41f5d6359d60..186abd146eaffca06c6c3db10902c42ffa769dbc 100644 --- a/arch/riscv/kernel/entry.S +++ b/arch/riscv/kernel/entry.S @@ -404,6 +404,19 @@ handle_syscall_trace_exit: #ifdef CONFIG_VMAP_STACK handle_kernel_stack_overflow: + /* + * Takes the psuedo-spinlock for the shadow stack, in case multiple + * harts are concurrently overflowing their kernel stacks. We could + * store any value here, but since we're overflowing the kernel stack + * already we only have SP to use as a scratch register. So we just + * swap in the address of the spinlock, as that's definately non-zero. + * + * Pairs with a store_release in handle_bad_stack(). + */ +1: la sp, spin_shadow_stack + REG_AMOSWAP_AQ sp, sp, (sp) + bnez sp, 1b + la sp, shadow_stack addi sp, sp, SHADOW_OVERFLOW_STACK_SIZE diff --git a/arch/riscv/kernel/machine_kexec.c b/arch/riscv/kernel/machine_kexec.c index ee79e6839b8639128e3adc1ee44bd71059a151f6..2d139b724bc842d58c8a70879bf37e3b17fd26c0 100644 --- a/arch/riscv/kernel/machine_kexec.c +++ b/arch/riscv/kernel/machine_kexec.c @@ -15,6 +15,8 @@ #include /* For unreachable() */ #include /* For cpu_down() */ #include +#include +#include /* * kexec_image_info - Print received image details @@ -138,20 +140,35 @@ void machine_shutdown(void) #endif } -/* Override the weak function in kernel/panic.c */ -void crash_smp_send_stop(void) +static void machine_kexec_mask_interrupts(void) { - static int cpus_stopped; + unsigned int i; + struct irq_desc *desc; - /* - * This function can be called twice in panic path, but obviously - * we execute this only once. - */ - if (cpus_stopped) - return; + for_each_irq_desc(i, desc) { + struct irq_chip *chip; + int ret; + + chip = irq_desc_get_chip(desc); + if (!chip) + continue; + + /* + * First try to remove the active state. If this + * fails, try to EOI the interrupt. + */ + ret = irq_set_irqchip_state(i, IRQCHIP_STATE_ACTIVE, false); + + if (ret && irqd_irq_inprogress(&desc->irq_data) && + chip->irq_eoi) + chip->irq_eoi(&desc->irq_data); - smp_send_stop(); - cpus_stopped = 1; + if (chip->irq_mask) + chip->irq_mask(&desc->irq_data); + + if (chip->irq_disable && !irqd_irq_disabled(&desc->irq_data)) + chip->irq_disable(&desc->irq_data); + } } /* @@ -169,6 +186,8 @@ machine_crash_shutdown(struct pt_regs *regs) crash_smp_send_stop(); crash_save_cpu(regs, smp_processor_id()); + machine_kexec_mask_interrupts(); + pr_info("Starting crashdump kernel...\n"); } @@ -195,6 +214,11 @@ machine_kexec(struct kimage *image) void *control_code_buffer = page_address(image->control_code_page); riscv_kexec_method kexec_method = NULL; +#ifdef CONFIG_SMP + WARN(smp_crash_stop_failed(), + "Some CPUs may be stale, kdump will be unreliable.\n"); +#endif + if (image->type != KEXEC_TYPE_CRASH) kexec_method = control_code_buffer; else diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c index b0c63e8e867ef6979231d749ad98d2381d827a67..8955f2432c2d844c7e37b6ee69eea95ceffd7076 100644 --- a/arch/riscv/kernel/process.c +++ b/arch/riscv/kernel/process.c @@ -164,6 +164,8 @@ int copy_thread(struct task_struct *p, const struct kernel_clone_args *args) unsigned long tls = args->tls; struct pt_regs *childregs = task_pt_regs(p); + memset(&p->thread.s, 0, sizeof(p->thread.s)); + /* p->thread holds context to be restored by __switch_to() */ if (unlikely(args->fn)) { /* Kernel thread */ diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c index ad76bb59b0590d8e67fa2825d69de741de7f8f31..86acd690d529375df63a7d818ad9ffedaf9c6cee 100644 --- a/arch/riscv/kernel/setup.c +++ b/arch/riscv/kernel/setup.c @@ -283,6 +283,7 @@ void __init setup_arch(char **cmdline_p) else pr_err("No DTB found in kernel mappings\n"); #endif + early_init_fdt_scan_reserved_mem(); misc_mem_init(); init_resources(); @@ -321,10 +322,11 @@ subsys_initcall(topology_init); void free_initmem(void) { - if (IS_ENABLED(CONFIG_STRICT_KERNEL_RWX)) - set_kernel_memory(lm_alias(__init_begin), lm_alias(__init_end), - IS_ENABLED(CONFIG_64BIT) ? - set_memory_rw : set_memory_rw_nx); + if (IS_ENABLED(CONFIG_STRICT_KERNEL_RWX)) { + set_kernel_memory(lm_alias(__init_begin), lm_alias(__init_end), set_memory_rw_nx); + if (IS_ENABLED(CONFIG_64BIT)) + set_kernel_memory(__init_begin, __init_end, set_memory_nx); + } free_initmem_default(POISON_FREE_INITMEM); } diff --git a/arch/riscv/kernel/smp.c b/arch/riscv/kernel/smp.c index 760a64518c585e7409d557473ae5c5432f4c0cba..8c3b59f1f9b802947a39099cf94fb12702e64229 100644 --- a/arch/riscv/kernel/smp.c +++ b/arch/riscv/kernel/smp.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -22,11 +23,13 @@ #include #include #include +#include enum ipi_message_type { IPI_RESCHEDULE, IPI_CALL_FUNC, IPI_CPU_STOP, + IPI_CPU_CRASH_STOP, IPI_IRQ_WORK, IPI_TIMER, IPI_MAX @@ -71,6 +74,32 @@ static void ipi_stop(void) wait_for_interrupt(); } +#ifdef CONFIG_KEXEC_CORE +static atomic_t waiting_for_crash_ipi = ATOMIC_INIT(0); + +static inline void ipi_cpu_crash_stop(unsigned int cpu, struct pt_regs *regs) +{ + crash_save_cpu(regs, cpu); + + atomic_dec(&waiting_for_crash_ipi); + + local_irq_disable(); + +#ifdef CONFIG_HOTPLUG_CPU + if (cpu_has_hotplug(cpu)) + cpu_ops[cpu]->cpu_stop(); +#endif + + for(;;) + wait_for_interrupt(); +} +#else +static inline void ipi_cpu_crash_stop(unsigned int cpu, struct pt_regs *regs) +{ + unreachable(); +} +#endif + static const struct riscv_ipi_ops *ipi_ops __ro_after_init; void riscv_set_ipi_ops(const struct riscv_ipi_ops *ops) @@ -124,8 +153,9 @@ void arch_irq_work_raise(void) void handle_IPI(struct pt_regs *regs) { - unsigned long *pending_ipis = &ipi_data[smp_processor_id()].bits; - unsigned long *stats = ipi_data[smp_processor_id()].stats; + unsigned int cpu = smp_processor_id(); + unsigned long *pending_ipis = &ipi_data[cpu].bits; + unsigned long *stats = ipi_data[cpu].stats; riscv_clear_ipi(); @@ -154,6 +184,10 @@ void handle_IPI(struct pt_regs *regs) ipi_stop(); } + if (ops & (1 << IPI_CPU_CRASH_STOP)) { + ipi_cpu_crash_stop(cpu, get_irq_regs()); + } + if (ops & (1 << IPI_IRQ_WORK)) { stats[IPI_IRQ_WORK]++; irq_work_run(); @@ -176,6 +210,7 @@ static const char * const ipi_names[] = { [IPI_RESCHEDULE] = "Rescheduling interrupts", [IPI_CALL_FUNC] = "Function call interrupts", [IPI_CPU_STOP] = "CPU stop interrupts", + [IPI_CPU_CRASH_STOP] = "CPU stop (for crash dump) interrupts", [IPI_IRQ_WORK] = "IRQ work interrupts", [IPI_TIMER] = "Timer broadcast interrupts", }; @@ -235,6 +270,64 @@ void smp_send_stop(void) cpumask_pr_args(cpu_online_mask)); } +#ifdef CONFIG_KEXEC_CORE +/* + * The number of CPUs online, not counting this CPU (which may not be + * fully online and so not counted in num_online_cpus()). + */ +static inline unsigned int num_other_online_cpus(void) +{ + unsigned int this_cpu_online = cpu_online(smp_processor_id()); + + return num_online_cpus() - this_cpu_online; +} + +void crash_smp_send_stop(void) +{ + static int cpus_stopped; + cpumask_t mask; + unsigned long timeout; + + /* + * This function can be called twice in panic path, but obviously + * we execute this only once. + */ + if (cpus_stopped) + return; + + cpus_stopped = 1; + + /* + * If this cpu is the only one alive at this point in time, online or + * not, there are no stop messages to be sent around, so just back out. + */ + if (num_other_online_cpus() == 0) + return; + + cpumask_copy(&mask, cpu_online_mask); + cpumask_clear_cpu(smp_processor_id(), &mask); + + atomic_set(&waiting_for_crash_ipi, num_other_online_cpus()); + + pr_crit("SMP: stopping secondary CPUs\n"); + send_ipi_mask(&mask, IPI_CPU_CRASH_STOP); + + /* Wait up to one second for other CPUs to stop */ + timeout = USEC_PER_SEC; + while ((atomic_read(&waiting_for_crash_ipi) > 0) && timeout--) + udelay(1); + + if (atomic_read(&waiting_for_crash_ipi) > 0) + pr_warn("SMP: failed to stop secondary CPUs %*pbl\n", + cpumask_pr_args(&mask)); +} + +bool smp_crash_stop_failed(void) +{ + return (atomic_read(&waiting_for_crash_ipi) > 0); +} +#endif + void smp_send_reschedule(int cpu) { send_ipi_single(cpu, IPI_RESCHEDULE); diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c index f3e96d60a2ff384a4ff7b342ba8daa45e22aaff1..7abd8e4c4df63e29ec4b88ca31900e0bce377483 100644 --- a/arch/riscv/kernel/traps.c +++ b/arch/riscv/kernel/traps.c @@ -221,11 +221,29 @@ asmlinkage unsigned long get_overflow_stack(void) OVERFLOW_STACK_SIZE; } +/* + * A pseudo spinlock to protect the shadow stack from being used by multiple + * harts concurrently. This isn't a real spinlock because the lock side must + * be taken without a valid stack and only a single register, it's only taken + * while in the process of panicing anyway so the performance and error + * checking a proper spinlock gives us doesn't matter. + */ +unsigned long spin_shadow_stack; + asmlinkage void handle_bad_stack(struct pt_regs *regs) { unsigned long tsk_stk = (unsigned long)current->stack; unsigned long ovf_stk = (unsigned long)this_cpu_ptr(overflow_stack); + /* + * We're done with the shadow stack by this point, as we're on the + * overflow stack. Tell any other concurrent overflowing harts that + * they can proceed with panicing by releasing the pseudo-spinlock. + * + * This pairs with an amoswap.aq in handle_kernel_stack_overflow. + */ + smp_store_release(&spin_shadow_stack, 0); + console_verbose(); pr_emerg("Insufficient stack space to handle exception!\n"); diff --git a/arch/riscv/kernel/vdso/Makefile b/arch/riscv/kernel/vdso/Makefile index f2e065671e4d5e45f2152ee62173c2fb8e6fef1a..06e6b27f3bcc938ba336f32e51de459fd6c15ad2 100644 --- a/arch/riscv/kernel/vdso/Makefile +++ b/arch/riscv/kernel/vdso/Makefile @@ -17,6 +17,7 @@ vdso-syms += flush_icache obj-vdso = $(patsubst %, %.o, $(vdso-syms)) note.o ccflags-y := -fno-stack-protector +ccflags-y += -DDISABLE_BRANCH_PROFILING ifneq ($(c-gettimeofday-y),) CFLAGS_vgettimeofday.o += -fPIC -include $(c-gettimeofday-y) @@ -28,9 +29,12 @@ obj-vdso := $(addprefix $(obj)/, $(obj-vdso)) obj-y += vdso.o CPPFLAGS_vdso.lds += -P -C -U$(ARCH) +ifneq ($(filter vgettimeofday, $(vdso-syms)),) +CPPFLAGS_vdso.lds += -DHAS_VGETTIMEOFDAY +endif # Disable -pg to prevent insert call site -CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os +CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) # Disable profiling and instrumentation for VDSO code GCOV_PROFILE := n diff --git a/arch/riscv/kernel/vdso/vdso.lds.S b/arch/riscv/kernel/vdso/vdso.lds.S index 01d94aae5bf513221144bd08831f449b330d8648..150b1a572e6190e94d5353d024c5dec36c7e5ffb 100644 --- a/arch/riscv/kernel/vdso/vdso.lds.S +++ b/arch/riscv/kernel/vdso/vdso.lds.S @@ -68,9 +68,11 @@ VERSION LINUX_4.15 { global: __vdso_rt_sigreturn; +#ifdef HAS_VGETTIMEOFDAY __vdso_gettimeofday; __vdso_clock_gettime; __vdso_clock_getres; +#endif __vdso_getcpu; __vdso_flush_icache; local: *; diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index b56a0a75533fe3993a25fc10b833b2c1b7df523a..50a1b6edd491823517fd9c31948c3a9e2d4d7caa 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -262,7 +262,6 @@ static void __init setup_bootmem(void) memblock_reserve(dtb_early_pa, fdt_totalsize(dtb_early_va)); } - early_init_fdt_scan_reserved_mem(); dma_contiguous_reserve(dma32_phys_limit); if (IS_ENABLED(CONFIG_64BIT)) hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT); diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 318fce77601d357f84358c4200cd8492ef9513a7..de575af02ffea3b2c31bc488f8931fa41773a09a 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -568,8 +568,7 @@ config EXPOLINE_FULL endchoice config RELOCATABLE - bool "Build a relocatable kernel" - default y + def_bool y help This builds a kernel image that retains relocation information so it can be loaded at an arbitrary address. @@ -578,10 +577,11 @@ config RELOCATABLE bootup process. The relocations make the kernel image about 15% larger (compressed 10%), but are discarded at runtime. + Note: this option exists only for documentation purposes, please do + not remove it. config RANDOMIZE_BASE bool "Randomize the address of the kernel image (KASLR)" - depends on RELOCATABLE default y help In support of Kernel Address Space Layout Randomization (KASLR), diff --git a/arch/s390/Makefile b/arch/s390/Makefile index de6d8b2ea4d8f86e0551bb762893df4228553634..b3235ab0ace83993dc62cab43e46c9aa326bed46 100644 --- a/arch/s390/Makefile +++ b/arch/s390/Makefile @@ -14,10 +14,8 @@ KBUILD_AFLAGS_MODULE += -fPIC KBUILD_CFLAGS_MODULE += -fPIC KBUILD_AFLAGS += -m64 KBUILD_CFLAGS += -m64 -ifeq ($(CONFIG_RELOCATABLE),y) KBUILD_CFLAGS += -fPIE LDFLAGS_vmlinux := -pie -endif aflags_dwarf := -Wa,-gdwarf-2 KBUILD_AFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -D__ASSEMBLY__ ifndef CONFIG_AS_IS_LLVM diff --git a/arch/s390/boot/Makefile b/arch/s390/boot/Makefile index 883357a211a3bd67ebe771bbc51d1d16582de50a..d52c3e2e16bc5ac41ccc753851e80184f335223f 100644 --- a/arch/s390/boot/Makefile +++ b/arch/s390/boot/Makefile @@ -37,9 +37,8 @@ CFLAGS_sclp_early_core.o += -I$(srctree)/drivers/s390/char obj-y := head.o als.o startup.o mem_detect.o ipl_parm.o ipl_report.o obj-y += string.o ebcdic.o sclp_early_core.o mem.o ipl_vmparm.o cmdline.o -obj-y += version.o pgm_check_info.o ctype.o ipl_data.o +obj-y += version.o pgm_check_info.o ctype.o ipl_data.o machine_kexec_reloc.o obj-$(findstring y, $(CONFIG_PROTECTED_VIRTUALIZATION_GUEST) $(CONFIG_PGSTE)) += uv.o -obj-$(CONFIG_RELOCATABLE) += machine_kexec_reloc.o obj-$(CONFIG_RANDOMIZE_BASE) += kaslr.o obj-y += $(if $(CONFIG_KERNEL_UNCOMPRESSED),,decompressor.o) info.o obj-$(CONFIG_KERNEL_ZSTD) += clz_ctz.o diff --git a/arch/s390/boot/startup.c b/arch/s390/boot/startup.c index 6e7f01ca53e6da2014b1e881cc2d720ae2b2c1fd..47ca3264c02308d687128844b433cdd9c6436d8d 100644 --- a/arch/s390/boot/startup.c +++ b/arch/s390/boot/startup.c @@ -291,8 +291,7 @@ void startup_kernel(void) clear_bss_section(); copy_bootdata(); - if (IS_ENABLED(CONFIG_RELOCATABLE)) - handle_relocs(__kaslr_offset); + handle_relocs(__kaslr_offset); if (__kaslr_offset) { /* diff --git a/arch/s390/configs/btf.config b/arch/s390/configs/btf.config new file mode 100644 index 0000000000000000000000000000000000000000..39227b4511aff8f781d8aa72657fce051a9d981f --- /dev/null +++ b/arch/s390/configs/btf.config @@ -0,0 +1 @@ +CONFIG_DEBUG_INFO_BTF=y diff --git a/arch/s390/configs/debug_defconfig b/arch/s390/configs/debug_defconfig index 2a827002934bc65466bb42e36a19736c1b2ed814..63807bd0b5364614ddabe49816c450c270de8f85 100644 --- a/arch/s390/configs/debug_defconfig +++ b/arch/s390/configs/debug_defconfig @@ -723,52 +723,42 @@ CONFIG_CRYPTO_ECDSA=m CONFIG_CRYPTO_ECRDSA=m CONFIG_CRYPTO_SM2=m CONFIG_CRYPTO_CURVE25519=m -CONFIG_CRYPTO_GCM=y -CONFIG_CRYPTO_CHACHA20POLY1305=m -CONFIG_CRYPTO_AEGIS128=m -CONFIG_CRYPTO_SEQIV=y -CONFIG_CRYPTO_CFB=m -CONFIG_CRYPTO_LRW=m -CONFIG_CRYPTO_PCBC=m -CONFIG_CRYPTO_KEYWRAP=m -CONFIG_CRYPTO_ADIANTUM=m -CONFIG_CRYPTO_HCTR2=m -CONFIG_CRYPTO_XCBC=m -CONFIG_CRYPTO_VMAC=m -CONFIG_CRYPTO_CRC32=m -CONFIG_CRYPTO_CRC32_S390=y -CONFIG_CRYPTO_MD4=m -CONFIG_CRYPTO_MD5=y -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_RMD160=m -CONFIG_CRYPTO_SHA512_S390=m -CONFIG_CRYPTO_SHA1_S390=m -CONFIG_CRYPTO_SHA256_S390=m -CONFIG_CRYPTO_SHA3=m -CONFIG_CRYPTO_SHA3_256_S390=m -CONFIG_CRYPTO_SHA3_512_S390=m -CONFIG_CRYPTO_SM3_GENERIC=m -CONFIG_CRYPTO_WP512=m -CONFIG_CRYPTO_GHASH_S390=m CONFIG_CRYPTO_AES_TI=m -CONFIG_CRYPTO_AES_S390=m CONFIG_CRYPTO_ANUBIS=m -CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_ARIA=m CONFIG_CRYPTO_BLOWFISH=m CONFIG_CRYPTO_CAMELLIA=m CONFIG_CRYPTO_CAST5=m CONFIG_CRYPTO_CAST6=m CONFIG_CRYPTO_DES=m -CONFIG_CRYPTO_DES_S390=m CONFIG_CRYPTO_FCRYPT=m CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_CHACHA_S390=m CONFIG_CRYPTO_SEED=m -CONFIG_CRYPTO_ARIA=m CONFIG_CRYPTO_SERPENT=m CONFIG_CRYPTO_SM4_GENERIC=m CONFIG_CRYPTO_TEA=m CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_ADIANTUM=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_CFB=m +CONFIG_CRYPTO_HCTR2=m +CONFIG_CRYPTO_KEYWRAP=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_AEGIS128=m +CONFIG_CRYPTO_CHACHA20POLY1305=m +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_SEQIV=y +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_SHA3=m +CONFIG_CRYPTO_SM3_GENERIC=m +CONFIG_CRYPTO_VMAC=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_CRC32=m CONFIG_CRYPTO_842=m CONFIG_CRYPTO_LZ4=m CONFIG_CRYPTO_LZ4HC=m @@ -779,6 +769,16 @@ CONFIG_CRYPTO_USER_API_SKCIPHER=m CONFIG_CRYPTO_USER_API_RNG=m CONFIG_CRYPTO_USER_API_AEAD=m CONFIG_CRYPTO_STATS=y +CONFIG_CRYPTO_CRC32_S390=y +CONFIG_CRYPTO_SHA512_S390=m +CONFIG_CRYPTO_SHA1_S390=m +CONFIG_CRYPTO_SHA256_S390=m +CONFIG_CRYPTO_SHA3_256_S390=m +CONFIG_CRYPTO_SHA3_512_S390=m +CONFIG_CRYPTO_GHASH_S390=m +CONFIG_CRYPTO_AES_S390=m +CONFIG_CRYPTO_DES_S390=m +CONFIG_CRYPTO_CHACHA_S390=m CONFIG_ZCRYPT=m CONFIG_PKEY=m CONFIG_CRYPTO_PAES_S390=m @@ -797,7 +797,6 @@ CONFIG_CMA_SIZE_MBYTES=0 CONFIG_PRINTK_TIME=y CONFIG_DYNAMIC_DEBUG=y CONFIG_DEBUG_INFO_DWARF4=y -CONFIG_DEBUG_INFO_BTF=y CONFIG_GDB_SCRIPTS=y CONFIG_HEADERS_INSTALL=y CONFIG_DEBUG_SECTION_MISMATCH=y diff --git a/arch/s390/configs/defconfig b/arch/s390/configs/defconfig index fb780e80e4c8f72dd9203489c0921a1edbd23430..4f9a982474423d41e04fe3f5a6d605b6cdbef203 100644 --- a/arch/s390/configs/defconfig +++ b/arch/s390/configs/defconfig @@ -707,53 +707,43 @@ CONFIG_CRYPTO_ECDSA=m CONFIG_CRYPTO_ECRDSA=m CONFIG_CRYPTO_SM2=m CONFIG_CRYPTO_CURVE25519=m -CONFIG_CRYPTO_GCM=y -CONFIG_CRYPTO_CHACHA20POLY1305=m -CONFIG_CRYPTO_AEGIS128=m -CONFIG_CRYPTO_SEQIV=y -CONFIG_CRYPTO_CFB=m -CONFIG_CRYPTO_LRW=m -CONFIG_CRYPTO_OFB=m -CONFIG_CRYPTO_PCBC=m -CONFIG_CRYPTO_KEYWRAP=m -CONFIG_CRYPTO_ADIANTUM=m -CONFIG_CRYPTO_HCTR2=m -CONFIG_CRYPTO_XCBC=m -CONFIG_CRYPTO_VMAC=m -CONFIG_CRYPTO_CRC32=m -CONFIG_CRYPTO_CRC32_S390=y -CONFIG_CRYPTO_MD4=m -CONFIG_CRYPTO_MD5=y -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_RMD160=m -CONFIG_CRYPTO_SHA512_S390=m -CONFIG_CRYPTO_SHA1_S390=m -CONFIG_CRYPTO_SHA256_S390=m -CONFIG_CRYPTO_SHA3=m -CONFIG_CRYPTO_SHA3_256_S390=m -CONFIG_CRYPTO_SHA3_512_S390=m -CONFIG_CRYPTO_SM3_GENERIC=m -CONFIG_CRYPTO_WP512=m -CONFIG_CRYPTO_GHASH_S390=m CONFIG_CRYPTO_AES_TI=m -CONFIG_CRYPTO_AES_S390=m CONFIG_CRYPTO_ANUBIS=m -CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_ARIA=m CONFIG_CRYPTO_BLOWFISH=m CONFIG_CRYPTO_CAMELLIA=m CONFIG_CRYPTO_CAST5=m CONFIG_CRYPTO_CAST6=m CONFIG_CRYPTO_DES=m -CONFIG_CRYPTO_DES_S390=m CONFIG_CRYPTO_FCRYPT=m CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_CHACHA_S390=m CONFIG_CRYPTO_SEED=m -CONFIG_CRYPTO_ARIA=m CONFIG_CRYPTO_SERPENT=m CONFIG_CRYPTO_SM4_GENERIC=m CONFIG_CRYPTO_TEA=m CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_ADIANTUM=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_CFB=m +CONFIG_CRYPTO_HCTR2=m +CONFIG_CRYPTO_KEYWRAP=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_OFB=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_AEGIS128=m +CONFIG_CRYPTO_CHACHA20POLY1305=m +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_SEQIV=y +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_SHA3=m +CONFIG_CRYPTO_SM3_GENERIC=m +CONFIG_CRYPTO_VMAC=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_CRC32=m CONFIG_CRYPTO_842=m CONFIG_CRYPTO_LZ4=m CONFIG_CRYPTO_LZ4HC=m @@ -764,6 +754,16 @@ CONFIG_CRYPTO_USER_API_SKCIPHER=m CONFIG_CRYPTO_USER_API_RNG=m CONFIG_CRYPTO_USER_API_AEAD=m CONFIG_CRYPTO_STATS=y +CONFIG_CRYPTO_CRC32_S390=y +CONFIG_CRYPTO_SHA512_S390=m +CONFIG_CRYPTO_SHA1_S390=m +CONFIG_CRYPTO_SHA256_S390=m +CONFIG_CRYPTO_SHA3_256_S390=m +CONFIG_CRYPTO_SHA3_512_S390=m +CONFIG_CRYPTO_GHASH_S390=m +CONFIG_CRYPTO_AES_S390=m +CONFIG_CRYPTO_DES_S390=m +CONFIG_CRYPTO_CHACHA_S390=m CONFIG_ZCRYPT=m CONFIG_PKEY=m CONFIG_CRYPTO_PAES_S390=m @@ -781,7 +781,6 @@ CONFIG_CMA_SIZE_MBYTES=0 CONFIG_PRINTK_TIME=y CONFIG_DYNAMIC_DEBUG=y CONFIG_DEBUG_INFO_DWARF4=y -CONFIG_DEBUG_INFO_BTF=y CONFIG_GDB_SCRIPTS=y CONFIG_DEBUG_SECTION_MISMATCH=y CONFIG_MAGIC_SYSRQ=y diff --git a/arch/s390/configs/kasan.config b/arch/s390/configs/kasan.config new file mode 100644 index 0000000000000000000000000000000000000000..700a8b25c3ffc057f59e099590574ddf15ce0bd1 --- /dev/null +++ b/arch/s390/configs/kasan.config @@ -0,0 +1,3 @@ +CONFIG_KASAN=y +CONFIG_KASAN_INLINE=y +CONFIG_KASAN_VMALLOC=y diff --git a/arch/s390/configs/zfcpdump_defconfig b/arch/s390/configs/zfcpdump_defconfig index a5576b8d4081e959bc44b3fe23a435cf1d76dfb5..5fe9948be6442e46b6502dd548e19731fb4876ea 100644 --- a/arch/s390/configs/zfcpdump_defconfig +++ b/arch/s390/configs/zfcpdump_defconfig @@ -74,7 +74,6 @@ CONFIG_PRINTK_TIME=y # CONFIG_SYMBOLIC_ERRNAME is not set CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_INFO_DWARF4=y -CONFIG_DEBUG_INFO_BTF=y CONFIG_DEBUG_FS=y CONFIG_PANIC_ON_OOPS=y # CONFIG_SCHED_DEBUG is not set diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index f1cb9391190db93f051602be1ac3834492fe5278..11e901286414c5bc6e941d8d8d3972690fa576e6 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h @@ -763,6 +763,7 @@ static inline int pmd_dirty(pmd_t pmd) return (pmd_val(pmd) & _SEGMENT_ENTRY_DIRTY) != 0; } +#define pmd_young pmd_young static inline int pmd_young(pmd_t pmd) { return (pmd_val(pmd) & _SEGMENT_ENTRY_YOUNG) != 0; diff --git a/arch/s390/include/asm/processor.h b/arch/s390/include/asm/processor.h index 87be3e855bf72703f28d97f0d118bf6bd75f23bd..c907f747d2a04055f127f485c9574a3aed5d3834 100644 --- a/arch/s390/include/asm/processor.h +++ b/arch/s390/include/asm/processor.h @@ -199,7 +199,16 @@ unsigned long __get_wchan(struct task_struct *p); /* Has task runtime instrumentation enabled ? */ #define is_ri_task(tsk) (!!(tsk)->thread.ri_cb) -register unsigned long current_stack_pointer asm("r15"); +/* avoid using global register due to gcc bug in versions < 8.4 */ +#define current_stack_pointer (__current_stack_pointer()) + +static __always_inline unsigned long __current_stack_pointer(void) +{ + unsigned long sp; + + asm volatile("lgr %0,15" : "=d" (sp)); + return sp; +} static __always_inline unsigned short stap(void) { diff --git a/arch/s390/kernel/crash_dump.c b/arch/s390/kernel/crash_dump.c index dd74fe664ed12e0e90619c783b2b4c840390c474..e4ef67e4da0a8c78fa6e01b29a57fc9c59732abe 100644 --- a/arch/s390/kernel/crash_dump.c +++ b/arch/s390/kernel/crash_dump.c @@ -46,7 +46,7 @@ struct save_area { u64 fprs[16]; u32 fpc; u32 prefix; - u64 todpreg; + u32 todpreg; u64 timer; u64 todcmp; u64 vxrs_low[16]; diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 45d4b8182b0734c27e70e8582d043b8ffba7b554..bc491a73815c34803d56060d798f5620446bba8b 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c @@ -1207,6 +1207,8 @@ static int kvm_s390_vm_get_migration(struct kvm *kvm, return 0; } +static void __kvm_s390_set_tod_clock(struct kvm *kvm, const struct kvm_s390_vm_tod_clock *gtod); + static int kvm_s390_set_tod_ext(struct kvm *kvm, struct kvm_device_attr *attr) { struct kvm_s390_vm_tod_clock gtod; @@ -1216,7 +1218,7 @@ static int kvm_s390_set_tod_ext(struct kvm *kvm, struct kvm_device_attr *attr) if (!test_kvm_facility(kvm, 139) && gtod.epoch_idx) return -EINVAL; - kvm_s390_set_tod_clock(kvm, >od); + __kvm_s390_set_tod_clock(kvm, >od); VM_EVENT(kvm, 3, "SET: TOD extension: 0x%x, TOD base: 0x%llx", gtod.epoch_idx, gtod.tod); @@ -1247,7 +1249,7 @@ static int kvm_s390_set_tod_low(struct kvm *kvm, struct kvm_device_attr *attr) sizeof(gtod.tod))) return -EFAULT; - kvm_s390_set_tod_clock(kvm, >od); + __kvm_s390_set_tod_clock(kvm, >od); VM_EVENT(kvm, 3, "SET: TOD base: 0x%llx", gtod.tod); return 0; } @@ -1259,6 +1261,16 @@ static int kvm_s390_set_tod(struct kvm *kvm, struct kvm_device_attr *attr) if (attr->flags) return -EINVAL; + mutex_lock(&kvm->lock); + /* + * For protected guests, the TOD is managed by the ultravisor, so trying + * to change it will never bring the expected results. + */ + if (kvm_s390_pv_is_protected(kvm)) { + ret = -EOPNOTSUPP; + goto out_unlock; + } + switch (attr->attr) { case KVM_S390_VM_TOD_EXT: ret = kvm_s390_set_tod_ext(kvm, attr); @@ -1273,6 +1285,9 @@ static int kvm_s390_set_tod(struct kvm *kvm, struct kvm_device_attr *attr) ret = -ENXIO; break; } + +out_unlock: + mutex_unlock(&kvm->lock); return ret; } @@ -4377,13 +4392,6 @@ static void __kvm_s390_set_tod_clock(struct kvm *kvm, const struct kvm_s390_vm_t preempt_enable(); } -void kvm_s390_set_tod_clock(struct kvm *kvm, const struct kvm_s390_vm_tod_clock *gtod) -{ - mutex_lock(&kvm->lock); - __kvm_s390_set_tod_clock(kvm, gtod); - mutex_unlock(&kvm->lock); -} - int kvm_s390_try_set_tod_clock(struct kvm *kvm, const struct kvm_s390_vm_tod_clock *gtod) { if (!mutex_trylock(&kvm->lock)) diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h index f6fd668f887e8b819be9ca67cba0870290325fba..4755492dfabc65037608b84f2fdba29b4e8f66f6 100644 --- a/arch/s390/kvm/kvm-s390.h +++ b/arch/s390/kvm/kvm-s390.h @@ -363,7 +363,6 @@ int kvm_s390_handle_sigp(struct kvm_vcpu *vcpu); int kvm_s390_handle_sigp_pei(struct kvm_vcpu *vcpu); /* implemented in kvm-s390.c */ -void kvm_s390_set_tod_clock(struct kvm *kvm, const struct kvm_s390_vm_tod_clock *gtod); int kvm_s390_try_set_tod_clock(struct kvm *kvm, const struct kvm_s390_vm_tod_clock *gtod); long kvm_arch_fault_in_page(struct kvm_vcpu *vcpu, gpa_t gpa, int writable); int kvm_s390_store_status_unloaded(struct kvm_vcpu *vcpu, unsigned long addr); diff --git a/arch/s390/kvm/pci.c b/arch/s390/kvm/pci.c index c50c1645c0aeca81dab6dc2aa9b61b91604adda2..ded1af2ddae99b2321a377ae7d6280c490d138a7 100644 --- a/arch/s390/kvm/pci.c +++ b/arch/s390/kvm/pci.c @@ -126,7 +126,7 @@ int kvm_s390_pci_aen_init(u8 nisc) return -EPERM; mutex_lock(&aift->aift_lock); - aift->kzdev = kcalloc(ZPCI_NR_DEVICES, sizeof(struct kvm_zdev), + aift->kzdev = kcalloc(ZPCI_NR_DEVICES, sizeof(struct kvm_zdev *), GFP_KERNEL); if (!aift->kzdev) { rc = -ENOMEM; diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h index a779418ceba9c098dc31e466037e414616c6a51e..3bc9736bddb1617b4cd06b160c0213d69deef003 100644 --- a/arch/sparc/include/asm/pgtable_64.h +++ b/arch/sparc/include/asm/pgtable_64.h @@ -693,6 +693,7 @@ static inline unsigned long pmd_dirty(pmd_t pmd) return pte_dirty(pte); } +#define pmd_young pmd_young static inline unsigned long pmd_young(pmd_t pmd) { pte_t pte = __pte(pmd_val(pmd)); diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile index 9860ca5979f8aa508ced8ff09db0632c2e3f7dcc..9e38ffaadb5d972e640520e4985718b23b0a76ba 100644 --- a/arch/x86/boot/Makefile +++ b/arch/x86/boot/Makefile @@ -83,7 +83,7 @@ cmd_image = $(obj)/tools/build $(obj)/setup.bin $(obj)/vmlinux.bin \ $(obj)/bzImage: $(obj)/setup.bin $(obj)/vmlinux.bin $(obj)/tools/build FORCE $(call if_changed,image) - @$(kecho) 'Kernel: $@ is ready' ' (#'`cat .version`')' + @$(kecho) 'Kernel: $@ is ready' ' (#'$(or $(KBUILD_BUILD_VERSION),`cat .version`)')' OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note -R .comment -S $(obj)/vmlinux.bin: $(obj)/compressed/vmlinux FORCE diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c index 928dcf7a20d987a0e41ba400f584c0efaa5c26cd..b8998cf0508a6798e3c969d5bbb457f37e5620ce 100644 --- a/arch/x86/coco/tdx/tdx.c +++ b/arch/x86/coco/tdx/tdx.c @@ -34,6 +34,8 @@ #define VE_GET_PORT_NUM(e) ((e) >> 16) #define VE_IS_IO_STRING(e) ((e) & BIT(4)) +#define ATTR_SEPT_VE_DISABLE BIT(28) + /* * Wrapper for standard use of __tdx_hypercall with no output aside from * return code. @@ -98,10 +100,11 @@ static inline void tdx_module_call(u64 fn, u64 rcx, u64 rdx, u64 r8, u64 r9, panic("TDCALL %lld failed (Buggy TDX module!)\n", fn); } -static u64 get_cc_mask(void) +static void tdx_parse_tdinfo(u64 *cc_mask) { struct tdx_module_output out; unsigned int gpa_width; + u64 td_attr; /* * TDINFO TDX module call is used to get the TD execution environment @@ -109,19 +112,27 @@ static u64 get_cc_mask(void) * information, etc. More details about the ABI can be found in TDX * Guest-Host-Communication Interface (GHCI), section 2.4.2 TDCALL * [TDG.VP.INFO]. + */ + tdx_module_call(TDX_GET_INFO, 0, 0, 0, 0, &out); + + /* + * The highest bit of a guest physical address is the "sharing" bit. + * Set it for shared pages and clear it for private pages. * * The GPA width that comes out of this call is critical. TDX guests * can not meaningfully run without it. */ - tdx_module_call(TDX_GET_INFO, 0, 0, 0, 0, &out); - gpa_width = out.rcx & GENMASK(5, 0); + *cc_mask = BIT_ULL(gpa_width - 1); /* - * The highest bit of a guest physical address is the "sharing" bit. - * Set it for shared pages and clear it for private pages. + * The kernel can not handle #VE's when accessing normal kernel + * memory. Ensure that no #VE will be delivered for accesses to + * TD-private memory. Only VMM-shared memory (MMIO) will #VE. */ - return BIT_ULL(gpa_width - 1); + td_attr = out.rdx; + if (!(td_attr & ATTR_SEPT_VE_DISABLE)) + panic("TD misconfiguration: SEPT_VE_DISABLE attibute must be set.\n"); } /* @@ -758,7 +769,7 @@ void __init tdx_early_init(void) setup_force_cpu_cap(X86_FEATURE_TDX_GUEST); cc_set_vendor(CC_VENDOR_INTEL); - cc_mask = get_cc_mask(); + tdx_parse_tdinfo(&cc_mask); cc_set_mask(cc_mask); /* diff --git a/arch/x86/events/amd/core.c b/arch/x86/events/amd/core.c index 8b70237c33f76a720d67437fe7d697ab8e105b2b..d6f3703e41194aa11e2e32249f36e1369012b992 100644 --- a/arch/x86/events/amd/core.c +++ b/arch/x86/events/amd/core.c @@ -861,8 +861,7 @@ static int amd_pmu_handle_irq(struct pt_regs *regs) pmu_enabled = cpuc->enabled; cpuc->enabled = 0; - /* stop everything (includes BRS) */ - amd_pmu_disable_all(); + amd_brs_disable_all(); /* Drain BRS is in use (could be inactive) */ if (cpuc->lbr_users) @@ -873,7 +872,7 @@ static int amd_pmu_handle_irq(struct pt_regs *regs) cpuc->enabled = pmu_enabled; if (pmu_enabled) - amd_pmu_enable_all(0); + amd_brs_enable_all(); return amd_pmu_adjust_nmi_window(handled); } diff --git a/arch/x86/events/amd/uncore.c b/arch/x86/events/amd/uncore.c index d568afc705d2e9226791a2bf8304bbb76e5d16ee..83f15fe411b3f4834b20ea588146dfe913a850d0 100644 --- a/arch/x86/events/amd/uncore.c +++ b/arch/x86/events/amd/uncore.c @@ -553,6 +553,7 @@ static void uncore_clean_online(void) hlist_for_each_entry_safe(uncore, n, &uncore_unused_list, node) { hlist_del(&uncore->node); + kfree(uncore->events); kfree(uncore); } } diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c index a646a5f9a235c1055e13990ab615369e1fdc1a40..1b92bf05fd652a7b92c158ed1b9641809bec234d 100644 --- a/arch/x86/events/intel/core.c +++ b/arch/x86/events/intel/core.c @@ -4911,6 +4911,7 @@ static const struct x86_cpu_desc isolation_ucodes[] = { INTEL_CPU_DESC(INTEL_FAM6_SKYLAKE_X, 5, 0x00000000), INTEL_CPU_DESC(INTEL_FAM6_SKYLAKE_X, 6, 0x00000000), INTEL_CPU_DESC(INTEL_FAM6_SKYLAKE_X, 7, 0x00000000), + INTEL_CPU_DESC(INTEL_FAM6_SKYLAKE_X, 11, 0x00000000), INTEL_CPU_DESC(INTEL_FAM6_SKYLAKE_L, 3, 0x0000007c), INTEL_CPU_DESC(INTEL_FAM6_SKYLAKE, 3, 0x0000007c), INTEL_CPU_DESC(INTEL_FAM6_KABYLAKE, 9, 0x0000004e), diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c index 7839507b38448d10a6a393e9ee9cfe40aaaac47b..446d2833efa768bcc7dd2b63cca574ba29e8cb44 100644 --- a/arch/x86/events/intel/ds.c +++ b/arch/x86/events/intel/ds.c @@ -982,8 +982,13 @@ struct event_constraint intel_icl_pebs_event_constraints[] = { INTEL_FLAGS_UEVENT_CONSTRAINT(0x0400, 0x800000000ULL), /* SLOTS */ INTEL_PLD_CONSTRAINT(0x1cd, 0xff), /* MEM_TRANS_RETIRED.LOAD_LATENCY */ - INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_LD(0x1d0, 0xf), /* MEM_INST_RETIRED.LOAD */ - INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_ST(0x2d0, 0xf), /* MEM_INST_RETIRED.STORE */ + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_LD(0x11d0, 0xf), /* MEM_INST_RETIRED.STLB_MISS_LOADS */ + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_ST(0x12d0, 0xf), /* MEM_INST_RETIRED.STLB_MISS_STORES */ + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_LD(0x21d0, 0xf), /* MEM_INST_RETIRED.LOCK_LOADS */ + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_LD(0x41d0, 0xf), /* MEM_INST_RETIRED.SPLIT_LOADS */ + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_ST(0x42d0, 0xf), /* MEM_INST_RETIRED.SPLIT_STORES */ + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_LD(0x81d0, 0xf), /* MEM_INST_RETIRED.ALL_LOADS */ + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_ST(0x82d0, 0xf), /* MEM_INST_RETIRED.ALL_STORES */ INTEL_FLAGS_EVENT_CONSTRAINT_DATALA_LD_RANGE(0xd1, 0xd4, 0xf), /* MEM_LOAD_*_RETIRED.* */ @@ -1004,8 +1009,13 @@ struct event_constraint intel_spr_pebs_event_constraints[] = { INTEL_FLAGS_EVENT_CONSTRAINT(0xc0, 0xfe), INTEL_PLD_CONSTRAINT(0x1cd, 0xfe), INTEL_PSD_CONSTRAINT(0x2cd, 0x1), - INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_LD(0x1d0, 0xf), - INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_ST(0x2d0, 0xf), + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_LD(0x11d0, 0xf), /* MEM_INST_RETIRED.STLB_MISS_LOADS */ + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_ST(0x12d0, 0xf), /* MEM_INST_RETIRED.STLB_MISS_STORES */ + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_LD(0x21d0, 0xf), /* MEM_INST_RETIRED.LOCK_LOADS */ + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_LD(0x41d0, 0xf), /* MEM_INST_RETIRED.SPLIT_LOADS */ + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_ST(0x42d0, 0xf), /* MEM_INST_RETIRED.SPLIT_STORES */ + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_LD(0x81d0, 0xf), /* MEM_INST_RETIRED.ALL_LOADS */ + INTEL_FLAGS_UEVENT_CONSTRAINT_DATALA_ST(0x82d0, 0xf), /* MEM_INST_RETIRED.ALL_STORES */ INTEL_FLAGS_EVENT_CONSTRAINT_DATALA_LD_RANGE(0xd1, 0xd4, 0xf), diff --git a/arch/x86/events/intel/pt.c b/arch/x86/events/intel/pt.c index 82ef87e9a897c37f628a69ee8944d771382e1bca..42a55794004a7a444585d5525fbb8691d295cd72 100644 --- a/arch/x86/events/intel/pt.c +++ b/arch/x86/events/intel/pt.c @@ -1263,6 +1263,15 @@ static int pt_buffer_try_single(struct pt_buffer *buf, int nr_pages) if (1 << order != nr_pages) goto out; + /* + * Some processors cannot always support single range for more than + * 4KB - refer errata TGL052, ADL037 and RPL017. Future processors might + * also be affected, so for now rather than trying to keep track of + * which ones, just disable it for all. + */ + if (nr_pages > 1) + goto out; + buf->single = true; buf->nr_pages = nr_pages; ret = 0; diff --git a/arch/x86/events/rapl.c b/arch/x86/events/rapl.c index fea544e5842a18f16c4a2734299180976475b85a..a829492bca4c193ab3ab30b85bd1fbb4e73b2b26 100644 --- a/arch/x86/events/rapl.c +++ b/arch/x86/events/rapl.c @@ -619,12 +619,8 @@ static int rapl_check_hw_unit(struct rapl_model *rm) case RAPL_UNIT_QUIRK_INTEL_HSW: rapl_hw_unit[PERF_RAPL_RAM] = 16; break; - /* - * SPR shares the same DRAM domain energy unit as HSW, plus it - * also has a fixed energy unit for Psys domain. - */ + /* SPR uses a fixed energy unit for Psys domain. */ case RAPL_UNIT_QUIRK_INTEL_SPR: - rapl_hw_unit[PERF_RAPL_RAM] = 16; rapl_hw_unit[PERF_RAPL_PSYS] = 0; break; default: diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c index 29774126e93144f48fe209dead216f078e18d0ce..a269049a43ce311c7db256685495cfb9b2a3e691 100644 --- a/arch/x86/hyperv/hv_init.c +++ b/arch/x86/hyperv/hv_init.c @@ -77,7 +77,7 @@ static int hyperv_init_ghcb(void) static int hv_cpu_init(unsigned int cpu) { union hv_vp_assist_msr_contents msr = { 0 }; - struct hv_vp_assist_page **hvp = &hv_vp_assist_page[smp_processor_id()]; + struct hv_vp_assist_page **hvp = &hv_vp_assist_page[cpu]; int ret; ret = hv_common_cpu_init(cpu); @@ -87,34 +87,32 @@ static int hv_cpu_init(unsigned int cpu) if (!hv_vp_assist_page) return 0; - if (!*hvp) { - if (hv_root_partition) { - /* - * For root partition we get the hypervisor provided VP assist - * page, instead of allocating a new page. - */ - rdmsrl(HV_X64_MSR_VP_ASSIST_PAGE, msr.as_uint64); - *hvp = memremap(msr.pfn << - HV_X64_MSR_VP_ASSIST_PAGE_ADDRESS_SHIFT, - PAGE_SIZE, MEMREMAP_WB); - } else { - /* - * The VP assist page is an "overlay" page (see Hyper-V TLFS's - * Section 5.2.1 "GPA Overlay Pages"). Here it must be zeroed - * out to make sure we always write the EOI MSR in - * hv_apic_eoi_write() *after* the EOI optimization is disabled - * in hv_cpu_die(), otherwise a CPU may not be stopped in the - * case of CPU offlining and the VM will hang. - */ + if (hv_root_partition) { + /* + * For root partition we get the hypervisor provided VP assist + * page, instead of allocating a new page. + */ + rdmsrl(HV_X64_MSR_VP_ASSIST_PAGE, msr.as_uint64); + *hvp = memremap(msr.pfn << HV_X64_MSR_VP_ASSIST_PAGE_ADDRESS_SHIFT, + PAGE_SIZE, MEMREMAP_WB); + } else { + /* + * The VP assist page is an "overlay" page (see Hyper-V TLFS's + * Section 5.2.1 "GPA Overlay Pages"). Here it must be zeroed + * out to make sure we always write the EOI MSR in + * hv_apic_eoi_write() *after* the EOI optimization is disabled + * in hv_cpu_die(), otherwise a CPU may not be stopped in the + * case of CPU offlining and the VM will hang. + */ + if (!*hvp) *hvp = __vmalloc(PAGE_SIZE, GFP_KERNEL | __GFP_ZERO); - if (*hvp) - msr.pfn = vmalloc_to_pfn(*hvp); - } - WARN_ON(!(*hvp)); - if (*hvp) { - msr.enable = 1; - wrmsrl(HV_X64_MSR_VP_ASSIST_PAGE, msr.as_uint64); - } + if (*hvp) + msr.pfn = vmalloc_to_pfn(*hvp); + + } + if (!WARN_ON(!(*hvp))) { + msr.enable = 1; + wrmsrl(HV_X64_MSR_VP_ASSIST_PAGE, msr.as_uint64); } return hyperv_init_ghcb(); @@ -444,7 +442,7 @@ void __init hyperv_init(void) if (hv_root_partition) { struct page *pg; - void *src, *dst; + void *src; /* * For the root partition, the hypervisor will set up its @@ -459,13 +457,11 @@ void __init hyperv_init(void) wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64); pg = vmalloc_to_page(hv_hypercall_pg); - dst = kmap_local_page(pg); src = memremap(hypercall_msr.guest_physical_address << PAGE_SHIFT, PAGE_SIZE, MEMREMAP_WB); - BUG_ON(!(src && dst)); - memcpy(dst, src, HV_HYP_PAGE_SIZE); + BUG_ON(!src); + memcpy_to_page(pg, 0, src, HV_HYP_PAGE_SIZE); memunmap(src); - kunmap_local(dst); } else { hypercall_msr.guest_physical_address = vmalloc_to_pfn(hv_hypercall_pg); wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64); @@ -537,6 +533,7 @@ void __init hyperv_init(void) void hyperv_cleanup(void) { union hv_x64_msr_hypercall_contents hypercall_msr; + union hv_reference_tsc_msr tsc_msr; unregister_syscore_ops(&hv_syscore_ops); @@ -552,12 +549,14 @@ void hyperv_cleanup(void) hv_hypercall_pg = NULL; /* Reset the hypercall page */ - hypercall_msr.as_uint64 = 0; - wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64); + hypercall_msr.as_uint64 = hv_get_register(HV_X64_MSR_HYPERCALL); + hypercall_msr.enable = 0; + hv_set_register(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64); /* Reset the TSC page */ - hypercall_msr.as_uint64 = 0; - wrmsrl(HV_X64_MSR_REFERENCE_TSC, hypercall_msr.as_uint64); + tsc_msr.as_uint64 = hv_get_register(HV_X64_MSR_REFERENCE_TSC); + tsc_msr.enable = 0; + hv_set_register(HV_X64_MSR_REFERENCE_TSC, tsc_msr.as_uint64); } void hyperv_report_panic(struct pt_regs *regs, long err, bool in_die) diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h index b71f4f2ecdd571a44a808e443118278ea30cbe04..b2da7cb64b317f32869c509555b6f70a400dc3ec 100644 --- a/arch/x86/include/asm/cpufeatures.h +++ b/arch/x86/include/asm/cpufeatures.h @@ -305,6 +305,9 @@ #define X86_FEATURE_USE_IBPB_FW (11*32+16) /* "" Use IBPB during runtime firmware calls */ #define X86_FEATURE_RSB_VMEXIT_LITE (11*32+17) /* "" Fill RSB on VM exit when EIBRS is enabled */ + +#define X86_FEATURE_MSR_TSX_CTRL (11*32+20) /* "" MSR IA32_TSX_CTRL (Intel) implemented */ + /* Intel-defined CPU features, CPUID level 0x00000007:1 (EAX), word 12 */ #define X86_FEATURE_AVX_VNNI (12*32+ 4) /* AVX VNNI instructions */ #define X86_FEATURE_AVX512_BF16 (12*32+ 5) /* AVX512 BFLOAT16 instructions */ diff --git a/arch/x86/include/asm/intel-family.h b/arch/x86/include/asm/intel-family.h index 5d75fe22934217bf6d01084b5da943803099798c..347707d459c67f2dc85427b04e78b733ff4201f6 100644 --- a/arch/x86/include/asm/intel-family.h +++ b/arch/x86/include/asm/intel-family.h @@ -107,6 +107,11 @@ #define INTEL_FAM6_SAPPHIRERAPIDS_X 0x8F /* Golden Cove */ +#define INTEL_FAM6_EMERALDRAPIDS_X 0xCF + +#define INTEL_FAM6_GRANITERAPIDS_X 0xAD +#define INTEL_FAM6_GRANITERAPIDS_D 0xAE + #define INTEL_FAM6_ALDERLAKE 0x97 /* Golden Cove / Gracemont */ #define INTEL_FAM6_ALDERLAKE_L 0x9A /* Golden Cove / Gracemont */ #define INTEL_FAM6_ALDERLAKE_N 0xBE @@ -118,7 +123,7 @@ #define INTEL_FAM6_METEORLAKE 0xAC #define INTEL_FAM6_METEORLAKE_L 0xAA -/* "Small Core" Processors (Atom) */ +/* "Small Core" Processors (Atom/E-Core) */ #define INTEL_FAM6_ATOM_BONNELL 0x1C /* Diamondville, Pineview */ #define INTEL_FAM6_ATOM_BONNELL_MID 0x26 /* Silverthorne, Lincroft */ @@ -145,6 +150,10 @@ #define INTEL_FAM6_ATOM_TREMONT 0x96 /* Elkhart Lake */ #define INTEL_FAM6_ATOM_TREMONT_L 0x9C /* Jasper Lake */ +#define INTEL_FAM6_SIERRAFOREST_X 0xAF + +#define INTEL_FAM6_GRANDRIDGE 0xB6 + /* Xeon Phi */ #define INTEL_FAM6_XEON_PHI_KNL 0x57 /* Knights Landing */ diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 7551b6f9c31c52246c76e32d09214e071efdb5b5..f05ebaa26f0ff52a43294ea0c9e60175037c123e 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -501,7 +501,12 @@ struct kvm_pmc { bool intr; }; +/* More counters may conflict with other existing Architectural MSRs */ +#define KVM_INTEL_PMC_MAX_GENERIC 8 +#define MSR_ARCH_PERFMON_PERFCTR_MAX (MSR_ARCH_PERFMON_PERFCTR0 + KVM_INTEL_PMC_MAX_GENERIC - 1) +#define MSR_ARCH_PERFMON_EVENTSEL_MAX (MSR_ARCH_PERFMON_EVENTSEL0 + KVM_INTEL_PMC_MAX_GENERIC - 1) #define KVM_PMC_MAX_FIXED 3 +#define KVM_AMD_PMC_MAX_GENERIC 6 struct kvm_pmu { unsigned nr_arch_gp_counters; unsigned nr_arch_fixed_counters; @@ -516,7 +521,7 @@ struct kvm_pmu { u64 reserved_bits; u64 raw_event_mask; u8 version; - struct kvm_pmc gp_counters[INTEL_PMC_MAX_GENERIC]; + struct kvm_pmc gp_counters[KVM_INTEL_PMC_MAX_GENERIC]; struct kvm_pmc fixed_counters[KVM_PMC_MAX_FIXED]; struct irq_work irq_work; DECLARE_BITMAP(reprogram_pmi, X86_PMC_IDX_MAX); diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h index 10ac52705892a1680415d144877574a2457f0344..4a2af82553e4f263ca366e335c544d29a3bd8766 100644 --- a/arch/x86/include/asm/msr-index.h +++ b/arch/x86/include/asm/msr-index.h @@ -535,6 +535,11 @@ #define MSR_AMD64_CPUID_FN_1 0xc0011004 #define MSR_AMD64_LS_CFG 0xc0011020 #define MSR_AMD64_DC_CFG 0xc0011022 + +#define MSR_AMD64_DE_CFG 0xc0011029 +#define MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT 1 +#define MSR_AMD64_DE_CFG_LFENCE_SERIALIZE BIT_ULL(MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT) + #define MSR_AMD64_BU_CFG2 0xc001102a #define MSR_AMD64_IBSFETCHCTL 0xc0011030 #define MSR_AMD64_IBSFETCHLINAD 0xc0011031 @@ -640,9 +645,6 @@ #define FAM10H_MMIO_CONF_BASE_MASK 0xfffffffULL #define FAM10H_MMIO_CONF_BASE_SHIFT 20 #define MSR_FAM10H_NODE_ID 0xc001100c -#define MSR_F10H_DECFG 0xc0011029 -#define MSR_F10H_DECFG_LFENCE_SERIALIZE_BIT 1 -#define MSR_F10H_DECFG_LFENCE_SERIALIZE BIT_ULL(MSR_F10H_DECFG_LFENCE_SERIALIZE_BIT) /* K8 MSRs */ #define MSR_K8_TOP_MEM1 0xc001001a diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h index c936ce9f0c47c896efc83fc1f9370db429be142b..dfdb103ae4f6ff993f6b1fea9a6bd4fe942ec12a 100644 --- a/arch/x86/include/asm/nospec-branch.h +++ b/arch/x86/include/asm/nospec-branch.h @@ -321,7 +321,7 @@ static inline void indirect_branch_prediction_barrier(void) /* The Intel SPEC CTRL MSR base value cache */ extern u64 x86_spec_ctrl_base; DECLARE_PER_CPU(u64, x86_spec_ctrl_current); -extern void write_spec_ctrl_current(u64 val, bool force); +extern void update_spec_ctrl_cond(u64 val); extern u64 spec_ctrl_current(void); /* diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index 5059799bebe36d4b3a2c34d5aeda8b35a92ca96d..286a71810f9e95a7048069a3fd9cc724d0c9c756 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -139,6 +139,7 @@ static inline int pmd_dirty(pmd_t pmd) return pmd_flags(pmd) & _PAGE_DIRTY; } +#define pmd_young pmd_young static inline int pmd_young(pmd_t pmd) { return pmd_flags(pmd) & _PAGE_ACCESSED; @@ -1438,6 +1439,14 @@ static inline bool arch_has_hw_pte_young(void) return true; } +#ifdef CONFIG_XEN_PV +#define arch_has_hw_nonleaf_pmd_young arch_has_hw_nonleaf_pmd_young +static inline bool arch_has_hw_nonleaf_pmd_young(void) +{ + return !cpu_feature_enabled(X86_FEATURE_XENPV); +} +#endif + #ifdef CONFIG_PAGE_TABLE_CHECK static inline bool pte_user_accessible_page(pte_t pte) { diff --git a/arch/x86/include/asm/qspinlock_paravirt.h b/arch/x86/include/asm/qspinlock_paravirt.h index 60ece592b22077328a89b5979f7f340bcca46e8c..dbb38a6b4dfb6315da4fb345cf82a3b28feeaf80 100644 --- a/arch/x86/include/asm/qspinlock_paravirt.h +++ b/arch/x86/include/asm/qspinlock_paravirt.h @@ -37,7 +37,7 @@ __PV_CALLEE_SAVE_REGS_THUNK(__pv_queued_spin_unlock_slowpath, ".spinlock.text"); * rsi = lockval (second argument) * rdx = internal variable (set to 0) */ -asm (".pushsection .spinlock.text;" +asm (".pushsection .spinlock.text, \"ax\";" ".globl " PV_UNLOCK ";" ".type " PV_UNLOCK ", @function;" ".align 4,0x90;" diff --git a/arch/x86/include/asm/spec-ctrl.h b/arch/x86/include/asm/spec-ctrl.h index 5393babc05989ebc0cbcbbb21251f2c241e3df04..cb0386fc4dc3b3a4e240213a32c5f210cf8ce60f 100644 --- a/arch/x86/include/asm/spec-ctrl.h +++ b/arch/x86/include/asm/spec-ctrl.h @@ -13,7 +13,7 @@ * Takes the guest view of SPEC_CTRL MSR as a parameter and also * the guest's version of VIRT_SPEC_CTRL, if emulated. */ -extern void x86_virt_spec_ctrl(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl, bool guest); +extern void x86_virt_spec_ctrl(u64 guest_virt_spec_ctrl, bool guest); /** * x86_spec_ctrl_set_guest - Set speculation control registers for the guest @@ -24,9 +24,9 @@ extern void x86_virt_spec_ctrl(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl, bo * Avoids writing to the MSR if the content/bits are the same */ static inline -void x86_spec_ctrl_set_guest(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl) +void x86_spec_ctrl_set_guest(u64 guest_virt_spec_ctrl) { - x86_virt_spec_ctrl(guest_spec_ctrl, guest_virt_spec_ctrl, true); + x86_virt_spec_ctrl(guest_virt_spec_ctrl, true); } /** @@ -38,9 +38,9 @@ void x86_spec_ctrl_set_guest(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl) * Avoids writing to the MSR if the content/bits are the same */ static inline -void x86_spec_ctrl_restore_host(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl) +void x86_spec_ctrl_restore_host(u64 guest_virt_spec_ctrl) { - x86_virt_spec_ctrl(guest_spec_ctrl, guest_virt_spec_ctrl, false); + x86_virt_spec_ctrl(guest_virt_spec_ctrl, false); } /* AMD specific Speculative Store Bypass MSR data */ diff --git a/arch/x86/include/asm/syscall_wrapper.h b/arch/x86/include/asm/syscall_wrapper.h index 59358d1bf880003aac56fb79acc88563922958a2..fd2669b1cb2d952eceb820c443dc0926eb801494 100644 --- a/arch/x86/include/asm/syscall_wrapper.h +++ b/arch/x86/include/asm/syscall_wrapper.h @@ -6,7 +6,7 @@ #ifndef _ASM_X86_SYSCALL_WRAPPER_H #define _ASM_X86_SYSCALL_WRAPPER_H -struct pt_regs; +#include extern long __x64_sys_ni_syscall(const struct pt_regs *regs); extern long __ia32_sys_ni_syscall(const struct pt_regs *regs); diff --git a/arch/x86/kernel/asm-offsets.c b/arch/x86/kernel/asm-offsets.c index cb50589a7102fa3825703d6a7a87c1d00b906149..437308004ef2e4f1345947ce318c62bc56a6036f 100644 --- a/arch/x86/kernel/asm-offsets.c +++ b/arch/x86/kernel/asm-offsets.c @@ -19,7 +19,6 @@ #include #include #include -#include "../kvm/vmx/vmx.h" #ifdef CONFIG_XEN #include @@ -108,9 +107,4 @@ static void __used common(void) OFFSET(TSS_sp0, tss_struct, x86_tss.sp0); OFFSET(TSS_sp1, tss_struct, x86_tss.sp1); OFFSET(TSS_sp2, tss_struct, x86_tss.sp2); - - if (IS_ENABLED(CONFIG_KVM_INTEL)) { - BLANK(); - OFFSET(VMX_spec_ctrl, vcpu_vmx, spec_ctrl); - } } diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index 860b60273df3ff38eb406449a768166c8253153b..c75d75b9f11aaae983d286d7ac593e3fc5b931ab 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c @@ -770,8 +770,6 @@ static void init_amd_gh(struct cpuinfo_x86 *c) set_cpu_bug(c, X86_BUG_AMD_TLB_MMATCH); } -#define MSR_AMD64_DE_CFG 0xC0011029 - static void init_amd_ln(struct cpuinfo_x86 *c) { /* @@ -965,8 +963,8 @@ static void init_amd(struct cpuinfo_x86 *c) * msr_set_bit() uses the safe accessors, too, even if the MSR * is not present. */ - msr_set_bit(MSR_F10H_DECFG, - MSR_F10H_DECFG_LFENCE_SERIALIZE_BIT); + msr_set_bit(MSR_AMD64_DE_CFG, + MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT); /* A serializing LFENCE stops RDTSC speculation */ set_cpu_cap(c, X86_FEATURE_LFENCE_RDTSC); diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c index da7c361f47e0d9ab39ec4b0f63eb326baa44a842..6daf842295489e34f3e1283a2d1b2c8101e116d4 100644 --- a/arch/x86/kernel/cpu/bugs.c +++ b/arch/x86/kernel/cpu/bugs.c @@ -60,11 +60,18 @@ EXPORT_SYMBOL_GPL(x86_spec_ctrl_current); static DEFINE_MUTEX(spec_ctrl_mutex); +/* Update SPEC_CTRL MSR and its cached copy unconditionally */ +static void update_spec_ctrl(u64 val) +{ + this_cpu_write(x86_spec_ctrl_current, val); + wrmsrl(MSR_IA32_SPEC_CTRL, val); +} + /* * Keep track of the SPEC_CTRL MSR value for the current task, which may differ * from x86_spec_ctrl_base due to STIBP/SSB in __speculation_ctrl_update(). */ -void write_spec_ctrl_current(u64 val, bool force) +void update_spec_ctrl_cond(u64 val) { if (this_cpu_read(x86_spec_ctrl_current) == val) return; @@ -75,7 +82,7 @@ void write_spec_ctrl_current(u64 val, bool force) * When KERNEL_IBRS this MSR is written on return-to-user, unless * forced the update can be delayed until that time. */ - if (force || !cpu_feature_enabled(X86_FEATURE_KERNEL_IBRS)) + if (!cpu_feature_enabled(X86_FEATURE_KERNEL_IBRS)) wrmsrl(MSR_IA32_SPEC_CTRL, val); } @@ -196,22 +203,15 @@ void __init check_bugs(void) } /* - * NOTE: This function is *only* called for SVM. VMX spec_ctrl handling is - * done in vmenter.S. + * NOTE: This function is *only* called for SVM, since Intel uses + * MSR_IA32_SPEC_CTRL for SSBD. */ void -x86_virt_spec_ctrl(u64 guest_spec_ctrl, u64 guest_virt_spec_ctrl, bool setguest) +x86_virt_spec_ctrl(u64 guest_virt_spec_ctrl, bool setguest) { - u64 msrval, guestval = guest_spec_ctrl, hostval = spec_ctrl_current(); + u64 guestval, hostval; struct thread_info *ti = current_thread_info(); - if (static_cpu_has(X86_FEATURE_MSR_SPEC_CTRL)) { - if (hostval != guestval) { - msrval = setguest ? guestval : hostval; - wrmsrl(MSR_IA32_SPEC_CTRL, msrval); - } - } - /* * If SSBD is not handled in MSR_SPEC_CTRL on AMD, update * MSR_AMD64_L2_CFG or MSR_VIRT_SPEC_CTRL if supported. @@ -1335,7 +1335,7 @@ static void __init spec_ctrl_disable_kernel_rrsba(void) if (ia32_cap & ARCH_CAP_RRSBA) { x86_spec_ctrl_base |= SPEC_CTRL_RRSBA_DIS_S; - write_spec_ctrl_current(x86_spec_ctrl_base, true); + update_spec_ctrl(x86_spec_ctrl_base); } } @@ -1457,7 +1457,7 @@ static void __init spectre_v2_select_mitigation(void) if (spectre_v2_in_ibrs_mode(mode)) { x86_spec_ctrl_base |= SPEC_CTRL_IBRS; - write_spec_ctrl_current(x86_spec_ctrl_base, true); + update_spec_ctrl(x86_spec_ctrl_base); } switch (mode) { @@ -1571,7 +1571,7 @@ static void __init spectre_v2_select_mitigation(void) static void update_stibp_msr(void * __unused) { u64 val = spec_ctrl_current() | (x86_spec_ctrl_base & SPEC_CTRL_STIBP); - write_spec_ctrl_current(val, true); + update_spec_ctrl(val); } /* Update x86_spec_ctrl_base in case SMT state changed. */ @@ -1804,7 +1804,7 @@ static enum ssb_mitigation __init __ssb_select_mitigation(void) x86_amd_ssb_disable(); } else { x86_spec_ctrl_base |= SPEC_CTRL_SSBD; - write_spec_ctrl_current(x86_spec_ctrl_base, true); + update_spec_ctrl(x86_spec_ctrl_base); } } @@ -2055,7 +2055,7 @@ int arch_prctl_spec_ctrl_get(struct task_struct *task, unsigned long which) void x86_spec_ctrl_setup_ap(void) { if (boot_cpu_has(X86_FEATURE_MSR_SPEC_CTRL)) - write_spec_ctrl_current(x86_spec_ctrl_base, true); + update_spec_ctrl(x86_spec_ctrl_base); if (ssb_mode == SPEC_STORE_BYPASS_DISABLE) x86_amd_ssb_disable(); diff --git a/arch/x86/kernel/cpu/hygon.c b/arch/x86/kernel/cpu/hygon.c index 21fd425088fe5801ff5b62ca212a44477f62c5fb..c393b8773ace6b8a56a09e2f9f263ecac57cba9d 100644 --- a/arch/x86/kernel/cpu/hygon.c +++ b/arch/x86/kernel/cpu/hygon.c @@ -326,8 +326,8 @@ static void init_hygon(struct cpuinfo_x86 *c) * msr_set_bit() uses the safe accessors, too, even if the MSR * is not present. */ - msr_set_bit(MSR_F10H_DECFG, - MSR_F10H_DECFG_LFENCE_SERIALIZE_BIT); + msr_set_bit(MSR_AMD64_DE_CFG, + MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT); /* A serializing LFENCE stops RDTSC speculation */ set_cpu_cap(c, X86_FEATURE_LFENCE_RDTSC); diff --git a/arch/x86/kernel/cpu/sgx/ioctl.c b/arch/x86/kernel/cpu/sgx/ioctl.c index ebe79d60619f2f161c7a564aed3144572201b5ea..da8b8ea6b063d6a5220202c55a921d8d59b2b2ad 100644 --- a/arch/x86/kernel/cpu/sgx/ioctl.c +++ b/arch/x86/kernel/cpu/sgx/ioctl.c @@ -356,6 +356,9 @@ static int sgx_validate_offset_length(struct sgx_encl *encl, if (!length || !IS_ALIGNED(length, PAGE_SIZE)) return -EINVAL; + if (offset + length < offset) + return -EINVAL; + if (offset + length - PAGE_SIZE >= encl->size) return -EINVAL; diff --git a/arch/x86/kernel/cpu/tsx.c b/arch/x86/kernel/cpu/tsx.c index ec7bbac3a9f29aa4f34b5d9ba0de4d9c58381cc0..8009c8346d8f832016ded51bdafd6528fa072bb0 100644 --- a/arch/x86/kernel/cpu/tsx.c +++ b/arch/x86/kernel/cpu/tsx.c @@ -58,24 +58,6 @@ static void tsx_enable(void) wrmsrl(MSR_IA32_TSX_CTRL, tsx); } -static bool tsx_ctrl_is_supported(void) -{ - u64 ia32_cap = x86_read_arch_cap_msr(); - - /* - * TSX is controlled via MSR_IA32_TSX_CTRL. However, support for this - * MSR is enumerated by ARCH_CAP_TSX_MSR bit in MSR_IA32_ARCH_CAPABILITIES. - * - * TSX control (aka MSR_IA32_TSX_CTRL) is only available after a - * microcode update on CPUs that have their MSR_IA32_ARCH_CAPABILITIES - * bit MDS_NO=1. CPUs with MDS_NO=0 are not planned to get - * MSR_IA32_TSX_CTRL support even after a microcode update. Thus, - * tsx= cmdline requests will do nothing on CPUs without - * MSR_IA32_TSX_CTRL support. - */ - return !!(ia32_cap & ARCH_CAP_TSX_CTRL_MSR); -} - static enum tsx_ctrl_states x86_get_tsx_auto_mode(void) { if (boot_cpu_has_bug(X86_BUG_TAA)) @@ -135,7 +117,7 @@ static void tsx_clear_cpuid(void) rdmsrl(MSR_TSX_FORCE_ABORT, msr); msr |= MSR_TFA_TSX_CPUID_CLEAR; wrmsrl(MSR_TSX_FORCE_ABORT, msr); - } else if (tsx_ctrl_is_supported()) { + } else if (cpu_feature_enabled(X86_FEATURE_MSR_TSX_CTRL)) { rdmsrl(MSR_IA32_TSX_CTRL, msr); msr |= TSX_CTRL_CPUID_CLEAR; wrmsrl(MSR_IA32_TSX_CTRL, msr); @@ -158,7 +140,8 @@ static void tsx_dev_mode_disable(void) u64 mcu_opt_ctrl; /* Check if RTM_ALLOW exists */ - if (!boot_cpu_has_bug(X86_BUG_TAA) || !tsx_ctrl_is_supported() || + if (!boot_cpu_has_bug(X86_BUG_TAA) || + !cpu_feature_enabled(X86_FEATURE_MSR_TSX_CTRL) || !cpu_feature_enabled(X86_FEATURE_SRBDS_CTRL)) return; @@ -191,7 +174,20 @@ void __init tsx_init(void) return; } - if (!tsx_ctrl_is_supported()) { + /* + * TSX is controlled via MSR_IA32_TSX_CTRL. However, support for this + * MSR is enumerated by ARCH_CAP_TSX_MSR bit in MSR_IA32_ARCH_CAPABILITIES. + * + * TSX control (aka MSR_IA32_TSX_CTRL) is only available after a + * microcode update on CPUs that have their MSR_IA32_ARCH_CAPABILITIES + * bit MDS_NO=1. CPUs with MDS_NO=0 are not planned to get + * MSR_IA32_TSX_CTRL support even after a microcode update. Thus, + * tsx= cmdline requests will do nothing on CPUs without + * MSR_IA32_TSX_CTRL support. + */ + if (x86_read_arch_cap_msr() & ARCH_CAP_TSX_CTRL_MSR) { + setup_force_cpu_cap(X86_FEATURE_MSR_TSX_CTRL); + } else { tsx_ctrl_state = TSX_CTRL_NOT_SUPPORTED; return; } diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c index 3b28c5b25e12ce754d899cbfb90eb93aa8a42a9e..d00db56a8868232a51daaf16900792de8d211708 100644 --- a/arch/x86/kernel/fpu/core.c +++ b/arch/x86/kernel/fpu/core.c @@ -605,9 +605,9 @@ int fpu_clone(struct task_struct *dst, unsigned long clone_flags, bool minimal) if (test_thread_flag(TIF_NEED_FPU_LOAD)) fpregs_restore_userregs(); save_fpregs_to_fpstate(dst_fpu); + fpregs_unlock(); if (!(clone_flags & CLONE_THREAD)) fpu_inherit_perms(dst_fpu); - fpregs_unlock(); /* * Children never inherit PASID state. diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index c21b7347a26dd5f26df8cf1802375059dbc659fd..e436c9c1ef3b3cb66b3dcdcd70af2a735f463b7f 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -600,7 +600,7 @@ static __always_inline void __speculation_ctrl_update(unsigned long tifp, } if (updmsr) - write_spec_ctrl_current(msr, false); + update_spec_ctrl_cond(msr); } static unsigned long speculation_ctrl_update_tif(struct task_struct *tsk) diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index 178015a820f080304f1889da2296abca9de2c644..d3fdec706f1d2a3b90341b8396aaf21705ec29da 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -301,6 +302,12 @@ static noinstr bool handle_bug(struct pt_regs *regs) { bool handled = false; + /* + * Normally @regs are unpoisoned by irqentry_enter(), but handle_bug() + * is a rare case that uses @regs without passing them to + * irqentry_enter(). + */ + kmsan_unpoison_entry_regs(regs); if (!is_valid_bugaddr(regs->ip)) return handled; diff --git a/arch/x86/kvm/.gitignore b/arch/x86/kvm/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..615d6ff35c009336b260dff7bd0b2d2fe171bddd --- /dev/null +++ b/arch/x86/kvm/.gitignore @@ -0,0 +1,2 @@ +/kvm-asm-offsets.s +/kvm-asm-offsets.h diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile index 30f244b6452349388d0c7fd50a74188d31f0316d..f453a0f96e243e806bdc8b96757dd8a22757573b 100644 --- a/arch/x86/kvm/Makefile +++ b/arch/x86/kvm/Makefile @@ -34,3 +34,15 @@ endif obj-$(CONFIG_KVM) += kvm.o obj-$(CONFIG_KVM_INTEL) += kvm-intel.o obj-$(CONFIG_KVM_AMD) += kvm-amd.o + +AFLAGS_svm/vmenter.o := -iquote $(obj) +$(obj)/svm/vmenter.o: $(obj)/kvm-asm-offsets.h + +AFLAGS_vmx/vmenter.o := -iquote $(obj) +$(obj)/vmx/vmenter.o: $(obj)/kvm-asm-offsets.h + +$(obj)/kvm-asm-offsets.h: $(obj)/kvm-asm-offsets.s FORCE + $(call filechk,offsets,__KVM_ASM_OFFSETS_H__) + +targets += kvm-asm-offsets.s +clean-files += kvm-asm-offsets.h diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index 7065462378e2933d7c76711a54cc64c70140443a..62bc7a01ceccaa7d533be22b88e5a896c136f09b 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c @@ -1133,11 +1133,13 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) entry->eax = max(entry->eax, 0x80000021); break; case 0x80000001: + entry->ebx &= ~GENMASK(27, 16); cpuid_entry_override(entry, CPUID_8000_0001_EDX); cpuid_entry_override(entry, CPUID_8000_0001_ECX); break; case 0x80000006: - /* L2 cache and TLB: pass through host info. */ + /* Drop reserved bits, pass host L2 cache and TLB info. */ + entry->edx &= ~GENMASK(17, 16); break; case 0x80000007: /* Advanced power management */ /* invariant TSC is CPUID.80000007H:EDX[8] */ @@ -1167,6 +1169,7 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) g_phys_as = phys_as; entry->eax = g_phys_as | (virt_as << 8); + entry->ecx &= ~(GENMASK(31, 16) | GENMASK(11, 8)); entry->edx = 0; cpuid_entry_override(entry, CPUID_8000_0008_EBX); break; @@ -1186,6 +1189,9 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) entry->ecx = entry->edx = 0; break; case 0x8000001a: + entry->eax &= GENMASK(2, 0); + entry->ebx = entry->ecx = entry->edx = 0; + break; case 0x8000001e: break; case 0x8000001F: @@ -1193,7 +1199,8 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) entry->eax = entry->ebx = entry->ecx = entry->edx = 0; } else { cpuid_entry_override(entry, CPUID_8000_001F_EAX); - + /* Clear NumVMPL since KVM does not support VMPL. */ + entry->ebx &= ~GENMASK(31, 12); /* * Enumerate '0' for "PA bits reduction", the adjusted * MAXPHYADDR is enumerated directly (see 0x80000008). @@ -1331,7 +1338,7 @@ int kvm_dev_ioctl_get_cpuid(struct kvm_cpuid2 *cpuid, if (sanity_check_entries(entries, cpuid->nent, type)) return -EINVAL; - array.entries = kvcalloc(sizeof(struct kvm_cpuid_entry2), cpuid->nent, GFP_KERNEL); + array.entries = kvcalloc(cpuid->nent, sizeof(struct kvm_cpuid_entry2), GFP_KERNEL); if (!array.entries) return -ENOMEM; diff --git a/arch/x86/kvm/debugfs.c b/arch/x86/kvm/debugfs.c index cfed36aba2f70c8f7b01f54ea9c494f121b81c8c..c1390357126ab4668f04087e09a039e7fbf6d987 100644 --- a/arch/x86/kvm/debugfs.c +++ b/arch/x86/kvm/debugfs.c @@ -158,11 +158,16 @@ static int kvm_mmu_rmaps_stat_show(struct seq_file *m, void *v) static int kvm_mmu_rmaps_stat_open(struct inode *inode, struct file *file) { struct kvm *kvm = inode->i_private; + int r; if (!kvm_get_kvm_safe(kvm)) return -ENOENT; - return single_open(file, kvm_mmu_rmaps_stat_show, kvm); + r = single_open(file, kvm_mmu_rmaps_stat_show, kvm); + if (r < 0) + kvm_put_kvm(kvm); + + return r; } static int kvm_mmu_rmaps_stat_release(struct inode *inode, struct file *file) diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 3b27622d46425b58c7285f11f60b346a550c8f84..4a43261d25a2aabc9dc3e2a00d09cd102151f8e0 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c @@ -791,8 +791,7 @@ static int linearize(struct x86_emulate_ctxt *ctxt, ctxt->mode, linear); } -static inline int assign_eip(struct x86_emulate_ctxt *ctxt, ulong dst, - enum x86emul_mode mode) +static inline int assign_eip(struct x86_emulate_ctxt *ctxt, ulong dst) { ulong linear; int rc; @@ -802,41 +801,71 @@ static inline int assign_eip(struct x86_emulate_ctxt *ctxt, ulong dst, if (ctxt->op_bytes != sizeof(unsigned long)) addr.ea = dst & ((1UL << (ctxt->op_bytes << 3)) - 1); - rc = __linearize(ctxt, addr, &max_size, 1, false, true, mode, &linear); + rc = __linearize(ctxt, addr, &max_size, 1, false, true, ctxt->mode, &linear); if (rc == X86EMUL_CONTINUE) ctxt->_eip = addr.ea; return rc; } +static inline int emulator_recalc_and_set_mode(struct x86_emulate_ctxt *ctxt) +{ + u64 efer; + struct desc_struct cs; + u16 selector; + u32 base3; + + ctxt->ops->get_msr(ctxt, MSR_EFER, &efer); + + if (!(ctxt->ops->get_cr(ctxt, 0) & X86_CR0_PE)) { + /* Real mode. cpu must not have long mode active */ + if (efer & EFER_LMA) + return X86EMUL_UNHANDLEABLE; + ctxt->mode = X86EMUL_MODE_REAL; + return X86EMUL_CONTINUE; + } + + if (ctxt->eflags & X86_EFLAGS_VM) { + /* Protected/VM86 mode. cpu must not have long mode active */ + if (efer & EFER_LMA) + return X86EMUL_UNHANDLEABLE; + ctxt->mode = X86EMUL_MODE_VM86; + return X86EMUL_CONTINUE; + } + + if (!ctxt->ops->get_segment(ctxt, &selector, &cs, &base3, VCPU_SREG_CS)) + return X86EMUL_UNHANDLEABLE; + + if (efer & EFER_LMA) { + if (cs.l) { + /* Proper long mode */ + ctxt->mode = X86EMUL_MODE_PROT64; + } else if (cs.d) { + /* 32 bit compatibility mode*/ + ctxt->mode = X86EMUL_MODE_PROT32; + } else { + ctxt->mode = X86EMUL_MODE_PROT16; + } + } else { + /* Legacy 32 bit / 16 bit mode */ + ctxt->mode = cs.d ? X86EMUL_MODE_PROT32 : X86EMUL_MODE_PROT16; + } + + return X86EMUL_CONTINUE; +} + static inline int assign_eip_near(struct x86_emulate_ctxt *ctxt, ulong dst) { - return assign_eip(ctxt, dst, ctxt->mode); + return assign_eip(ctxt, dst); } -static int assign_eip_far(struct x86_emulate_ctxt *ctxt, ulong dst, - const struct desc_struct *cs_desc) +static int assign_eip_far(struct x86_emulate_ctxt *ctxt, ulong dst) { - enum x86emul_mode mode = ctxt->mode; - int rc; + int rc = emulator_recalc_and_set_mode(ctxt); -#ifdef CONFIG_X86_64 - if (ctxt->mode >= X86EMUL_MODE_PROT16) { - if (cs_desc->l) { - u64 efer = 0; + if (rc != X86EMUL_CONTINUE) + return rc; - ctxt->ops->get_msr(ctxt, MSR_EFER, &efer); - if (efer & EFER_LMA) - mode = X86EMUL_MODE_PROT64; - } else - mode = X86EMUL_MODE_PROT32; /* temporary value */ - } -#endif - if (mode == X86EMUL_MODE_PROT16 || mode == X86EMUL_MODE_PROT32) - mode = cs_desc->d ? X86EMUL_MODE_PROT32 : X86EMUL_MODE_PROT16; - rc = assign_eip(ctxt, dst, mode); - if (rc == X86EMUL_CONTINUE) - ctxt->mode = mode; - return rc; + return assign_eip(ctxt, dst); } static inline int jmp_rel(struct x86_emulate_ctxt *ctxt, int rel) @@ -2172,7 +2201,7 @@ static int em_jmp_far(struct x86_emulate_ctxt *ctxt) if (rc != X86EMUL_CONTINUE) return rc; - rc = assign_eip_far(ctxt, ctxt->src.val, &new_desc); + rc = assign_eip_far(ctxt, ctxt->src.val); /* Error handling is not implemented. */ if (rc != X86EMUL_CONTINUE) return X86EMUL_UNHANDLEABLE; @@ -2250,7 +2279,7 @@ static int em_ret_far(struct x86_emulate_ctxt *ctxt) &new_desc); if (rc != X86EMUL_CONTINUE) return rc; - rc = assign_eip_far(ctxt, eip, &new_desc); + rc = assign_eip_far(ctxt, eip); /* Error handling is not implemented. */ if (rc != X86EMUL_CONTINUE) return X86EMUL_UNHANDLEABLE; @@ -2432,7 +2461,7 @@ static int rsm_load_state_32(struct x86_emulate_ctxt *ctxt, ctxt->eflags = GET_SMSTATE(u32, smstate, 0x7ff4) | X86_EFLAGS_FIXED; ctxt->_eip = GET_SMSTATE(u32, smstate, 0x7ff0); - for (i = 0; i < NR_EMULATOR_GPRS; i++) + for (i = 0; i < 8; i++) *reg_write(ctxt, i) = GET_SMSTATE(u32, smstate, 0x7fd0 + i * 4); val = GET_SMSTATE(u32, smstate, 0x7fcc); @@ -2489,7 +2518,7 @@ static int rsm_load_state_64(struct x86_emulate_ctxt *ctxt, u16 selector; int i, r; - for (i = 0; i < NR_EMULATOR_GPRS; i++) + for (i = 0; i < 16; i++) *reg_write(ctxt, i) = GET_SMSTATE(u64, smstate, 0x7ff8 - i * 8); ctxt->_eip = GET_SMSTATE(u64, smstate, 0x7f78); @@ -2633,7 +2662,7 @@ static int em_rsm(struct x86_emulate_ctxt *ctxt) * those side effects need to be explicitly handled for both success * and shutdown. */ - return X86EMUL_CONTINUE; + return emulator_recalc_and_set_mode(ctxt); emulate_shutdown: ctxt->ops->triple_fault(ctxt); @@ -2876,6 +2905,7 @@ static int em_sysexit(struct x86_emulate_ctxt *ctxt) ops->set_segment(ctxt, ss_sel, &ss, 0, VCPU_SREG_SS); ctxt->_eip = rdx; + ctxt->mode = usermode; *reg_write(ctxt, VCPU_REGS_RSP) = rcx; return X86EMUL_CONTINUE; @@ -3469,7 +3499,7 @@ static int em_call_far(struct x86_emulate_ctxt *ctxt) if (rc != X86EMUL_CONTINUE) return rc; - rc = assign_eip_far(ctxt, ctxt->src.val, &new_desc); + rc = assign_eip_far(ctxt, ctxt->src.val); if (rc != X86EMUL_CONTINUE) goto fail; @@ -3611,11 +3641,25 @@ static int em_movbe(struct x86_emulate_ctxt *ctxt) static int em_cr_write(struct x86_emulate_ctxt *ctxt) { - if (ctxt->ops->set_cr(ctxt, ctxt->modrm_reg, ctxt->src.val)) + int cr_num = ctxt->modrm_reg; + int r; + + if (ctxt->ops->set_cr(ctxt, cr_num, ctxt->src.val)) return emulate_gp(ctxt, 0); /* Disable writeback. */ ctxt->dst.type = OP_NONE; + + if (cr_num == 0) { + /* + * CR0 write might have updated CR0.PE and/or CR0.PG + * which can affect the cpu's execution mode. + */ + r = emulator_recalc_and_set_mode(ctxt); + if (r != X86EMUL_CONTINUE) + return r; + } + return X86EMUL_CONTINUE; } diff --git a/arch/x86/kvm/kvm-asm-offsets.c b/arch/x86/kvm/kvm-asm-offsets.c new file mode 100644 index 0000000000000000000000000000000000000000..24a710d373238307b025e38525fc7ecc06196437 --- /dev/null +++ b/arch/x86/kvm/kvm-asm-offsets.c @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Generate definitions needed by assembly language modules. + * This code generates raw asm output which is post-processed to extract + * and format the required data. + */ +#define COMPILE_OFFSETS + +#include +#include "vmx/vmx.h" +#include "svm/svm.h" + +static void __used common(void) +{ + if (IS_ENABLED(CONFIG_KVM_AMD)) { + BLANK(); + OFFSET(SVM_vcpu_arch_regs, vcpu_svm, vcpu.arch.regs); + OFFSET(SVM_current_vmcb, vcpu_svm, current_vmcb); + OFFSET(SVM_spec_ctrl, vcpu_svm, spec_ctrl); + OFFSET(SVM_vmcb01, vcpu_svm, vmcb01); + OFFSET(KVM_VMCB_pa, kvm_vmcb_info, pa); + OFFSET(SD_save_area_pa, svm_cpu_data, save_area_pa); + } + + if (IS_ENABLED(CONFIG_KVM_INTEL)) { + BLANK(); + OFFSET(VMX_spec_ctrl, vcpu_vmx, spec_ctrl); + } +} diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 6f81539061d6485905e5a2e50a49293096f16035..b6f96d47e596d1018987755a2f96a8a9305fda0c 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -2443,6 +2443,7 @@ static bool __kvm_mmu_prepare_zap_page(struct kvm *kvm, { bool list_unstable, zapped_root = false; + lockdep_assert_held_write(&kvm->mmu_lock); trace_kvm_mmu_prepare_zap_page(sp); ++kvm->stat.mmu_shadow_zapped; *nr_zapped = mmu_zap_unsync_children(kvm, sp, invalid_list); @@ -4262,14 +4263,14 @@ static int direct_page_fault(struct kvm_vcpu *vcpu, struct kvm_page_fault *fault if (is_page_fault_stale(vcpu, fault, mmu_seq)) goto out_unlock; - r = make_mmu_pages_available(vcpu); - if (r) - goto out_unlock; - - if (is_tdp_mmu_fault) + if (is_tdp_mmu_fault) { r = kvm_tdp_mmu_map(vcpu, fault); - else + } else { + r = make_mmu_pages_available(vcpu); + if (r) + goto out_unlock; r = __direct_map(vcpu, fault); + } out_unlock: if (is_tdp_mmu_fault) @@ -6056,7 +6057,7 @@ void kvm_zap_gfn_range(struct kvm *kvm, gfn_t gfn_start, gfn_t gfn_end) write_lock(&kvm->mmu_lock); - kvm_mmu_invalidate_begin(kvm, gfn_start, gfn_end); + kvm_mmu_invalidate_begin(kvm, 0, -1ul); flush = kvm_rmap_zap_gfn_range(kvm, gfn_start, gfn_end); @@ -6070,7 +6071,7 @@ void kvm_zap_gfn_range(struct kvm *kvm, gfn_t gfn_start, gfn_t gfn_end) kvm_flush_remote_tlbs_with_address(kvm, gfn_start, gfn_end - gfn_start); - kvm_mmu_invalidate_end(kvm, gfn_start, gfn_end); + kvm_mmu_invalidate_end(kvm, 0, -1ul); write_unlock(&kvm->mmu_lock); } diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c index d9b9a0f0db17cb3f329e749ca1a804fef498590b..de1fd73697365c18e27157205c0c7a39e4650127 100644 --- a/arch/x86/kvm/pmu.c +++ b/arch/x86/kvm/pmu.c @@ -56,7 +56,7 @@ static const struct x86_cpu_id vmx_icl_pebs_cpu[] = { * code. Each pmc, stored in kvm_pmc.idx field, is unique across * all perf counters (both gp and fixed). The mapping relationship * between pmc and perf counters is as the following: - * * Intel: [0 .. INTEL_PMC_MAX_GENERIC-1] <=> gp counters + * * Intel: [0 .. KVM_INTEL_PMC_MAX_GENERIC-1] <=> gp counters * [INTEL_PMC_IDX_FIXED .. INTEL_PMC_IDX_FIXED + 2] <=> fixed * * AMD: [0 .. AMD64_NUM_COUNTERS-1] and, for families 15H * and later, [0 .. AMD64_NUM_COUNTERS_CORE-1] <=> gp counters diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c index 4c620999d230a507dfcfd3340e381c3436da9921..995bc0f907591745677aa6950d0a78620ddc1228 100644 --- a/arch/x86/kvm/svm/nested.c +++ b/arch/x86/kvm/svm/nested.c @@ -1091,6 +1091,12 @@ int nested_svm_vmexit(struct vcpu_svm *svm) static void nested_svm_triple_fault(struct kvm_vcpu *vcpu) { + struct vcpu_svm *svm = to_svm(vcpu); + + if (!vmcb12_is_intercept(&svm->nested.ctl, INTERCEPT_SHUTDOWN)) + return; + + kvm_clear_request(KVM_REQ_TRIPLE_FAULT, vcpu); nested_svm_simple_vmexit(to_svm(vcpu), SVM_EXIT_SHUTDOWN); } @@ -1125,6 +1131,9 @@ void svm_free_nested(struct vcpu_svm *svm) if (!svm->nested.initialized) return; + if (WARN_ON_ONCE(svm->vmcb != svm->vmcb01.ptr)) + svm_switch_vmcb(svm, &svm->vmcb01); + svm_vcpu_free_msrpm(svm->nested.msrpm); svm->nested.msrpm = NULL; @@ -1143,9 +1152,6 @@ void svm_free_nested(struct vcpu_svm *svm) svm->nested.initialized = false; } -/* - * Forcibly leave nested mode in order to be able to reset the VCPU later on. - */ void svm_leave_nested(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm = to_svm(vcpu); diff --git a/arch/x86/kvm/svm/pmu.c b/arch/x86/kvm/svm/pmu.c index b68956299fa8ec1240a280a7e3718a41a154efcd..9d65cd095691be1aad51b745eb4c7d5dba992dfe 100644 --- a/arch/x86/kvm/svm/pmu.c +++ b/arch/x86/kvm/svm/pmu.c @@ -192,9 +192,10 @@ static void amd_pmu_init(struct kvm_vcpu *vcpu) struct kvm_pmu *pmu = vcpu_to_pmu(vcpu); int i; - BUILD_BUG_ON(AMD64_NUM_COUNTERS_CORE > INTEL_PMC_MAX_GENERIC); + BUILD_BUG_ON(KVM_AMD_PMC_MAX_GENERIC > AMD64_NUM_COUNTERS_CORE); + BUILD_BUG_ON(KVM_AMD_PMC_MAX_GENERIC > INTEL_PMC_MAX_GENERIC); - for (i = 0; i < AMD64_NUM_COUNTERS_CORE ; i++) { + for (i = 0; i < KVM_AMD_PMC_MAX_GENERIC ; i++) { pmu->gp_counters[i].type = KVM_PMC_GP; pmu->gp_counters[i].vcpu = vcpu; pmu->gp_counters[i].idx = i; @@ -207,7 +208,7 @@ static void amd_pmu_reset(struct kvm_vcpu *vcpu) struct kvm_pmu *pmu = vcpu_to_pmu(vcpu); int i; - for (i = 0; i < AMD64_NUM_COUNTERS_CORE; i++) { + for (i = 0; i < KVM_AMD_PMC_MAX_GENERIC; i++) { struct kvm_pmc *pmc = &pmu->gp_counters[i]; pmc_stop_counter(pmc); diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index 28064060413acb81b4b7933fe446ad72c8c32c81..efaaef2b7ae11b280da39abf027107ed242fd1b2 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -196,7 +196,7 @@ static void sev_asid_free(struct kvm_sev_info *sev) __set_bit(sev->asid, sev_reclaim_asid_bitmap); for_each_possible_cpu(cpu) { - sd = per_cpu(svm_data, cpu); + sd = per_cpu_ptr(&svm_data, cpu); sd->sev_vmcbs[sev->asid] = NULL; } @@ -605,7 +605,7 @@ static int sev_es_sync_vmsa(struct vcpu_svm *svm) save->dr6 = svm->vcpu.arch.dr6; pr_debug("Virtual Machine Save Area (VMSA):\n"); - print_hex_dump(KERN_CONT, "", DUMP_PREFIX_NONE, 16, 1, save, sizeof(*save), false); + print_hex_dump_debug("", DUMP_PREFIX_NONE, 16, 1, save, sizeof(*save), false); return 0; } @@ -2600,7 +2600,7 @@ void sev_es_unmap_ghcb(struct vcpu_svm *svm) void pre_sev_run(struct vcpu_svm *svm, int cpu) { - struct svm_cpu_data *sd = per_cpu(svm_data, cpu); + struct svm_cpu_data *sd = per_cpu_ptr(&svm_data, cpu); int asid = sev_get_asid(svm->vcpu.kvm); /* Assign the asid allocated with this SEV guest */ diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 58f0077d935799eaa5922bf9da4dde5e4a02d2b2..ce362e88a5676cf1deac281fed528a010e594291 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -245,7 +245,7 @@ struct kvm_ldttss_desc { u32 zero1; } __attribute__((packed)); -DEFINE_PER_CPU(struct svm_cpu_data *, svm_data); +DEFINE_PER_CPU(struct svm_cpu_data, svm_data); /* * Only MSR_TSC_AUX is switched via the user return hook. EFER is switched via @@ -346,12 +346,6 @@ int svm_set_efer(struct kvm_vcpu *vcpu, u64 efer) return 0; } -static int is_external_interrupt(u32 info) -{ - info &= SVM_EVTINJ_TYPE_MASK | SVM_EVTINJ_VALID; - return info == (SVM_EVTINJ_VALID | SVM_EVTINJ_TYPE_INTR); -} - static u32 svm_get_interrupt_shadow(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm = to_svm(vcpu); @@ -581,12 +575,7 @@ static int svm_hardware_enable(void) pr_err("%s: err EOPNOTSUPP on %d\n", __func__, me); return -EINVAL; } - sd = per_cpu(svm_data, me); - if (!sd) { - pr_err("%s: svm_data is NULL on %d\n", __func__, me); - return -EINVAL; - } - + sd = per_cpu_ptr(&svm_data, me); sd->asid_generation = 1; sd->max_asid = cpuid_ebx(SVM_CPUID_FUNC) - 1; sd->next_asid = sd->max_asid + 1; @@ -597,7 +586,7 @@ static int svm_hardware_enable(void) wrmsrl(MSR_EFER, efer | EFER_SVME); - wrmsrl(MSR_VM_HSAVE_PA, __sme_page_pa(sd->save_area)); + wrmsrl(MSR_VM_HSAVE_PA, sd->save_area_pa); if (static_cpu_has(X86_FEATURE_TSCRATEMSR)) { /* @@ -646,42 +635,37 @@ static int svm_hardware_enable(void) static void svm_cpu_uninit(int cpu) { - struct svm_cpu_data *sd = per_cpu(svm_data, cpu); + struct svm_cpu_data *sd = per_cpu_ptr(&svm_data, cpu); - if (!sd) + if (!sd->save_area) return; - per_cpu(svm_data, cpu) = NULL; kfree(sd->sev_vmcbs); __free_page(sd->save_area); - kfree(sd); + sd->save_area_pa = 0; + sd->save_area = NULL; } static int svm_cpu_init(int cpu) { - struct svm_cpu_data *sd; + struct svm_cpu_data *sd = per_cpu_ptr(&svm_data, cpu); int ret = -ENOMEM; - sd = kzalloc(sizeof(struct svm_cpu_data), GFP_KERNEL); - if (!sd) - return ret; - sd->cpu = cpu; + memset(sd, 0, sizeof(struct svm_cpu_data)); sd->save_area = alloc_page(GFP_KERNEL | __GFP_ZERO); if (!sd->save_area) - goto free_cpu_data; + return ret; ret = sev_cpu_init(sd); if (ret) goto free_save_area; - per_cpu(svm_data, cpu) = sd; - + sd->save_area_pa = __sme_page_pa(sd->save_area); return 0; free_save_area: __free_page(sd->save_area); -free_cpu_data: - kfree(sd); + sd->save_area = NULL; return ret; } @@ -730,6 +714,15 @@ static bool msr_write_intercepted(struct kvm_vcpu *vcpu, u32 msr) u32 offset; u32 *msrpm; + /* + * For non-nested case: + * If the L01 MSR bitmap does not intercept the MSR, then we need to + * save it. + * + * For nested case: + * If the L02 MSR bitmap does not intercept the MSR, then we need to + * save it. + */ msrpm = is_guest_mode(vcpu) ? to_svm(vcpu)->nested.msrpm: to_svm(vcpu)->msrpm; @@ -1425,7 +1418,7 @@ static void svm_clear_current_vmcb(struct vmcb *vmcb) int i; for_each_online_cpu(i) - cmpxchg(&per_cpu(svm_data, i)->current_vmcb, vmcb, NULL); + cmpxchg(per_cpu_ptr(&svm_data.current_vmcb, i), vmcb, NULL); } static void svm_vcpu_free(struct kvm_vcpu *vcpu) @@ -1439,6 +1432,7 @@ static void svm_vcpu_free(struct kvm_vcpu *vcpu) */ svm_clear_current_vmcb(svm->vmcb); + svm_leave_nested(vcpu); svm_free_nested(svm); sev_free_vcpu(vcpu); @@ -1450,7 +1444,7 @@ static void svm_vcpu_free(struct kvm_vcpu *vcpu) static void svm_prepare_switch_to_guest(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm = to_svm(vcpu); - struct svm_cpu_data *sd = per_cpu(svm_data, vcpu->cpu); + struct svm_cpu_data *sd = per_cpu_ptr(&svm_data, vcpu->cpu); if (sev_es_guest(vcpu->kvm)) sev_es_unmap_ghcb(svm); @@ -1462,7 +1456,7 @@ static void svm_prepare_switch_to_guest(struct kvm_vcpu *vcpu) * Save additional host state that will be restored on VMEXIT (sev-es) * or subsequent vmload of host save area. */ - vmsave(__sme_page_pa(sd->save_area)); + vmsave(sd->save_area_pa); if (sev_es_guest(vcpu->kvm)) { struct sev_es_save_area *hostsa; hostsa = (struct sev_es_save_area *)(page_address(sd->save_area) + 0x400); @@ -1487,7 +1481,7 @@ static void svm_prepare_host_switch(struct kvm_vcpu *vcpu) static void svm_vcpu_load(struct kvm_vcpu *vcpu, int cpu) { struct vcpu_svm *svm = to_svm(vcpu); - struct svm_cpu_data *sd = per_cpu(svm_data, cpu); + struct svm_cpu_data *sd = per_cpu_ptr(&svm_data, cpu); if (sd->current_vmcb != svm->vmcb) { sd->current_vmcb = svm->vmcb; @@ -2710,9 +2704,9 @@ static int svm_get_msr_feature(struct kvm_msr_entry *msr) msr->data = 0; switch (msr->index) { - case MSR_F10H_DECFG: - if (boot_cpu_has(X86_FEATURE_LFENCE_RDTSC)) - msr->data |= MSR_F10H_DECFG_LFENCE_SERIALIZE; + case MSR_AMD64_DE_CFG: + if (cpu_feature_enabled(X86_FEATURE_LFENCE_RDTSC)) + msr->data |= MSR_AMD64_DE_CFG_LFENCE_SERIALIZE; break; case MSR_IA32_PERF_CAPABILITIES: return 0; @@ -2813,7 +2807,7 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) msr_info->data = 0x1E; } break; - case MSR_F10H_DECFG: + case MSR_AMD64_DE_CFG: msr_info->data = svm->msr_decfg; break; default: @@ -3042,7 +3036,7 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr) case MSR_VM_IGNNE: vcpu_unimpl(vcpu, "unimplemented wrmsr: 0x%x data 0x%llx\n", ecx, data); break; - case MSR_F10H_DECFG: { + case MSR_AMD64_DE_CFG: { struct kvm_msr_entry msr_entry; msr_entry.index = msr->index; @@ -3426,15 +3420,6 @@ static int svm_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) return 0; } - if (is_external_interrupt(svm->vmcb->control.exit_int_info) && - exit_code != SVM_EXIT_EXCP_BASE + PF_VECTOR && - exit_code != SVM_EXIT_NPF && exit_code != SVM_EXIT_TASK_SWITCH && - exit_code != SVM_EXIT_INTR && exit_code != SVM_EXIT_NMI) - printk(KERN_ERR "%s: unexpected exit_int_info 0x%x " - "exit_code 0x%x\n", - __func__, svm->vmcb->control.exit_int_info, - exit_code); - if (exit_fastpath != EXIT_FASTPATH_NONE) return 1; @@ -3443,7 +3428,7 @@ static int svm_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) static void reload_tss(struct kvm_vcpu *vcpu) { - struct svm_cpu_data *sd = per_cpu(svm_data, vcpu->cpu); + struct svm_cpu_data *sd = per_cpu_ptr(&svm_data, vcpu->cpu); sd->tss_desc->type = 9; /* available 32/64-bit TSS */ load_TR_desc(); @@ -3451,7 +3436,7 @@ static void reload_tss(struct kvm_vcpu *vcpu) static void pre_svm_run(struct kvm_vcpu *vcpu) { - struct svm_cpu_data *sd = per_cpu(svm_data, vcpu->cpu); + struct svm_cpu_data *sd = per_cpu_ptr(&svm_data, vcpu->cpu); struct vcpu_svm *svm = to_svm(vcpu); /* @@ -3911,30 +3896,16 @@ static fastpath_t svm_exit_handlers_fastpath(struct kvm_vcpu *vcpu) return EXIT_FASTPATH_NONE; } -static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu) +static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu, bool spec_ctrl_intercepted) { struct vcpu_svm *svm = to_svm(vcpu); - unsigned long vmcb_pa = svm->current_vmcb->pa; guest_state_enter_irqoff(); - if (sev_es_guest(vcpu->kvm)) { - __svm_sev_es_vcpu_run(vmcb_pa); - } else { - struct svm_cpu_data *sd = per_cpu(svm_data, vcpu->cpu); - - /* - * Use a single vmcb (vmcb01 because it's always valid) for - * context switching guest state via VMLOAD/VMSAVE, that way - * the state doesn't need to be copied between vmcb01 and - * vmcb02 when switching vmcbs for nested virtualization. - */ - vmload(svm->vmcb01.pa); - __svm_vcpu_run(vmcb_pa, (unsigned long *)&vcpu->arch.regs); - vmsave(svm->vmcb01.pa); - - vmload(__sme_page_pa(sd->save_area)); - } + if (sev_es_guest(vcpu->kvm)) + __svm_sev_es_vcpu_run(svm, spec_ctrl_intercepted); + else + __svm_vcpu_run(svm, spec_ctrl_intercepted); guest_state_exit_irqoff(); } @@ -3942,6 +3913,7 @@ static noinstr void svm_vcpu_enter_exit(struct kvm_vcpu *vcpu) static __no_kcsan fastpath_t svm_vcpu_run(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm = to_svm(vcpu); + bool spec_ctrl_intercepted = msr_write_intercepted(vcpu, MSR_IA32_SPEC_CTRL); trace_kvm_entry(vcpu); @@ -3998,34 +3970,15 @@ static __no_kcsan fastpath_t svm_vcpu_run(struct kvm_vcpu *vcpu) * being speculatively taken. */ if (!static_cpu_has(X86_FEATURE_V_SPEC_CTRL)) - x86_spec_ctrl_set_guest(svm->spec_ctrl, svm->virt_spec_ctrl); - - svm_vcpu_enter_exit(vcpu); + x86_spec_ctrl_set_guest(svm->virt_spec_ctrl); - /* - * We do not use IBRS in the kernel. If this vCPU has used the - * SPEC_CTRL MSR it may have left it on; save the value and - * turn it off. This is much more efficient than blindly adding - * it to the atomic save/restore list. Especially as the former - * (Saving guest MSRs on vmexit) doesn't even exist in KVM. - * - * For non-nested case: - * If the L01 MSR bitmap does not intercept the MSR, then we need to - * save it. - * - * For nested case: - * If the L02 MSR bitmap does not intercept the MSR, then we need to - * save it. - */ - if (!static_cpu_has(X86_FEATURE_V_SPEC_CTRL) && - unlikely(!msr_write_intercepted(vcpu, MSR_IA32_SPEC_CTRL))) - svm->spec_ctrl = native_read_msr(MSR_IA32_SPEC_CTRL); + svm_vcpu_enter_exit(vcpu, spec_ctrl_intercepted); if (!sev_es_guest(vcpu->kvm)) reload_tss(vcpu); if (!static_cpu_has(X86_FEATURE_V_SPEC_CTRL)) - x86_spec_ctrl_restore_host(svm->spec_ctrl, svm->virt_spec_ctrl); + x86_spec_ctrl_restore_host(svm->virt_spec_ctrl); if (!sev_es_guest(vcpu->kvm)) { vcpu->arch.cr2 = svm->vmcb->save.cr2; diff --git a/arch/x86/kvm/svm/svm.h b/arch/x86/kvm/svm/svm.h index 6a7686bf69000b1822f36125f623a8d24ae54435..199a2ecef1cec611d8c903ae9a525589ac30ea25 100644 --- a/arch/x86/kvm/svm/svm.h +++ b/arch/x86/kvm/svm/svm.h @@ -209,7 +209,6 @@ struct vcpu_svm { struct vmcb *vmcb; struct kvm_vmcb_info vmcb01; struct kvm_vmcb_info *current_vmcb; - struct svm_cpu_data *svm_data; u32 asid; u32 sysenter_esp_hi; u32 sysenter_eip_hi; @@ -281,8 +280,6 @@ struct vcpu_svm { }; struct svm_cpu_data { - int cpu; - u64 asid_generation; u32 max_asid; u32 next_asid; @@ -290,13 +287,15 @@ struct svm_cpu_data { struct kvm_ldttss_desc *tss_desc; struct page *save_area; + unsigned long save_area_pa; + struct vmcb *current_vmcb; /* index = sev_asid, value = vmcb pointer */ struct vmcb **sev_vmcbs; }; -DECLARE_PER_CPU(struct svm_cpu_data *, svm_data); +DECLARE_PER_CPU(struct svm_cpu_data, svm_data); void recalc_intercepts(struct vcpu_svm *svm); @@ -683,7 +682,7 @@ void sev_es_unmap_ghcb(struct vcpu_svm *svm); /* vmenter.S */ -void __svm_sev_es_vcpu_run(unsigned long vmcb_pa); -void __svm_vcpu_run(unsigned long vmcb_pa, unsigned long *regs); +void __svm_sev_es_vcpu_run(struct vcpu_svm *svm, bool spec_ctrl_intercepted); +void __svm_vcpu_run(struct vcpu_svm *svm, bool spec_ctrl_intercepted); #endif diff --git a/arch/x86/kvm/svm/svm_ops.h b/arch/x86/kvm/svm/svm_ops.h index 9430d6437c9f650ef87a51ce45d37825eeecdd84..36c8af87a707ac0556fb1e50157e70c6305df798 100644 --- a/arch/x86/kvm/svm/svm_ops.h +++ b/arch/x86/kvm/svm/svm_ops.h @@ -61,9 +61,4 @@ static __always_inline void vmsave(unsigned long pa) svm_asm1(vmsave, "a" (pa), "memory"); } -static __always_inline void vmload(unsigned long pa) -{ - svm_asm1(vmload, "a" (pa), "memory"); -} - #endif /* __KVM_X86_SVM_OPS_H */ diff --git a/arch/x86/kvm/svm/vmenter.S b/arch/x86/kvm/svm/vmenter.S index 723f8534986c31b505a2e5d314c347f720fbecd9..34367dc203f217dd9f87e45831ef9ce0ecc871b3 100644 --- a/arch/x86/kvm/svm/vmenter.S +++ b/arch/x86/kvm/svm/vmenter.S @@ -4,35 +4,97 @@ #include #include #include +#include "kvm-asm-offsets.h" #define WORD_SIZE (BITS_PER_LONG / 8) /* Intentionally omit RAX as it's context switched by hardware */ -#define VCPU_RCX __VCPU_REGS_RCX * WORD_SIZE -#define VCPU_RDX __VCPU_REGS_RDX * WORD_SIZE -#define VCPU_RBX __VCPU_REGS_RBX * WORD_SIZE +#define VCPU_RCX (SVM_vcpu_arch_regs + __VCPU_REGS_RCX * WORD_SIZE) +#define VCPU_RDX (SVM_vcpu_arch_regs + __VCPU_REGS_RDX * WORD_SIZE) +#define VCPU_RBX (SVM_vcpu_arch_regs + __VCPU_REGS_RBX * WORD_SIZE) /* Intentionally omit RSP as it's context switched by hardware */ -#define VCPU_RBP __VCPU_REGS_RBP * WORD_SIZE -#define VCPU_RSI __VCPU_REGS_RSI * WORD_SIZE -#define VCPU_RDI __VCPU_REGS_RDI * WORD_SIZE +#define VCPU_RBP (SVM_vcpu_arch_regs + __VCPU_REGS_RBP * WORD_SIZE) +#define VCPU_RSI (SVM_vcpu_arch_regs + __VCPU_REGS_RSI * WORD_SIZE) +#define VCPU_RDI (SVM_vcpu_arch_regs + __VCPU_REGS_RDI * WORD_SIZE) #ifdef CONFIG_X86_64 -#define VCPU_R8 __VCPU_REGS_R8 * WORD_SIZE -#define VCPU_R9 __VCPU_REGS_R9 * WORD_SIZE -#define VCPU_R10 __VCPU_REGS_R10 * WORD_SIZE -#define VCPU_R11 __VCPU_REGS_R11 * WORD_SIZE -#define VCPU_R12 __VCPU_REGS_R12 * WORD_SIZE -#define VCPU_R13 __VCPU_REGS_R13 * WORD_SIZE -#define VCPU_R14 __VCPU_REGS_R14 * WORD_SIZE -#define VCPU_R15 __VCPU_REGS_R15 * WORD_SIZE +#define VCPU_R8 (SVM_vcpu_arch_regs + __VCPU_REGS_R8 * WORD_SIZE) +#define VCPU_R9 (SVM_vcpu_arch_regs + __VCPU_REGS_R9 * WORD_SIZE) +#define VCPU_R10 (SVM_vcpu_arch_regs + __VCPU_REGS_R10 * WORD_SIZE) +#define VCPU_R11 (SVM_vcpu_arch_regs + __VCPU_REGS_R11 * WORD_SIZE) +#define VCPU_R12 (SVM_vcpu_arch_regs + __VCPU_REGS_R12 * WORD_SIZE) +#define VCPU_R13 (SVM_vcpu_arch_regs + __VCPU_REGS_R13 * WORD_SIZE) +#define VCPU_R14 (SVM_vcpu_arch_regs + __VCPU_REGS_R14 * WORD_SIZE) +#define VCPU_R15 (SVM_vcpu_arch_regs + __VCPU_REGS_R15 * WORD_SIZE) #endif +#define SVM_vmcb01_pa (SVM_vmcb01 + KVM_VMCB_pa) + .section .noinstr.text, "ax" +.macro RESTORE_GUEST_SPEC_CTRL + /* No need to do anything if SPEC_CTRL is unset or V_SPEC_CTRL is set */ + ALTERNATIVE_2 "", \ + "jmp 800f", X86_FEATURE_MSR_SPEC_CTRL, \ + "", X86_FEATURE_V_SPEC_CTRL +801: +.endm +.macro RESTORE_GUEST_SPEC_CTRL_BODY +800: + /* + * SPEC_CTRL handling: if the guest's SPEC_CTRL value differs from the + * host's, write the MSR. This is kept out-of-line so that the common + * case does not have to jump. + * + * IMPORTANT: To avoid RSB underflow attacks and any other nastiness, + * there must not be any returns or indirect branches between this code + * and vmentry. + */ + movl SVM_spec_ctrl(%_ASM_DI), %eax + cmp PER_CPU_VAR(x86_spec_ctrl_current), %eax + je 801b + mov $MSR_IA32_SPEC_CTRL, %ecx + xor %edx, %edx + wrmsr + jmp 801b +.endm + +.macro RESTORE_HOST_SPEC_CTRL + /* No need to do anything if SPEC_CTRL is unset or V_SPEC_CTRL is set */ + ALTERNATIVE_2 "", \ + "jmp 900f", X86_FEATURE_MSR_SPEC_CTRL, \ + "", X86_FEATURE_V_SPEC_CTRL +901: +.endm +.macro RESTORE_HOST_SPEC_CTRL_BODY +900: + /* Same for after vmexit. */ + mov $MSR_IA32_SPEC_CTRL, %ecx + + /* + * Load the value that the guest had written into MSR_IA32_SPEC_CTRL, + * if it was not intercepted during guest execution. + */ + cmpb $0, (%_ASM_SP) + jnz 998f + rdmsr + movl %eax, SVM_spec_ctrl(%_ASM_DI) +998: + + /* Now restore the host value of the MSR if different from the guest's. */ + movl PER_CPU_VAR(x86_spec_ctrl_current), %eax + cmp SVM_spec_ctrl(%_ASM_DI), %eax + je 901b + xor %edx, %edx + wrmsr + jmp 901b +.endm + + /** * __svm_vcpu_run - Run a vCPU via a transition to SVM guest mode - * @vmcb_pa: unsigned long - * @regs: unsigned long * (to guest registers) + * @svm: struct vcpu_svm * + * @spec_ctrl_intercepted: bool */ SYM_FUNC_START(__svm_vcpu_run) push %_ASM_BP @@ -47,49 +109,71 @@ SYM_FUNC_START(__svm_vcpu_run) #endif push %_ASM_BX - /* Save @regs. */ + /* + * Save variables needed after vmexit on the stack, in inverse + * order compared to when they are needed. + */ + + /* Accessed directly from the stack in RESTORE_HOST_SPEC_CTRL. */ push %_ASM_ARG2 - /* Save @vmcb. */ + /* Needed to restore access to percpu variables. */ + __ASM_SIZE(push) PER_CPU_VAR(svm_data + SD_save_area_pa) + + /* Finally save @svm. */ push %_ASM_ARG1 - /* Move @regs to RAX. */ - mov %_ASM_ARG2, %_ASM_AX +.ifnc _ASM_ARG1, _ASM_DI + /* + * Stash @svm in RDI early. On 32-bit, arguments are in RAX, RCX + * and RDX which are clobbered by RESTORE_GUEST_SPEC_CTRL. + */ + mov %_ASM_ARG1, %_ASM_DI +.endif + + /* Clobbers RAX, RCX, RDX. */ + RESTORE_GUEST_SPEC_CTRL + + /* + * Use a single vmcb (vmcb01 because it's always valid) for + * context switching guest state via VMLOAD/VMSAVE, that way + * the state doesn't need to be copied between vmcb01 and + * vmcb02 when switching vmcbs for nested virtualization. + */ + mov SVM_vmcb01_pa(%_ASM_DI), %_ASM_AX +1: vmload %_ASM_AX +2: + + /* Get svm->current_vmcb->pa into RAX. */ + mov SVM_current_vmcb(%_ASM_DI), %_ASM_AX + mov KVM_VMCB_pa(%_ASM_AX), %_ASM_AX /* Load guest registers. */ - mov VCPU_RCX(%_ASM_AX), %_ASM_CX - mov VCPU_RDX(%_ASM_AX), %_ASM_DX - mov VCPU_RBX(%_ASM_AX), %_ASM_BX - mov VCPU_RBP(%_ASM_AX), %_ASM_BP - mov VCPU_RSI(%_ASM_AX), %_ASM_SI - mov VCPU_RDI(%_ASM_AX), %_ASM_DI + mov VCPU_RCX(%_ASM_DI), %_ASM_CX + mov VCPU_RDX(%_ASM_DI), %_ASM_DX + mov VCPU_RBX(%_ASM_DI), %_ASM_BX + mov VCPU_RBP(%_ASM_DI), %_ASM_BP + mov VCPU_RSI(%_ASM_DI), %_ASM_SI #ifdef CONFIG_X86_64 - mov VCPU_R8 (%_ASM_AX), %r8 - mov VCPU_R9 (%_ASM_AX), %r9 - mov VCPU_R10(%_ASM_AX), %r10 - mov VCPU_R11(%_ASM_AX), %r11 - mov VCPU_R12(%_ASM_AX), %r12 - mov VCPU_R13(%_ASM_AX), %r13 - mov VCPU_R14(%_ASM_AX), %r14 - mov VCPU_R15(%_ASM_AX), %r15 + mov VCPU_R8 (%_ASM_DI), %r8 + mov VCPU_R9 (%_ASM_DI), %r9 + mov VCPU_R10(%_ASM_DI), %r10 + mov VCPU_R11(%_ASM_DI), %r11 + mov VCPU_R12(%_ASM_DI), %r12 + mov VCPU_R13(%_ASM_DI), %r13 + mov VCPU_R14(%_ASM_DI), %r14 + mov VCPU_R15(%_ASM_DI), %r15 #endif - - /* "POP" @vmcb to RAX. */ - pop %_ASM_AX + mov VCPU_RDI(%_ASM_DI), %_ASM_DI /* Enter guest mode */ sti -1: vmrun %_ASM_AX - -2: cli - -#ifdef CONFIG_RETPOLINE - /* IMPORTANT: Stuff the RSB immediately after VM-Exit, before RET! */ - FILL_RETURN_BUFFER %_ASM_AX, RSB_CLEAR_LOOPS, X86_FEATURE_RETPOLINE -#endif +3: vmrun %_ASM_AX +4: + cli - /* "POP" @regs to RAX. */ + /* Pop @svm to RAX while it's the only available register. */ pop %_ASM_AX /* Save all guest registers. */ @@ -110,6 +194,26 @@ SYM_FUNC_START(__svm_vcpu_run) mov %r15, VCPU_R15(%_ASM_AX) #endif + /* @svm can stay in RDI from now on. */ + mov %_ASM_AX, %_ASM_DI + + mov SVM_vmcb01_pa(%_ASM_DI), %_ASM_AX +5: vmsave %_ASM_AX +6: + + /* Restores GSBASE among other things, allowing access to percpu data. */ + pop %_ASM_AX +7: vmload %_ASM_AX +8: + +#ifdef CONFIG_RETPOLINE + /* IMPORTANT: Stuff the RSB immediately after VM-Exit, before RET! */ + FILL_RETURN_BUFFER %_ASM_AX, RSB_CLEAR_LOOPS, X86_FEATURE_RETPOLINE +#endif + + /* Clobbers RAX, RCX, RDX. */ + RESTORE_HOST_SPEC_CTRL + /* * Mitigate RETBleed for AMD/Hygon Zen uarch. RET should be * untrained as soon as we exit the VM and are back to the @@ -145,6 +249,9 @@ SYM_FUNC_START(__svm_vcpu_run) xor %r15d, %r15d #endif + /* "Pop" @spec_ctrl_intercepted. */ + pop %_ASM_BX + pop %_ASM_BX #ifdef CONFIG_X86_64 @@ -159,17 +266,33 @@ SYM_FUNC_START(__svm_vcpu_run) pop %_ASM_BP RET -3: cmpb $0, kvm_rebooting + RESTORE_GUEST_SPEC_CTRL_BODY + RESTORE_HOST_SPEC_CTRL_BODY + +10: cmpb $0, kvm_rebooting jne 2b ud2 +30: cmpb $0, kvm_rebooting + jne 4b + ud2 +50: cmpb $0, kvm_rebooting + jne 6b + ud2 +70: cmpb $0, kvm_rebooting + jne 8b + ud2 - _ASM_EXTABLE(1b, 3b) + _ASM_EXTABLE(1b, 10b) + _ASM_EXTABLE(3b, 30b) + _ASM_EXTABLE(5b, 50b) + _ASM_EXTABLE(7b, 70b) SYM_FUNC_END(__svm_vcpu_run) /** * __svm_sev_es_vcpu_run - Run a SEV-ES vCPU via a transition to SVM guest mode - * @vmcb_pa: unsigned long + * @svm: struct vcpu_svm * + * @spec_ctrl_intercepted: bool */ SYM_FUNC_START(__svm_sev_es_vcpu_run) push %_ASM_BP @@ -184,8 +307,31 @@ SYM_FUNC_START(__svm_sev_es_vcpu_run) #endif push %_ASM_BX - /* Move @vmcb to RAX. */ - mov %_ASM_ARG1, %_ASM_AX + /* + * Save variables needed after vmexit on the stack, in inverse + * order compared to when they are needed. + */ + + /* Accessed directly from the stack in RESTORE_HOST_SPEC_CTRL. */ + push %_ASM_ARG2 + + /* Save @svm. */ + push %_ASM_ARG1 + +.ifnc _ASM_ARG1, _ASM_DI + /* + * Stash @svm in RDI early. On 32-bit, arguments are in RAX, RCX + * and RDX which are clobbered by RESTORE_GUEST_SPEC_CTRL. + */ + mov %_ASM_ARG1, %_ASM_DI +.endif + + /* Clobbers RAX, RCX, RDX. */ + RESTORE_GUEST_SPEC_CTRL + + /* Get svm->current_vmcb->pa into RAX. */ + mov SVM_current_vmcb(%_ASM_DI), %_ASM_AX + mov KVM_VMCB_pa(%_ASM_AX), %_ASM_AX /* Enter guest mode */ sti @@ -194,11 +340,17 @@ SYM_FUNC_START(__svm_sev_es_vcpu_run) 2: cli + /* Pop @svm to RDI, guest registers have been saved already. */ + pop %_ASM_DI + #ifdef CONFIG_RETPOLINE /* IMPORTANT: Stuff the RSB immediately after VM-Exit, before RET! */ FILL_RETURN_BUFFER %_ASM_AX, RSB_CLEAR_LOOPS, X86_FEATURE_RETPOLINE #endif + /* Clobbers RAX, RCX, RDX. */ + RESTORE_HOST_SPEC_CTRL + /* * Mitigate RETBleed for AMD/Hygon Zen uarch. RET should be * untrained as soon as we exit the VM and are back to the @@ -208,6 +360,9 @@ SYM_FUNC_START(__svm_sev_es_vcpu_run) */ UNTRAIN_RET + /* "Pop" @spec_ctrl_intercepted. */ + pop %_ASM_BX + pop %_ASM_BX #ifdef CONFIG_X86_64 @@ -222,6 +377,9 @@ SYM_FUNC_START(__svm_sev_es_vcpu_run) pop %_ASM_BP RET + RESTORE_GUEST_SPEC_CTRL_BODY + RESTORE_HOST_SPEC_CTRL_BODY + 3: cmpb $0, kvm_rebooting jne 2b ud2 diff --git a/arch/x86/kvm/vmx/capabilities.h b/arch/x86/kvm/vmx/capabilities.h index 87c4e46daf3725953f1ecac77dd8a64b9c65704c..07254314f3dd5b4412b97c0d0b42aa4de52ac835 100644 --- a/arch/x86/kvm/vmx/capabilities.h +++ b/arch/x86/kvm/vmx/capabilities.h @@ -24,8 +24,6 @@ extern int __read_mostly pt_mode; #define PMU_CAP_FW_WRITES (1ULL << 13) #define PMU_CAP_LBR_FMT 0x3f -#define DEBUGCTLMSR_LBR_MASK (DEBUGCTLMSR_LBR | DEBUGCTLMSR_FREEZE_LBRS_ON_PMI) - struct nested_vmx_msrs { /* * We only store the "true" versions of the VMX capability MSRs. We @@ -400,6 +398,7 @@ static inline bool vmx_pebs_supported(void) static inline u64 vmx_get_perf_capabilities(void) { u64 perf_cap = PMU_CAP_FW_WRITES; + struct x86_pmu_lbr lbr; u64 host_perf_cap = 0; if (!enable_pmu) @@ -408,7 +407,8 @@ static inline u64 vmx_get_perf_capabilities(void) if (boot_cpu_has(X86_FEATURE_PDCM)) rdmsrl(MSR_IA32_PERF_CAPABILITIES, host_perf_cap); - perf_cap |= host_perf_cap & PMU_CAP_LBR_FMT; + if (x86_perf_get_lbr(&lbr) >= 0 && lbr.nr) + perf_cap |= host_perf_cap & PMU_CAP_LBR_FMT; if (vmx_pebs_supported()) { perf_cap |= host_perf_cap & PERF_CAP_PEBS_MASK; @@ -419,19 +419,6 @@ static inline u64 vmx_get_perf_capabilities(void) return perf_cap; } -static inline u64 vmx_supported_debugctl(void) -{ - u64 debugctl = 0; - - if (boot_cpu_has(X86_FEATURE_BUS_LOCK_DETECT)) - debugctl |= DEBUGCTLMSR_BUS_LOCK_DETECT; - - if (vmx_get_perf_capabilities() & PMU_CAP_LBR_FMT) - debugctl |= DEBUGCTLMSR_LBR_MASK; - - return debugctl; -} - static inline bool cpu_has_notify_vmexit(void) { return vmcs_config.cpu_based_2nd_exec_ctrl & diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index 0c62352dda6abc9bf72dfaaaa760cc5bb78bbcbf..5b0d4859e4b783b9cd60212e1d8d95e4e51c1bf1 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -4854,6 +4854,7 @@ void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 vm_exit_reason, static void nested_vmx_triple_fault(struct kvm_vcpu *vcpu) { + kvm_clear_request(KVM_REQ_TRIPLE_FAULT, vcpu); nested_vmx_vmexit(vcpu, EXIT_REASON_TRIPLE_FAULT, 0, 0); } @@ -6440,9 +6441,6 @@ static int vmx_get_nested_state(struct kvm_vcpu *vcpu, return kvm_state.size; } -/* - * Forcibly leave nested mode in order to be able to reset the VCPU later on. - */ void vmx_leave_nested(struct kvm_vcpu *vcpu) { if (is_guest_mode(vcpu)) { diff --git a/arch/x86/kvm/vmx/pmu_intel.c b/arch/x86/kvm/vmx/pmu_intel.c index 25b70a85bef54c775afe3f8094087397ca536e85..10b33da9bd05852060b405aeb09498225f671a1f 100644 --- a/arch/x86/kvm/vmx/pmu_intel.c +++ b/arch/x86/kvm/vmx/pmu_intel.c @@ -617,7 +617,7 @@ static void intel_pmu_init(struct kvm_vcpu *vcpu) struct kvm_pmu *pmu = vcpu_to_pmu(vcpu); struct lbr_desc *lbr_desc = vcpu_to_lbr_desc(vcpu); - for (i = 0; i < INTEL_PMC_MAX_GENERIC; i++) { + for (i = 0; i < KVM_INTEL_PMC_MAX_GENERIC; i++) { pmu->gp_counters[i].type = KVM_PMC_GP; pmu->gp_counters[i].vcpu = vcpu; pmu->gp_counters[i].idx = i; @@ -643,7 +643,7 @@ static void intel_pmu_reset(struct kvm_vcpu *vcpu) struct kvm_pmc *pmc = NULL; int i; - for (i = 0; i < INTEL_PMC_MAX_GENERIC; i++) { + for (i = 0; i < KVM_INTEL_PMC_MAX_GENERIC; i++) { pmc = &pmu->gp_counters[i]; pmc_stop_counter(pmc); diff --git a/arch/x86/kvm/vmx/vmenter.S b/arch/x86/kvm/vmx/vmenter.S index 8477d8bdd69c262c8feeb79569f6a68f0ea65833..0b5db4de4d09e568cc01b6005748f97104d02ec8 100644 --- a/arch/x86/kvm/vmx/vmenter.S +++ b/arch/x86/kvm/vmx/vmenter.S @@ -1,12 +1,12 @@ /* SPDX-License-Identifier: GPL-2.0 */ #include #include -#include #include #include #include #include #include +#include "kvm-asm-offsets.h" #include "run_flags.h" #define WORD_SIZE (BITS_PER_LONG / 8) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 9dba04b6b019aca4ec263395a85df9a9d494a033..63247c57c72cc6ef206ef29f4b3d0fb117e9d93f 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -2021,15 +2021,17 @@ static u64 nested_vmx_truncate_sysenter_addr(struct kvm_vcpu *vcpu, return (unsigned long)data; } -static u64 vcpu_supported_debugctl(struct kvm_vcpu *vcpu) +static u64 vmx_get_supported_debugctl(struct kvm_vcpu *vcpu, bool host_initiated) { - u64 debugctl = vmx_supported_debugctl(); + u64 debugctl = 0; - if (!intel_pmu_lbr_is_enabled(vcpu)) - debugctl &= ~DEBUGCTLMSR_LBR_MASK; + if (boot_cpu_has(X86_FEATURE_BUS_LOCK_DETECT) && + (host_initiated || guest_cpuid_has(vcpu, X86_FEATURE_BUS_LOCK_DETECT))) + debugctl |= DEBUGCTLMSR_BUS_LOCK_DETECT; - if (!guest_cpuid_has(vcpu, X86_FEATURE_BUS_LOCK_DETECT)) - debugctl &= ~DEBUGCTLMSR_BUS_LOCK_DETECT; + if ((vmx_get_perf_capabilities() & PMU_CAP_LBR_FMT) && + (host_initiated || intel_pmu_lbr_is_enabled(vcpu))) + debugctl |= DEBUGCTLMSR_LBR | DEBUGCTLMSR_FREEZE_LBRS_ON_PMI; return debugctl; } @@ -2103,7 +2105,9 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) vmcs_writel(GUEST_SYSENTER_ESP, data); break; case MSR_IA32_DEBUGCTLMSR: { - u64 invalid = data & ~vcpu_supported_debugctl(vcpu); + u64 invalid; + + invalid = data & ~vmx_get_supported_debugctl(vcpu, msr_info->host_initiated); if (invalid & (DEBUGCTLMSR_BTF|DEBUGCTLMSR_LBR)) { if (report_ignored_msrs) vcpu_unimpl(vcpu, "%s: BTF|LBR in IA32_DEBUGCTLMSR 0x%llx, nop\n", @@ -8263,6 +8267,11 @@ static __init int hardware_setup(void) if (!cpu_has_virtual_nmis()) enable_vnmi = 0; +#ifdef CONFIG_X86_SGX_KVM + if (!cpu_has_vmx_encls_vmexit()) + enable_sgx = false; +#endif + /* * set_apic_access_page_addr() is used to reload apic access * page upon invalidation. No need to do anything if not diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 9cf1ba865562eb646d3d8b2d15ab74a79a0e4e07..2835bd79663915b7f7e24b04b24acb0b7c6aa00e 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -628,6 +628,12 @@ static void kvm_queue_exception_vmexit(struct kvm_vcpu *vcpu, unsigned int vecto ex->payload = payload; } +/* Forcibly leave the nested mode in cases like a vCPU reset */ +static void kvm_leave_nested(struct kvm_vcpu *vcpu) +{ + kvm_x86_ops.nested_ops->leave_nested(vcpu); +} + static void kvm_multiple_exception(struct kvm_vcpu *vcpu, unsigned nr, bool has_error, u32 error_code, bool has_payload, unsigned long payload, bool reinject) @@ -1438,32 +1444,27 @@ static const u32 msrs_to_save_all[] = { MSR_ARCH_PERFMON_FIXED_CTR0 + 2, MSR_CORE_PERF_FIXED_CTR_CTRL, MSR_CORE_PERF_GLOBAL_STATUS, MSR_CORE_PERF_GLOBAL_CTRL, MSR_CORE_PERF_GLOBAL_OVF_CTRL, + MSR_IA32_PEBS_ENABLE, MSR_IA32_DS_AREA, MSR_PEBS_DATA_CFG, + + /* This part of MSRs should match KVM_INTEL_PMC_MAX_GENERIC. */ MSR_ARCH_PERFMON_PERFCTR0, MSR_ARCH_PERFMON_PERFCTR1, MSR_ARCH_PERFMON_PERFCTR0 + 2, MSR_ARCH_PERFMON_PERFCTR0 + 3, MSR_ARCH_PERFMON_PERFCTR0 + 4, MSR_ARCH_PERFMON_PERFCTR0 + 5, MSR_ARCH_PERFMON_PERFCTR0 + 6, MSR_ARCH_PERFMON_PERFCTR0 + 7, - MSR_ARCH_PERFMON_PERFCTR0 + 8, MSR_ARCH_PERFMON_PERFCTR0 + 9, - MSR_ARCH_PERFMON_PERFCTR0 + 10, MSR_ARCH_PERFMON_PERFCTR0 + 11, - MSR_ARCH_PERFMON_PERFCTR0 + 12, MSR_ARCH_PERFMON_PERFCTR0 + 13, - MSR_ARCH_PERFMON_PERFCTR0 + 14, MSR_ARCH_PERFMON_PERFCTR0 + 15, - MSR_ARCH_PERFMON_PERFCTR0 + 16, MSR_ARCH_PERFMON_PERFCTR0 + 17, MSR_ARCH_PERFMON_EVENTSEL0, MSR_ARCH_PERFMON_EVENTSEL1, MSR_ARCH_PERFMON_EVENTSEL0 + 2, MSR_ARCH_PERFMON_EVENTSEL0 + 3, MSR_ARCH_PERFMON_EVENTSEL0 + 4, MSR_ARCH_PERFMON_EVENTSEL0 + 5, MSR_ARCH_PERFMON_EVENTSEL0 + 6, MSR_ARCH_PERFMON_EVENTSEL0 + 7, - MSR_ARCH_PERFMON_EVENTSEL0 + 8, MSR_ARCH_PERFMON_EVENTSEL0 + 9, - MSR_ARCH_PERFMON_EVENTSEL0 + 10, MSR_ARCH_PERFMON_EVENTSEL0 + 11, - MSR_ARCH_PERFMON_EVENTSEL0 + 12, MSR_ARCH_PERFMON_EVENTSEL0 + 13, - MSR_ARCH_PERFMON_EVENTSEL0 + 14, MSR_ARCH_PERFMON_EVENTSEL0 + 15, - MSR_ARCH_PERFMON_EVENTSEL0 + 16, MSR_ARCH_PERFMON_EVENTSEL0 + 17, - MSR_IA32_PEBS_ENABLE, MSR_IA32_DS_AREA, MSR_PEBS_DATA_CFG, MSR_K7_EVNTSEL0, MSR_K7_EVNTSEL1, MSR_K7_EVNTSEL2, MSR_K7_EVNTSEL3, MSR_K7_PERFCTR0, MSR_K7_PERFCTR1, MSR_K7_PERFCTR2, MSR_K7_PERFCTR3, + + /* This part of MSRs should match KVM_AMD_PMC_MAX_GENERIC. */ MSR_F15H_PERF_CTL0, MSR_F15H_PERF_CTL1, MSR_F15H_PERF_CTL2, MSR_F15H_PERF_CTL3, MSR_F15H_PERF_CTL4, MSR_F15H_PERF_CTL5, MSR_F15H_PERF_CTR0, MSR_F15H_PERF_CTR1, MSR_F15H_PERF_CTR2, MSR_F15H_PERF_CTR3, MSR_F15H_PERF_CTR4, MSR_F15H_PERF_CTR5, + MSR_IA32_XFD, MSR_IA32_XFD_ERR, }; @@ -1562,7 +1563,7 @@ static const u32 msr_based_features_all[] = { MSR_IA32_VMX_EPT_VPID_CAP, MSR_IA32_VMX_VMFUNC, - MSR_F10H_DECFG, + MSR_AMD64_DE_CFG, MSR_IA32_UCODE_REV, MSR_IA32_ARCH_CAPABILITIES, MSR_IA32_PERF_CAPABILITIES, @@ -2315,11 +2316,11 @@ static void kvm_write_system_time(struct kvm_vcpu *vcpu, gpa_t system_time, /* we verify if the enable bit is set... */ if (system_time & 1) { - kvm_gfn_to_pfn_cache_init(vcpu->kvm, &vcpu->arch.pv_time, vcpu, - KVM_HOST_USES_PFN, system_time & ~1ULL, - sizeof(struct pvclock_vcpu_time_info)); + kvm_gpc_activate(vcpu->kvm, &vcpu->arch.pv_time, vcpu, + KVM_HOST_USES_PFN, system_time & ~1ULL, + sizeof(struct pvclock_vcpu_time_info)); } else { - kvm_gfn_to_pfn_cache_destroy(vcpu->kvm, &vcpu->arch.pv_time); + kvm_gpc_deactivate(vcpu->kvm, &vcpu->arch.pv_time); } return; @@ -3388,7 +3389,7 @@ static int kvm_pv_enable_async_pf_int(struct kvm_vcpu *vcpu, u64 data) static void kvmclock_reset(struct kvm_vcpu *vcpu) { - kvm_gfn_to_pfn_cache_destroy(vcpu->kvm, &vcpu->arch.pv_time); + kvm_gpc_deactivate(vcpu->kvm, &vcpu->arch.pv_time); vcpu->arch.time = 0; } @@ -5200,7 +5201,7 @@ static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu, if (events->flags & KVM_VCPUEVENT_VALID_SMM) { if (!!(vcpu->arch.hflags & HF_SMM_MASK) != events->smi.smm) { - kvm_x86_ops.nested_ops->leave_nested(vcpu); + kvm_leave_nested(vcpu); kvm_smm_changed(vcpu, events->smi.smm); } @@ -7041,14 +7042,14 @@ static void kvm_init_msr_list(void) intel_pt_validate_hw_cap(PT_CAP_num_address_ranges) * 2) continue; break; - case MSR_ARCH_PERFMON_PERFCTR0 ... MSR_ARCH_PERFMON_PERFCTR0 + 17: + case MSR_ARCH_PERFMON_PERFCTR0 ... MSR_ARCH_PERFMON_PERFCTR_MAX: if (msrs_to_save_all[i] - MSR_ARCH_PERFMON_PERFCTR0 >= - min(INTEL_PMC_MAX_GENERIC, kvm_pmu_cap.num_counters_gp)) + min(KVM_INTEL_PMC_MAX_GENERIC, kvm_pmu_cap.num_counters_gp)) continue; break; - case MSR_ARCH_PERFMON_EVENTSEL0 ... MSR_ARCH_PERFMON_EVENTSEL0 + 17: + case MSR_ARCH_PERFMON_EVENTSEL0 ... MSR_ARCH_PERFMON_EVENTSEL_MAX: if (msrs_to_save_all[i] - MSR_ARCH_PERFMON_EVENTSEL0 >= - min(INTEL_PMC_MAX_GENERIC, kvm_pmu_cap.num_counters_gp)) + min(KVM_INTEL_PMC_MAX_GENERIC, kvm_pmu_cap.num_counters_gp)) continue; break; case MSR_IA32_XFD: @@ -9810,7 +9811,7 @@ static void update_cr8_intercept(struct kvm_vcpu *vcpu) int kvm_check_nested_events(struct kvm_vcpu *vcpu) { - if (kvm_check_request(KVM_REQ_TRIPLE_FAULT, vcpu)) { + if (kvm_test_request(KVM_REQ_TRIPLE_FAULT, vcpu)) { kvm_x86_ops.nested_ops->triple_fault(vcpu); return 1; } @@ -10044,7 +10045,20 @@ static int kvm_check_and_inject_events(struct kvm_vcpu *vcpu, kvm_x86_ops.nested_ops->has_events(vcpu)) *req_immediate_exit = true; - WARN_ON(kvm_is_exception_pending(vcpu)); + /* + * KVM must never queue a new exception while injecting an event; KVM + * is done emulating and should only propagate the to-be-injected event + * to the VMCS/VMCB. Queueing a new exception can put the vCPU into an + * infinite loop as KVM will bail from VM-Enter to inject the pending + * exception and start the cycle all over. + * + * Exempt triple faults as they have special handling and won't put the + * vCPU into an infinite loop. Triple fault can be queued when running + * VMX without unrestricted guest, as that requires KVM to emulate Real + * Mode events (see kvm_inject_realmode_interrupt()). + */ + WARN_ON_ONCE(vcpu->arch.exception.pending || + vcpu->arch.exception_vmexit.pending); return 0; out: @@ -10391,7 +10405,10 @@ void __kvm_set_or_clear_apicv_inhibit(struct kvm *kvm, kvm->arch.apicv_inhibit_reasons = new; if (new) { unsigned long gfn = gpa_to_gfn(APIC_DEFAULT_PHYS_BASE); + int idx = srcu_read_lock(&kvm->srcu); + kvm_zap_gfn_range(kvm, gfn, gfn+1); + srcu_read_unlock(&kvm->srcu, idx); } } else { kvm->arch.apicv_inhibit_reasons = new; @@ -10549,15 +10566,16 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) r = 0; goto out; } - if (kvm_check_request(KVM_REQ_TRIPLE_FAULT, vcpu)) { - if (is_guest_mode(vcpu)) { + if (kvm_test_request(KVM_REQ_TRIPLE_FAULT, vcpu)) { + if (is_guest_mode(vcpu)) kvm_x86_ops.nested_ops->triple_fault(vcpu); - } else { + + if (kvm_check_request(KVM_REQ_TRIPLE_FAULT, vcpu)) { vcpu->run->exit_reason = KVM_EXIT_SHUTDOWN; vcpu->mmio_needed = 0; r = 0; - goto out; } + goto out; } if (kvm_check_request(KVM_REQ_APF_HALT, vcpu)) { /* Page is swapped out. Do synthetic halt */ @@ -11816,6 +11834,8 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) vcpu->arch.regs_avail = ~0; vcpu->arch.regs_dirty = ~0; + kvm_gpc_init(&vcpu->arch.pv_time); + if (!irqchip_in_kernel(vcpu->kvm) || kvm_vcpu_is_reset_bsp(vcpu)) vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE; else @@ -11984,8 +12004,18 @@ void kvm_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event) WARN_ON_ONCE(!init_event && (old_cr0 || kvm_read_cr3(vcpu) || kvm_read_cr4(vcpu))); + /* + * SVM doesn't unconditionally VM-Exit on INIT and SHUTDOWN, thus it's + * possible to INIT the vCPU while L2 is active. Force the vCPU back + * into L1 as EFER.SVME is cleared on INIT (along with all other EFER + * bits), i.e. virtualization is disabled. + */ + if (is_guest_mode(vcpu)) + kvm_leave_nested(vcpu); + kvm_lapic_reset(vcpu, init_event); + WARN_ON_ONCE(is_guest_mode(vcpu) || is_smm(vcpu)); vcpu->arch.hflags = 0; vcpu->arch.smi_pending = 0; diff --git a/arch/x86/kvm/xen.c b/arch/x86/kvm/xen.c index 93c628d3e3a92cc7e4792ca2f7a734126a01e838..f3098c0e386a8a6a8eadf50f993ec2a00cfe2317 100644 --- a/arch/x86/kvm/xen.c +++ b/arch/x86/kvm/xen.c @@ -42,13 +42,13 @@ static int kvm_xen_shared_info_init(struct kvm *kvm, gfn_t gfn) int idx = srcu_read_lock(&kvm->srcu); if (gfn == GPA_INVALID) { - kvm_gfn_to_pfn_cache_destroy(kvm, gpc); + kvm_gpc_deactivate(kvm, gpc); goto out; } do { - ret = kvm_gfn_to_pfn_cache_init(kvm, gpc, NULL, KVM_HOST_USES_PFN, - gpa, PAGE_SIZE); + ret = kvm_gpc_activate(kvm, gpc, NULL, KVM_HOST_USES_PFN, gpa, + PAGE_SIZE); if (ret) goto out; @@ -554,15 +554,15 @@ int kvm_xen_vcpu_set_attr(struct kvm_vcpu *vcpu, struct kvm_xen_vcpu_attr *data) offsetof(struct compat_vcpu_info, time)); if (data->u.gpa == GPA_INVALID) { - kvm_gfn_to_pfn_cache_destroy(vcpu->kvm, &vcpu->arch.xen.vcpu_info_cache); + kvm_gpc_deactivate(vcpu->kvm, &vcpu->arch.xen.vcpu_info_cache); r = 0; break; } - r = kvm_gfn_to_pfn_cache_init(vcpu->kvm, - &vcpu->arch.xen.vcpu_info_cache, - NULL, KVM_HOST_USES_PFN, data->u.gpa, - sizeof(struct vcpu_info)); + r = kvm_gpc_activate(vcpu->kvm, + &vcpu->arch.xen.vcpu_info_cache, NULL, + KVM_HOST_USES_PFN, data->u.gpa, + sizeof(struct vcpu_info)); if (!r) kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu); @@ -570,16 +570,16 @@ int kvm_xen_vcpu_set_attr(struct kvm_vcpu *vcpu, struct kvm_xen_vcpu_attr *data) case KVM_XEN_VCPU_ATTR_TYPE_VCPU_TIME_INFO: if (data->u.gpa == GPA_INVALID) { - kvm_gfn_to_pfn_cache_destroy(vcpu->kvm, - &vcpu->arch.xen.vcpu_time_info_cache); + kvm_gpc_deactivate(vcpu->kvm, + &vcpu->arch.xen.vcpu_time_info_cache); r = 0; break; } - r = kvm_gfn_to_pfn_cache_init(vcpu->kvm, - &vcpu->arch.xen.vcpu_time_info_cache, - NULL, KVM_HOST_USES_PFN, data->u.gpa, - sizeof(struct pvclock_vcpu_time_info)); + r = kvm_gpc_activate(vcpu->kvm, + &vcpu->arch.xen.vcpu_time_info_cache, + NULL, KVM_HOST_USES_PFN, data->u.gpa, + sizeof(struct pvclock_vcpu_time_info)); if (!r) kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu); break; @@ -590,16 +590,15 @@ int kvm_xen_vcpu_set_attr(struct kvm_vcpu *vcpu, struct kvm_xen_vcpu_attr *data) break; } if (data->u.gpa == GPA_INVALID) { - kvm_gfn_to_pfn_cache_destroy(vcpu->kvm, - &vcpu->arch.xen.runstate_cache); + kvm_gpc_deactivate(vcpu->kvm, + &vcpu->arch.xen.runstate_cache); r = 0; break; } - r = kvm_gfn_to_pfn_cache_init(vcpu->kvm, - &vcpu->arch.xen.runstate_cache, - NULL, KVM_HOST_USES_PFN, data->u.gpa, - sizeof(struct vcpu_runstate_info)); + r = kvm_gpc_activate(vcpu->kvm, &vcpu->arch.xen.runstate_cache, + NULL, KVM_HOST_USES_PFN, data->u.gpa, + sizeof(struct vcpu_runstate_info)); break; case KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_CURRENT: @@ -955,6 +954,14 @@ static int kvm_xen_hypercall_complete_userspace(struct kvm_vcpu *vcpu) return kvm_xen_hypercall_set_result(vcpu, run->xen.u.hcall.result); } +static inline int max_evtchn_port(struct kvm *kvm) +{ + if (IS_ENABLED(CONFIG_64BIT) && kvm->arch.xen.long_mode) + return EVTCHN_2L_NR_CHANNELS; + else + return COMPAT_EVTCHN_2L_NR_CHANNELS; +} + static bool wait_pending_event(struct kvm_vcpu *vcpu, int nr_ports, evtchn_port_t *ports) { @@ -1043,6 +1050,10 @@ static bool kvm_xen_schedop_poll(struct kvm_vcpu *vcpu, bool longmode, *r = -EFAULT; goto out; } + if (ports[i] >= max_evtchn_port(vcpu->kvm)) { + *r = -EINVAL; + goto out; + } } if (sched_poll.nr_ports == 1) @@ -1216,6 +1227,7 @@ int kvm_xen_hypercall(struct kvm_vcpu *vcpu) bool longmode; u64 input, params[6], r = -ENOSYS; bool handled = false; + u8 cpl; input = (u64)kvm_register_read(vcpu, VCPU_REGS_RAX); @@ -1243,9 +1255,17 @@ int kvm_xen_hypercall(struct kvm_vcpu *vcpu) params[5] = (u64)kvm_r9_read(vcpu); } #endif + cpl = static_call(kvm_x86_get_cpl)(vcpu); trace_kvm_xen_hypercall(input, params[0], params[1], params[2], params[3], params[4], params[5]); + /* + * Only allow hypercall acceleration for CPL0. The rare hypercalls that + * are permitted in guest userspace can be handled by the VMM. + */ + if (unlikely(cpl > 0)) + goto handle_in_userspace; + switch (input) { case __HYPERVISOR_xen_version: if (params[0] == XENVER_version && vcpu->kvm->arch.xen.xen_version) { @@ -1280,10 +1300,11 @@ int kvm_xen_hypercall(struct kvm_vcpu *vcpu) if (handled) return kvm_xen_hypercall_set_result(vcpu, r); +handle_in_userspace: vcpu->run->exit_reason = KVM_EXIT_XEN; vcpu->run->xen.type = KVM_EXIT_XEN_HCALL; vcpu->run->xen.u.hcall.longmode = longmode; - vcpu->run->xen.u.hcall.cpl = static_call(kvm_x86_get_cpl)(vcpu); + vcpu->run->xen.u.hcall.cpl = cpl; vcpu->run->xen.u.hcall.input = input; vcpu->run->xen.u.hcall.params[0] = params[0]; vcpu->run->xen.u.hcall.params[1] = params[1]; @@ -1298,14 +1319,6 @@ int kvm_xen_hypercall(struct kvm_vcpu *vcpu) return 0; } -static inline int max_evtchn_port(struct kvm *kvm) -{ - if (IS_ENABLED(CONFIG_64BIT) && kvm->arch.xen.long_mode) - return EVTCHN_2L_NR_CHANNELS; - else - return COMPAT_EVTCHN_2L_NR_CHANNELS; -} - static void kvm_xen_check_poller(struct kvm_vcpu *vcpu, int port) { int poll_evtchn = vcpu->arch.xen.poll_evtchn; @@ -1667,18 +1680,18 @@ static int kvm_xen_eventfd_assign(struct kvm *kvm, case EVTCHNSTAT_ipi: /* IPI must map back to the same port# */ if (data->u.evtchn.deliver.port.port != data->u.evtchn.send_port) - goto out; /* -EINVAL */ + goto out_noeventfd; /* -EINVAL */ break; case EVTCHNSTAT_interdomain: if (data->u.evtchn.deliver.port.port) { if (data->u.evtchn.deliver.port.port >= max_evtchn_port(kvm)) - goto out; /* -EINVAL */ + goto out_noeventfd; /* -EINVAL */ } else { eventfd = eventfd_ctx_fdget(data->u.evtchn.deliver.eventfd.fd); if (IS_ERR(eventfd)) { ret = PTR_ERR(eventfd); - goto out; + goto out_noeventfd; } } break; @@ -1718,6 +1731,7 @@ static int kvm_xen_eventfd_assign(struct kvm *kvm, out: if (eventfd) eventfd_ctx_put(eventfd); +out_noeventfd: kfree(evtchnfd); return ret; } @@ -1816,7 +1830,12 @@ void kvm_xen_init_vcpu(struct kvm_vcpu *vcpu) { vcpu->arch.xen.vcpu_id = vcpu->vcpu_idx; vcpu->arch.xen.poll_evtchn = 0; + timer_setup(&vcpu->arch.xen.poll_timer, cancel_evtchn_poll, 0); + + kvm_gpc_init(&vcpu->arch.xen.runstate_cache); + kvm_gpc_init(&vcpu->arch.xen.vcpu_info_cache); + kvm_gpc_init(&vcpu->arch.xen.vcpu_time_info_cache); } void kvm_xen_destroy_vcpu(struct kvm_vcpu *vcpu) @@ -1824,18 +1843,17 @@ void kvm_xen_destroy_vcpu(struct kvm_vcpu *vcpu) if (kvm_xen_timer_enabled(vcpu)) kvm_xen_stop_timer(vcpu); - kvm_gfn_to_pfn_cache_destroy(vcpu->kvm, - &vcpu->arch.xen.runstate_cache); - kvm_gfn_to_pfn_cache_destroy(vcpu->kvm, - &vcpu->arch.xen.vcpu_info_cache); - kvm_gfn_to_pfn_cache_destroy(vcpu->kvm, - &vcpu->arch.xen.vcpu_time_info_cache); + kvm_gpc_deactivate(vcpu->kvm, &vcpu->arch.xen.runstate_cache); + kvm_gpc_deactivate(vcpu->kvm, &vcpu->arch.xen.vcpu_info_cache); + kvm_gpc_deactivate(vcpu->kvm, &vcpu->arch.xen.vcpu_time_info_cache); + del_timer_sync(&vcpu->arch.xen.poll_timer); } void kvm_xen_init_vm(struct kvm *kvm) { idr_init(&kvm->arch.xen.evtchn_ports); + kvm_gpc_init(&kvm->arch.xen.shinfo_cache); } void kvm_xen_destroy_vm(struct kvm *kvm) @@ -1843,7 +1861,7 @@ void kvm_xen_destroy_vm(struct kvm *kvm) struct evtchnfd *evtchnfd; int i; - kvm_gfn_to_pfn_cache_destroy(kvm, &kvm->arch.xen.shinfo_cache); + kvm_gpc_deactivate(kvm, &kvm->arch.xen.shinfo_cache); idr_for_each_entry(&kvm->arch.xen.evtchn_ports, evtchnfd, i) { if (!evtchnfd->deliver.port.port) diff --git a/arch/x86/lib/usercopy.c b/arch/x86/lib/usercopy.c index f1bb1861715621dd7136136f46bf223dc68e550d..24b48af274173675a54fff9df651c0e00786e09f 100644 --- a/arch/x86/lib/usercopy.c +++ b/arch/x86/lib/usercopy.c @@ -6,6 +6,7 @@ #include #include +#include #include @@ -44,7 +45,9 @@ copy_from_user_nmi(void *to, const void __user *from, unsigned long n) * called from other contexts. */ pagefault_disable(); + instrument_copy_from_user_before(to, from, n); ret = raw_copy_from_user(to, from, n); + instrument_copy_from_user_after(to, from, n, ret); pagefault_enable(); return ret; diff --git a/arch/x86/mm/hugetlbpage.c b/arch/x86/mm/hugetlbpage.c index 6b3033845c6d321818ed47c31470a2d9222c1538..5804bbae4f01254ce0368cd5e79a43245afacbe0 100644 --- a/arch/x86/mm/hugetlbpage.c +++ b/arch/x86/mm/hugetlbpage.c @@ -37,8 +37,12 @@ int pmd_huge(pmd_t pmd) */ int pud_huge(pud_t pud) { +#if CONFIG_PGTABLE_LEVELS > 2 return !pud_none(pud) && (pud_val(pud) & (_PAGE_PRESENT|_PAGE_PSE)) != _PAGE_PRESENT; +#else + return 0; +#endif } #ifdef CONFIG_HUGETLB_PAGE diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index 78c5bc654cff5b054f1b3e63b21651e2e8163305..6453fbaedb081d204d49985dbbc73cb867ea736c 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c @@ -217,9 +217,15 @@ __ioremap_caller(resource_size_t phys_addr, unsigned long size, * Mappings have to be page-aligned */ offset = phys_addr & ~PAGE_MASK; - phys_addr &= PHYSICAL_PAGE_MASK; + phys_addr &= PAGE_MASK; size = PAGE_ALIGN(last_addr+1) - phys_addr; + /* + * Mask out any bits not part of the actual physical + * address, like memory encryption bits. + */ + phys_addr &= PHYSICAL_PAGE_MASK; + retval = memtype_reserve(phys_addr, (u64)phys_addr + size, pcm, &new_pcm); if (retval) { diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index 00127abd89ee55d1a568ac931ecf16ca27b83199..99620428ad7851d7bd3bb3d4cd46d1c927d33ad8 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -389,18 +388,6 @@ static int __bpf_arch_text_poke(void *ip, enum bpf_text_poke_type t, return ret; } -int __init bpf_arch_init_dispatcher_early(void *ip) -{ - const u8 *nop_insn = x86_nops[5]; - - if (is_endbr(*(u32 *)ip)) - ip += ENDBR_INSN_SIZE; - - if (memcmp(ip, nop_insn, X86_PATCH_SIZE)) - text_poke_early(ip, nop_insn, X86_PATCH_SIZE); - return 0; -} - int bpf_arch_text_poke(void *ip, enum bpf_text_poke_type t, void *old_addr, void *new_addr) { diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c index bb176c72891c933c1d7b77a8ef848f264c838321..93ae33248f421ef9039de4656153ea8898cc2b31 100644 --- a/arch/x86/power/cpu.c +++ b/arch/x86/power/cpu.c @@ -513,15 +513,23 @@ static int pm_cpu_check(const struct x86_cpu_id *c) static void pm_save_spec_msr(void) { - u32 spec_msr_id[] = { - MSR_IA32_SPEC_CTRL, - MSR_IA32_TSX_CTRL, - MSR_TSX_FORCE_ABORT, - MSR_IA32_MCU_OPT_CTRL, - MSR_AMD64_LS_CFG, + struct msr_enumeration { + u32 msr_no; + u32 feature; + } msr_enum[] = { + { MSR_IA32_SPEC_CTRL, X86_FEATURE_MSR_SPEC_CTRL }, + { MSR_IA32_TSX_CTRL, X86_FEATURE_MSR_TSX_CTRL }, + { MSR_TSX_FORCE_ABORT, X86_FEATURE_TSX_FORCE_ABORT }, + { MSR_IA32_MCU_OPT_CTRL, X86_FEATURE_SRBDS_CTRL }, + { MSR_AMD64_LS_CFG, X86_FEATURE_LS_CFG_SSBD }, + { MSR_AMD64_DE_CFG, X86_FEATURE_LFENCE_RDTSC }, }; + int i; - msr_build_context(spec_msr_id, ARRAY_SIZE(spec_msr_id)); + for (i = 0; i < ARRAY_SIZE(msr_enum); i++) { + if (boot_cpu_has(msr_enum[i].feature)) + msr_build_context(&msr_enum[i].msr_no, 1); + } } static int pm_check_save_msr(void) diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c index f82857e488152a7377690f9d37a3a72e733c58d7..038da45f057a7a85ade569160b8518dd76d70f44 100644 --- a/arch/x86/xen/enlighten_pv.c +++ b/arch/x86/xen/enlighten_pv.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -113,7 +114,7 @@ static __read_mostly bool xen_msr_safe = IS_ENABLED(CONFIG_XEN_PV_MSR_SAFE); static int __init parse_xen_msr_safe(char *str) { if (str) - return strtobool(str, &xen_msr_safe); + return kstrtobool(str, &xen_msr_safe); return -EINVAL; } early_param("xen_msr_safe", parse_xen_msr_safe); diff --git a/arch/x86/xen/pmu.c b/arch/x86/xen/pmu.c index 68aff138287282b7e8e878f644c80bee5cad54a5..246d67dab5109d1b98200a821aa4cd1c79dfcb1e 100644 --- a/arch/x86/xen/pmu.c +++ b/arch/x86/xen/pmu.c @@ -302,7 +302,7 @@ static bool xen_amd_pmu_emulate(unsigned int msr, u64 *val, bool is_read) static bool pmu_msr_chk_emulated(unsigned int msr, uint64_t *val, bool is_read, bool *emul) { - int type, index; + int type, index = 0; if (is_amd_pmu_msr(msr)) *emul = xen_amd_pmu_emulate(msr, val, is_read); diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c index cfa99e8f054be5dba1e339e268c20115acc79d9b..8db26f10fb1d95f6894cdf6ab5190907e7ba2274 100644 --- a/arch/x86/xen/setup.c +++ b/arch/x86/xen/setup.c @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -85,7 +86,7 @@ static void __init xen_parse_512gb(void) arg = strstr(xen_start_info->cmd_line, "xen_512gb_limit="); if (!arg) val = true; - else if (strtobool(arg + strlen("xen_512gb_limit="), &val)) + else if (kstrtobool(arg + strlen("xen_512gb_limit="), &val)) return; xen_512gb_limit = val; @@ -910,17 +911,9 @@ static int register_callback(unsigned type, const void *func) void xen_enable_sysenter(void) { - int ret; - unsigned sysenter_feature; - - sysenter_feature = X86_FEATURE_SYSENTER32; - - if (!boot_cpu_has(sysenter_feature)) - return; - - ret = register_callback(CALLBACKTYPE_sysenter, xen_entry_SYSENTER_compat); - if(ret != 0) - setup_clear_cpu_cap(sysenter_feature); + if (cpu_feature_enabled(X86_FEATURE_SYSENTER32) && + register_callback(CALLBACKTYPE_sysenter, xen_entry_SYSENTER_compat)) + setup_clear_cpu_cap(X86_FEATURE_SYSENTER32); } void xen_enable_syscall(void) @@ -934,12 +927,9 @@ void xen_enable_syscall(void) mechanism for syscalls. */ } - if (boot_cpu_has(X86_FEATURE_SYSCALL32)) { - ret = register_callback(CALLBACKTYPE_syscall32, - xen_entry_SYSCALL_compat); - if (ret != 0) - setup_clear_cpu_cap(X86_FEATURE_SYSCALL32); - } + if (cpu_feature_enabled(X86_FEATURE_SYSCALL32) && + register_callback(CALLBACKTYPE_syscall32, xen_entry_SYSCALL_compat)) + setup_clear_cpu_cap(X86_FEATURE_SYSCALL32); } static void __init xen_pvmmu_arch_setup(void) diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c index 144bca006463dbbf83e6b51f7c719e3fb3b6f3e8..7d624a3a3f0f896e112f8b52f9abf19da5b816ed 100644 --- a/block/bfq-cgroup.c +++ b/block/bfq-cgroup.c @@ -610,6 +610,10 @@ struct bfq_group *bfq_bio_bfqg(struct bfq_data *bfqd, struct bio *bio) struct bfq_group *bfqg; while (blkg) { + if (!blkg->online) { + blkg = blkg->parent; + continue; + } bfqg = blkg_to_bfqg(blkg); if (bfqg->online) { bio_associate_blkg_from_css(bio, &blkg->blkcg->css); diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c index 6a5c849ee061bedf05aa5fe95dccfeea8b0e7b2c..ed761c62ad0a72b581d58f44d4be22194e003901 100644 --- a/block/blk-cgroup.c +++ b/block/blk-cgroup.c @@ -1213,7 +1213,7 @@ static int blkcg_css_online(struct cgroup_subsys_state *css) * parent so that offline always happens towards the root. */ if (parent) - blkcg_pin_online(css); + blkcg_pin_online(&parent->css); return 0; } diff --git a/block/blk-core.c b/block/blk-core.c index 17667159482e0309d37c6784b7f3f8b4aac1a63c..5487912befe891610cbf2ac052260a05870310ce 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -425,7 +425,6 @@ struct request_queue *blk_alloc_queue(int node_id, bool alloc_srcu) PERCPU_REF_INIT_ATOMIC, GFP_KERNEL)) goto fail_stats; - blk_queue_dma_alignment(q, 511); blk_set_default_limits(&q->limits); q->nr_requests = BLKDEV_DEFAULT_RQ; diff --git a/block/blk-mq.c b/block/blk-mq.c index 75c8296b6feb3701b6e531d0ea4cb9778a60dc07..228a6696d8351894625f196705eba01e376cc29a 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -1262,6 +1262,7 @@ static void blk_add_rq_to_plug(struct blk_plug *plug, struct request *rq) (!blk_queue_nomerges(rq->q) && blk_rq_bytes(last) >= BLK_PLUG_FLUSH_SIZE)) { blk_mq_flush_plug_list(plug, false); + last = NULL; trace_block_plug(rq->q); } @@ -4044,9 +4045,14 @@ EXPORT_SYMBOL(__blk_mq_alloc_disk); struct gendisk *blk_mq_alloc_disk_for_queue(struct request_queue *q, struct lock_class_key *lkclass) { + struct gendisk *disk; + if (!blk_get_queue(q)) return NULL; - return __alloc_disk_node(q, NUMA_NO_NODE, lkclass); + disk = __alloc_disk_node(q, NUMA_NO_NODE, lkclass); + if (!disk) + blk_put_queue(q); + return disk; } EXPORT_SYMBOL(blk_mq_alloc_disk_for_queue); @@ -4193,9 +4199,7 @@ int blk_mq_init_allocated_queue(struct blk_mq_tag_set *set, return 0; err_hctxs: - xa_destroy(&q->hctx_table); - q->nr_hw_queues = 0; - blk_mq_sysfs_deinit(q); + blk_mq_release(q); err_poll: blk_stat_free_callback(q->poll_cb); q->poll_cb = NULL; diff --git a/block/blk-settings.c b/block/blk-settings.c index 8bb9eef5310eb040780ca42db0feb1655dc2db68..8ac1038d0c797786c620ce0bfbddac103ccb1d8b 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c @@ -57,8 +57,8 @@ void blk_set_default_limits(struct queue_limits *lim) lim->misaligned = 0; lim->zoned = BLK_ZONED_NONE; lim->zone_write_granularity = 0; + lim->dma_alignment = 511; } -EXPORT_SYMBOL(blk_set_default_limits); /** * blk_set_stacking_limits - set default limits for stacking devices @@ -600,6 +600,7 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, t->io_min = max(t->io_min, b->io_min); t->io_opt = lcm_not_zero(t->io_opt, b->io_opt); + t->dma_alignment = max(t->dma_alignment, b->dma_alignment); /* Set non-power-of-2 compatible chunk_sectors boundary */ if (b->chunk_sectors) @@ -773,7 +774,7 @@ EXPORT_SYMBOL(blk_queue_virt_boundary); **/ void blk_queue_dma_alignment(struct request_queue *q, int mask) { - q->dma_alignment = mask; + q->limits.dma_alignment = mask; } EXPORT_SYMBOL(blk_queue_dma_alignment); @@ -795,8 +796,8 @@ void blk_queue_update_dma_alignment(struct request_queue *q, int mask) { BUG_ON(mask > PAGE_SIZE); - if (mask > q->dma_alignment) - q->dma_alignment = mask; + if (mask > q->limits.dma_alignment) + q->limits.dma_alignment = mask; } EXPORT_SYMBOL(blk_queue_update_dma_alignment); diff --git a/block/blk.h b/block/blk.h index d6ea0d1a6db0ffb47941d45fd64fac7724eb74e8..a186ea20f39d8a50721a2e4c4b6bd86db6bd6a0d 100644 --- a/block/blk.h +++ b/block/blk.h @@ -331,6 +331,7 @@ void blk_rq_set_mixed_merge(struct request *rq); bool blk_rq_merge_ok(struct request *rq, struct bio *bio); enum elv_merge blk_try_merge(struct request *rq, struct bio *bio); +void blk_set_default_limits(struct queue_limits *lim); int blk_dev_init(void); /* diff --git a/block/genhd.c b/block/genhd.c index fee90eb98b4a5161b50aa50f84143b76c1d01405..0f9769db2de83405352dab021dacbe3f0ca91d0c 100644 --- a/block/genhd.c +++ b/block/genhd.c @@ -527,6 +527,7 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk, bdi_unregister(disk->bdi); out_unregister_queue: blk_unregister_queue(disk); + rq_qos_exit(disk->queue); out_put_slave_dir: kobject_put(disk->slave_dir); out_put_holder_dir: diff --git a/block/sed-opal.c b/block/sed-opal.c index 2c5327a0543a66889e3b5eb0c0ec0786e1845c19..9bdb833e5817dad4f0caa2ce0e86dfe772249152 100644 --- a/block/sed-opal.c +++ b/block/sed-opal.c @@ -87,8 +87,8 @@ struct opal_dev { u64 lowest_lba; size_t pos; - u8 cmd[IO_BUFFER_LENGTH]; - u8 resp[IO_BUFFER_LENGTH]; + u8 *cmd; + u8 *resp; struct parsed_resp parsed; size_t prev_d_len; @@ -2175,6 +2175,8 @@ void free_opal_dev(struct opal_dev *dev) return; clean_opal_dev(dev); + kfree(dev->resp); + kfree(dev->cmd); kfree(dev); } EXPORT_SYMBOL(free_opal_dev); @@ -2187,6 +2189,18 @@ struct opal_dev *init_opal_dev(void *data, sec_send_recv *send_recv) if (!dev) return NULL; + /* + * Presumably DMA-able buffers must be cache-aligned. Kmalloc makes + * sure the allocated buffer is DMA-safe in that regard. + */ + dev->cmd = kmalloc(IO_BUFFER_LENGTH, GFP_KERNEL); + if (!dev->cmd) + goto err_free_dev; + + dev->resp = kmalloc(IO_BUFFER_LENGTH, GFP_KERNEL); + if (!dev->resp) + goto err_free_cmd; + INIT_LIST_HEAD(&dev->unlk_lst); mutex_init(&dev->dev_lock); dev->flags = 0; @@ -2194,11 +2208,21 @@ struct opal_dev *init_opal_dev(void *data, sec_send_recv *send_recv) dev->send_recv = send_recv; if (check_opal_support(dev) != 0) { pr_debug("Opal is not supported on this device\n"); - kfree(dev); - return NULL; + goto err_free_resp; } return dev; + +err_free_resp: + kfree(dev->resp); + +err_free_cmd: + kfree(dev->cmd); + +err_free_dev: + kfree(dev); + + return NULL; } EXPORT_SYMBOL(init_opal_dev); diff --git a/drivers/accessibility/speakup/main.c b/drivers/accessibility/speakup/main.c index f52265293482e0d352eeb0c2f7e8bcf3ed4323bc..73db0cb44fc7b075ce84ddc70300b81ae5344ef9 100644 --- a/drivers/accessibility/speakup/main.c +++ b/drivers/accessibility/speakup/main.c @@ -1778,7 +1778,7 @@ static void speakup_con_update(struct vc_data *vc) { unsigned long flags; - if (!speakup_console[vc->vc_num] || spk_parked) + if (!speakup_console[vc->vc_num] || spk_parked || !synth) return; if (!spin_trylock_irqsave(&speakup_info.spinlock, flags)) /* Speakup output, discard */ diff --git a/drivers/accessibility/speakup/utils.h b/drivers/accessibility/speakup/utils.h index 4bf2ee8ac246a61556be0b8ea676d02400cb3e87..4ce9a12f7664d4d11265946174b349a9fa6b4f43 100644 --- a/drivers/accessibility/speakup/utils.h +++ b/drivers/accessibility/speakup/utils.h @@ -54,7 +54,7 @@ static inline int oops(const char *msg, const char *info) static inline struct st_key *hash_name(char *name) { - u_char *pn = (u_char *)name; + unsigned char *pn = (unsigned char *)name; int hash = 0; while (*pn) { diff --git a/drivers/acpi/numa/hmat.c b/drivers/acpi/numa/hmat.c index 23f49a2f4d148d2fa6baa28d4d8ae6f4e8d0ae60..6cceca64a6bcfdd723d11f741983f82c0aa2f374 100644 --- a/drivers/acpi/numa/hmat.c +++ b/drivers/acpi/numa/hmat.c @@ -562,17 +562,26 @@ static int initiator_cmp(void *priv, const struct list_head *a, { struct memory_initiator *ia; struct memory_initiator *ib; - unsigned long *p_nodes = priv; ia = list_entry(a, struct memory_initiator, node); ib = list_entry(b, struct memory_initiator, node); - set_bit(ia->processor_pxm, p_nodes); - set_bit(ib->processor_pxm, p_nodes); - return ia->processor_pxm - ib->processor_pxm; } +static int initiators_to_nodemask(unsigned long *p_nodes) +{ + struct memory_initiator *initiator; + + if (list_empty(&initiators)) + return -ENXIO; + + list_for_each_entry(initiator, &initiators, node) + set_bit(initiator->processor_pxm, p_nodes); + + return 0; +} + static void hmat_register_target_initiators(struct memory_target *target) { static DECLARE_BITMAP(p_nodes, MAX_NUMNODES); @@ -609,7 +618,10 @@ static void hmat_register_target_initiators(struct memory_target *target) * initiators. */ bitmap_zero(p_nodes, MAX_NUMNODES); - list_sort(p_nodes, &initiators, initiator_cmp); + list_sort(NULL, &initiators, initiator_cmp); + if (initiators_to_nodemask(p_nodes) < 0) + return; + if (!access0done) { for (i = WRITE_LATENCY; i <= READ_BANDWIDTH; i++) { loc = localities_types[i]; @@ -643,8 +655,9 @@ static void hmat_register_target_initiators(struct memory_target *target) /* Access 1 ignores Generic Initiators */ bitmap_zero(p_nodes, MAX_NUMNODES); - list_sort(p_nodes, &initiators, initiator_cmp); - best = 0; + if (initiators_to_nodemask(p_nodes) < 0) + return; + for (i = WRITE_LATENCY; i <= READ_BANDWIDTH; i++) { loc = localities_types[i]; if (!loc) diff --git a/drivers/acpi/numa/srat.c b/drivers/acpi/numa/srat.c index 3b818ab186be89fff14ad3472ada6b1ee154788f..1f4fc5f8a819d38364149a88664bde818ca0a4dc 100644 --- a/drivers/acpi/numa/srat.c +++ b/drivers/acpi/numa/srat.c @@ -327,6 +327,7 @@ static int __init acpi_parse_cfmws(union acpi_subtable_headers *header, pr_warn("ACPI NUMA: Failed to add memblk for CFMWS node %d [mem %#llx-%#llx]\n", node, start, end); } + node_set(node, numa_nodes_parsed); /* Set the next available fake_pxm value */ (*fake_pxm)++; diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c index 9cd8797d12bb4b731f4a0c343026a42102ade8ba..b2a61628763879a4aac329a8c18448ad8645af9c 100644 --- a/drivers/acpi/video_detect.c +++ b/drivers/acpi/video_detect.c @@ -645,6 +645,20 @@ static const struct dmi_system_id video_detect_dmi_table[] = { }, }, + /* + * Models which have nvidia-ec-wmi support, but should not use it. + * Note this indicates a likely firmware bug on these models and should + * be revisited if/when Linux gets support for dynamic mux mode. + */ + { + .callback = video_detect_force_native, + /* Dell G15 5515 */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), + }, + }, + /* * Desktops which falsely report a backlight and which our heuristics * for this do not catch. @@ -670,7 +684,7 @@ static const struct dmi_system_id video_detect_dmi_table[] = { static bool google_cros_ec_present(void) { - return acpi_dev_found("GOOG0004"); + return acpi_dev_found("GOOG0004") || acpi_dev_found("GOOG000C"); } /* @@ -718,6 +732,10 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) if (apple_gmux_present()) return acpi_backlight_apple_gmux; + /* Chromebooks should always prefer native backlight control. */ + if (google_cros_ec_present() && native_available) + return acpi_backlight_native; + /* On systems with ACPI video use either native or ACPI video. */ if (video_caps & ACPI_VIDEO_BACKLIGHT) { /* @@ -735,13 +753,6 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) return acpi_backlight_video; } - /* - * Chromebooks that don't have backlight handle in ACPI table - * are supposed to use native backlight if it's available. - */ - if (google_cros_ec_present() && native_available) - return acpi_backlight_native; - /* No ACPI video (old hw), use vendor specific fw methods. */ return acpi_backlight_vendor; } @@ -754,6 +765,18 @@ EXPORT_SYMBOL(acpi_video_get_backlight_type); bool acpi_video_backlight_use_native(void) { - return __acpi_video_get_backlight_type(true) == acpi_backlight_native; + /* + * Call __acpi_video_get_backlight_type() to let it know that + * a native backlight is available. + */ + __acpi_video_get_backlight_type(true); + + /* + * For now just always return true. There is a whole bunch of laptop + * models where (video_caps & ACPI_VIDEO_BACKLIGHT) is false causing + * __acpi_video_get_backlight_type() to return vendor, while these + * models only have a native backlight control. + */ + return true; } EXPORT_SYMBOL(acpi_video_backlight_use_native); diff --git a/drivers/acpi/x86/utils.c b/drivers/acpi/x86/utils.c index f8a2cbdc0ce2b3e49731e88209a15baca9696cec..d7d3f1669d4c0a7a94dc855740c1dabc17f2f8fb 100644 --- a/drivers/acpi/x86/utils.c +++ b/drivers/acpi/x86/utils.c @@ -219,6 +219,12 @@ static const struct dmi_system_id force_storage_d3_dmi[] = { DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 14 7425 2-in-1"), } }, + { + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 16 5625"), + } + }, {} }; diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c index 1c39cfce32fade507d05f4a7d25070f09fc52fc0..4ad42b0f75cd9fb327df21a28679628dbfd11052 100644 --- a/drivers/android/binder_alloc.c +++ b/drivers/android/binder_alloc.c @@ -739,6 +739,12 @@ int binder_alloc_mmap_handler(struct binder_alloc *alloc, const char *failure_string; struct binder_buffer *buffer; + if (unlikely(vma->vm_mm != alloc->mm)) { + ret = -EINVAL; + failure_string = "invalid vma->vm_mm"; + goto err_invalid_mm; + } + mutex_lock(&binder_alloc_mmap_lock); if (alloc->buffer_size) { ret = -EBUSY; @@ -785,6 +791,7 @@ int binder_alloc_mmap_handler(struct binder_alloc *alloc, alloc->buffer_size = 0; err_already_mapped: mutex_unlock(&binder_alloc_mmap_lock); +err_invalid_mm: binder_alloc_debug(BINDER_DEBUG_USER_ERROR, "%s: %d %lx-%lx %s failed %d\n", __func__, alloc->pid, vma->vm_start, vma->vm_end, diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index e2ebb0b065e27ebdd4ba38eeeb1934e818c693f0..06a3d95ed8f9f85494c7bb09fbcfb41806639735 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c @@ -3264,6 +3264,7 @@ static unsigned int ata_scsiop_maint_in(struct ata_scsi_args *args, u8 *rbuf) case REPORT_LUNS: case REQUEST_SENSE: case SYNCHRONIZE_CACHE: + case SYNCHRONIZE_CACHE_16: case REZERO_UNIT: case SEEK_6: case SEEK_10: @@ -3922,6 +3923,7 @@ static inline ata_xlat_func_t ata_get_xlat_func(struct ata_device *dev, u8 cmd) return ata_scsi_write_same_xlat; case SYNCHRONIZE_CACHE: + case SYNCHRONIZE_CACHE_16: if (ata_try_flush_cache(dev)) return ata_scsi_flush_xlat; break; @@ -3962,9 +3964,19 @@ static inline ata_xlat_func_t ata_get_xlat_func(struct ata_device *dev, u8 cmd) int __ata_scsi_queuecmd(struct scsi_cmnd *scmd, struct ata_device *dev) { + struct ata_port *ap = dev->link->ap; u8 scsi_op = scmd->cmnd[0]; ata_xlat_func_t xlat_func; + /* + * scsi_queue_rq() will defer commands if scsi_host_in_recovery(). + * However, this check is done without holding the ap->lock (a libata + * specific lock), so we can have received an error irq since then, + * therefore we must check if EH is pending, while holding ap->lock. + */ + if (ap->pflags & (ATA_PFLAG_EH_PENDING | ATA_PFLAG_EH_IN_PROGRESS)) + return SCSI_MLQUEUE_DEVICE_BUSY; + if (unlikely(!scmd->cmd_len)) goto bad_cdb_len; @@ -4145,6 +4157,7 @@ void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd) * turning this into a no-op. */ case SYNCHRONIZE_CACHE: + case SYNCHRONIZE_CACHE_16: fallthrough; /* no-op's, complete with success */ diff --git a/drivers/ata/libata-transport.c b/drivers/ata/libata-transport.c index a7e9a75410a35ae1d5df860aabeee25d247e4126..e4fb9d1b9b39803a624ce8bf0185193a84d61d00 100644 --- a/drivers/ata/libata-transport.c +++ b/drivers/ata/libata-transport.c @@ -301,7 +301,9 @@ int ata_tport_add(struct device *parent, pm_runtime_enable(dev); pm_runtime_forbid(dev); - transport_add_device(dev); + error = transport_add_device(dev); + if (error) + goto tport_transport_add_err; transport_configure_device(dev); error = ata_tlink_add(&ap->link); @@ -312,12 +314,12 @@ int ata_tport_add(struct device *parent, tport_link_err: transport_remove_device(dev); + tport_transport_add_err: device_del(dev); tport_err: transport_destroy_device(dev); put_device(dev); - ata_host_put(ap->host); return error; } @@ -456,7 +458,9 @@ int ata_tlink_add(struct ata_link *link) goto tlink_err; } - transport_add_device(dev); + error = transport_add_device(dev); + if (error) + goto tlink_transport_err; transport_configure_device(dev); ata_for_each_dev(ata_dev, link, ALL) { @@ -471,6 +475,7 @@ int ata_tlink_add(struct ata_link *link) ata_tdev_delete(ata_dev); } transport_remove_device(dev); + tlink_transport_err: device_del(dev); tlink_err: transport_destroy_device(dev); @@ -708,7 +713,13 @@ static int ata_tdev_add(struct ata_device *ata_dev) return error; } - transport_add_device(dev); + error = transport_add_device(dev); + if (error) { + device_del(dev); + ata_tdev_free(ata_dev); + return error; + } + transport_configure_device(dev); return 0; } diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c index 0a8bf09a5c19e5887ae463e0a581a04e366e4dd2..03c580625c2cc7c1d5ce0b905caf7190e989410a 100644 --- a/drivers/ata/pata_legacy.c +++ b/drivers/ata/pata_legacy.c @@ -315,9 +315,10 @@ static void pdc20230_set_piomode(struct ata_port *ap, struct ata_device *adev) outb(inb(0x1F4) & 0x07, 0x1F4); rt = inb(0x1F3); - rt &= 0x07 << (3 * adev->devno); + rt &= ~(0x07 << (3 * !adev->devno)); if (pio) - rt |= (1 + 3 * pio) << (3 * adev->devno); + rt |= (1 + 3 * pio) << (3 * !adev->devno); + outb(rt, 0x1F3); udelay(100); outb(inb(0x1F2) | 0x01, 0x1F2); diff --git a/drivers/ata/pata_palmld.c b/drivers/ata/pata_palmld.c index 400e65190904fd04868871df36491b36de53fa00..51caa2a427dd8052e20aeebda780c21d83c467df 100644 --- a/drivers/ata/pata_palmld.c +++ b/drivers/ata/pata_palmld.c @@ -63,8 +63,8 @@ static int palmld_pata_probe(struct platform_device *pdev) /* remap drive's physical memory address */ mem = devm_platform_ioremap_resource(pdev, 0); - if (!mem) - return -ENOMEM; + if (IS_ERR(mem)) + return PTR_ERR(mem); /* request and activate power and reset GPIOs */ lda->power = devm_gpiod_get(dev, "power", GPIOD_OUT_HIGH); diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig index db1b4b202646e8076134bb5a001fb2032640a3c2..a41145d52de9426b0b6c9ac0ba97c0f7e4c79b5d 100644 --- a/drivers/block/Kconfig +++ b/drivers/block/Kconfig @@ -408,6 +408,12 @@ config BLK_DEV_UBLK definition isn't finalized yet, and might change according to future requirement, so mark is as experimental now. + Say Y if you want to get better performance because task_work_add() + can be used in IO path for replacing io_uring cmd, which will become + shared between IO tasks and ubq daemon, meantime task_work_add() can + can handle batch more effectively, but task_work_add() isn't exported + for module, so ublk has to be built to kernel. + source "drivers/block/rnbd/Kconfig" endif # BLK_DEV diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index f3e4db16fd07bb6044b0b211203fafb18d1327ee..8532b839a3435c895ca297efd14ffd421ae513ad 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c @@ -2672,7 +2672,7 @@ static int init_submitter(struct drbd_device *device) enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsigned int minor) { struct drbd_resource *resource = adm_ctx->resource; - struct drbd_connection *connection; + struct drbd_connection *connection, *n; struct drbd_device *device; struct drbd_peer_device *peer_device, *tmp_peer_device; struct gendisk *disk; @@ -2789,7 +2789,7 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig return NO_ERROR; out_idr_remove_from_resource: - for_each_connection(connection, resource) { + for_each_connection_safe(connection, n, resource) { peer_device = idr_remove(&connection->peer_devices, vnr); if (peer_device) kref_put(&connection->kref, drbd_destroy_connection); diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 5afce6ffaadfaf0efa8703a9aa999af9c3fa4f0c..e9de9d846b730359623d5b451015c169937f9685 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -57,11 +57,12 @@ #define UBLK_PARAM_TYPE_ALL (UBLK_PARAM_TYPE_BASIC | UBLK_PARAM_TYPE_DISCARD) struct ublk_rq_data { + struct llist_node node; struct callback_head work; }; struct ublk_uring_cmd_pdu { - struct request *req; + struct ublk_queue *ubq; }; /* @@ -119,6 +120,8 @@ struct ublk_queue { struct task_struct *ubq_daemon; char *io_cmd_buf; + struct llist_head io_cmds; + unsigned long io_addr; /* mapped vm address */ unsigned int max_io_sz; bool force_abort; @@ -761,11 +764,31 @@ static inline void __ublk_rq_task_work(struct request *req) ubq_complete_io_cmd(io, UBLK_IO_RES_OK); } +static inline void ublk_forward_io_cmds(struct ublk_queue *ubq) +{ + struct llist_node *io_cmds = llist_del_all(&ubq->io_cmds); + struct ublk_rq_data *data, *tmp; + + io_cmds = llist_reverse_order(io_cmds); + llist_for_each_entry_safe(data, tmp, io_cmds, node) + __ublk_rq_task_work(blk_mq_rq_from_pdu(data)); +} + +static inline void ublk_abort_io_cmds(struct ublk_queue *ubq) +{ + struct llist_node *io_cmds = llist_del_all(&ubq->io_cmds); + struct ublk_rq_data *data, *tmp; + + llist_for_each_entry_safe(data, tmp, io_cmds, node) + __ublk_abort_rq(ubq, blk_mq_rq_from_pdu(data)); +} + static void ublk_rq_task_work_cb(struct io_uring_cmd *cmd) { struct ublk_uring_cmd_pdu *pdu = ublk_get_uring_cmd_pdu(cmd); + struct ublk_queue *ubq = pdu->ubq; - __ublk_rq_task_work(pdu->req); + ublk_forward_io_cmds(ubq); } static void ublk_rq_task_work_fn(struct callback_head *work) @@ -773,8 +796,45 @@ static void ublk_rq_task_work_fn(struct callback_head *work) struct ublk_rq_data *data = container_of(work, struct ublk_rq_data, work); struct request *req = blk_mq_rq_from_pdu(data); + struct ublk_queue *ubq = req->mq_hctx->driver_data; + + ublk_forward_io_cmds(ubq); +} - __ublk_rq_task_work(req); +static void ublk_queue_cmd(struct ublk_queue *ubq, struct request *rq) +{ + struct ublk_rq_data *data = blk_mq_rq_to_pdu(rq); + struct ublk_io *io; + + if (!llist_add(&data->node, &ubq->io_cmds)) + return; + + io = &ubq->ios[rq->tag]; + /* + * If the check pass, we know that this is a re-issued request aborted + * previously in monitor_work because the ubq_daemon(cmd's task) is + * PF_EXITING. We cannot call io_uring_cmd_complete_in_task() anymore + * because this ioucmd's io_uring context may be freed now if no inflight + * ioucmd exists. Otherwise we may cause null-deref in ctx->fallback_work. + * + * Note: monitor_work sets UBLK_IO_FLAG_ABORTED and ends this request(releasing + * the tag). Then the request is re-started(allocating the tag) and we are here. + * Since releasing/allocating a tag implies smp_mb(), finding UBLK_IO_FLAG_ABORTED + * guarantees that here is a re-issued request aborted previously. + */ + if (unlikely(io->flags & UBLK_IO_FLAG_ABORTED)) { + ublk_abort_io_cmds(ubq); + } else if (ublk_can_use_task_work(ubq)) { + if (task_work_add(ubq->ubq_daemon, &data->work, + TWA_SIGNAL_NO_IPI)) + ublk_abort_io_cmds(ubq); + } else { + struct io_uring_cmd *cmd = io->cmd; + struct ublk_uring_cmd_pdu *pdu = ublk_get_uring_cmd_pdu(cmd); + + pdu->ubq = ubq; + io_uring_cmd_complete_in_task(cmd, ublk_rq_task_work_cb); + } } static blk_status_t ublk_queue_rq(struct blk_mq_hw_ctx *hctx, @@ -788,6 +848,7 @@ static blk_status_t ublk_queue_rq(struct blk_mq_hw_ctx *hctx, res = ublk_setup_iod(ubq, rq); if (unlikely(res != BLK_STS_OK)) return BLK_STS_IOERR; + /* With recovery feature enabled, force_abort is set in * ublk_stop_dev() before calling del_gendisk(). We have to * abort all requeued and new rqs here to let del_gendisk() @@ -803,53 +864,15 @@ static blk_status_t ublk_queue_rq(struct blk_mq_hw_ctx *hctx, blk_mq_start_request(bd->rq); if (unlikely(ubq_daemon_is_dying(ubq))) { - fail: __ublk_abort_rq(ubq, rq); return BLK_STS_OK; } - if (ublk_can_use_task_work(ubq)) { - struct ublk_rq_data *data = blk_mq_rq_to_pdu(rq); - enum task_work_notify_mode notify_mode = bd->last ? - TWA_SIGNAL_NO_IPI : TWA_NONE; - - if (task_work_add(ubq->ubq_daemon, &data->work, notify_mode)) - goto fail; - } else { - struct ublk_io *io = &ubq->ios[rq->tag]; - struct io_uring_cmd *cmd = io->cmd; - struct ublk_uring_cmd_pdu *pdu = ublk_get_uring_cmd_pdu(cmd); - - /* - * If the check pass, we know that this is a re-issued request aborted - * previously in monitor_work because the ubq_daemon(cmd's task) is - * PF_EXITING. We cannot call io_uring_cmd_complete_in_task() anymore - * because this ioucmd's io_uring context may be freed now if no inflight - * ioucmd exists. Otherwise we may cause null-deref in ctx->fallback_work. - * - * Note: monitor_work sets UBLK_IO_FLAG_ABORTED and ends this request(releasing - * the tag). Then the request is re-started(allocating the tag) and we are here. - * Since releasing/allocating a tag implies smp_mb(), finding UBLK_IO_FLAG_ABORTED - * guarantees that here is a re-issued request aborted previously. - */ - if ((io->flags & UBLK_IO_FLAG_ABORTED)) - goto fail; - - pdu->req = rq; - io_uring_cmd_complete_in_task(cmd, ublk_rq_task_work_cb); - } + ublk_queue_cmd(ubq, rq); return BLK_STS_OK; } -static void ublk_commit_rqs(struct blk_mq_hw_ctx *hctx) -{ - struct ublk_queue *ubq = hctx->driver_data; - - if (ublk_can_use_task_work(ubq)) - __set_notify_signal(ubq->ubq_daemon); -} - static int ublk_init_hctx(struct blk_mq_hw_ctx *hctx, void *driver_data, unsigned int hctx_idx) { @@ -871,7 +894,6 @@ static int ublk_init_rq(struct blk_mq_tag_set *set, struct request *req, static const struct blk_mq_ops ublk_mq_ops = { .queue_rq = ublk_queue_rq, - .commit_rqs = ublk_commit_rqs, .init_hctx = ublk_init_hctx, .init_request = ublk_init_rq, }; @@ -1164,22 +1186,12 @@ static void ublk_mark_io_ready(struct ublk_device *ub, struct ublk_queue *ubq) } static void ublk_handle_need_get_data(struct ublk_device *ub, int q_id, - int tag, struct io_uring_cmd *cmd) + int tag) { struct ublk_queue *ubq = ublk_get_queue(ub, q_id); struct request *req = blk_mq_tag_to_rq(ub->tag_set.tags[q_id], tag); - if (ublk_can_use_task_work(ubq)) { - struct ublk_rq_data *data = blk_mq_rq_to_pdu(req); - - /* should not fail since we call it just in ubq->ubq_daemon */ - task_work_add(ubq->ubq_daemon, &data->work, TWA_SIGNAL_NO_IPI); - } else { - struct ublk_uring_cmd_pdu *pdu = ublk_get_uring_cmd_pdu(cmd); - - pdu->req = req; - io_uring_cmd_complete_in_task(cmd, ublk_rq_task_work_cb); - } + ublk_queue_cmd(ubq, req); } static int ublk_ch_uring_cmd(struct io_uring_cmd *cmd, unsigned int issue_flags) @@ -1267,7 +1279,7 @@ static int ublk_ch_uring_cmd(struct io_uring_cmd *cmd, unsigned int issue_flags) io->addr = ub_cmd->addr; io->cmd = cmd; io->flags |= UBLK_IO_FLAG_ACTIVE; - ublk_handle_need_get_data(ub, ub_cmd->q_id, ub_cmd->tag, cmd); + ublk_handle_need_get_data(ub, ub_cmd->q_id, ub_cmd->tag); break; default: goto out; @@ -1658,6 +1670,9 @@ static int ublk_ctrl_add_dev(struct io_uring_cmd *cmd) */ ub->dev_info.flags &= UBLK_F_ALL; + if (!IS_BUILTIN(CONFIG_BLK_DEV_UBLK)) + ub->dev_info.flags |= UBLK_F_URING_CMD_COMP_IN_TASK; + /* We are not ready to support zero copy */ ub->dev_info.flags &= ~UBLK_F_SUPPORT_ZERO_COPY; diff --git a/drivers/bluetooth/virtio_bt.c b/drivers/bluetooth/virtio_bt.c index 67c21263f9e0f250f0719b8e7f1fe15b0eba5ee0..fd281d43950554a0e492f569e7d1593265c89228 100644 --- a/drivers/bluetooth/virtio_bt.c +++ b/drivers/bluetooth/virtio_bt.c @@ -219,7 +219,7 @@ static void virtbt_rx_work(struct work_struct *work) if (!skb) return; - skb->len = len; + skb_put(skb, len); virtbt_rx_handle(vbt, skb); if (virtbt_add_inbuf(vbt) < 0) diff --git a/drivers/bus/intel-ixp4xx-eb.c b/drivers/bus/intel-ixp4xx-eb.c index a4388440aca7a8def5f4aaa3ab0a3ddcff4ddcce..91db001eb69a639b53ce2980b372713b88ffb403 100644 --- a/drivers/bus/intel-ixp4xx-eb.c +++ b/drivers/bus/intel-ixp4xx-eb.c @@ -49,7 +49,7 @@ #define IXP4XX_EXP_SIZE_SHIFT 10 #define IXP4XX_EXP_CNFG_0 BIT(9) /* Always zero */ #define IXP43X_EXP_SYNC_INTEL BIT(8) /* Only on IXP43x */ -#define IXP43X_EXP_EXP_CHIP BIT(7) /* Only on IXP43x */ +#define IXP43X_EXP_EXP_CHIP BIT(7) /* Only on IXP43x, dangerous to touch on IXP42x */ #define IXP4XX_EXP_BYTE_RD16 BIT(6) #define IXP4XX_EXP_HRDY_POL BIT(5) /* Only on IXP42x */ #define IXP4XX_EXP_MUX_EN BIT(4) @@ -57,8 +57,6 @@ #define IXP4XX_EXP_WORD BIT(2) /* Always zero */ #define IXP4XX_EXP_WR_EN BIT(1) #define IXP4XX_EXP_BYTE_EN BIT(0) -#define IXP42X_RESERVED (BIT(30)|IXP4XX_EXP_CNFG_0|BIT(8)|BIT(7)|IXP4XX_EXP_WORD) -#define IXP43X_RESERVED (BIT(30)|IXP4XX_EXP_CNFG_0|BIT(5)|IXP4XX_EXP_WORD) #define IXP4XX_EXP_CNFG0 0x20 #define IXP4XX_EXP_CNFG0_MEM_MAP BIT(31) @@ -252,10 +250,9 @@ static void ixp4xx_exp_setup_chipselect(struct ixp4xx_eb *eb, cs_cfg |= val << IXP4XX_EXP_CYC_TYPE_SHIFT; } - if (eb->is_42x) - cs_cfg &= ~IXP42X_RESERVED; if (eb->is_43x) { - cs_cfg &= ~IXP43X_RESERVED; + /* Should always be zero */ + cs_cfg &= ~IXP4XX_EXP_WORD; /* * This bit for Intel strata flash is currently unused, but let's * report it if we find one. diff --git a/drivers/bus/sunxi-rsb.c b/drivers/bus/sunxi-rsb.c index 4cd2e127946ead27ba3a0a8368ce7b138669e5c5..3aa91aed3bf733a4876e5d36c8badf13150a771b 100644 --- a/drivers/bus/sunxi-rsb.c +++ b/drivers/bus/sunxi-rsb.c @@ -267,6 +267,9 @@ EXPORT_SYMBOL_GPL(sunxi_rsb_driver_register); /* common code that starts a transfer */ static int _sunxi_rsb_run_xfer(struct sunxi_rsb *rsb) { + u32 int_mask, status; + bool timeout; + if (readl(rsb->regs + RSB_CTRL) & RSB_CTRL_START_TRANS) { dev_dbg(rsb->dev, "RSB transfer still in progress\n"); return -EBUSY; @@ -274,13 +277,23 @@ static int _sunxi_rsb_run_xfer(struct sunxi_rsb *rsb) reinit_completion(&rsb->complete); - writel(RSB_INTS_LOAD_BSY | RSB_INTS_TRANS_ERR | RSB_INTS_TRANS_OVER, - rsb->regs + RSB_INTE); + int_mask = RSB_INTS_LOAD_BSY | RSB_INTS_TRANS_ERR | RSB_INTS_TRANS_OVER; + writel(int_mask, rsb->regs + RSB_INTE); writel(RSB_CTRL_START_TRANS | RSB_CTRL_GLOBAL_INT_ENB, rsb->regs + RSB_CTRL); - if (!wait_for_completion_io_timeout(&rsb->complete, - msecs_to_jiffies(100))) { + if (irqs_disabled()) { + timeout = readl_poll_timeout_atomic(rsb->regs + RSB_INTS, + status, (status & int_mask), + 10, 100000); + writel(status, rsb->regs + RSB_INTS); + } else { + timeout = !wait_for_completion_io_timeout(&rsb->complete, + msecs_to_jiffies(100)); + status = rsb->status; + } + + if (timeout) { dev_dbg(rsb->dev, "RSB timeout\n"); /* abort the transfer */ @@ -292,18 +305,18 @@ static int _sunxi_rsb_run_xfer(struct sunxi_rsb *rsb) return -ETIMEDOUT; } - if (rsb->status & RSB_INTS_LOAD_BSY) { + if (status & RSB_INTS_LOAD_BSY) { dev_dbg(rsb->dev, "RSB busy\n"); return -EBUSY; } - if (rsb->status & RSB_INTS_TRANS_ERR) { - if (rsb->status & RSB_INTS_TRANS_ERR_ACK) { + if (status & RSB_INTS_TRANS_ERR) { + if (status & RSB_INTS_TRANS_ERR_ACK) { dev_dbg(rsb->dev, "RSB slave nack\n"); return -EINVAL; } - if (rsb->status & RSB_INTS_TRANS_ERR_DATA) { + if (status & RSB_INTS_TRANS_ERR_DATA) { dev_dbg(rsb->dev, "RSB transfer data error\n"); return -EIO; } @@ -812,14 +825,6 @@ static int sunxi_rsb_remove(struct platform_device *pdev) return 0; } -static void sunxi_rsb_shutdown(struct platform_device *pdev) -{ - struct sunxi_rsb *rsb = platform_get_drvdata(pdev); - - pm_runtime_disable(&pdev->dev); - sunxi_rsb_hw_exit(rsb); -} - static const struct dev_pm_ops sunxi_rsb_dev_pm_ops = { SET_RUNTIME_PM_OPS(sunxi_rsb_runtime_suspend, sunxi_rsb_runtime_resume, NULL) @@ -835,7 +840,6 @@ MODULE_DEVICE_TABLE(of, sunxi_rsb_of_match_table); static struct platform_driver sunxi_rsb_driver = { .probe = sunxi_rsb_probe, .remove = sunxi_rsb_remove, - .shutdown = sunxi_rsb_shutdown, .driver = { .name = RSB_CTRL_NAME, .of_match_table = sunxi_rsb_of_match_table, diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c index 1621ce8187052cf332cab95d0dffed87ec2f074e..d69905233aff2da31bfd55d6f53a62e5a5cb90b4 100644 --- a/drivers/char/tpm/tpm-interface.c +++ b/drivers/char/tpm/tpm-interface.c @@ -401,13 +401,14 @@ int tpm_pm_suspend(struct device *dev) !pm_suspend_via_firmware()) goto suspended; - if (!tpm_chip_start(chip)) { + rc = tpm_try_get_ops(chip); + if (!rc) { if (chip->flags & TPM_CHIP_FLAG_TPM2) tpm2_shutdown(chip, TPM2_SU_STATE); else rc = tpm1_pm_suspend(chip, tpm_suspend_pcr); - tpm_chip_stop(chip); + tpm_put_ops(chip); } suspended: diff --git a/drivers/clk/at91/at91rm9200.c b/drivers/clk/at91/at91rm9200.c index b174f727a8ef8d8f03347e0ee07c97c839d42360..16870943a13e544e22876baef6c1e14063d25a67 100644 --- a/drivers/clk/at91/at91rm9200.c +++ b/drivers/clk/at91/at91rm9200.c @@ -40,7 +40,7 @@ static const struct clk_pll_characteristics rm9200_pll_characteristics = { }; static const struct sck at91rm9200_systemck[] = { - { .n = "udpck", .p = "usbck", .id = 2 }, + { .n = "udpck", .p = "usbck", .id = 1 }, { .n = "uhpck", .p = "usbck", .id = 4 }, { .n = "pck0", .p = "prog0", .id = 8 }, { .n = "pck1", .p = "prog1", .id = 9 }, diff --git a/drivers/clk/clk-renesas-pcie.c b/drivers/clk/clk-renesas-pcie.c index 4f5df1fc74b46d2dabdc89da02af14468fc47192..e6247141d0c05029225813d3499347bc449ac4ab 100644 --- a/drivers/clk/clk-renesas-pcie.c +++ b/drivers/clk/clk-renesas-pcie.c @@ -90,13 +90,66 @@ static const struct regmap_access_table rs9_writeable_table = { .n_yes_ranges = ARRAY_SIZE(rs9_writeable_ranges), }; +static int rs9_regmap_i2c_write(void *context, + unsigned int reg, unsigned int val) +{ + struct i2c_client *i2c = context; + const u8 data[3] = { reg, 1, val }; + const int count = ARRAY_SIZE(data); + int ret; + + ret = i2c_master_send(i2c, data, count); + if (ret == count) + return 0; + else if (ret < 0) + return ret; + else + return -EIO; +} + +static int rs9_regmap_i2c_read(void *context, + unsigned int reg, unsigned int *val) +{ + struct i2c_client *i2c = context; + struct i2c_msg xfer[2]; + u8 txdata = reg; + u8 rxdata[2]; + int ret; + + xfer[0].addr = i2c->addr; + xfer[0].flags = 0; + xfer[0].len = 1; + xfer[0].buf = (void *)&txdata; + + xfer[1].addr = i2c->addr; + xfer[1].flags = I2C_M_RD; + xfer[1].len = 2; + xfer[1].buf = (void *)rxdata; + + ret = i2c_transfer(i2c->adapter, xfer, 2); + if (ret < 0) + return ret; + if (ret != 2) + return -EIO; + + /* + * Byte 0 is transfer length, which is always 1 due + * to BCP register programming to 1 in rs9_probe(), + * ignore it and use data from Byte 1. + */ + *val = rxdata[1]; + return 0; +} + static const struct regmap_config rs9_regmap_config = { .reg_bits = 8, .val_bits = 8, - .cache_type = REGCACHE_FLAT, - .max_register = 0x8, + .cache_type = REGCACHE_NONE, + .max_register = RS9_REG_BCP, .rd_table = &rs9_readable_table, .wr_table = &rs9_writeable_table, + .reg_write = rs9_regmap_i2c_write, + .reg_read = rs9_regmap_i2c_read, }; static int rs9_get_output_config(struct rs9_driver_data *rs9, int idx) @@ -242,11 +295,17 @@ static int rs9_probe(struct i2c_client *client) return ret; } - rs9->regmap = devm_regmap_init_i2c(client, &rs9_regmap_config); + rs9->regmap = devm_regmap_init(&client->dev, NULL, + client, &rs9_regmap_config); if (IS_ERR(rs9->regmap)) return dev_err_probe(&client->dev, PTR_ERR(rs9->regmap), "Failed to allocate register map\n"); + /* Always read back 1 Byte via I2C */ + ret = regmap_write(rs9->regmap, RS9_REG_BCP, 1); + if (ret < 0) + return ret; + /* Register clock */ for (i = 0; i < rs9->chip_info->num_clks; i++) { snprintf(name, 5, "DIF%d", i); diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index c3c3f8c072588d2a3581e7af7cad80115ffb081d..57b83665e5c3a426a03ea542f436d68c5d0741b8 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -1459,10 +1459,14 @@ static void clk_core_init_rate_req(struct clk_core * const core, { struct clk_core *parent; - if (WARN_ON(!core || !req)) + if (WARN_ON(!req)) return; memset(req, 0, sizeof(*req)); + req->max_rate = ULONG_MAX; + + if (!core) + return; req->rate = rate; clk_core_get_boundaries(core, &req->min_rate, &req->max_rate); diff --git a/drivers/clk/mediatek/clk-mt8195-topckgen.c b/drivers/clk/mediatek/clk-mt8195-topckgen.c index 8cbab5ca2e581dad2a183e6b433736fee8542ee9..1e016329c1d23e19e71aa013a525e7978f4fb757 100644 --- a/drivers/clk/mediatek/clk-mt8195-topckgen.c +++ b/drivers/clk/mediatek/clk-mt8195-topckgen.c @@ -1270,8 +1270,10 @@ static int clk_mt8195_topck_probe(struct platform_device *pdev) hw = devm_clk_hw_register_mux(&pdev->dev, "mfg_ck_fast_ref", mfg_fast_parents, ARRAY_SIZE(mfg_fast_parents), CLK_SET_RATE_PARENT, (base + 0x250), 8, 1, 0, &mt8195_clk_lock); - if (IS_ERR(hw)) + if (IS_ERR(hw)) { + r = PTR_ERR(hw); goto unregister_muxes; + } top_clk_data->hws[CLK_TOP_MFG_CK_FAST_REF] = hw; r = clk_mt8195_reg_mfg_mux_notifier(&pdev->dev, diff --git a/drivers/clk/qcom/gcc-sc7280.c b/drivers/clk/qcom/gcc-sc7280.c index 8afb7575e712fd13499fc979e7a3c6d08612e5fc..46d41ebce2b08d718ead7a6658b17bf488288b74 100644 --- a/drivers/clk/qcom/gcc-sc7280.c +++ b/drivers/clk/qcom/gcc-sc7280.c @@ -3467,6 +3467,7 @@ static int gcc_sc7280_probe(struct platform_device *pdev) regmap_update_bits(regmap, 0x28004, BIT(0), BIT(0)); regmap_update_bits(regmap, 0x28014, BIT(0), BIT(0)); regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0)); + regmap_update_bits(regmap, 0x7100C, BIT(13), BIT(13)); ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, ARRAY_SIZE(gcc_dfs_clocks)); diff --git a/drivers/clk/qcom/gcc-sc8280xp.c b/drivers/clk/qcom/gcc-sc8280xp.c index a18ed88f3b822a5375e8cc92fb33e4f280a6392d..b3198784e1c3df19eb9c2a1018345a1766f26205 100644 --- a/drivers/clk/qcom/gcc-sc8280xp.c +++ b/drivers/clk/qcom/gcc-sc8280xp.c @@ -5364,6 +5364,8 @@ static struct clk_branch gcc_ufs_1_card_clkref_clk = { .enable_mask = BIT(0), .hw.init = &(const struct clk_init_data) { .name = "gcc_ufs_1_card_clkref_clk", + .parent_data = &gcc_parent_data_tcxo, + .num_parents = 1, .ops = &clk_branch2_ops, }, }, @@ -5432,6 +5434,8 @@ static struct clk_branch gcc_ufs_card_clkref_clk = { .enable_mask = BIT(0), .hw.init = &(const struct clk_init_data) { .name = "gcc_ufs_card_clkref_clk", + .parent_data = &gcc_parent_data_tcxo, + .num_parents = 1, .ops = &clk_branch2_ops, }, }, @@ -5848,6 +5852,8 @@ static struct clk_branch gcc_ufs_ref_clkref_clk = { .enable_mask = BIT(0), .hw.init = &(const struct clk_init_data) { .name = "gcc_ufs_ref_clkref_clk", + .parent_data = &gcc_parent_data_tcxo, + .num_parents = 1, .ops = &clk_branch2_ops, }, }, diff --git a/drivers/clk/qcom/gdsc.c b/drivers/clk/qcom/gdsc.c index 7cf5e130e92fb59f8d99759ebe656b7bceacf5a1..0f21a8a767ac198b683904bfc501899c3a5a7528 100644 --- a/drivers/clk/qcom/gdsc.c +++ b/drivers/clk/qcom/gdsc.c @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -56,22 +55,6 @@ enum gdsc_status { GDSC_ON }; -static int gdsc_pm_runtime_get(struct gdsc *sc) -{ - if (!sc->dev) - return 0; - - return pm_runtime_resume_and_get(sc->dev); -} - -static int gdsc_pm_runtime_put(struct gdsc *sc) -{ - if (!sc->dev) - return 0; - - return pm_runtime_put_sync(sc->dev); -} - /* Returns 1 if GDSC status is status, 0 if not, and < 0 on error */ static int gdsc_check_status(struct gdsc *sc, enum gdsc_status status) { @@ -271,8 +254,9 @@ static void gdsc_retain_ff_on(struct gdsc *sc) regmap_update_bits(sc->regmap, sc->gdscr, mask, mask); } -static int _gdsc_enable(struct gdsc *sc) +static int gdsc_enable(struct generic_pm_domain *domain) { + struct gdsc *sc = domain_to_gdsc(domain); int ret; if (sc->pwrsts == PWRSTS_ON) @@ -328,22 +312,11 @@ static int _gdsc_enable(struct gdsc *sc) return 0; } -static int gdsc_enable(struct generic_pm_domain *domain) +static int gdsc_disable(struct generic_pm_domain *domain) { struct gdsc *sc = domain_to_gdsc(domain); int ret; - ret = gdsc_pm_runtime_get(sc); - if (ret) - return ret; - - return _gdsc_enable(sc); -} - -static int _gdsc_disable(struct gdsc *sc) -{ - int ret; - if (sc->pwrsts == PWRSTS_ON) return gdsc_assert_reset(sc); @@ -388,18 +361,6 @@ static int _gdsc_disable(struct gdsc *sc) return 0; } -static int gdsc_disable(struct generic_pm_domain *domain) -{ - struct gdsc *sc = domain_to_gdsc(domain); - int ret; - - ret = _gdsc_disable(sc); - - gdsc_pm_runtime_put(sc); - - return ret; -} - static int gdsc_init(struct gdsc *sc) { u32 mask, val; @@ -447,11 +408,6 @@ static int gdsc_init(struct gdsc *sc) return ret; } - /* ...and the power-domain */ - ret = gdsc_pm_runtime_get(sc); - if (ret) - goto err_disable_supply; - /* * Votable GDSCs can be ON due to Vote from other masters. * If a Votable GDSC is ON, make sure we have a Vote. @@ -459,14 +415,14 @@ static int gdsc_init(struct gdsc *sc) if (sc->flags & VOTABLE) { ret = gdsc_update_collapse_bit(sc, false); if (ret) - goto err_put_rpm; + goto err_disable_supply; } /* Turn on HW trigger mode if supported */ if (sc->flags & HW_CTRL) { ret = gdsc_hwctrl(sc, true); if (ret < 0) - goto err_put_rpm; + goto err_disable_supply; } /* @@ -496,13 +452,10 @@ static int gdsc_init(struct gdsc *sc) ret = pm_genpd_init(&sc->pd, NULL, !on); if (ret) - goto err_put_rpm; + goto err_disable_supply; return 0; -err_put_rpm: - if (on) - gdsc_pm_runtime_put(sc); err_disable_supply: if (on && sc->rsupply) regulator_disable(sc->rsupply); @@ -541,8 +494,6 @@ int gdsc_register(struct gdsc_desc *desc, for (i = 0; i < num; i++) { if (!scs[i]) continue; - if (pm_runtime_enabled(dev)) - scs[i]->dev = dev; scs[i]->regmap = regmap; scs[i]->rcdev = rcdev; ret = gdsc_init(scs[i]); diff --git a/drivers/clk/qcom/gdsc.h b/drivers/clk/qcom/gdsc.h index 981a12c8502d9c4b353657ee96467f8883cf875a..8035126883366d3c6286d878078c90b534419ea9 100644 --- a/drivers/clk/qcom/gdsc.h +++ b/drivers/clk/qcom/gdsc.h @@ -30,7 +30,6 @@ struct reset_controller_dev; * @resets: ids of resets associated with this gdsc * @reset_count: number of @resets * @rcdev: reset controller - * @dev: the device holding the GDSC, used for pm_runtime calls */ struct gdsc { struct generic_pm_domain pd; @@ -74,7 +73,6 @@ struct gdsc { const char *supply; struct regulator *rsupply; - struct device *dev; }; struct gdsc_desc { diff --git a/drivers/clk/qcom/gpucc-sc7280.c b/drivers/clk/qcom/gpucc-sc7280.c index 9a832f2bcf4914826d2f451db6a2d2e2eb6c6f3a..1490cd45a654acf87383b42e06fb38724ab6cac1 100644 --- a/drivers/clk/qcom/gpucc-sc7280.c +++ b/drivers/clk/qcom/gpucc-sc7280.c @@ -463,6 +463,7 @@ static int gpu_cc_sc7280_probe(struct platform_device *pdev) */ regmap_update_bits(regmap, 0x1170, BIT(0), BIT(0)); regmap_update_bits(regmap, 0x1098, BIT(0), BIT(0)); + regmap_update_bits(regmap, 0x1098, BIT(13), BIT(13)); return qcom_cc_really_probe(pdev, &gpu_cc_sc7280_desc, regmap); } diff --git a/drivers/clk/renesas/r8a779g0-cpg-mssr.c b/drivers/clk/renesas/r8a779g0-cpg-mssr.c index 9641122133b54f9aa0cf18adefdf3bfd25db98ea..d5b325e3c53983d4915db390ac3c8ac0017bffe9 100644 --- a/drivers/clk/renesas/r8a779g0-cpg-mssr.c +++ b/drivers/clk/renesas/r8a779g0-cpg-mssr.c @@ -47,6 +47,7 @@ enum clk_ids { CLK_S0_VIO, CLK_S0_VC, CLK_S0_HSC, + CLK_SASYNCPER, CLK_SV_VIP, CLK_SV_IR, CLK_SDSRC, @@ -84,6 +85,7 @@ static const struct cpg_core_clk r8a779g0_core_clks[] __initconst = { DEF_FIXED(".s0_vio", CLK_S0_VIO, CLK_PLL1_DIV2, 2, 1), DEF_FIXED(".s0_vc", CLK_S0_VC, CLK_PLL1_DIV2, 2, 1), DEF_FIXED(".s0_hsc", CLK_S0_HSC, CLK_PLL1_DIV2, 2, 1), + DEF_FIXED(".sasyncper", CLK_SASYNCPER, CLK_PLL5_DIV4, 3, 1), DEF_FIXED(".sv_vip", CLK_SV_VIP, CLK_PLL1, 5, 1), DEF_FIXED(".sv_ir", CLK_SV_IR, CLK_PLL1, 5, 1), DEF_BASE(".sdsrc", CLK_SDSRC, CLK_TYPE_GEN4_SDSRC, CLK_PLL5), @@ -128,6 +130,9 @@ static const struct cpg_core_clk r8a779g0_core_clks[] __initconst = { DEF_FIXED("s0d4_hsc", R8A779G0_CLK_S0D4_HSC, CLK_S0_HSC, 4, 1), DEF_FIXED("cl16m_hsc", R8A779G0_CLK_CL16M_HSC, CLK_S0_HSC, 48, 1), DEF_FIXED("s0d2_cc", R8A779G0_CLK_S0D2_CC, CLK_S0, 2, 1), + DEF_FIXED("sasyncperd1",R8A779G0_CLK_SASYNCPERD1, CLK_SASYNCPER,1, 1), + DEF_FIXED("sasyncperd2",R8A779G0_CLK_SASYNCPERD2, CLK_SASYNCPER,2, 1), + DEF_FIXED("sasyncperd4",R8A779G0_CLK_SASYNCPERD4, CLK_SASYNCPER,4, 1), DEF_FIXED("svd1_ir", R8A779G0_CLK_SVD1_IR, CLK_SV_IR, 1, 1), DEF_FIXED("svd2_ir", R8A779G0_CLK_SVD2_IR, CLK_SV_IR, 2, 1), DEF_FIXED("svd1_vip", R8A779G0_CLK_SVD1_VIP, CLK_SV_VIP, 1, 1), @@ -153,10 +158,10 @@ static const struct mssr_mod_clk r8a779g0_mod_clks[] __initconst = { DEF_MOD("avb0", 211, R8A779G0_CLK_S0D4_HSC), DEF_MOD("avb1", 212, R8A779G0_CLK_S0D4_HSC), DEF_MOD("avb2", 213, R8A779G0_CLK_S0D4_HSC), - DEF_MOD("hscif0", 514, R8A779G0_CLK_S0D3_PER), - DEF_MOD("hscif1", 515, R8A779G0_CLK_S0D3_PER), - DEF_MOD("hscif2", 516, R8A779G0_CLK_S0D3_PER), - DEF_MOD("hscif3", 517, R8A779G0_CLK_S0D3_PER), + DEF_MOD("hscif0", 514, R8A779G0_CLK_SASYNCPERD1), + DEF_MOD("hscif1", 515, R8A779G0_CLK_SASYNCPERD1), + DEF_MOD("hscif2", 516, R8A779G0_CLK_SASYNCPERD1), + DEF_MOD("hscif3", 517, R8A779G0_CLK_SASYNCPERD1), DEF_MOD("i2c0", 518, R8A779G0_CLK_S0D6_PER), DEF_MOD("i2c1", 519, R8A779G0_CLK_S0D6_PER), DEF_MOD("i2c2", 520, R8A779G0_CLK_S0D6_PER), diff --git a/drivers/clk/samsung/clk-exynos-clkout.c b/drivers/clk/samsung/clk-exynos-clkout.c index 273f77d54dab9eb57296f3f22954785fe180ec55..e6d6cbf8c4e61e5d7d1c7edc653d27a0a995ed78 100644 --- a/drivers/clk/samsung/clk-exynos-clkout.c +++ b/drivers/clk/samsung/clk-exynos-clkout.c @@ -81,17 +81,19 @@ MODULE_DEVICE_TABLE(of, exynos_clkout_ids); static int exynos_clkout_match_parent_dev(struct device *dev, u32 *mux_mask) { const struct exynos_clkout_variant *variant; + const struct of_device_id *match; if (!dev->parent) { dev_err(dev, "not instantiated from MFD\n"); return -EINVAL; } - variant = of_device_get_match_data(dev->parent); - if (!variant) { + match = of_match_device(exynos_clkout_ids, dev->parent); + if (!match) { dev_err(dev, "cannot match parent device\n"); return -EINVAL; } + variant = match->data; *mux_mask = variant->mux_mask; diff --git a/drivers/clk/samsung/clk-exynos7885.c b/drivers/clk/samsung/clk-exynos7885.c index 62ce6814f1411f70f2e3510ad9a037459a3619c5..0d2a950ed18442402e102c15baea8a8b0ba961ac 100644 --- a/drivers/clk/samsung/clk-exynos7885.c +++ b/drivers/clk/samsung/clk-exynos7885.c @@ -231,7 +231,7 @@ static const struct samsung_div_clock top_div_clks[] __initconst = { CLK_CON_DIV_PLL_SHARED0_DIV2, 0, 1), DIV(CLK_DOUT_SHARED0_DIV3, "dout_shared0_div3", "fout_shared0_pll", CLK_CON_DIV_PLL_SHARED0_DIV3, 0, 2), - DIV(CLK_DOUT_SHARED0_DIV4, "dout_shared0_div4", "fout_shared0_pll", + DIV(CLK_DOUT_SHARED0_DIV4, "dout_shared0_div4", "dout_shared0_div2", CLK_CON_DIV_PLL_SHARED0_DIV4, 0, 1), DIV(CLK_DOUT_SHARED0_DIV5, "dout_shared0_div5", "fout_shared0_pll", CLK_CON_DIV_PLL_SHARED0_DIV5, 0, 3), @@ -239,7 +239,7 @@ static const struct samsung_div_clock top_div_clks[] __initconst = { CLK_CON_DIV_PLL_SHARED1_DIV2, 0, 1), DIV(CLK_DOUT_SHARED1_DIV3, "dout_shared1_div3", "fout_shared1_pll", CLK_CON_DIV_PLL_SHARED1_DIV3, 0, 2), - DIV(CLK_DOUT_SHARED1_DIV4, "dout_shared1_div4", "fout_shared1_pll", + DIV(CLK_DOUT_SHARED1_DIV4, "dout_shared1_div4", "dout_shared1_div2", CLK_CON_DIV_PLL_SHARED1_DIV4, 0, 1), /* CORE */ diff --git a/drivers/clk/sifive/Kconfig b/drivers/clk/sifive/Kconfig index 9132c3c4aa868f44ca193de7c3e01af409df6f16..b7fde0aadfcbb0359a4f0334307f99f388c64a85 100644 --- a/drivers/clk/sifive/Kconfig +++ b/drivers/clk/sifive/Kconfig @@ -2,7 +2,8 @@ menuconfig CLK_SIFIVE bool "SiFive SoC driver support" - depends on RISCV || COMPILE_TEST + depends on SOC_SIFIVE || COMPILE_TEST + default SOC_SIFIVE help SoC drivers for SiFive Linux-capable SoCs. @@ -10,6 +11,7 @@ if CLK_SIFIVE config CLK_SIFIVE_PRCI bool "PRCI driver for SiFive SoCs" + default SOC_SIFIVE select RESET_CONTROLLER select RESET_SIMPLE select CLK_ANALOGBITS_WRPLL_CLN28HPC diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c index a7ff77550e1737e291ef07ffc5ef1ebc83509d99..933bb960490d0a287e04e2a648e15cfd9f4fbf85 100644 --- a/drivers/clocksource/arm_arch_timer.c +++ b/drivers/clocksource/arm_arch_timer.c @@ -806,6 +806,9 @@ static u64 __arch_timer_check_delta(void) /* * XGene-1 implements CVAL in terms of TVAL, meaning * that the maximum timer range is 32bit. Shame on them. + * + * Note that TVAL is signed, thus has only 31 of its + * 32 bits to express magnitude. */ MIDR_ALL_VERSIONS(MIDR_CPU_MODEL(ARM_CPU_IMP_APM, APM_CPU_PART_POTENZA)), @@ -813,8 +816,8 @@ static u64 __arch_timer_check_delta(void) }; if (is_midr_in_range_list(read_cpuid_id(), broken_cval_midrs)) { - pr_warn_once("Broken CNTx_CVAL_EL1, limiting width to 32bits"); - return CLOCKSOURCE_MASK(32); + pr_warn_once("Broken CNTx_CVAL_EL1, using 31 bit TVAL instead.\n"); + return CLOCKSOURCE_MASK(31); } #endif return CLOCKSOURCE_MASK(arch_counter_get_width()); diff --git a/drivers/clocksource/hyperv_timer.c b/drivers/clocksource/hyperv_timer.c index bb47610bbd1c4ddee413a626cf8a6eed333b451a..18de1f439ffd5013ed7e1c09f7f4a70bdc8ad5a6 100644 --- a/drivers/clocksource/hyperv_timer.c +++ b/drivers/clocksource/hyperv_timer.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -395,25 +396,25 @@ static u64 notrace read_hv_sched_clock_tsc(void) static void suspend_hv_clock_tsc(struct clocksource *arg) { - u64 tsc_msr; + union hv_reference_tsc_msr tsc_msr; /* Disable the TSC page */ - tsc_msr = hv_get_register(HV_REGISTER_REFERENCE_TSC); - tsc_msr &= ~BIT_ULL(0); - hv_set_register(HV_REGISTER_REFERENCE_TSC, tsc_msr); + tsc_msr.as_uint64 = hv_get_register(HV_REGISTER_REFERENCE_TSC); + tsc_msr.enable = 0; + hv_set_register(HV_REGISTER_REFERENCE_TSC, tsc_msr.as_uint64); } static void resume_hv_clock_tsc(struct clocksource *arg) { phys_addr_t phys_addr = virt_to_phys(&tsc_pg); - u64 tsc_msr; + union hv_reference_tsc_msr tsc_msr; /* Re-enable the TSC page */ - tsc_msr = hv_get_register(HV_REGISTER_REFERENCE_TSC); - tsc_msr &= GENMASK_ULL(11, 0); - tsc_msr |= BIT_ULL(0) | (u64)phys_addr; - hv_set_register(HV_REGISTER_REFERENCE_TSC, tsc_msr); + tsc_msr.as_uint64 = hv_get_register(HV_REGISTER_REFERENCE_TSC); + tsc_msr.enable = 1; + tsc_msr.pfn = HVPFN_DOWN(phys_addr); + hv_set_register(HV_REGISTER_REFERENCE_TSC, tsc_msr.as_uint64); } #ifdef HAVE_VDSO_CLOCKMODE_HVCLOCK @@ -495,7 +496,7 @@ static __always_inline void hv_setup_sched_clock(void *sched_clock) {} static bool __init hv_init_tsc_clocksource(void) { - u64 tsc_msr; + union hv_reference_tsc_msr tsc_msr; phys_addr_t phys_addr; if (!(ms_hyperv.features & HV_MSR_REFERENCE_TSC_AVAILABLE)) @@ -530,10 +531,10 @@ static bool __init hv_init_tsc_clocksource(void) * (which already has at least the low 12 bits set to zero since * it is page aligned). Also set the "enable" bit, which is bit 0. */ - tsc_msr = hv_get_register(HV_REGISTER_REFERENCE_TSC); - tsc_msr &= GENMASK_ULL(11, 0); - tsc_msr = tsc_msr | 0x1 | (u64)phys_addr; - hv_set_register(HV_REGISTER_REFERENCE_TSC, tsc_msr); + tsc_msr.as_uint64 = hv_get_register(HV_REGISTER_REFERENCE_TSC); + tsc_msr.enable = 1; + tsc_msr.pfn = HVPFN_DOWN(phys_addr); + hv_set_register(HV_REGISTER_REFERENCE_TSC, tsc_msr.as_uint64); clocksource_register_hz(&hyperv_cs_tsc, NSEC_PER_SEC/100); diff --git a/drivers/clocksource/timer-riscv.c b/drivers/clocksource/timer-riscv.c index 969a552da8d2971c7df54cfd6af29871a443aff7..a0d66fabf07323e317fb852096f16f577380354a 100644 --- a/drivers/clocksource/timer-riscv.c +++ b/drivers/clocksource/timer-riscv.c @@ -51,7 +51,7 @@ static int riscv_clock_next_event(unsigned long delta, static unsigned int riscv_clock_event_irq; static DEFINE_PER_CPU(struct clock_event_device, riscv_clock_event) = { .name = "riscv_timer_clockevent", - .features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_C3STOP, + .features = CLOCK_EVT_FEAT_ONESHOT, .rating = 100, .set_next_event = riscv_clock_next_event, }; diff --git a/drivers/cpufreq/Kconfig.x86 b/drivers/cpufreq/Kconfig.x86 index 310779b07daf131015db699d1db232684d25b7f8..00476e94db9059d69cf890906d18c67eacb5dd2a 100644 --- a/drivers/cpufreq/Kconfig.x86 +++ b/drivers/cpufreq/Kconfig.x86 @@ -35,7 +35,7 @@ config X86_PCC_CPUFREQ If in doubt, say N. config X86_AMD_PSTATE - tristate "AMD Processor P-State driver" + bool "AMD Processor P-State driver" depends on X86 && ACPI select ACPI_PROCESSOR select ACPI_CPPC_LIB if X86_64 diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index ace7d50cf2ac426d9d6e8969ff6ad5df54f2fecb..204e39006dda8f102643ecd90eb45fbb3df70218 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -59,12 +59,8 @@ * we disable it by default to go acpi-cpufreq on these processors and add a * module parameter to be able to enable it manually for debugging. */ -static bool shared_mem = false; -module_param(shared_mem, bool, 0444); -MODULE_PARM_DESC(shared_mem, - "enable amd-pstate on processors with shared memory solution (false = disabled (default), true = enabled)"); - static struct cpufreq_driver amd_pstate_driver; +static int cppc_load __initdata; static inline int pstate_enable(bool enable) { @@ -424,12 +420,22 @@ static void amd_pstate_boost_init(struct amd_cpudata *cpudata) amd_pstate_driver.boost_enabled = true; } +static void amd_perf_ctl_reset(unsigned int cpu) +{ + wrmsrl_on_cpu(cpu, MSR_AMD_PERF_CTL, 0); +} + static int amd_pstate_cpu_init(struct cpufreq_policy *policy) { int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret; struct device *dev; struct amd_cpudata *cpudata; + /* + * Resetting PERF_CTL_MSR will put the CPU in P0 frequency, + * which is ideal for initialization process. + */ + amd_perf_ctl_reset(policy->cpu); dev = get_cpu_device(policy->cpu); if (!dev) return -ENODEV; @@ -616,6 +622,15 @@ static int __init amd_pstate_init(void) if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD) return -ENODEV; + /* + * by default the pstate driver is disabled to load + * enable the amd_pstate passive mode driver explicitly + * with amd_pstate=passive in kernel command line + */ + if (!cppc_load) { + pr_debug("driver load is disabled, boot with amd_pstate=passive to enable this\n"); + return -ENODEV; + } if (!acpi_cpc_valid()) { pr_warn_once("the _CPC object is not present in SBIOS or ACPI disabled\n"); @@ -630,13 +645,11 @@ static int __init amd_pstate_init(void) if (boot_cpu_has(X86_FEATURE_CPPC)) { pr_debug("AMD CPPC MSR based functionality is supported\n"); amd_pstate_driver.adjust_perf = amd_pstate_adjust_perf; - } else if (shared_mem) { + } else { + pr_debug("AMD CPPC shared memory based functionality is supported\n"); static_call_update(amd_pstate_enable, cppc_enable); static_call_update(amd_pstate_init_perf, cppc_init_perf); static_call_update(amd_pstate_update_perf, cppc_update_perf); - } else { - pr_info("This processor supports shared memory solution, you can enable it with amd_pstate.shared_mem=1\n"); - return -ENODEV; } /* enable amd pstate feature */ @@ -653,16 +666,22 @@ static int __init amd_pstate_init(void) return ret; } +device_initcall(amd_pstate_init); -static void __exit amd_pstate_exit(void) +static int __init amd_pstate_param(char *str) { - cpufreq_unregister_driver(&amd_pstate_driver); + if (!str) + return -EINVAL; - amd_pstate_enable(false); -} + if (!strcmp(str, "disable")) { + cppc_load = 0; + pr_info("driver is explicitly disabled\n"); + } else if (!strcmp(str, "passive")) + cppc_load = 1; -module_init(amd_pstate_init); -module_exit(amd_pstate_exit); + return 0; +} +early_param("amd_pstate", amd_pstate_param); MODULE_AUTHOR("Huang Rui "); MODULE_DESCRIPTION("AMD Processor P-state Frequency Driver"); diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c index 16176b9278b4e19f0d1cc8f2d182e1085e7a14f8..0c90f13870a4394f0e4fc7a3170d5ba86b6bb608 100644 --- a/drivers/cxl/core/mbox.c +++ b/drivers/cxl/core/mbox.c @@ -174,7 +174,7 @@ int cxl_mbox_send_cmd(struct cxl_dev_state *cxlds, u16 opcode, void *in, }; int rc; - if (out_size > cxlds->payload_size) + if (in_size > cxlds->payload_size || out_size > cxlds->payload_size) return -E2BIG; rc = cxlds->mbox_send(cxlds, &mbox_cmd); diff --git a/drivers/cxl/core/pmem.c b/drivers/cxl/core/pmem.c index 1d12a8206444ef759a14e143f9c3eb7c084b4930..36aa5070d90241e530c35c7ed3faeeb8df162594 100644 --- a/drivers/cxl/core/pmem.c +++ b/drivers/cxl/core/pmem.c @@ -188,6 +188,7 @@ static void cxl_nvdimm_release(struct device *dev) { struct cxl_nvdimm *cxl_nvd = to_cxl_nvdimm(dev); + xa_destroy(&cxl_nvd->pmem_regions); kfree(cxl_nvd); } @@ -230,6 +231,7 @@ static struct cxl_nvdimm *cxl_nvdimm_alloc(struct cxl_memdev *cxlmd) dev = &cxl_nvd->dev; cxl_nvd->cxlmd = cxlmd; + xa_init(&cxl_nvd->pmem_regions); device_initialize(dev); lockdep_set_class(&dev->mutex, &cxl_nvdimm_key); device_set_pm_not_required(dev); diff --git a/drivers/cxl/core/port.c b/drivers/cxl/core/port.c index bffde862de0bfc18833e5aa0f0d3c6eda023f26f..e7556864ea808b3d34c5d28e3e60411b1231a1a7 100644 --- a/drivers/cxl/core/port.c +++ b/drivers/cxl/core/port.c @@ -811,6 +811,7 @@ static struct cxl_dport *find_dport(struct cxl_port *port, int id) static int add_dport(struct cxl_port *port, struct cxl_dport *new) { struct cxl_dport *dup; + int rc; device_lock_assert(&port->dev); dup = find_dport(port, new->port_id); @@ -821,8 +822,14 @@ static int add_dport(struct cxl_port *port, struct cxl_dport *new) dev_name(dup->dport)); return -EBUSY; } - return xa_insert(&port->dports, (unsigned long)new->dport, new, - GFP_KERNEL); + + rc = xa_insert(&port->dports, (unsigned long)new->dport, new, + GFP_KERNEL); + if (rc) + return rc; + + port->nr_dports++; + return 0; } /* diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c index 40114801697845138aa7a371a3621e981380d83e..f9ae5ad284ffb0c8ac3e16a84d8896052006dc51 100644 --- a/drivers/cxl/core/region.c +++ b/drivers/cxl/core/region.c @@ -174,7 +174,8 @@ static int cxl_region_decode_commit(struct cxl_region *cxlr) iter = to_cxl_port(iter->dev.parent)) { cxl_rr = cxl_rr_load(iter, cxlr); cxld = cxl_rr->decoder; - rc = cxld->commit(cxld); + if (cxld->commit) + rc = cxld->commit(cxld); if (rc) break; } @@ -657,6 +658,9 @@ static struct cxl_region_ref *alloc_region_ref(struct cxl_port *port, xa_for_each(&port->regions, index, iter) { struct cxl_region_params *ip = &iter->region->params; + if (!ip->res) + continue; + if (ip->res->start > p->res->start) { dev_dbg(&cxlr->dev, "%s: HPA order violation %s:%pr vs %pr\n", @@ -686,18 +690,27 @@ static struct cxl_region_ref *alloc_region_ref(struct cxl_port *port, return cxl_rr; } -static void free_region_ref(struct cxl_region_ref *cxl_rr) +static void cxl_rr_free_decoder(struct cxl_region_ref *cxl_rr) { - struct cxl_port *port = cxl_rr->port; struct cxl_region *cxlr = cxl_rr->region; struct cxl_decoder *cxld = cxl_rr->decoder; + if (!cxld) + return; + dev_WARN_ONCE(&cxlr->dev, cxld->region != cxlr, "region mismatch\n"); if (cxld->region == cxlr) { cxld->region = NULL; put_device(&cxlr->dev); } +} +static void free_region_ref(struct cxl_region_ref *cxl_rr) +{ + struct cxl_port *port = cxl_rr->port; + struct cxl_region *cxlr = cxl_rr->region; + + cxl_rr_free_decoder(cxl_rr); xa_erase(&port->regions, (unsigned long)cxlr); xa_destroy(&cxl_rr->endpoints); kfree(cxl_rr); @@ -728,6 +741,33 @@ static int cxl_rr_ep_add(struct cxl_region_ref *cxl_rr, return 0; } +static int cxl_rr_alloc_decoder(struct cxl_port *port, struct cxl_region *cxlr, + struct cxl_endpoint_decoder *cxled, + struct cxl_region_ref *cxl_rr) +{ + struct cxl_decoder *cxld; + + if (port == cxled_to_port(cxled)) + cxld = &cxled->cxld; + else + cxld = cxl_region_find_decoder(port, cxlr); + if (!cxld) { + dev_dbg(&cxlr->dev, "%s: no decoder available\n", + dev_name(&port->dev)); + return -EBUSY; + } + + if (cxld->region) { + dev_dbg(&cxlr->dev, "%s: %s already attached to %s\n", + dev_name(&port->dev), dev_name(&cxld->dev), + dev_name(&cxld->region->dev)); + return -EBUSY; + } + + cxl_rr->decoder = cxld; + return 0; +} + /** * cxl_port_attach_region() - track a region's interest in a port by endpoint * @port: port to add a new region reference 'struct cxl_region_ref' @@ -794,12 +834,6 @@ static int cxl_port_attach_region(struct cxl_port *port, cxl_rr->nr_targets++; nr_targets_inc = true; } - - /* - * The decoder for @cxlr was allocated when the region was first - * attached to @port. - */ - cxld = cxl_rr->decoder; } else { cxl_rr = alloc_region_ref(port, cxlr); if (IS_ERR(cxl_rr)) { @@ -810,26 +844,11 @@ static int cxl_port_attach_region(struct cxl_port *port, } nr_targets_inc = true; - if (port == cxled_to_port(cxled)) - cxld = &cxled->cxld; - else - cxld = cxl_region_find_decoder(port, cxlr); - if (!cxld) { - dev_dbg(&cxlr->dev, "%s: no decoder available\n", - dev_name(&port->dev)); - goto out_erase; - } - - if (cxld->region) { - dev_dbg(&cxlr->dev, "%s: %s already attached to %s\n", - dev_name(&port->dev), dev_name(&cxld->dev), - dev_name(&cxld->region->dev)); - rc = -EBUSY; + rc = cxl_rr_alloc_decoder(port, cxlr, cxled, cxl_rr); + if (rc) goto out_erase; - } - - cxl_rr->decoder = cxld; } + cxld = cxl_rr->decoder; rc = cxl_rr_ep_add(cxl_rr, cxled); if (rc) { @@ -971,7 +990,14 @@ static int cxl_port_setup_targets(struct cxl_port *port, if (cxl_rr->nr_targets_set) { int i, distance; - distance = p->nr_targets / cxl_rr->nr_targets; + /* + * Passthrough ports impose no distance requirements between + * peers + */ + if (port->nr_dports == 1) + distance = 0; + else + distance = p->nr_targets / cxl_rr->nr_targets; for (i = 0; i < cxl_rr->nr_targets_set; i++) if (ep->dport == cxlsd->target[i]) { rc = check_last_peer(cxled, ep, cxl_rr, @@ -1508,9 +1534,24 @@ static const struct attribute_group *region_groups[] = { static void cxl_region_release(struct device *dev) { + struct cxl_root_decoder *cxlrd = to_cxl_root_decoder(dev->parent); struct cxl_region *cxlr = to_cxl_region(dev); + int id = atomic_read(&cxlrd->region_id); + + /* + * Try to reuse the recently idled id rather than the cached + * next id to prevent the region id space from increasing + * unnecessarily. + */ + if (cxlr->id < id) + if (atomic_try_cmpxchg(&cxlrd->region_id, &id, cxlr->id)) { + memregion_free(id); + goto out; + } memregion_free(cxlr->id); +out: + put_device(dev->parent); kfree(cxlr); } @@ -1538,8 +1579,19 @@ static struct cxl_region *to_cxl_region(struct device *dev) static void unregister_region(void *dev) { struct cxl_region *cxlr = to_cxl_region(dev); + struct cxl_region_params *p = &cxlr->params; + int i; device_del(dev); + + /* + * Now that region sysfs is shutdown, the parameter block is now + * read-only, so no need to hold the region rwsem to access the + * region parameters. + */ + for (i = 0; i < p->interleave_ways; i++) + detach_target(cxlr, i); + cxl_region_iomem_release(cxlr); put_device(dev); } @@ -1561,6 +1613,11 @@ static struct cxl_region *cxl_region_alloc(struct cxl_root_decoder *cxlrd, int i device_initialize(dev); lockdep_set_class(&dev->mutex, &cxl_region_key); dev->parent = &cxlrd->cxlsd.cxld.dev; + /* + * Keep root decoder pinned through cxl_region_release to fixup + * region id allocations + */ + get_device(dev->parent); device_set_pm_not_required(dev); dev->bus = &cxl_bus_type; dev->type = &cxl_region_type; diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h index f680450f0b16c8267f55c508ad0d3ace9426f779..ac75554b5d763da282479f8e2331a37b424ad7b4 100644 --- a/drivers/cxl/cxl.h +++ b/drivers/cxl/cxl.h @@ -423,7 +423,7 @@ struct cxl_nvdimm { struct device dev; struct cxl_memdev *cxlmd; struct cxl_nvdimm_bridge *bridge; - struct cxl_pmem_region *region; + struct xarray pmem_regions; }; struct cxl_pmem_region_mapping { @@ -457,6 +457,7 @@ struct cxl_pmem_region { * @regions: cxl_region_ref instances, regions mapped by this port * @parent_dport: dport that points to this port in the parent * @decoder_ida: allocator for decoder ids + * @nr_dports: number of entries in @dports * @hdm_end: track last allocated HDM decoder instance for allocation ordering * @commit_end: cursor to track highest committed decoder for commit ordering * @component_reg_phys: component register capability base address (optional) @@ -475,6 +476,7 @@ struct cxl_port { struct xarray regions; struct cxl_dport *parent_dport; struct ida decoder_ida; + int nr_dports; int hdm_end; int commit_end; resource_size_t component_reg_phys; diff --git a/drivers/cxl/pmem.c b/drivers/cxl/pmem.c index 7dc0a2fa1a6b612341576c0c5481d633bb1f0aa1..4c627d67281a194ecb0c34f338c6e764d5b15137 100644 --- a/drivers/cxl/pmem.c +++ b/drivers/cxl/pmem.c @@ -30,17 +30,20 @@ static void unregister_nvdimm(void *nvdimm) struct cxl_nvdimm *cxl_nvd = nvdimm_provider_data(nvdimm); struct cxl_nvdimm_bridge *cxl_nvb = cxl_nvd->bridge; struct cxl_pmem_region *cxlr_pmem; + unsigned long index; device_lock(&cxl_nvb->dev); - cxlr_pmem = cxl_nvd->region; dev_set_drvdata(&cxl_nvd->dev, NULL); - cxl_nvd->region = NULL; - device_unlock(&cxl_nvb->dev); + xa_for_each(&cxl_nvd->pmem_regions, index, cxlr_pmem) { + get_device(&cxlr_pmem->dev); + device_unlock(&cxl_nvb->dev); - if (cxlr_pmem) { device_release_driver(&cxlr_pmem->dev); put_device(&cxlr_pmem->dev); + + device_lock(&cxl_nvb->dev); } + device_unlock(&cxl_nvb->dev); nvdimm_delete(nvdimm); cxl_nvd->bridge = NULL; @@ -107,7 +110,7 @@ static int cxl_pmem_get_config_size(struct cxl_dev_state *cxlds, *cmd = (struct nd_cmd_get_config_size) { .config_size = cxlds->lsa_size, - .max_xfer = cxlds->payload_size, + .max_xfer = cxlds->payload_size - sizeof(struct cxl_mbox_set_lsa), }; return 0; @@ -148,7 +151,7 @@ static int cxl_pmem_set_config_data(struct cxl_dev_state *cxlds, return -EINVAL; /* 4-byte status follows the input data in the payload */ - if (struct_size(cmd, in_buf, cmd->in_length) + 4 > buf_len) + if (size_add(struct_size(cmd, in_buf, cmd->in_length), 4) > buf_len) return -EINVAL; set_lsa = @@ -366,25 +369,49 @@ static int match_cxl_nvdimm(struct device *dev, void *data) static void unregister_nvdimm_region(void *nd_region) { - struct cxl_nvdimm_bridge *cxl_nvb; - struct cxl_pmem_region *cxlr_pmem; + nvdimm_region_delete(nd_region); +} + +static int cxl_nvdimm_add_region(struct cxl_nvdimm *cxl_nvd, + struct cxl_pmem_region *cxlr_pmem) +{ + int rc; + + rc = xa_insert(&cxl_nvd->pmem_regions, (unsigned long)cxlr_pmem, + cxlr_pmem, GFP_KERNEL); + if (rc) + return rc; + + get_device(&cxlr_pmem->dev); + return 0; +} + +static void cxl_nvdimm_del_region(struct cxl_nvdimm *cxl_nvd, + struct cxl_pmem_region *cxlr_pmem) +{ + /* + * It is possible this is called without a corresponding + * cxl_nvdimm_add_region for @cxlr_pmem + */ + cxlr_pmem = xa_erase(&cxl_nvd->pmem_regions, (unsigned long)cxlr_pmem); + if (cxlr_pmem) + put_device(&cxlr_pmem->dev); +} + +static void release_mappings(void *data) +{ int i; + struct cxl_pmem_region *cxlr_pmem = data; + struct cxl_nvdimm_bridge *cxl_nvb = cxlr_pmem->bridge; - cxlr_pmem = nd_region_provider_data(nd_region); - cxl_nvb = cxlr_pmem->bridge; device_lock(&cxl_nvb->dev); for (i = 0; i < cxlr_pmem->nr_mappings; i++) { struct cxl_pmem_region_mapping *m = &cxlr_pmem->mapping[i]; struct cxl_nvdimm *cxl_nvd = m->cxl_nvd; - if (cxl_nvd->region) { - put_device(&cxlr_pmem->dev); - cxl_nvd->region = NULL; - } + cxl_nvdimm_del_region(cxl_nvd, cxlr_pmem); } device_unlock(&cxl_nvb->dev); - - nvdimm_region_delete(nd_region); } static void cxlr_pmem_remove_resource(void *res) @@ -422,7 +449,7 @@ static int cxl_pmem_region_probe(struct device *dev) if (!cxl_nvb->nvdimm_bus) { dev_dbg(dev, "nvdimm bus not found\n"); rc = -ENXIO; - goto err; + goto out_nvb; } memset(&mappings, 0, sizeof(mappings)); @@ -431,7 +458,7 @@ static int cxl_pmem_region_probe(struct device *dev) res = devm_kzalloc(dev, sizeof(*res), GFP_KERNEL); if (!res) { rc = -ENOMEM; - goto err; + goto out_nvb; } res->name = "Persistent Memory"; @@ -442,11 +469,11 @@ static int cxl_pmem_region_probe(struct device *dev) rc = insert_resource(&iomem_resource, res); if (rc) - goto err; + goto out_nvb; rc = devm_add_action_or_reset(dev, cxlr_pmem_remove_resource, res); if (rc) - goto err; + goto out_nvb; ndr_desc.res = res; ndr_desc.provider_data = cxlr_pmem; @@ -462,7 +489,7 @@ static int cxl_pmem_region_probe(struct device *dev) nd_set = devm_kzalloc(dev, sizeof(*nd_set), GFP_KERNEL); if (!nd_set) { rc = -ENOMEM; - goto err; + goto out_nvb; } ndr_desc.memregion = cxlr->id; @@ -472,9 +499,13 @@ static int cxl_pmem_region_probe(struct device *dev) info = kmalloc_array(cxlr_pmem->nr_mappings, sizeof(*info), GFP_KERNEL); if (!info) { rc = -ENOMEM; - goto err; + goto out_nvb; } + rc = devm_add_action_or_reset(dev, release_mappings, cxlr_pmem); + if (rc) + goto out_nvd; + for (i = 0; i < cxlr_pmem->nr_mappings; i++) { struct cxl_pmem_region_mapping *m = &cxlr_pmem->mapping[i]; struct cxl_memdev *cxlmd = m->cxlmd; @@ -486,7 +517,7 @@ static int cxl_pmem_region_probe(struct device *dev) dev_dbg(dev, "[%d]: %s: no cxl_nvdimm found\n", i, dev_name(&cxlmd->dev)); rc = -ENODEV; - goto err; + goto out_nvd; } /* safe to drop ref now with bridge lock held */ @@ -498,10 +529,17 @@ static int cxl_pmem_region_probe(struct device *dev) dev_dbg(dev, "[%d]: %s: no nvdimm found\n", i, dev_name(&cxlmd->dev)); rc = -ENODEV; - goto err; + goto out_nvd; } - cxl_nvd->region = cxlr_pmem; - get_device(&cxlr_pmem->dev); + + /* + * Pin the region per nvdimm device as those may be released + * out-of-order with respect to the region, and a single nvdimm + * maybe associated with multiple regions + */ + rc = cxl_nvdimm_add_region(cxl_nvd, cxlr_pmem); + if (rc) + goto out_nvd; m->cxl_nvd = cxl_nvd; mappings[i] = (struct nd_mapping_desc) { .nvdimm = nvdimm, @@ -527,27 +565,18 @@ static int cxl_pmem_region_probe(struct device *dev) nvdimm_pmem_region_create(cxl_nvb->nvdimm_bus, &ndr_desc); if (!cxlr_pmem->nd_region) { rc = -ENOMEM; - goto err; + goto out_nvd; } rc = devm_add_action_or_reset(dev, unregister_nvdimm_region, cxlr_pmem->nd_region); -out: +out_nvd: kfree(info); +out_nvb: device_unlock(&cxl_nvb->dev); put_device(&cxl_nvb->dev); return rc; - -err: - dev_dbg(dev, "failed to create nvdimm region\n"); - for (i--; i >= 0; i--) { - nvdimm = mappings[i].nvdimm; - cxl_nvd = nvdimm_provider_data(nvdimm); - put_device(&cxl_nvd->region->dev); - cxl_nvd->region = NULL; - } - goto out; } static struct cxl_driver cxl_pmem_region_driver = { diff --git a/drivers/dax/hmem/device.c b/drivers/dax/hmem/device.c index 97086fab698e3db9d72a255725e0006a0df244ef..903325aac991d216a87f66679ea16401cf59cdf3 100644 --- a/drivers/dax/hmem/device.c +++ b/drivers/dax/hmem/device.c @@ -8,6 +8,13 @@ static bool nohmem; module_param_named(disable, nohmem, bool, 0444); +static struct resource hmem_active = { + .name = "HMEM devices", + .start = 0, + .end = -1, + .flags = IORESOURCE_MEM, +}; + void hmem_register_device(int target_nid, struct resource *r) { /* define a clean / non-busy resource for the platform device */ @@ -41,6 +48,12 @@ void hmem_register_device(int target_nid, struct resource *r) goto out_pdev; } + if (!__request_region(&hmem_active, res.start, resource_size(&res), + dev_name(&pdev->dev), 0)) { + dev_dbg(&pdev->dev, "hmem range %pr already active\n", &res); + goto out_active; + } + pdev->dev.numa_node = numa_map_to_online_node(target_nid); info = (struct memregion_info) { .target_node = target_nid, @@ -66,6 +79,8 @@ void hmem_register_device(int target_nid, struct resource *r) return; out_resource: + __release_region(&hmem_active, res.start, resource_size(&res)); +out_active: platform_device_put(pdev); out_pdev: memregion_free(id); @@ -73,15 +88,6 @@ void hmem_register_device(int target_nid, struct resource *r) static __init int hmem_register_one(struct resource *res, void *data) { - /* - * If the resource is not a top-level resource it was already - * assigned to a device by the HMAT parsing. - */ - if (res->parent != &iomem_resource) { - pr_info("HMEM: skip %pr, already claimed\n", res); - return 0; - } - hmem_register_device(phys_to_target_node(res->start), res); return 0; diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c index dd0f83ee505b7f34efec89fae1f06c176ce85213..e6f36c014c4cd25845a8b92e3e9d06f6b571c922 100644 --- a/drivers/dma-buf/dma-buf.c +++ b/drivers/dma-buf/dma-buf.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -391,8 +392,10 @@ static long dma_buf_import_sync_file(struct dma_buf *dmabuf, const void __user *user_data) { struct dma_buf_import_sync_file arg; - struct dma_fence *fence; + struct dma_fence *fence, *f; enum dma_resv_usage usage; + struct dma_fence_unwrap iter; + unsigned int num_fences; int ret = 0; if (copy_from_user(&arg, user_data, sizeof(arg))) @@ -411,13 +414,21 @@ static long dma_buf_import_sync_file(struct dma_buf *dmabuf, usage = (arg.flags & DMA_BUF_SYNC_WRITE) ? DMA_RESV_USAGE_WRITE : DMA_RESV_USAGE_READ; - dma_resv_lock(dmabuf->resv, NULL); + num_fences = 0; + dma_fence_unwrap_for_each(f, &iter, fence) + ++num_fences; - ret = dma_resv_reserve_fences(dmabuf->resv, 1); - if (!ret) - dma_resv_add_fence(dmabuf->resv, fence, usage); + if (num_fences > 0) { + dma_resv_lock(dmabuf->resv, NULL); - dma_resv_unlock(dmabuf->resv); + ret = dma_resv_reserve_fences(dmabuf->resv, num_fences); + if (!ret) { + dma_fence_unwrap_for_each(f, &iter, fence) + dma_resv_add_fence(dmabuf->resv, f, usage); + } + + dma_resv_unlock(dmabuf->resv); + } dma_fence_put(fence); diff --git a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c index 8f5848aa144fec35a2de2ea68558c27dc3083669..59d158873f4cb451b5a5db4f0691e25d6a56909c 100644 --- a/drivers/dma-buf/dma-heap.c +++ b/drivers/dma-buf/dma-heap.c @@ -233,18 +233,6 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) return ERR_PTR(-EINVAL); } - /* check the name is unique */ - mutex_lock(&heap_list_lock); - list_for_each_entry(h, &heap_list, list) { - if (!strcmp(h->name, exp_info->name)) { - mutex_unlock(&heap_list_lock); - pr_err("dma_heap: Already registered heap named %s\n", - exp_info->name); - return ERR_PTR(-EINVAL); - } - } - mutex_unlock(&heap_list_lock); - heap = kzalloc(sizeof(*heap), GFP_KERNEL); if (!heap) return ERR_PTR(-ENOMEM); @@ -283,13 +271,27 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) err_ret = ERR_CAST(dev_ret); goto err2; } - /* Add heap to the list */ + mutex_lock(&heap_list_lock); + /* check the name is unique */ + list_for_each_entry(h, &heap_list, list) { + if (!strcmp(h->name, exp_info->name)) { + mutex_unlock(&heap_list_lock); + pr_err("dma_heap: Already registered heap named %s\n", + exp_info->name); + err_ret = ERR_PTR(-EINVAL); + goto err3; + } + } + + /* Add heap to the list */ list_add(&heap->list, &heap_list); mutex_unlock(&heap_list_lock); return heap; +err3: + device_destroy(dma_heap_class, heap->heap_devt); err2: cdev_del(&heap->heap_cdev); err1: diff --git a/drivers/dma/apple-admac.c b/drivers/dma/apple-admac.c index 317ca76ccafd2b755a279cf5c64a83147a4aee8d..a2cc520225d32850db821ff0a8b7633a86343ddb 100644 --- a/drivers/dma/apple-admac.c +++ b/drivers/dma/apple-admac.c @@ -493,7 +493,7 @@ static struct dma_chan *admac_dma_of_xlate(struct of_phandle_args *dma_spec, return NULL; } - return &ad->channels[index].chan; + return dma_get_slave_channel(&ad->channels[index].chan); } static int admac_drain_reports(struct admac_data *ad, int channo) diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c index 5a50423b7378e2d3ffe606459bc81f4fc51868ba..858bd64f13135f1370a59d2290570189de89415c 100644 --- a/drivers/dma/at_hdmac.c +++ b/drivers/dma/at_hdmac.c @@ -256,6 +256,8 @@ static void atc_dostart(struct at_dma_chan *atchan, struct at_desc *first) ATC_SPIP_BOUNDARY(first->boundary)); channel_writel(atchan, DPIP, ATC_DPIP_HOLE(first->dst_hole) | ATC_DPIP_BOUNDARY(first->boundary)); + /* Don't allow CPU to reorder channel enable. */ + wmb(); dma_writel(atdma, CHER, atchan->mask); vdbg_dump_regs(atchan); @@ -316,7 +318,8 @@ static int atc_get_bytes_left(struct dma_chan *chan, dma_cookie_t cookie) struct at_desc *desc_first = atc_first_active(atchan); struct at_desc *desc; int ret; - u32 ctrla, dscr, trials; + u32 ctrla, dscr; + unsigned int i; /* * If the cookie doesn't match to the currently running transfer then @@ -386,7 +389,7 @@ static int atc_get_bytes_left(struct dma_chan *chan, dma_cookie_t cookie) dscr = channel_readl(atchan, DSCR); rmb(); /* ensure DSCR is read before CTRLA */ ctrla = channel_readl(atchan, CTRLA); - for (trials = 0; trials < ATC_MAX_DSCR_TRIALS; ++trials) { + for (i = 0; i < ATC_MAX_DSCR_TRIALS; ++i) { u32 new_dscr; rmb(); /* ensure DSCR is read after CTRLA */ @@ -412,7 +415,7 @@ static int atc_get_bytes_left(struct dma_chan *chan, dma_cookie_t cookie) rmb(); /* ensure DSCR is read before CTRLA */ ctrla = channel_readl(atchan, CTRLA); } - if (unlikely(trials >= ATC_MAX_DSCR_TRIALS)) + if (unlikely(i == ATC_MAX_DSCR_TRIALS)) return -ETIMEDOUT; /* for the first descriptor we can be more accurate */ @@ -462,18 +465,6 @@ atc_chain_complete(struct at_dma_chan *atchan, struct at_desc *desc) if (!atc_chan_is_cyclic(atchan)) dma_cookie_complete(txd); - /* If the transfer was a memset, free our temporary buffer */ - if (desc->memset_buffer) { - dma_pool_free(atdma->memset_pool, desc->memset_vaddr, - desc->memset_paddr); - desc->memset_buffer = false; - } - - /* move children to free_list */ - list_splice_init(&desc->tx_list, &atchan->free_list); - /* move myself to free_list */ - list_move(&desc->desc_node, &atchan->free_list); - spin_unlock_irqrestore(&atchan->lock, flags); dma_descriptor_unmap(txd); @@ -483,42 +474,20 @@ atc_chain_complete(struct at_dma_chan *atchan, struct at_desc *desc) dmaengine_desc_get_callback_invoke(txd, NULL); dma_run_dependencies(txd); -} - -/** - * atc_complete_all - finish work for all transactions - * @atchan: channel to complete transactions for - * - * Eventually submit queued descriptors if any - * - * Assume channel is idle while calling this function - * Called with atchan->lock held and bh disabled - */ -static void atc_complete_all(struct at_dma_chan *atchan) -{ - struct at_desc *desc, *_desc; - LIST_HEAD(list); - unsigned long flags; - - dev_vdbg(chan2dev(&atchan->chan_common), "complete all\n"); spin_lock_irqsave(&atchan->lock, flags); - - /* - * Submit queued descriptors ASAP, i.e. before we go through - * the completed ones. - */ - if (!list_empty(&atchan->queue)) - atc_dostart(atchan, atc_first_queued(atchan)); - /* empty active_list now it is completed */ - list_splice_init(&atchan->active_list, &list); - /* empty queue list by moving descriptors (if any) to active_list */ - list_splice_init(&atchan->queue, &atchan->active_list); - + /* move children to free_list */ + list_splice_init(&desc->tx_list, &atchan->free_list); + /* add myself to free_list */ + list_add(&desc->desc_node, &atchan->free_list); spin_unlock_irqrestore(&atchan->lock, flags); - list_for_each_entry_safe(desc, _desc, &list, desc_node) - atc_chain_complete(atchan, desc); + /* If the transfer was a memset, free our temporary buffer */ + if (desc->memset_buffer) { + dma_pool_free(atdma->memset_pool, desc->memset_vaddr, + desc->memset_paddr); + desc->memset_buffer = false; + } } /** @@ -527,26 +496,28 @@ static void atc_complete_all(struct at_dma_chan *atchan) */ static void atc_advance_work(struct at_dma_chan *atchan) { + struct at_desc *desc; unsigned long flags; - int ret; dev_vdbg(chan2dev(&atchan->chan_common), "advance_work\n"); spin_lock_irqsave(&atchan->lock, flags); - ret = atc_chan_is_enabled(atchan); - spin_unlock_irqrestore(&atchan->lock, flags); - if (ret) - return; - - if (list_empty(&atchan->active_list) || - list_is_singular(&atchan->active_list)) - return atc_complete_all(atchan); + if (atc_chan_is_enabled(atchan) || list_empty(&atchan->active_list)) + return spin_unlock_irqrestore(&atchan->lock, flags); - atc_chain_complete(atchan, atc_first_active(atchan)); + desc = atc_first_active(atchan); + /* Remove the transfer node from the active list. */ + list_del_init(&desc->desc_node); + spin_unlock_irqrestore(&atchan->lock, flags); + atc_chain_complete(atchan, desc); /* advance work */ spin_lock_irqsave(&atchan->lock, flags); - atc_dostart(atchan, atc_first_active(atchan)); + if (!list_empty(&atchan->active_list)) { + desc = atc_first_queued(atchan); + list_move_tail(&desc->desc_node, &atchan->active_list); + atc_dostart(atchan, desc); + } spin_unlock_irqrestore(&atchan->lock, flags); } @@ -558,6 +529,7 @@ static void atc_advance_work(struct at_dma_chan *atchan) static void atc_handle_error(struct at_dma_chan *atchan) { struct at_desc *bad_desc; + struct at_desc *desc; struct at_desc *child; unsigned long flags; @@ -570,13 +542,12 @@ static void atc_handle_error(struct at_dma_chan *atchan) bad_desc = atc_first_active(atchan); list_del_init(&bad_desc->desc_node); - /* As we are stopped, take advantage to push queued descriptors - * in active_list */ - list_splice_init(&atchan->queue, atchan->active_list.prev); - /* Try to restart the controller */ - if (!list_empty(&atchan->active_list)) - atc_dostart(atchan, atc_first_active(atchan)); + if (!list_empty(&atchan->active_list)) { + desc = atc_first_queued(atchan); + list_move_tail(&desc->desc_node, &atchan->active_list); + atc_dostart(atchan, desc); + } /* * KERN_CRITICAL may seem harsh, but since this only happens @@ -691,19 +662,11 @@ static dma_cookie_t atc_tx_submit(struct dma_async_tx_descriptor *tx) spin_lock_irqsave(&atchan->lock, flags); cookie = dma_cookie_assign(tx); - if (list_empty(&atchan->active_list)) { - dev_vdbg(chan2dev(tx->chan), "tx_submit: started %u\n", - desc->txd.cookie); - atc_dostart(atchan, desc); - list_add_tail(&desc->desc_node, &atchan->active_list); - } else { - dev_vdbg(chan2dev(tx->chan), "tx_submit: queued %u\n", - desc->txd.cookie); - list_add_tail(&desc->desc_node, &atchan->queue); - } - + list_add_tail(&desc->desc_node, &atchan->queue); spin_unlock_irqrestore(&atchan->lock, flags); + dev_vdbg(chan2dev(tx->chan), "tx_submit: queued %u\n", + desc->txd.cookie); return cookie; } @@ -1445,11 +1408,8 @@ static int atc_terminate_all(struct dma_chan *chan) struct at_dma_chan *atchan = to_at_dma_chan(chan); struct at_dma *atdma = to_at_dma(chan->device); int chan_id = atchan->chan_common.chan_id; - struct at_desc *desc, *_desc; unsigned long flags; - LIST_HEAD(list); - dev_vdbg(chan2dev(chan), "%s\n", __func__); /* @@ -1468,19 +1428,15 @@ static int atc_terminate_all(struct dma_chan *chan) cpu_relax(); /* active_list entries will end up before queued entries */ - list_splice_init(&atchan->queue, &list); - list_splice_init(&atchan->active_list, &list); - - spin_unlock_irqrestore(&atchan->lock, flags); - - /* Flush all pending and queued descriptors */ - list_for_each_entry_safe(desc, _desc, &list, desc_node) - atc_chain_complete(atchan, desc); + list_splice_tail_init(&atchan->queue, &atchan->free_list); + list_splice_tail_init(&atchan->active_list, &atchan->free_list); clear_bit(ATC_IS_PAUSED, &atchan->status); /* if channel dedicated to cyclic operations, free it */ clear_bit(ATC_IS_CYCLIC, &atchan->status); + spin_unlock_irqrestore(&atchan->lock, flags); + return 0; } @@ -1535,20 +1491,26 @@ atc_tx_status(struct dma_chan *chan, } /** - * atc_issue_pending - try to finish work + * atc_issue_pending - takes the first transaction descriptor in the pending + * queue and starts the transfer. * @chan: target DMA channel */ static void atc_issue_pending(struct dma_chan *chan) { - struct at_dma_chan *atchan = to_at_dma_chan(chan); + struct at_dma_chan *atchan = to_at_dma_chan(chan); + struct at_desc *desc; + unsigned long flags; dev_vdbg(chan2dev(chan), "issue_pending\n"); - /* Not needed for cyclic transfers */ - if (atc_chan_is_cyclic(atchan)) - return; + spin_lock_irqsave(&atchan->lock, flags); + if (atc_chan_is_enabled(atchan) || list_empty(&atchan->queue)) + return spin_unlock_irqrestore(&atchan->lock, flags); - atc_advance_work(atchan); + desc = atc_first_queued(atchan); + list_move_tail(&desc->desc_node, &atchan->active_list); + atc_dostart(atchan, desc); + spin_unlock_irqrestore(&atchan->lock, flags); } /** @@ -1966,7 +1928,11 @@ static int __init at_dma_probe(struct platform_device *pdev) dma_has_cap(DMA_SLAVE, atdma->dma_common.cap_mask) ? "slave " : "", plat_dat->nr_channels); - dma_async_device_register(&atdma->dma_common); + err = dma_async_device_register(&atdma->dma_common); + if (err) { + dev_err(&pdev->dev, "Unable to register: %d.\n", err); + goto err_dma_async_device_register; + } /* * Do not return an error if the dmac node is not present in order to @@ -1986,6 +1952,7 @@ static int __init at_dma_probe(struct platform_device *pdev) err_of_dma_controller_register: dma_async_device_unregister(&atdma->dma_common); +err_dma_async_device_register: dma_pool_destroy(atdma->memset_pool); err_memset_pool_create: dma_pool_destroy(atdma->dma_desc_pool); diff --git a/drivers/dma/at_hdmac_regs.h b/drivers/dma/at_hdmac_regs.h index 4d1ebc040031ce8e5f5f21a998af37bd3b6f2313..d4d382d746078eaee3c064f7f03cb49526cef7c7 100644 --- a/drivers/dma/at_hdmac_regs.h +++ b/drivers/dma/at_hdmac_regs.h @@ -186,13 +186,13 @@ /* LLI == Linked List Item; aka DMA buffer descriptor */ struct at_lli { /* values that are not changed by hardware */ - dma_addr_t saddr; - dma_addr_t daddr; + u32 saddr; + u32 daddr; /* value that may get written back: */ - u32 ctrla; + u32 ctrla; /* more values that are not changed by hardware */ - u32 ctrlb; - dma_addr_t dscr; /* chain to next lli */ + u32 ctrlb; + u32 dscr; /* chain to next lli */ }; /** diff --git a/drivers/dma/idxd/cdev.c b/drivers/dma/idxd/cdev.c index c2808fd081d65e2e26ce656c2fce2255dcefe3f6..a9b96b18772f322ef4c74ba8acad04ae1f978c99 100644 --- a/drivers/dma/idxd/cdev.c +++ b/drivers/dma/idxd/cdev.c @@ -312,6 +312,24 @@ static int idxd_user_drv_probe(struct idxd_dev *idxd_dev) if (idxd->state != IDXD_DEV_ENABLED) return -ENXIO; + /* + * User type WQ is enabled only when SVA is enabled for two reasons: + * - If no IOMMU or IOMMU Passthrough without SVA, userspace + * can directly access physical address through the WQ. + * - The IDXD cdev driver does not provide any ways to pin + * user pages and translate the address from user VA to IOVA or + * PA without IOMMU SVA. Therefore the application has no way + * to instruct the device to perform DMA function. This makes + * the cdev not usable for normal application usage. + */ + if (!device_user_pasid_enabled(idxd)) { + idxd->cmd_status = IDXD_SCMD_WQ_USER_NO_IOMMU; + dev_dbg(&idxd->pdev->dev, + "User type WQ cannot be enabled without SVA.\n"); + + return -EOPNOTSUPP; + } + mutex_lock(&wq->wq_lock); wq->type = IDXD_WQT_USER; rc = drv_enable_wq(wq); diff --git a/drivers/dma/idxd/device.c b/drivers/dma/idxd/device.c index 2c1e6f6daa6286089b872d488e88d5a730588af0..6f44fa8f78a5d330d1c8239706df6b9a3474d559 100644 --- a/drivers/dma/idxd/device.c +++ b/drivers/dma/idxd/device.c @@ -390,7 +390,7 @@ static void idxd_wq_disable_cleanup(struct idxd_wq *wq) clear_bit(WQ_FLAG_ATS_DISABLE, &wq->flags); memset(wq->name, 0, WQ_NAME_SIZE); wq->max_xfer_bytes = WQ_DEFAULT_MAX_XFER; - wq->max_batch_size = WQ_DEFAULT_MAX_BATCH; + idxd_wq_set_max_batch_size(idxd->data->type, wq, WQ_DEFAULT_MAX_BATCH); if (wq->opcap_bmap) bitmap_copy(wq->opcap_bmap, idxd->opcap_bmap, IDXD_MAX_OPCAP_BITS); } @@ -730,13 +730,21 @@ static void idxd_device_wqs_clear_state(struct idxd_device *idxd) void idxd_device_clear_state(struct idxd_device *idxd) { - if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags)) - return; + /* IDXD is always disabled. Other states are cleared only when IDXD is configurable. */ + if (test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags)) { + /* + * Clearing wq state is protected by wq lock. + * So no need to be protected by device lock. + */ + idxd_device_wqs_clear_state(idxd); + + spin_lock(&idxd->dev_lock); + idxd_groups_clear_state(idxd); + idxd_engines_clear_state(idxd); + } else { + spin_lock(&idxd->dev_lock); + } - idxd_device_wqs_clear_state(idxd); - spin_lock(&idxd->dev_lock); - idxd_groups_clear_state(idxd); - idxd_engines_clear_state(idxd); idxd->state = IDXD_DEV_DISABLED; spin_unlock(&idxd->dev_lock); } @@ -869,7 +877,7 @@ static int idxd_wq_config_write(struct idxd_wq *wq) /* bytes 12-15 */ wq->wqcfg->max_xfer_shift = ilog2(wq->max_xfer_bytes); - wq->wqcfg->max_batch_shift = ilog2(wq->max_batch_size); + idxd_wqcfg_set_max_batch_shift(idxd->data->type, wq->wqcfg, ilog2(wq->max_batch_size)); /* bytes 32-63 */ if (idxd->hw.wq_cap.op_config && wq->opcap_bmap) { @@ -1051,7 +1059,7 @@ static int idxd_wq_load_config(struct idxd_wq *wq) wq->priority = wq->wqcfg->priority; wq->max_xfer_bytes = 1ULL << wq->wqcfg->max_xfer_shift; - wq->max_batch_size = 1ULL << wq->wqcfg->max_batch_shift; + idxd_wq_set_max_batch_size(idxd->data->type, wq, 1U << wq->wqcfg->max_batch_shift); for (i = 0; i < WQCFG_STRIDES(idxd); i++) { wqcfg_offset = WQCFG_OFFSET(idxd, wq->id, i); diff --git a/drivers/dma/idxd/idxd.h b/drivers/dma/idxd/idxd.h index 1196ab342f0113d658a75322506b44a8ff43043a..7ced8d283d98b28f071e5ce7f0f5f6c5f71d78c6 100644 --- a/drivers/dma/idxd/idxd.h +++ b/drivers/dma/idxd/idxd.h @@ -548,6 +548,38 @@ static inline int idxd_wq_refcount(struct idxd_wq *wq) return wq->client_count; }; +/* + * Intel IAA does not support batch processing. + * The max batch size of device, max batch size of wq and + * max batch shift of wqcfg should be always 0 on IAA. + */ +static inline void idxd_set_max_batch_size(int idxd_type, struct idxd_device *idxd, + u32 max_batch_size) +{ + if (idxd_type == IDXD_TYPE_IAX) + idxd->max_batch_size = 0; + else + idxd->max_batch_size = max_batch_size; +} + +static inline void idxd_wq_set_max_batch_size(int idxd_type, struct idxd_wq *wq, + u32 max_batch_size) +{ + if (idxd_type == IDXD_TYPE_IAX) + wq->max_batch_size = 0; + else + wq->max_batch_size = max_batch_size; +} + +static inline void idxd_wqcfg_set_max_batch_shift(int idxd_type, union wqcfg *wqcfg, + u32 max_batch_shift) +{ + if (idxd_type == IDXD_TYPE_IAX) + wqcfg->max_batch_shift = 0; + else + wqcfg->max_batch_shift = max_batch_shift; +} + int __must_check __idxd_driver_register(struct idxd_device_driver *idxd_drv, struct module *module, const char *mod_name); #define idxd_driver_register(driver) \ diff --git a/drivers/dma/idxd/init.c b/drivers/dma/idxd/init.c index 2b18d512cbfc9bad1ab74b22a77f01b80c164b04..09cbf0c179ba9e29df1b2d835fe3cd08b9141ea5 100644 --- a/drivers/dma/idxd/init.c +++ b/drivers/dma/idxd/init.c @@ -183,7 +183,7 @@ static int idxd_setup_wqs(struct idxd_device *idxd) init_completion(&wq->wq_dead); init_completion(&wq->wq_resurrect); wq->max_xfer_bytes = WQ_DEFAULT_MAX_XFER; - wq->max_batch_size = WQ_DEFAULT_MAX_BATCH; + idxd_wq_set_max_batch_size(idxd->data->type, wq, WQ_DEFAULT_MAX_BATCH); wq->enqcmds_retries = IDXD_ENQCMDS_RETRIES; wq->wqcfg = kzalloc_node(idxd->wqcfg_size, GFP_KERNEL, dev_to_node(dev)); if (!wq->wqcfg) { @@ -418,7 +418,7 @@ static void idxd_read_caps(struct idxd_device *idxd) idxd->max_xfer_bytes = 1ULL << idxd->hw.gen_cap.max_xfer_shift; dev_dbg(dev, "max xfer size: %llu bytes\n", idxd->max_xfer_bytes); - idxd->max_batch_size = 1U << idxd->hw.gen_cap.max_batch_shift; + idxd_set_max_batch_size(idxd->data->type, idxd, 1U << idxd->hw.gen_cap.max_batch_shift); dev_dbg(dev, "max batch size: %u\n", idxd->max_batch_size); if (idxd->hw.gen_cap.config_en) set_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags); diff --git a/drivers/dma/idxd/sysfs.c b/drivers/dma/idxd/sysfs.c index bdaccf9e04363befea2ea0a595c12760a3346117..7269bd54554f60cb5b8915c9a1ed7f2a36ba66bf 100644 --- a/drivers/dma/idxd/sysfs.c +++ b/drivers/dma/idxd/sysfs.c @@ -1046,7 +1046,7 @@ static ssize_t wq_max_batch_size_store(struct device *dev, struct device_attribu if (batch_size > idxd->max_batch_size) return -EINVAL; - wq->max_batch_size = (u32)batch_size; + idxd_wq_set_max_batch_size(idxd->data->type, wq, (u32)batch_size); return count; } diff --git a/drivers/dma/mv_xor_v2.c b/drivers/dma/mv_xor_v2.c index f629ef6fd3c2a5edc055751d8ab4a5fd2cc84ea6..113834e1167b6f89ec2f3d955ad274da8ad04424 100644 --- a/drivers/dma/mv_xor_v2.c +++ b/drivers/dma/mv_xor_v2.c @@ -893,6 +893,7 @@ static int mv_xor_v2_remove(struct platform_device *pdev) tasklet_kill(&xor_dev->irq_tasklet); clk_disable_unprepare(xor_dev->clk); + clk_disable_unprepare(xor_dev->reg_clk); return 0; } diff --git a/drivers/dma/pxa_dma.c b/drivers/dma/pxa_dma.c index e7034f6f3994a4833b691f096d43a7362e93832e..22a392fe6d32bf3024c14965cd9e4923b64f8a8c 100644 --- a/drivers/dma/pxa_dma.c +++ b/drivers/dma/pxa_dma.c @@ -1247,14 +1247,14 @@ static int pxad_init_phys(struct platform_device *op, return -ENOMEM; for (i = 0; i < nb_phy_chans; i++) - if (platform_get_irq(op, i) > 0) + if (platform_get_irq_optional(op, i) > 0) nr_irq++; for (i = 0; i < nb_phy_chans; i++) { phy = &pdev->phys[i]; phy->base = pdev->base; phy->idx = i; - irq = platform_get_irq(op, i); + irq = platform_get_irq_optional(op, i); if ((nr_irq > 1) && (irq > 0)) ret = devm_request_irq(&op->dev, irq, pxad_chan_handler, diff --git a/drivers/dma/stm32-dma.c b/drivers/dma/stm32-dma.c index 4891a1767e5aad6b13c28433faba3e4ec32fe330..37674029cb427cd76518dcc6d9095e456992177c 100644 --- a/drivers/dma/stm32-dma.c +++ b/drivers/dma/stm32-dma.c @@ -675,6 +675,8 @@ static void stm32_dma_handle_chan_paused(struct stm32_dma_chan *chan) chan->chan_reg.dma_sndtr = stm32_dma_read(dmadev, STM32_DMA_SNDTR(chan->id)); + chan->status = DMA_PAUSED; + dev_dbg(chan2dev(chan), "vchan %pK: paused\n", &chan->vchan); } @@ -789,9 +791,7 @@ static irqreturn_t stm32_dma_chan_irq(int irq, void *devid) if (status & STM32_DMA_TCI) { stm32_dma_irq_clear(chan, STM32_DMA_TCI); if (scr & STM32_DMA_SCR_TCIE) { - if (chan->status == DMA_PAUSED && !(scr & STM32_DMA_SCR_EN)) - stm32_dma_handle_chan_paused(chan); - else + if (chan->status != DMA_PAUSED) stm32_dma_handle_chan_done(chan, scr); } status &= ~STM32_DMA_TCI; @@ -838,13 +838,11 @@ static int stm32_dma_pause(struct dma_chan *c) return -EPERM; spin_lock_irqsave(&chan->vchan.lock, flags); + ret = stm32_dma_disable_chan(chan); - /* - * A transfer complete flag is set to indicate the end of transfer due to the stream - * interruption, so wait for interrupt - */ if (!ret) - chan->status = DMA_PAUSED; + stm32_dma_handle_chan_paused(chan); + spin_unlock_irqrestore(&chan->vchan.lock, flags); return ret; diff --git a/drivers/dma/stm32-mdma.c b/drivers/dma/stm32-mdma.c index e28acbcb53f4c701f70542e359830d42368580d8..b9d4c843635fc6cec38ef3e6a2d487c51a1ea266 100644 --- a/drivers/dma/stm32-mdma.c +++ b/drivers/dma/stm32-mdma.c @@ -1539,6 +1539,7 @@ static struct dma_chan *stm32_mdma_of_xlate(struct of_phandle_args *dma_spec, return NULL; } + memset(&config, 0, sizeof(config)); config.request = dma_spec->args[0]; config.priority_level = dma_spec->args[1]; config.transfer_config = dma_spec->args[2]; diff --git a/drivers/dma/ti/k3-udma-glue.c b/drivers/dma/ti/k3-udma-glue.c index 4fdd9f06b72358298f6168043e3a7720628cc89e..4f1aeb81e9c7f280bec0a55b98eaa5c7e1013912 100644 --- a/drivers/dma/ti/k3-udma-glue.c +++ b/drivers/dma/ti/k3-udma-glue.c @@ -299,6 +299,7 @@ struct k3_udma_glue_tx_channel *k3_udma_glue_request_tx_chn(struct device *dev, ret = device_register(&tx_chn->common.chan_dev); if (ret) { dev_err(dev, "Channel Device registration failed %d\n", ret); + put_device(&tx_chn->common.chan_dev); tx_chn->common.chan_dev.parent = NULL; goto err; } @@ -917,6 +918,7 @@ k3_udma_glue_request_rx_chn_priv(struct device *dev, const char *name, ret = device_register(&rx_chn->common.chan_dev); if (ret) { dev_err(dev, "Channel Device registration failed %d\n", ret); + put_device(&rx_chn->common.chan_dev); rx_chn->common.chan_dev.parent = NULL; goto err; } @@ -1048,6 +1050,7 @@ k3_udma_glue_request_remote_rx_chn(struct device *dev, const char *name, ret = device_register(&rx_chn->common.chan_dev); if (ret) { dev_err(dev, "Channel Device registration failed %d\n", ret); + put_device(&rx_chn->common.chan_dev); rx_chn->common.chan_dev.parent = NULL; goto err; } diff --git a/drivers/extcon/extcon-usbc-tusb320.c b/drivers/extcon/extcon-usbc-tusb320.c index 41041ff0fadbbbf2b9730c3e73a3701670a725cb..2a120d8d3c2723525efdaf9a3989997fbb5d058e 100644 --- a/drivers/extcon/extcon-usbc-tusb320.c +++ b/drivers/extcon/extcon-usbc-tusb320.c @@ -327,7 +327,13 @@ static irqreturn_t tusb320_irq_handler(int irq, void *dev_id) return IRQ_NONE; tusb320_extcon_irq_handler(priv, reg); - tusb320_typec_irq_handler(priv, reg); + + /* + * Type-C support is optional. Only call the Type-C handler if a + * port had been registered previously. + */ + if (priv->port) + tusb320_typec_irq_handler(priv, reg); regmap_write(priv->regmap, TUSB320_REG9, reg); diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/bus.c index d4e23101448ae370750d4de36138de0680899a70..35bb70724d44bceaa424b65a0e384c49c38ec6af 100644 --- a/drivers/firmware/arm_scmi/bus.c +++ b/drivers/firmware/arm_scmi/bus.c @@ -216,9 +216,20 @@ void scmi_device_destroy(struct scmi_device *scmi_dev) device_unregister(&scmi_dev->dev); } +void scmi_device_link_add(struct device *consumer, struct device *supplier) +{ + struct device_link *link; + + link = device_link_add(consumer, supplier, DL_FLAG_AUTOREMOVE_CONSUMER); + + WARN_ON(!link); +} + void scmi_set_handle(struct scmi_device *scmi_dev) { scmi_dev->handle = scmi_handle_get(&scmi_dev->dev); + if (scmi_dev->handle) + scmi_device_link_add(&scmi_dev->dev, scmi_dev->handle->dev); } int scmi_protocol_register(const struct scmi_protocol *proto) diff --git a/drivers/firmware/arm_scmi/common.h b/drivers/firmware/arm_scmi/common.h index 61aba7447c32a8bc443585a4d7bc3655baa1d105..a1c0154c31c6fadde69b2a65e45440a795747a23 100644 --- a/drivers/firmware/arm_scmi/common.h +++ b/drivers/firmware/arm_scmi/common.h @@ -97,6 +97,7 @@ static inline void unpack_scmi_header(u32 msg_hdr, struct scmi_msg_hdr *hdr) struct scmi_revision_info * scmi_revision_area_get(const struct scmi_protocol_handle *ph); int scmi_handle_put(const struct scmi_handle *handle); +void scmi_device_link_add(struct device *consumer, struct device *supplier); struct scmi_handle *scmi_handle_get(struct device *dev); void scmi_set_handle(struct scmi_device *scmi_dev); void scmi_setup_protocol_implemented(const struct scmi_protocol_handle *ph, @@ -117,6 +118,7 @@ void scmi_protocol_release(const struct scmi_handle *handle, u8 protocol_id); * * @dev: Reference to device in the SCMI hierarchy corresponding to this * channel + * @rx_timeout_ms: The configured RX timeout in milliseconds. * @handle: Pointer to SCMI entity handle * @no_completion_irq: Flag to indicate that this channel has no completion * interrupt mechanism for synchronous commands. @@ -126,6 +128,7 @@ void scmi_protocol_release(const struct scmi_handle *handle, u8 protocol_id); */ struct scmi_chan_info { struct device *dev; + unsigned int rx_timeout_ms; struct scmi_handle *handle; bool no_completion_irq; void *transport_info; @@ -232,7 +235,7 @@ void scmi_free_channel(struct scmi_chan_info *cinfo, struct idr *idr, int id); struct scmi_shared_mem; void shmem_tx_prepare(struct scmi_shared_mem __iomem *shmem, - struct scmi_xfer *xfer); + struct scmi_xfer *xfer, struct scmi_chan_info *cinfo); u32 shmem_read_header(struct scmi_shared_mem __iomem *shmem); void shmem_fetch_response(struct scmi_shared_mem __iomem *shmem, struct scmi_xfer *xfer); diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c index 609ebedee9cb69527ba6f70189ac08bb63ddf989..f818d00bb2c69e700dc0ce5e70f1cf84df55953e 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -2013,6 +2013,7 @@ static int scmi_chan_setup(struct scmi_info *info, struct device *dev, return -ENOMEM; cinfo->dev = dev; + cinfo->rx_timeout_ms = info->desc->max_rx_timeout_ms; ret = info->desc->ops->chan_setup(cinfo, info->dev, tx); if (ret) @@ -2044,8 +2045,12 @@ scmi_txrx_setup(struct scmi_info *info, struct device *dev, int prot_id) { int ret = scmi_chan_setup(info, dev, prot_id, true); - if (!ret) /* Rx is optional, hence no error check */ - scmi_chan_setup(info, dev, prot_id, false); + if (!ret) { + /* Rx is optional, report only memory errors */ + ret = scmi_chan_setup(info, dev, prot_id, false); + if (ret && ret != -ENOMEM) + ret = 0; + } return ret; } @@ -2273,10 +2278,16 @@ int scmi_protocol_device_request(const struct scmi_device_id *id_table) sdev = scmi_get_protocol_device(child, info, id_table->protocol_id, id_table->name); - /* Set handle if not already set: device existed */ - if (sdev && !sdev->handle) - sdev->handle = - scmi_handle_get_from_info_unlocked(info); + if (sdev) { + /* Set handle if not already set: device existed */ + if (!sdev->handle) + sdev->handle = + scmi_handle_get_from_info_unlocked(info); + /* Relink consumer and suppliers */ + if (sdev->handle) + scmi_device_link_add(&sdev->dev, + sdev->handle->dev); + } } else { dev_err(info->dev, "Failed. SCMI protocol %d not active.\n", @@ -2475,20 +2486,17 @@ void scmi_free_channel(struct scmi_chan_info *cinfo, struct idr *idr, int id) static int scmi_remove(struct platform_device *pdev) { - int ret = 0, id; + int ret, id; struct scmi_info *info = platform_get_drvdata(pdev); struct device_node *child; mutex_lock(&scmi_list_mutex); if (info->users) - ret = -EBUSY; - else - list_del(&info->node); + dev_warn(&pdev->dev, + "Still active SCMI users will be forcibly unbound.\n"); + list_del(&info->node); mutex_unlock(&scmi_list_mutex); - if (ret) - return ret; - scmi_notification_exit(&info->handle); mutex_lock(&info->protocols_mtx); @@ -2500,7 +2508,11 @@ static int scmi_remove(struct platform_device *pdev) idr_destroy(&info->active_protocols); /* Safe to free channels since no more users */ - return scmi_cleanup_txrx_channels(info); + ret = scmi_cleanup_txrx_channels(info); + if (ret) + dev_warn(&pdev->dev, "Failed to cleanup SCMI channels.\n"); + + return 0; } static ssize_t protocol_version_show(struct device *dev, @@ -2571,6 +2583,7 @@ MODULE_DEVICE_TABLE(of, scmi_of_match); static struct platform_driver scmi_driver = { .driver = { .name = "arm-scmi", + .suppress_bind_attrs = true, .of_match_table = scmi_of_match, .dev_groups = versions_groups, }, diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c index 08ff4d110beb493d86b816721282e095598dfd0f..1e40cb035044dff2ecec998bb11a20ef9812d7ee 100644 --- a/drivers/firmware/arm_scmi/mailbox.c +++ b/drivers/firmware/arm_scmi/mailbox.c @@ -36,7 +36,7 @@ static void tx_prepare(struct mbox_client *cl, void *m) { struct scmi_mailbox *smbox = client_to_scmi_mailbox(cl); - shmem_tx_prepare(smbox->shmem, m); + shmem_tx_prepare(smbox->shmem, m, smbox->cinfo); } static void rx_callback(struct mbox_client *cl, void *m) diff --git a/drivers/firmware/arm_scmi/optee.c b/drivers/firmware/arm_scmi/optee.c index f42dad997ac9a50a947191f55d19a05a1c3d08ba..2a7aeab40e543537cad593de8b026dcf8ed1db3d 100644 --- a/drivers/firmware/arm_scmi/optee.c +++ b/drivers/firmware/arm_scmi/optee.c @@ -498,7 +498,7 @@ static int scmi_optee_send_message(struct scmi_chan_info *cinfo, msg_tx_prepare(channel->req.msg, xfer); ret = invoke_process_msg_channel(channel, msg_command_size(xfer)); } else { - shmem_tx_prepare(channel->req.shmem, xfer); + shmem_tx_prepare(channel->req.shmem, xfer, cinfo); ret = invoke_process_smt_channel(channel); } diff --git a/drivers/firmware/arm_scmi/shmem.c b/drivers/firmware/arm_scmi/shmem.c index 0e3eaea5d85262964f1d6c7304b6deeaed890d3e..1dfe534b85184528c31e849668bd38edd1bf4154 100644 --- a/drivers/firmware/arm_scmi/shmem.c +++ b/drivers/firmware/arm_scmi/shmem.c @@ -5,10 +5,13 @@ * Copyright (C) 2019 ARM Ltd. */ +#include #include #include #include +#include + #include "common.h" /* @@ -30,16 +33,36 @@ struct scmi_shared_mem { }; void shmem_tx_prepare(struct scmi_shared_mem __iomem *shmem, - struct scmi_xfer *xfer) + struct scmi_xfer *xfer, struct scmi_chan_info *cinfo) { + ktime_t stop; + /* * Ideally channel must be free by now unless OS timeout last * request and platform continued to process the same, wait * until it releases the shared memory, otherwise we may endup - * overwriting its response with new message payload or vice-versa + * overwriting its response with new message payload or vice-versa. + * Giving up anyway after twice the expected channel timeout so as + * not to bail-out on intermittent issues where the platform is + * occasionally a bit slower to answer. + * + * Note that after a timeout is detected we bail-out and carry on but + * the transport functionality is probably permanently compromised: + * this is just to ease debugging and avoid complete hangs on boot + * due to a misbehaving SCMI firmware. */ - spin_until_cond(ioread32(&shmem->channel_status) & - SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE); + stop = ktime_add_ms(ktime_get(), 2 * cinfo->rx_timeout_ms); + spin_until_cond((ioread32(&shmem->channel_status) & + SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE) || + ktime_after(ktime_get(), stop)); + if (!(ioread32(&shmem->channel_status) & + SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE)) { + WARN_ON_ONCE(1); + dev_err(cinfo->dev, + "Timeout waiting for a free TX channel !\n"); + return; + } + /* Mark channel busy + clear error */ iowrite32(0x0, &shmem->channel_status); iowrite32(xfer->hdr.poll_completion ? 0 : SCMI_SHMEM_FLAG_INTR_ENABLED, diff --git a/drivers/firmware/arm_scmi/smc.c b/drivers/firmware/arm_scmi/smc.c index 745acfdd0b3dfb2cba2668b1afeed35a9cfef2aa..87a7b13cf868b2b53189105c8011b638856f71c7 100644 --- a/drivers/firmware/arm_scmi/smc.c +++ b/drivers/firmware/arm_scmi/smc.c @@ -188,7 +188,7 @@ static int smc_send_message(struct scmi_chan_info *cinfo, */ smc_channel_lock_acquire(scmi_info, xfer); - shmem_tx_prepare(scmi_info->shmem, xfer); + shmem_tx_prepare(scmi_info->shmem, xfer, cinfo); arm_smccc_1_1_invoke(scmi_info->func_id, 0, 0, 0, 0, 0, 0, 0, &res); diff --git a/drivers/firmware/arm_scmi/virtio.c b/drivers/firmware/arm_scmi/virtio.c index 14709dbc96a1aac36a3c0f17b84c0475b00a95e1..33c9b81a55cd11926dad6426cd2e748052150f40 100644 --- a/drivers/firmware/arm_scmi/virtio.c +++ b/drivers/firmware/arm_scmi/virtio.c @@ -148,7 +148,6 @@ static void scmi_vio_channel_cleanup_sync(struct scmi_vio_channel *vioch) { unsigned long flags; DECLARE_COMPLETION_ONSTACK(vioch_shutdown_done); - void *deferred_wq = NULL; /* * Prepare to wait for the last release if not already released @@ -162,16 +161,11 @@ static void scmi_vio_channel_cleanup_sync(struct scmi_vio_channel *vioch) vioch->shutdown_done = &vioch_shutdown_done; virtio_break_device(vioch->vqueue->vdev); - if (!vioch->is_rx && vioch->deferred_tx_wq) { - deferred_wq = vioch->deferred_tx_wq; + if (!vioch->is_rx && vioch->deferred_tx_wq) /* Cannot be kicked anymore after this...*/ vioch->deferred_tx_wq = NULL; - } spin_unlock_irqrestore(&vioch->lock, flags); - if (deferred_wq) - destroy_workqueue(deferred_wq); - scmi_vio_channel_release(vioch); /* Let any possibly concurrent RX path release the channel */ @@ -416,6 +410,11 @@ static bool virtio_chan_available(struct device *dev, int idx) return vioch && !vioch->cinfo; } +static void scmi_destroy_tx_workqueue(void *deferred_tx_wq) +{ + destroy_workqueue(deferred_tx_wq); +} + static int virtio_chan_setup(struct scmi_chan_info *cinfo, struct device *dev, bool tx) { @@ -430,6 +429,8 @@ static int virtio_chan_setup(struct scmi_chan_info *cinfo, struct device *dev, /* Setup a deferred worker for polling. */ if (tx && !vioch->deferred_tx_wq) { + int ret; + vioch->deferred_tx_wq = alloc_workqueue(dev_name(&scmi_vdev->dev), WQ_UNBOUND | WQ_FREEZABLE | WQ_SYSFS, @@ -437,6 +438,11 @@ static int virtio_chan_setup(struct scmi_chan_info *cinfo, struct device *dev, if (!vioch->deferred_tx_wq) return -ENOMEM; + ret = devm_add_action_or_reset(dev, scmi_destroy_tx_workqueue, + vioch->deferred_tx_wq); + if (ret) + return ret; + INIT_WORK(&vioch->deferred_tx_work, scmi_vio_deferred_tx_worker); } @@ -444,12 +450,12 @@ static int virtio_chan_setup(struct scmi_chan_info *cinfo, struct device *dev, for (i = 0; i < vioch->max_msg; i++) { struct scmi_vio_msg *msg; - msg = devm_kzalloc(cinfo->dev, sizeof(*msg), GFP_KERNEL); + msg = devm_kzalloc(dev, sizeof(*msg), GFP_KERNEL); if (!msg) return -ENOMEM; if (tx) { - msg->request = devm_kzalloc(cinfo->dev, + msg->request = devm_kzalloc(dev, VIRTIO_SCMI_MAX_PDU_SIZE, GFP_KERNEL); if (!msg->request) @@ -458,7 +464,7 @@ static int virtio_chan_setup(struct scmi_chan_info *cinfo, struct device *dev, refcount_set(&msg->users, 1); } - msg->input = devm_kzalloc(cinfo->dev, VIRTIO_SCMI_MAX_PDU_SIZE, + msg->input = devm_kzalloc(dev, VIRTIO_SCMI_MAX_PDU_SIZE, GFP_KERNEL); if (!msg->input) return -ENOMEM; diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index 3ecdc43a3f2bb3961199c6729434c99c5b030ce6..a46df5d1d0942751635276f6f1dc2710305ffae1 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -611,7 +611,7 @@ int __init efi_config_parse_tables(const efi_config_table_t *config_tables, seed = early_memremap(efi_rng_seed, sizeof(*seed)); if (seed != NULL) { - size = READ_ONCE(seed->size); + size = min(seed->size, EFI_RANDOM_SEED_SIZE); early_memunmap(seed, sizeof(*seed)); } else { pr_err("Could not map UEFI random seed!\n"); diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile index b1601aad7e1a8d66eb1888454bb866bc7c5d8c4c..ef5045a53ce096535df7a7d12bad78f7f9464fcc 100644 --- a/drivers/firmware/efi/libstub/Makefile +++ b/drivers/firmware/efi/libstub/Makefile @@ -82,7 +82,7 @@ $(obj)/lib-%.o: $(srctree)/lib/%.c FORCE lib-$(CONFIG_EFI_GENERIC_STUB) += efi-stub.o string.o intrinsics.o systable.o lib-$(CONFIG_ARM) += arm32-stub.o -lib-$(CONFIG_ARM64) += arm64-stub.o +lib-$(CONFIG_ARM64) += arm64-stub.o smbios.o lib-$(CONFIG_X86) += x86-stub.o lib-$(CONFIG_RISCV) += riscv-stub.o lib-$(CONFIG_LOONGARCH) += loongarch-stub.o diff --git a/drivers/firmware/efi/libstub/arm64-stub.c b/drivers/firmware/efi/libstub/arm64-stub.c index 259e4b852d63276d7732f462c54984ad155ab84a..f9de5217ea65ed93cfd1a30a80e356a090ca65e4 100644 --- a/drivers/firmware/efi/libstub/arm64-stub.c +++ b/drivers/firmware/efi/libstub/arm64-stub.c @@ -15,6 +15,21 @@ #include "efistub.h" +static bool system_needs_vamap(void) +{ + const u8 *type1_family = efi_get_smbios_string(1, family); + + /* + * Ampere Altra machines crash in SetTime() if SetVirtualAddressMap() + * has not been called prior. + */ + if (!type1_family || strcmp(type1_family, "Altra")) + return false; + + efi_warn("Working around broken SetVirtualAddressMap()\n"); + return true; +} + efi_status_t check_platform_features(void) { u64 tg; @@ -24,7 +39,7 @@ efi_status_t check_platform_features(void) * UEFI runtime regions 1:1 and so calling SetVirtualAddressMap() is * unnecessary. */ - if (VA_BITS_MIN >= 48) + if (VA_BITS_MIN >= 48 && !system_needs_vamap()) efi_novamap = true; /* UEFI mandates support for 4 KB granularity, no need to check */ diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h index a30fb5d8ef05ae9c781c70737ffcba2bf7d03059..eb03d5a9aac88e84f60a0753f7f51ded5141c4d3 100644 --- a/drivers/firmware/efi/libstub/efistub.h +++ b/drivers/firmware/efi/libstub/efistub.h @@ -975,4 +975,32 @@ efi_enable_reset_attack_mitigation(void) { } void efi_retrieve_tpm2_eventlog(void); +struct efi_smbios_record { + u8 type; + u8 length; + u16 handle; +}; + +struct efi_smbios_type1_record { + struct efi_smbios_record header; + + u8 manufacturer; + u8 product_name; + u8 version; + u8 serial_number; + efi_guid_t uuid; + u8 wakeup_type; + u8 sku_number; + u8 family; +}; + +#define efi_get_smbios_string(__type, __name) ({ \ + int size = sizeof(struct efi_smbios_type ## __type ## _record); \ + int off = offsetof(struct efi_smbios_type ## __type ## _record, \ + __name); \ + __efi_get_smbios_string(__type, off, size); \ +}) + +const u8 *__efi_get_smbios_string(u8 type, int offset, int recsize); + #endif diff --git a/drivers/firmware/efi/libstub/random.c b/drivers/firmware/efi/libstub/random.c index 24aa375353724abd5339f4d71179c92330bf3170..33ab567695951d6c3c9df4217d067fb53367a373 100644 --- a/drivers/firmware/efi/libstub/random.c +++ b/drivers/firmware/efi/libstub/random.c @@ -75,7 +75,12 @@ efi_status_t efi_random_get_seed(void) if (status != EFI_SUCCESS) return status; - status = efi_bs_call(allocate_pool, EFI_RUNTIME_SERVICES_DATA, + /* + * Use EFI_ACPI_RECLAIM_MEMORY here so that it is guaranteed that the + * allocation will survive a kexec reboot (although we refresh the seed + * beforehand) + */ + status = efi_bs_call(allocate_pool, EFI_ACPI_RECLAIM_MEMORY, sizeof(*seed) + EFI_RANDOM_SEED_SIZE, (void **)&seed); if (status != EFI_SUCCESS) diff --git a/drivers/firmware/efi/libstub/smbios.c b/drivers/firmware/efi/libstub/smbios.c new file mode 100644 index 0000000000000000000000000000000000000000..460418b7f5f5e9ab1d721ec096eaa77bb2462c58 --- /dev/null +++ b/drivers/firmware/efi/libstub/smbios.c @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Copyright 2022 Google LLC +// Author: Ard Biesheuvel + +#include + +#include "efistub.h" + +typedef struct efi_smbios_protocol efi_smbios_protocol_t; + +struct efi_smbios_protocol { + efi_status_t (__efiapi *add)(efi_smbios_protocol_t *, efi_handle_t, + u16 *, struct efi_smbios_record *); + efi_status_t (__efiapi *update_string)(efi_smbios_protocol_t *, u16 *, + unsigned long *, u8 *); + efi_status_t (__efiapi *remove)(efi_smbios_protocol_t *, u16); + efi_status_t (__efiapi *get_next)(efi_smbios_protocol_t *, u16 *, u8 *, + struct efi_smbios_record **, + efi_handle_t *); + + u8 major_version; + u8 minor_version; +}; + +const u8 *__efi_get_smbios_string(u8 type, int offset, int recsize) +{ + struct efi_smbios_record *record; + efi_smbios_protocol_t *smbios; + efi_status_t status; + u16 handle = 0xfffe; + const u8 *strtable; + + status = efi_bs_call(locate_protocol, &EFI_SMBIOS_PROTOCOL_GUID, NULL, + (void **)&smbios) ?: + efi_call_proto(smbios, get_next, &handle, &type, &record, NULL); + if (status != EFI_SUCCESS) + return NULL; + + strtable = (u8 *)record + recsize; + for (int i = 1; i < ((u8 *)record)[offset]; i++) { + int len = strlen(strtable); + + if (!len) + return NULL; + strtable += len + 1; + } + return strtable; +} diff --git a/drivers/firmware/efi/tpm.c b/drivers/firmware/efi/tpm.c index 8f665678e9e398760910bb54bfbdb544251a433b..e8d69bd548f3fe2a6f34eb9c3332f97076cd9722 100644 --- a/drivers/firmware/efi/tpm.c +++ b/drivers/firmware/efi/tpm.c @@ -97,7 +97,7 @@ int __init efi_tpm_eventlog_init(void) goto out_calc; } - memblock_reserve((unsigned long)final_tbl, + memblock_reserve(efi.tpm_final_log, tbl_size + sizeof(*final_tbl)); efi_tpm_final_log_size = tbl_size; diff --git a/drivers/firmware/efi/vars.c b/drivers/firmware/efi/vars.c index 433b615871395c5d8b4aab22697aa08b1119231b..0ba9f18312f5b822531fab61f277f77ccdce02cf 100644 --- a/drivers/firmware/efi/vars.c +++ b/drivers/firmware/efi/vars.c @@ -21,29 +21,22 @@ static struct efivars *__efivars; static DEFINE_SEMAPHORE(efivars_lock); -static efi_status_t check_var_size(u32 attributes, unsigned long size) -{ - const struct efivar_operations *fops; - - fops = __efivars->ops; - - if (!fops->query_variable_store) - return (size <= SZ_64K) ? EFI_SUCCESS : EFI_OUT_OF_RESOURCES; - - return fops->query_variable_store(attributes, size, false); -} - -static -efi_status_t check_var_size_nonblocking(u32 attributes, unsigned long size) +static efi_status_t check_var_size(bool nonblocking, u32 attributes, + unsigned long size) { const struct efivar_operations *fops; + efi_status_t status; fops = __efivars->ops; if (!fops->query_variable_store) + status = EFI_UNSUPPORTED; + else + status = fops->query_variable_store(attributes, size, + nonblocking); + if (status == EFI_UNSUPPORTED) return (size <= SZ_64K) ? EFI_SUCCESS : EFI_OUT_OF_RESOURCES; - - return fops->query_variable_store(attributes, size, true); + return status; } /** @@ -195,26 +188,6 @@ efi_status_t efivar_get_next_variable(unsigned long *name_size, } EXPORT_SYMBOL_NS_GPL(efivar_get_next_variable, EFIVAR); -/* - * efivar_set_variable_blocking() - local helper function for set_variable - * - * Must be called with efivars_lock held. - */ -static efi_status_t -efivar_set_variable_blocking(efi_char16_t *name, efi_guid_t *vendor, - u32 attr, unsigned long data_size, void *data) -{ - efi_status_t status; - - if (data_size > 0) { - status = check_var_size(attr, data_size + - ucs2_strsize(name, 1024)); - if (status != EFI_SUCCESS) - return status; - } - return __efivars->ops->set_variable(name, vendor, attr, data_size, data); -} - /* * efivar_set_variable_locked() - set a variable identified by name/vendor * @@ -228,23 +201,21 @@ efi_status_t efivar_set_variable_locked(efi_char16_t *name, efi_guid_t *vendor, efi_set_variable_t *setvar; efi_status_t status; - if (!nonblocking) - return efivar_set_variable_blocking(name, vendor, attr, - data_size, data); + if (data_size > 0) { + status = check_var_size(nonblocking, attr, + data_size + ucs2_strsize(name, 1024)); + if (status != EFI_SUCCESS) + return status; + } /* * If no _nonblocking variant exists, the ordinary one * is assumed to be non-blocking. */ - setvar = __efivars->ops->set_variable_nonblocking ?: - __efivars->ops->set_variable; + setvar = __efivars->ops->set_variable_nonblocking; + if (!setvar || !nonblocking) + setvar = __efivars->ops->set_variable; - if (data_size > 0) { - status = check_var_size_nonblocking(attr, data_size + - ucs2_strsize(name, 1024)); - if (status != EFI_SUCCESS) - return status; - } return setvar(name, vendor, attr, data_size, data); } EXPORT_SYMBOL_NS_GPL(efivar_set_variable_locked, EFIVAR); @@ -264,7 +235,8 @@ efi_status_t efivar_set_variable(efi_char16_t *name, efi_guid_t *vendor, if (efivar_lock()) return EFI_ABORTED; - status = efivar_set_variable_blocking(name, vendor, attr, data_size, data); + status = efivar_set_variable_locked(name, vendor, attr, data_size, + data, false); efivar_unlock(); return status; } diff --git a/drivers/firmware/google/coreboot_table.c b/drivers/firmware/google/coreboot_table.c index c52bcaa9def60a3894486b1300cd05e054d92fc3..9ca21feb9d454976fd2abb7cfe1da613ec5f9804 100644 --- a/drivers/firmware/google/coreboot_table.c +++ b/drivers/firmware/google/coreboot_table.c @@ -149,12 +149,8 @@ static int coreboot_table_probe(struct platform_device *pdev) if (!ptr) return -ENOMEM; - ret = bus_register(&coreboot_bus_type); - if (!ret) { - ret = coreboot_table_populate(dev, ptr); - if (ret) - bus_unregister(&coreboot_bus_type); - } + ret = coreboot_table_populate(dev, ptr); + memunmap(ptr); return ret; @@ -169,7 +165,6 @@ static int __cb_dev_unregister(struct device *dev, void *dummy) static int coreboot_table_remove(struct platform_device *pdev) { bus_for_each_dev(&coreboot_bus_type, NULL, NULL, __cb_dev_unregister); - bus_unregister(&coreboot_bus_type); return 0; } @@ -199,6 +194,32 @@ static struct platform_driver coreboot_table_driver = { .of_match_table = of_match_ptr(coreboot_of_match), }, }; -module_platform_driver(coreboot_table_driver); + +static int __init coreboot_table_driver_init(void) +{ + int ret; + + ret = bus_register(&coreboot_bus_type); + if (ret) + return ret; + + ret = platform_driver_register(&coreboot_table_driver); + if (ret) { + bus_unregister(&coreboot_bus_type); + return ret; + } + + return 0; +} + +static void __exit coreboot_table_driver_exit(void) +{ + platform_driver_unregister(&coreboot_table_driver); + bus_unregister(&coreboot_bus_type); +} + +module_init(coreboot_table_driver_init); +module_exit(coreboot_table_driver_exit); + MODULE_AUTHOR("Google, Inc."); MODULE_LICENSE("GPL"); diff --git a/drivers/fpga/Kconfig b/drivers/fpga/Kconfig index 6c416955da5320fc767285c84e603180aaf71491..bbe0a7cabb75fb55ba8f8f5c7632fee120b84488 100644 --- a/drivers/fpga/Kconfig +++ b/drivers/fpga/Kconfig @@ -246,7 +246,9 @@ config FPGA_MGR_VERSAL_FPGA config FPGA_M10_BMC_SEC_UPDATE tristate "Intel MAX10 BMC Secure Update driver" - depends on MFD_INTEL_M10_BMC && FW_UPLOAD + depends on MFD_INTEL_M10_BMC + select FW_LOADER + select FW_UPLOAD help Secure update support for the Intel MAX10 board management controller. diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 8639a4f9c6e8c232988fb75f7a0b2ed69d7fb6f3..2eca58220550eb9e10f2a42a64a0d5bfacbbbfcc 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -1293,6 +1293,7 @@ void amdgpu_device_pcie_port_wreg(struct amdgpu_device *adev, u32 reg, u32 v); struct dma_fence *amdgpu_device_switch_gang(struct amdgpu_device *adev, struct dma_fence *gang); +bool amdgpu_device_has_display_hardware(struct amdgpu_device *adev); /* atpx handler */ #if defined(CONFIG_VGA_SWITCHEROO) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c index 0561812aa0a43ed07362c4627098673c4f623c6b..5d9a34601a1ac54d3a64d57ee39128fae257e401 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c @@ -706,6 +706,13 @@ int amdgpu_amdkfd_submit_ib(struct amdgpu_device *adev, void amdgpu_amdkfd_set_compute_idle(struct amdgpu_device *adev, bool idle) { + /* Temporary workaround to fix issues observed in some + * compute applications when GFXOFF is enabled on GFX11. + */ + if (IP_VERSION_MAJ(adev->ip_versions[GC_HWIP][0]) == 11) { + pr_debug("GFXOFF is %s\n", idle ? "enabled" : "disabled"); + amdgpu_gfx_off_ctrl(adev, idle); + } amdgpu_dpm_switch_power_profile(adev, PP_SMC_POWER_PROFILE_COMPUTE, !idle); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_aldebaran.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_aldebaran.c index c8935d71820737538f7fab1f2b97dd14241078fe..4485bb29bec961f9b9ac33cca23d666ba8fd0f12 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_aldebaran.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_aldebaran.c @@ -41,5 +41,6 @@ const struct kfd2kgd_calls aldebaran_kfd2kgd = { .get_atc_vmid_pasid_mapping_info = kgd_gfx_v9_get_atc_vmid_pasid_mapping_info, .set_vm_context_page_table_base = kgd_gfx_v9_set_vm_context_page_table_base, + .get_cu_occupancy = kgd_gfx_v9_get_cu_occupancy, .program_trap_handler_settings = kgd_gfx_v9_program_trap_handler_settings }; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index 84f44f7e4111897b9bc2633180556b4d8d83d704..1f76e27f1a35454ded8fdf0d231228290e137c45 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -171,9 +171,7 @@ int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev, (kfd_mem_limit.ttm_mem_used + ttm_mem_needed > kfd_mem_limit.max_ttm_mem_limit) || (adev && adev->kfd.vram_used + vram_needed > - adev->gmc.real_vram_size - - atomic64_read(&adev->vram_pin_size) - - reserved_for_pt)) { + adev->gmc.real_vram_size - reserved_for_pt)) { ret = -ENOMEM; goto release; } @@ -988,6 +986,7 @@ static int init_user_pages(struct kgd_mem *mem, uint64_t user_addr, struct amdkfd_process_info *process_info = mem->process_info; struct amdgpu_bo *bo = mem->bo; struct ttm_operation_ctx ctx = { true, false }; + struct hmm_range *range; int ret = 0; mutex_lock(&process_info->lock); @@ -1017,7 +1016,7 @@ static int init_user_pages(struct kgd_mem *mem, uint64_t user_addr, return 0; } - ret = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages); + ret = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages, &range); if (ret) { pr_err("%s: Failed to get user pages: %d\n", __func__, ret); goto unregister_out; @@ -1035,7 +1034,7 @@ static int init_user_pages(struct kgd_mem *mem, uint64_t user_addr, amdgpu_bo_unreserve(bo); release_out: - amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm); + amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm, range); unregister_out: if (ret) amdgpu_mn_unregister(bo); @@ -2372,6 +2371,8 @@ static int update_invalid_user_pages(struct amdkfd_process_info *process_info, /* Go through userptr_inval_list and update any invalid user_pages */ list_for_each_entry(mem, &process_info->userptr_inval_list, validate_list.head) { + struct hmm_range *range; + invalid = atomic_read(&mem->invalid); if (!invalid) /* BO hasn't been invalidated since the last @@ -2382,7 +2383,8 @@ static int update_invalid_user_pages(struct amdkfd_process_info *process_info, bo = mem->bo; /* Get updated user pages */ - ret = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages); + ret = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages, + &range); if (ret) { pr_debug("Failed %d to get user pages\n", ret); @@ -2401,7 +2403,7 @@ static int update_invalid_user_pages(struct amdkfd_process_info *process_info, * FIXME: Cannot ignore the return code, must hold * notifier_lock */ - amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm); + amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm, range); } /* Mark the BO as valid unless it was invalidated diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c index 2168163aad2d386014040bc666e528aaeee89ab1..252a876b072586a6cf2b8a01b529b1c7d5857718 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c @@ -209,6 +209,7 @@ void amdgpu_bo_list_get_list(struct amdgpu_bo_list *list, list_add_tail(&e->tv.head, &bucket[priority]); e->user_pages = NULL; + e->range = NULL; } /* Connect the sorted buckets in the output list. */ diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h index 9caea1688fc322db41d4a05538f043265cac9cf6..e4d78491bcc7e7a792032c15085866f3cf971f2e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h @@ -26,6 +26,8 @@ #include #include +struct hmm_range; + struct amdgpu_device; struct amdgpu_bo; struct amdgpu_bo_va; @@ -36,6 +38,7 @@ struct amdgpu_bo_list_entry { struct amdgpu_bo_va *bo_va; uint32_t priority; struct page **user_pages; + struct hmm_range *range; bool user_invalidated; }; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c index 491d4846fc02c8130c879348d282973acebc5900..cfb262911bfc73e7eff55e9057ada48b4a3e5511 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c @@ -328,7 +328,6 @@ static void amdgpu_connector_free_edid(struct drm_connector *connector) kfree(amdgpu_connector->edid); amdgpu_connector->edid = NULL; - drm_connector_update_edid_property(connector, NULL); } static int amdgpu_connector_ddc_get_modes(struct drm_connector *connector) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index 1bbd39b3b0fc4aed0bb7959fa4bf175dfe64417b..365e3fb6a9e5bc9e1938d0a3f5088cc883c53b70 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -109,6 +109,7 @@ static int amdgpu_cs_p1_ib(struct amdgpu_cs_parser *p, return r; ++(num_ibs[r]); + p->gang_leader_idx = r; return 0; } @@ -287,8 +288,10 @@ static int amdgpu_cs_pass1(struct amdgpu_cs_parser *p, } } - if (!p->gang_size) - return -EINVAL; + if (!p->gang_size) { + ret = -EINVAL; + goto free_partial_kdata; + } for (i = 0; i < p->gang_size; ++i) { ret = amdgpu_job_alloc(p->adev, num_ibs[i], &p->jobs[i], vm); @@ -300,7 +303,7 @@ static int amdgpu_cs_pass1(struct amdgpu_cs_parser *p, if (ret) goto free_all_kdata; } - p->gang_leader = p->jobs[p->gang_size - 1]; + p->gang_leader = p->jobs[p->gang_leader_idx]; if (p->ctx->vram_lost_counter != p->gang_leader->vram_lost_counter) { ret = -ECANCELED; @@ -910,7 +913,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, goto out_free_user_pages; } - r = amdgpu_ttm_tt_get_user_pages(bo, e->user_pages); + r = amdgpu_ttm_tt_get_user_pages(bo, e->user_pages, &e->range); if (r) { kvfree(e->user_pages); e->user_pages = NULL; @@ -988,10 +991,12 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, if (!e->user_pages) continue; - amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm); + amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm, e->range); kvfree(e->user_pages); e->user_pages = NULL; + e->range = NULL; } + mutex_unlock(&p->bo_list->bo_list_mutex); return r; } @@ -1194,16 +1199,18 @@ static int amdgpu_cs_sync_rings(struct amdgpu_cs_parser *p) return r; } - for (i = 0; i < p->gang_size - 1; ++i) { + for (i = 0; i < p->gang_size; ++i) { + if (p->jobs[i] == leader) + continue; + r = amdgpu_sync_clone(&leader->sync, &p->jobs[i]->sync); if (r) return r; } - r = amdgpu_ctx_wait_prev_fence(p->ctx, p->entities[p->gang_size - 1]); + r = amdgpu_ctx_wait_prev_fence(p->ctx, p->entities[p->gang_leader_idx]); if (r && r != -ERESTARTSYS) DRM_ERROR("amdgpu_ctx_wait_prev_fence failed.\n"); - return r; } @@ -1237,9 +1244,12 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, for (i = 0; i < p->gang_size; ++i) drm_sched_job_arm(&p->jobs[i]->base); - for (i = 0; i < (p->gang_size - 1); ++i) { + for (i = 0; i < p->gang_size; ++i) { struct dma_fence *fence; + if (p->jobs[i] == leader) + continue; + fence = &p->jobs[i]->base.s_fence->scheduled; r = amdgpu_sync_fence(&leader->sync, fence); if (r) @@ -1264,7 +1274,8 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, amdgpu_bo_list_for_each_userptr_entry(e, p->bo_list) { struct amdgpu_bo *bo = ttm_to_amdgpu_bo(e->tv.bo); - r |= !amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm); + r |= !amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm, e->range); + e->range = NULL; } if (r) { r = -EAGAIN; @@ -1275,7 +1286,10 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, list_for_each_entry(e, &p->validated, tv.head) { /* Everybody except for the gang leader uses READ */ - for (i = 0; i < (p->gang_size - 1); ++i) { + for (i = 0; i < p->gang_size; ++i) { + if (p->jobs[i] == leader) + continue; + dma_resv_add_fence(e->tv.bo->base.resv, &p->jobs[i]->base.s_fence->finished, DMA_RESV_USAGE_READ); @@ -1285,7 +1299,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, e->tv.num_shared = 0; } - seq = amdgpu_ctx_add_fence(p->ctx, p->entities[p->gang_size - 1], + seq = amdgpu_ctx_add_fence(p->ctx, p->entities[p->gang_leader_idx], p->fence); amdgpu_cs_post_dependencies(p); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.h index cbaa19b2b8a30b45bc11fc37135937a31cf9c77c..f80adf9069ecd5007938c0411d47f57c89f02fff 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.h @@ -54,6 +54,7 @@ struct amdgpu_cs_parser { /* scheduler job objects */ unsigned int gang_size; + unsigned int gang_leader_idx; struct drm_sched_entity *entities[AMDGPU_CS_GANG_SIZE]; struct amdgpu_job *jobs[AMDGPU_CS_GANG_SIZE]; struct amdgpu_job *gang_leader; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index ddaecb2610c94009cc543ebceef2ac005a668c57..f1e9663b4051075a78c2d72f5c85ca40e1050bfa 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -4060,15 +4060,18 @@ void amdgpu_device_fini_sw(struct amdgpu_device *adev) * at suspend time. * */ -static void amdgpu_device_evict_resources(struct amdgpu_device *adev) +static int amdgpu_device_evict_resources(struct amdgpu_device *adev) { + int ret; + /* No need to evict vram on APUs for suspend to ram or s2idle */ if ((adev->in_s3 || adev->in_s0ix) && (adev->flags & AMD_IS_APU)) - return; + return 0; - if (amdgpu_ttm_evict_resources(adev, TTM_PL_VRAM)) + ret = amdgpu_ttm_evict_resources(adev, TTM_PL_VRAM); + if (ret) DRM_WARN("evicting device resources failed\n"); - + return ret; } /* @@ -4118,7 +4121,9 @@ int amdgpu_device_suspend(struct drm_device *dev, bool fbcon) if (!adev->in_s0ix) amdgpu_amdkfd_suspend(adev, adev->in_runpm); - amdgpu_device_evict_resources(adev); + r = amdgpu_device_evict_resources(adev); + if (r) + return r; amdgpu_fence_driver_hw_fini(adev); @@ -6039,3 +6044,44 @@ struct dma_fence *amdgpu_device_switch_gang(struct amdgpu_device *adev, dma_fence_put(old); return NULL; } + +bool amdgpu_device_has_display_hardware(struct amdgpu_device *adev) +{ + switch (adev->asic_type) { +#ifdef CONFIG_DRM_AMDGPU_SI + case CHIP_HAINAN: +#endif + case CHIP_TOPAZ: + /* chips with no display hardware */ + return false; +#ifdef CONFIG_DRM_AMDGPU_SI + case CHIP_TAHITI: + case CHIP_PITCAIRN: + case CHIP_VERDE: + case CHIP_OLAND: +#endif +#ifdef CONFIG_DRM_AMDGPU_CIK + case CHIP_BONAIRE: + case CHIP_HAWAII: + case CHIP_KAVERI: + case CHIP_KABINI: + case CHIP_MULLINS: +#endif + case CHIP_TONGA: + case CHIP_FIJI: + case CHIP_POLARIS10: + case CHIP_POLARIS11: + case CHIP_POLARIS12: + case CHIP_VEGAM: + case CHIP_CARRIZO: + case CHIP_STONEY: + /* chips with display hardware */ + return true; + default: + /* IP discovery */ + if (!adev->ip_versions[DCE_HWIP][0] || + (adev->harvest_ip_mask & AMD_HARVEST_IP_DMU_MASK)) + return false; + return true; + } +} diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index 3c9fecdd6b2f322fc7f1dbbb28aecf91739c84f6..bf2d50c8c92ad5e1f64ce125f6793a1b3131e88a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -2201,7 +2201,8 @@ amdgpu_pci_remove(struct pci_dev *pdev) pm_runtime_forbid(dev->dev); } - if (adev->ip_versions[MP1_HWIP][0] == IP_VERSION(13, 0, 2)) { + if (adev->ip_versions[MP1_HWIP][0] == IP_VERSION(13, 0, 2) && + !amdgpu_sriov_vf(adev)) { bool need_to_reset_gpu = false; if (adev->gmc.xgmi.num_physical_nodes > 1) { diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index 8ef31d687ef3b26352ce69802b2d576f7096f534..91571b1324f2feac9adaf3d907c6907e6e1786d4 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -378,6 +378,7 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data, struct amdgpu_device *adev = drm_to_adev(dev); struct drm_amdgpu_gem_userptr *args = data; struct drm_gem_object *gobj; + struct hmm_range *range; struct amdgpu_bo *bo; uint32_t handle; int r; @@ -413,14 +414,13 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data, if (r) goto release_object; - if (args->flags & AMDGPU_GEM_USERPTR_REGISTER) { - r = amdgpu_mn_register(bo, args->addr); - if (r) - goto release_object; - } + r = amdgpu_mn_register(bo, args->addr); + if (r) + goto release_object; if (args->flags & AMDGPU_GEM_USERPTR_VALIDATE) { - r = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages); + r = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages, + &range); if (r) goto release_object; @@ -443,7 +443,7 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data, user_pages_done: if (args->flags & AMDGPU_GEM_USERPTR_VALIDATE) - amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm); + amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm, range); release_object: drm_gem_object_put(gobj); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c index 34233a74248c2ffe5087e78d472b908690c3fc01..28612e56d0d45007e9c36248a1db4d1013f0fd30 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c @@ -479,6 +479,12 @@ int amdgpu_gmc_allocate_vm_inv_eng(struct amdgpu_device *adev) unsigned i; unsigned vmhub, inv_eng; + if (adev->enable_mes) { + /* reserve engine 5 for firmware */ + for (vmhub = 0; vmhub < AMDGPU_MAX_VMHUBS; vmhub++) + vm_inv_engs[vmhub] &= ~(1 << 5); + } + for (i = 0; i < adev->num_rings; ++i) { ring = adev->rings[i]; vmhub = ring->funcs->vmhub; @@ -656,7 +662,7 @@ void amdgpu_gmc_get_vbios_allocations(struct amdgpu_device *adev) } if (amdgpu_sriov_vf(adev) || - !amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_DCE)) { + !amdgpu_device_has_display_hardware(adev)) { size = 0; } else { size = amdgpu_gmc_get_vbios_fb_size(adev); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c index cd968e781077ecef807e652e498e46f88ee80717..adac650cf544a0e0ccfe275f98e879361f11cd8b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c @@ -169,7 +169,11 @@ static void amdgpu_job_free_cb(struct drm_sched_job *s_job) amdgpu_sync_free(&job->sync); amdgpu_sync_free(&job->sched_sync); - dma_fence_put(&job->hw_fence); + /* only put the hw fence if has embedded fence */ + if (!job->hw_fence.ops) + kfree(job); + else + dma_fence_put(&job->hw_fence); } void amdgpu_job_set_gang_leader(struct amdgpu_job *job, @@ -254,6 +258,9 @@ static struct dma_fence *amdgpu_job_dependency(struct drm_sched_job *sched_job, DRM_ERROR("Error adding fence (%d)\n", r); } + if (!fence && job->gang_submit) + fence = amdgpu_device_switch_gang(ring->adev, job->gang_submit); + while (fence == NULL && vm && !job->vmid) { r = amdgpu_vmid_grab(vm, ring, &job->sync, &job->base.s_fence->finished, @@ -264,9 +271,6 @@ static struct dma_fence *amdgpu_job_dependency(struct drm_sched_job *sched_job, fence = amdgpu_sync_get_fence(&job->sync); } - if (!fence && job->gang_submit) - fence = amdgpu_device_switch_gang(ring->adev, job->gang_submit); - return fence; } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index bf1ff8f0e71208f4c5044dd588f7e38676893baf..4e42dcb1950f7e4cd474c33bd8609071f2dd708c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c @@ -337,12 +337,14 @@ static int amdgpu_firmware_info(struct drm_amdgpu_info_firmware *fw_info, fw_info->feature = adev->psp.cap_feature_version; break; case AMDGPU_INFO_FW_MES_KIQ: - fw_info->ver = adev->mes.ucode_fw_version[0]; - fw_info->feature = 0; + fw_info->ver = adev->mes.kiq_version & AMDGPU_MES_VERSION_MASK; + fw_info->feature = (adev->mes.kiq_version & AMDGPU_MES_FEAT_VERSION_MASK) + >> AMDGPU_MES_FEAT_VERSION_SHIFT; break; case AMDGPU_INFO_FW_MES: - fw_info->ver = adev->mes.ucode_fw_version[1]; - fw_info->feature = 0; + fw_info->ver = adev->mes.sched_version & AMDGPU_MES_VERSION_MASK; + fw_info->feature = (adev->mes.sched_version & AMDGPU_MES_FEAT_VERSION_MASK) + >> AMDGPU_MES_FEAT_VERSION_SHIFT; break; case AMDGPU_INFO_FW_IMU: fw_info->ver = adev->gfx.imu_fw_version; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c index effa7df3ddbfa47aafd26dc6875f71e56d439167..7978307e1d6d288fa6cd9bb10c5f6d096443533a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c @@ -172,6 +172,7 @@ void psp_ta_free_shared_buf(struct ta_mem_context *mem_ctx) { amdgpu_bo_free_kernel(&mem_ctx->shared_bo, &mem_ctx->shared_mc_addr, &mem_ctx->shared_buf); + mem_ctx->shared_bo = NULL; } static void psp_free_shared_bufs(struct psp_context *psp) @@ -182,6 +183,7 @@ static void psp_free_shared_bufs(struct psp_context *psp) /* free TMR memory buffer */ pptr = amdgpu_sriov_vf(psp->adev) ? &tmr_buf : NULL; amdgpu_bo_free_kernel(&psp->tmr_bo, &psp->tmr_mc_addr, pptr); + psp->tmr_bo = NULL; /* free xgmi shared memory */ psp_ta_free_shared_buf(&psp->xgmi_context.context.mem_context); @@ -743,7 +745,7 @@ static int psp_load_toc(struct psp_context *psp, /* Set up Trusted Memory Region */ static int psp_tmr_init(struct psp_context *psp) { - int ret; + int ret = 0; int tmr_size; void *tmr_buf; void **pptr; @@ -770,10 +772,12 @@ static int psp_tmr_init(struct psp_context *psp) } } - pptr = amdgpu_sriov_vf(psp->adev) ? &tmr_buf : NULL; - ret = amdgpu_bo_create_kernel(psp->adev, tmr_size, PSP_TMR_ALIGNMENT, - AMDGPU_GEM_DOMAIN_VRAM, - &psp->tmr_bo, &psp->tmr_mc_addr, pptr); + if (!psp->tmr_bo) { + pptr = amdgpu_sriov_vf(psp->adev) ? &tmr_buf : NULL; + ret = amdgpu_bo_create_kernel(psp->adev, tmr_size, PSP_TMR_ALIGNMENT, + AMDGPU_GEM_DOMAIN_VRAM, + &psp->tmr_bo, &psp->tmr_mc_addr, pptr); + } return ret; } @@ -2732,8 +2736,6 @@ static int psp_suspend(void *handle) } out: - psp_free_shared_bufs(psp); - return ret; } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index 57277b1cf183471ff47d6aba76720d0698e4e9c3..b64938ed8cb68e1f957c96730e673218dd180e27 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c @@ -643,9 +643,6 @@ struct amdgpu_ttm_tt { struct task_struct *usertask; uint32_t userflags; bool bound; -#if IS_ENABLED(CONFIG_DRM_AMDGPU_USERPTR) - struct hmm_range *range; -#endif }; #define ttm_to_amdgpu_ttm_tt(ptr) container_of(ptr, struct amdgpu_ttm_tt, ttm) @@ -658,7 +655,8 @@ struct amdgpu_ttm_tt { * Calling function must call amdgpu_ttm_tt_userptr_range_done() once and only * once afterwards to stop HMM tracking */ -int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages) +int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages, + struct hmm_range **range) { struct ttm_tt *ttm = bo->tbo.ttm; struct amdgpu_ttm_tt *gtt = ttm_to_amdgpu_ttm_tt(ttm); @@ -668,16 +666,15 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages) bool readonly; int r = 0; + /* Make sure get_user_pages_done() can cleanup gracefully */ + *range = NULL; + mm = bo->notifier.mm; if (unlikely(!mm)) { DRM_DEBUG_DRIVER("BO is not registered?\n"); return -EFAULT; } - /* Another get_user_pages is running at the same time?? */ - if (WARN_ON(gtt->range)) - return -EFAULT; - if (!mmget_not_zero(mm)) /* Happens during process shutdown */ return -ESRCH; @@ -695,7 +692,7 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages) readonly = amdgpu_ttm_tt_is_readonly(ttm); r = amdgpu_hmm_range_get_pages(&bo->notifier, mm, pages, start, - ttm->num_pages, >t->range, readonly, + ttm->num_pages, range, readonly, true, NULL); out_unlock: mmap_read_unlock(mm); @@ -713,30 +710,24 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages) * * Returns: true if pages are still valid */ -bool amdgpu_ttm_tt_get_user_pages_done(struct ttm_tt *ttm) +bool amdgpu_ttm_tt_get_user_pages_done(struct ttm_tt *ttm, + struct hmm_range *range) { struct amdgpu_ttm_tt *gtt = ttm_to_amdgpu_ttm_tt(ttm); - bool r = false; - if (!gtt || !gtt->userptr) + if (!gtt || !gtt->userptr || !range) return false; DRM_DEBUG_DRIVER("user_pages_done 0x%llx pages 0x%x\n", gtt->userptr, ttm->num_pages); - WARN_ONCE(!gtt->range || !gtt->range->hmm_pfns, - "No user pages to check\n"); + WARN_ONCE(!range->hmm_pfns, "No user pages to check\n"); - if (gtt->range) { - /* - * FIXME: Must always hold notifier_lock for this, and must - * not ignore the return code. - */ - r = amdgpu_hmm_range_get_pages_done(gtt->range); - gtt->range = NULL; - } - - return !r; + /* + * FIXME: Must always hold notifier_lock for this, and must + * not ignore the return code. + */ + return !amdgpu_hmm_range_get_pages_done(range); } #endif @@ -813,20 +804,6 @@ static void amdgpu_ttm_tt_unpin_userptr(struct ttm_device *bdev, /* unmap the pages mapped to the device */ dma_unmap_sgtable(adev->dev, ttm->sg, direction, 0); sg_free_table(ttm->sg); - -#if IS_ENABLED(CONFIG_DRM_AMDGPU_USERPTR) - if (gtt->range) { - unsigned long i; - - for (i = 0; i < ttm->num_pages; i++) { - if (ttm->pages[i] != - hmm_pfn_to_page(gtt->range->hmm_pfns[i])) - break; - } - - WARN((i == ttm->num_pages), "Missing get_user_page_done\n"); - } -#endif } static void amdgpu_ttm_gart_bind(struct amdgpu_device *adev, diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h index 6a70818039dda61380d5fbaeb4dcc386de26b906..a37207011a69af47b2eeb5abae013ecc8987dcd9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h @@ -39,6 +39,8 @@ #define AMDGPU_POISON 0xd0bed0be +struct hmm_range; + struct amdgpu_gtt_mgr { struct ttm_resource_manager manager; struct drm_mm mm; @@ -149,15 +151,19 @@ void amdgpu_ttm_recover_gart(struct ttm_buffer_object *tbo); uint64_t amdgpu_ttm_domain_start(struct amdgpu_device *adev, uint32_t type); #if IS_ENABLED(CONFIG_DRM_AMDGPU_USERPTR) -int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages); -bool amdgpu_ttm_tt_get_user_pages_done(struct ttm_tt *ttm); +int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages, + struct hmm_range **range); +bool amdgpu_ttm_tt_get_user_pages_done(struct ttm_tt *ttm, + struct hmm_range *range); #else static inline int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, - struct page **pages) + struct page **pages, + struct hmm_range **range) { return -EPERM; } -static inline bool amdgpu_ttm_tt_get_user_pages_done(struct ttm_tt *ttm) +static inline bool amdgpu_ttm_tt_get_user_pages_done(struct ttm_tt *ttm, + struct hmm_range *range) { return false; } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c index 0b52af415b282f809898c7a21a4414f86bd3e772..ce64ca1c6e66907834675f9c1b0d3ff731d474c5 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c @@ -156,6 +156,9 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev) break; case IP_VERSION(3, 0, 2): fw_name = FIRMWARE_VANGOGH; + if ((adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) && + (adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG)) + adev->vcn.indirect_sram = true; break; case IP_VERSION(3, 0, 16): fw_name = FIRMWARE_DIMGREY_CAVEFISH; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c index f4b5301ea2a02e2794b85a79b814a93742b5f710..500a1dc4fe0299d2a41ba098fc856cc853f1ed87 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c @@ -500,6 +500,8 @@ static int amdgpu_vkms_sw_init(void *handle) adev_to_drm(adev)->mode_config.fb_base = adev->gmc.aper_base; + adev_to_drm(adev)->mode_config.fb_modifiers_not_supported = true; + r = amdgpu_display_modeset_create_props(adev); if (r) return r; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 2291aa14d888c224292bc9bece9b3c933666b2b1..003aa9e47085e0943536d97ac9029ae5ebd43301 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -143,32 +143,6 @@ int amdgpu_vm_set_pasid(struct amdgpu_device *adev, struct amdgpu_vm *vm, return 0; } -/* - * vm eviction_lock can be taken in MMU notifiers. Make sure no reclaim-FS - * happens while holding this lock anywhere to prevent deadlocks when - * an MMU notifier runs in reclaim-FS context. - */ -static inline void amdgpu_vm_eviction_lock(struct amdgpu_vm *vm) -{ - mutex_lock(&vm->eviction_lock); - vm->saved_flags = memalloc_noreclaim_save(); -} - -static inline int amdgpu_vm_eviction_trylock(struct amdgpu_vm *vm) -{ - if (mutex_trylock(&vm->eviction_lock)) { - vm->saved_flags = memalloc_noreclaim_save(); - return 1; - } - return 0; -} - -static inline void amdgpu_vm_eviction_unlock(struct amdgpu_vm *vm) -{ - memalloc_noreclaim_restore(vm->saved_flags); - mutex_unlock(&vm->eviction_lock); -} - /** * amdgpu_vm_bo_evicted - vm_bo is evicted * diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h index 83acb7bd80feb5a710e39f76715df04379fda7fa..6546e786bf008a7aad40f25c08223710562b71bb 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h @@ -492,7 +492,48 @@ void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct seq_file *m); */ static inline uint64_t amdgpu_vm_tlb_seq(struct amdgpu_vm *vm) { + unsigned long flags; + spinlock_t *lock; + + /* + * Workaround to stop racing between the fence signaling and handling + * the cb. The lock is static after initially setting it up, just make + * sure that the dma_fence structure isn't freed up. + */ + rcu_read_lock(); + lock = vm->last_tlb_flush->lock; + rcu_read_unlock(); + + spin_lock_irqsave(lock, flags); + spin_unlock_irqrestore(lock, flags); + return atomic64_read(&vm->tlb_seq); } +/* + * vm eviction_lock can be taken in MMU notifiers. Make sure no reclaim-FS + * happens while holding this lock anywhere to prevent deadlocks when + * an MMU notifier runs in reclaim-FS context. + */ +static inline void amdgpu_vm_eviction_lock(struct amdgpu_vm *vm) +{ + mutex_lock(&vm->eviction_lock); + vm->saved_flags = memalloc_noreclaim_save(); +} + +static inline bool amdgpu_vm_eviction_trylock(struct amdgpu_vm *vm) +{ + if (mutex_trylock(&vm->eviction_lock)) { + vm->saved_flags = memalloc_noreclaim_save(); + return true; + } + return false; +} + +static inline void amdgpu_vm_eviction_unlock(struct amdgpu_vm *vm) +{ + memalloc_noreclaim_restore(vm->saved_flags); + mutex_unlock(&vm->eviction_lock); +} + #endif diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c index 358b91243e37b74b1cda4a4097fef2c392428db1..b5f3bba851db8646119abfccf1edac3e15a9d485 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c @@ -597,7 +597,9 @@ static int amdgpu_vm_pt_alloc(struct amdgpu_device *adev, if (entry->bo) return 0; + amdgpu_vm_eviction_unlock(vm); r = amdgpu_vm_pt_create(adev, vm, cursor->level, immediate, &pt); + amdgpu_vm_eviction_lock(vm); if (r) return r; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c index 73a517bcf5c111e807976422dd8a9d7a8e2ae93d..80dd1343594c708ad8b68d54535092892dd6c6ee 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c @@ -435,7 +435,7 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man, if (place->flags & TTM_PL_FLAG_TOPDOWN) vres->flags |= DRM_BUDDY_TOPDOWN_ALLOCATION; - if (fpfn || lpfn != man->size) + if (fpfn || lpfn != mgr->mm.size) /* Allocate blocks in desired range */ vres->flags |= DRM_BUDDY_RANGE_ALLOCATION; diff --git a/drivers/gpu/drm/amd/amdgpu/mmsch_v4_0.h b/drivers/gpu/drm/amd/amdgpu/mmsch_v4_0.h index f772bb499f3e4c8c289fb636b13ffc440e0b76f2..0312c71c3af9722d8c66f5e17ba2a8044caabb6d 100644 --- a/drivers/gpu/drm/amd/amdgpu/mmsch_v4_0.h +++ b/drivers/gpu/drm/amd/amdgpu/mmsch_v4_0.h @@ -32,7 +32,6 @@ #define RB_ENABLED (1 << 0) #define RB4_ENABLED (1 << 1) -#define MMSCH_DOORBELL_OFFSET 0x8 #define MMSCH_VF_ENGINE_STATUS__PASS 0x1 diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c index 21d822b1d5896d1f810cbfd1b1f9579509aba895..88f9b327183ab8a3799217d6092179cde4317d65 100644 --- a/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c +++ b/drivers/gpu/drm/amd/amdgpu/psp_v13_0.c @@ -45,6 +45,7 @@ MODULE_FIRMWARE("amdgpu/psp_13_0_0_ta.bin"); MODULE_FIRMWARE("amdgpu/psp_13_0_7_sos.bin"); MODULE_FIRMWARE("amdgpu/psp_13_0_7_ta.bin"); MODULE_FIRMWARE("amdgpu/psp_13_0_10_sos.bin"); +MODULE_FIRMWARE("amdgpu/psp_13_0_10_ta.bin"); /* For large FW files the time to complete can be very long */ #define USBC_PD_POLLING_LIMIT_S 240 diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c index 897a5ce9c9da6f6f38e025ee0c0238bc9e8a9af3..dcc49b01bd59d251ad7fec106127dcd3ca61ae93 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c @@ -100,7 +100,6 @@ static int vcn_v4_0_sw_init(void *handle) struct amdgpu_ring *ring; struct amdgpu_device *adev = (struct amdgpu_device *)handle; int i, r; - int vcn_doorbell_index = 0; r = amdgpu_vcn_sw_init(adev); if (r) @@ -112,12 +111,6 @@ static int vcn_v4_0_sw_init(void *handle) if (r) return r; - if (amdgpu_sriov_vf(adev)) { - vcn_doorbell_index = adev->doorbell_index.vcn.vcn_ring0_1 - MMSCH_DOORBELL_OFFSET; - /* get DWORD offset */ - vcn_doorbell_index = vcn_doorbell_index << 1; - } - for (i = 0; i < adev->vcn.num_vcn_inst; i++) { volatile struct amdgpu_vcn4_fw_shared *fw_shared; @@ -135,7 +128,7 @@ static int vcn_v4_0_sw_init(void *handle) ring = &adev->vcn.inst[i].ring_enc[0]; ring->use_doorbell = true; if (amdgpu_sriov_vf(adev)) - ring->doorbell_index = vcn_doorbell_index + i * (adev->vcn.num_enc_rings + 1) + 1; + ring->doorbell_index = (adev->doorbell_index.vcn.vcn_ring0_1 << 1) + i * (adev->vcn.num_enc_rings + 1) + 1; else ring->doorbell_index = (adev->doorbell_index.vcn.vcn_ring0_1 << 1) + 2 + 8 * i; diff --git a/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler.h b/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler.h index c7118843db051ccaa86435a6a938f3541c985ceb..0c4c5499bb5cc4638b899ddfb27b7a134bbc36b4 100644 --- a/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler.h +++ b/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler.h @@ -2495,442 +2495,444 @@ static const uint32_t cwsr_trap_gfx10_hex[] = { 0xbf9f0000, 0x00000000, }; static const uint32_t cwsr_trap_gfx11_hex[] = { - 0xbfa00001, 0xbfa0021e, + 0xbfa00001, 0xbfa00221, 0xb0804006, 0xb8f8f802, 0x9178ff78, 0x00020006, - 0xb8fbf803, 0xbf0d9f6d, - 0xbfa20006, 0x8b6eff78, - 0x00002000, 0xbfa10009, - 0x8b6eff6d, 0x00ff0000, - 0xbfa2001e, 0x8b6eff7b, - 0x00000400, 0xbfa20041, - 0xbf830010, 0xb8fbf803, - 0xbfa0fffa, 0x8b6eff7b, - 0x00000900, 0xbfa20015, - 0x8b6eff7b, 0x000071ff, - 0xbfa10008, 0x8b6fff7b, - 0x00007080, 0xbfa10001, - 0xbeee1287, 0xb8eff801, - 0x846e8c6e, 0x8b6e6f6e, - 0xbfa2000a, 0x8b6eff6d, - 0x00ff0000, 0xbfa20007, - 0xb8eef801, 0x8b6eff6e, - 0x00000800, 0xbfa20003, + 0xb8fbf803, 0xbf0d9e6d, + 0xbfa10001, 0xbfbd0000, + 0xbf0d9f6d, 0xbfa20006, + 0x8b6eff78, 0x00002000, + 0xbfa10009, 0x8b6eff6d, + 0x00ff0000, 0xbfa2001e, 0x8b6eff7b, 0x00000400, - 0xbfa20026, 0xbefa4d82, - 0xbf89fc07, 0x84fa887a, - 0xf4005bbd, 0xf8000010, - 0xbf89fc07, 0x846e976e, - 0x9177ff77, 0x00800000, - 0x8c776e77, 0xf4045bbd, - 0xf8000000, 0xbf89fc07, - 0xf4045ebd, 0xf8000008, - 0xbf89fc07, 0x8bee6e6e, - 0xbfa10001, 0xbe80486e, - 0x8b6eff6d, 0x01ff0000, - 0xbfa20005, 0x8c78ff78, - 0x00002000, 0x80ec886c, - 0x82ed806d, 0xbfa00005, - 0x8b6eff6d, 0x01000000, - 0xbfa20002, 0x806c846c, - 0x826d806d, 0x8b6dff6d, - 0x0000ffff, 0x8bfe7e7e, - 0x8bea6a6a, 0xb978f802, - 0xbe804a6c, 0x8b6dff6d, - 0x0000ffff, 0xbefa0080, - 0xb97a0283, 0xbeee007e, - 0xbeef007f, 0xbefe0180, - 0xbefe4d84, 0xbf89fc07, - 0x8b7aff7f, 0x04000000, - 0x847a857a, 0x8c6d7a6d, - 0xbefa007e, 0x8b7bff7f, - 0x0000ffff, 0xbefe00c1, - 0xbeff00c1, 0xdca6c000, - 0x007a0000, 0x7e000280, - 0xbefe007a, 0xbeff007b, - 0xb8fb02dc, 0x847b997b, - 0xb8fa3b05, 0x807a817a, - 0xbf0d997b, 0xbfa20002, - 0x847a897a, 0xbfa00001, - 0x847a8a7a, 0xb8fb1e06, - 0x847b8a7b, 0x807a7b7a, + 0xbfa20041, 0xbf830010, + 0xb8fbf803, 0xbfa0fffa, + 0x8b6eff7b, 0x00000900, + 0xbfa20015, 0x8b6eff7b, + 0x000071ff, 0xbfa10008, + 0x8b6fff7b, 0x00007080, + 0xbfa10001, 0xbeee1287, + 0xb8eff801, 0x846e8c6e, + 0x8b6e6f6e, 0xbfa2000a, + 0x8b6eff6d, 0x00ff0000, + 0xbfa20007, 0xb8eef801, + 0x8b6eff6e, 0x00000800, + 0xbfa20003, 0x8b6eff7b, + 0x00000400, 0xbfa20026, + 0xbefa4d82, 0xbf89fc07, + 0x84fa887a, 0xf4005bbd, + 0xf8000010, 0xbf89fc07, + 0x846e976e, 0x9177ff77, + 0x00800000, 0x8c776e77, + 0xf4045bbd, 0xf8000000, + 0xbf89fc07, 0xf4045ebd, + 0xf8000008, 0xbf89fc07, + 0x8bee6e6e, 0xbfa10001, + 0xbe80486e, 0x8b6eff6d, + 0x01ff0000, 0xbfa20005, + 0x8c78ff78, 0x00002000, + 0x80ec886c, 0x82ed806d, + 0xbfa00005, 0x8b6eff6d, + 0x01000000, 0xbfa20002, + 0x806c846c, 0x826d806d, + 0x8b6dff6d, 0x0000ffff, + 0x8bfe7e7e, 0x8bea6a6a, + 0xb978f802, 0xbe804a6c, + 0x8b6dff6d, 0x0000ffff, + 0xbefa0080, 0xb97a0283, + 0xbeee007e, 0xbeef007f, + 0xbefe0180, 0xbefe4d84, + 0xbf89fc07, 0x8b7aff7f, + 0x04000000, 0x847a857a, + 0x8c6d7a6d, 0xbefa007e, 0x8b7bff7f, 0x0000ffff, - 0x807aff7a, 0x00000200, - 0x807a7e7a, 0x827b807b, - 0xd7610000, 0x00010870, - 0xd7610000, 0x00010a71, - 0xd7610000, 0x00010c72, - 0xd7610000, 0x00010e73, - 0xd7610000, 0x00011074, - 0xd7610000, 0x00011275, - 0xd7610000, 0x00011476, - 0xd7610000, 0x00011677, - 0xd7610000, 0x00011a79, - 0xd7610000, 0x00011c7e, - 0xd7610000, 0x00011e7f, - 0xbefe00ff, 0x00003fff, - 0xbeff0080, 0xdca6c040, - 0x007a0000, 0xd760007a, - 0x00011d00, 0xd760007b, - 0x00011f00, 0xbefe007a, - 0xbeff007b, 0xbef4007e, - 0x8b75ff7f, 0x0000ffff, - 0x8c75ff75, 0x00040000, - 0xbef60080, 0xbef700ff, - 0x10807fac, 0xbef1007d, - 0xbef00080, 0xb8f302dc, - 0x84739973, 0xbefe00c1, - 0x857d9973, 0x8b7d817d, - 0xbf06817d, 0xbfa20002, - 0xbeff0080, 0xbfa00002, - 0xbeff00c1, 0xbfa00009, + 0xbefe00c1, 0xbeff00c1, + 0xdca6c000, 0x007a0000, + 0x7e000280, 0xbefe007a, + 0xbeff007b, 0xb8fb02dc, + 0x847b997b, 0xb8fa3b05, + 0x807a817a, 0xbf0d997b, + 0xbfa20002, 0x847a897a, + 0xbfa00001, 0x847a8a7a, + 0xb8fb1e06, 0x847b8a7b, + 0x807a7b7a, 0x8b7bff7f, + 0x0000ffff, 0x807aff7a, + 0x00000200, 0x807a7e7a, + 0x827b807b, 0xd7610000, + 0x00010870, 0xd7610000, + 0x00010a71, 0xd7610000, + 0x00010c72, 0xd7610000, + 0x00010e73, 0xd7610000, + 0x00011074, 0xd7610000, + 0x00011275, 0xd7610000, + 0x00011476, 0xd7610000, + 0x00011677, 0xd7610000, + 0x00011a79, 0xd7610000, + 0x00011c7e, 0xd7610000, + 0x00011e7f, 0xbefe00ff, + 0x00003fff, 0xbeff0080, + 0xdca6c040, 0x007a0000, + 0xd760007a, 0x00011d00, + 0xd760007b, 0x00011f00, + 0xbefe007a, 0xbeff007b, + 0xbef4007e, 0x8b75ff7f, + 0x0000ffff, 0x8c75ff75, + 0x00040000, 0xbef60080, + 0xbef700ff, 0x10807fac, + 0xbef1007d, 0xbef00080, + 0xb8f302dc, 0x84739973, + 0xbefe00c1, 0x857d9973, + 0x8b7d817d, 0xbf06817d, + 0xbfa20002, 0xbeff0080, + 0xbfa00002, 0xbeff00c1, + 0xbfa00009, 0xbef600ff, + 0x01000000, 0xe0685080, + 0x701d0100, 0xe0685100, + 0x701d0200, 0xe0685180, + 0x701d0300, 0xbfa00008, 0xbef600ff, 0x01000000, - 0xe0685080, 0x701d0100, - 0xe0685100, 0x701d0200, - 0xe0685180, 0x701d0300, - 0xbfa00008, 0xbef600ff, - 0x01000000, 0xe0685100, - 0x701d0100, 0xe0685200, - 0x701d0200, 0xe0685300, - 0x701d0300, 0xb8f03b05, - 0x80708170, 0xbf0d9973, - 0xbfa20002, 0x84708970, - 0xbfa00001, 0x84708a70, - 0xb8fa1e06, 0x847a8a7a, - 0x80707a70, 0x8070ff70, - 0x00000200, 0xbef600ff, - 0x01000000, 0x7e000280, - 0x7e020280, 0x7e040280, - 0xbefd0080, 0xd7610002, - 0x0000fa71, 0x807d817d, - 0xd7610002, 0x0000fa6c, - 0x807d817d, 0x917aff6d, - 0x80000000, 0xd7610002, - 0x0000fa7a, 0x807d817d, - 0xd7610002, 0x0000fa6e, - 0x807d817d, 0xd7610002, - 0x0000fa6f, 0x807d817d, - 0xd7610002, 0x0000fa78, - 0x807d817d, 0xb8faf803, - 0xd7610002, 0x0000fa7a, - 0x807d817d, 0xd7610002, - 0x0000fa7b, 0x807d817d, - 0xb8f1f801, 0xd7610002, - 0x0000fa71, 0x807d817d, - 0xb8f1f814, 0xd7610002, - 0x0000fa71, 0x807d817d, - 0xb8f1f815, 0xd7610002, - 0x0000fa71, 0x807d817d, - 0xbefe00ff, 0x0000ffff, - 0xbeff0080, 0xe0685000, - 0x701d0200, 0xbefe00c1, + 0xe0685100, 0x701d0100, + 0xe0685200, 0x701d0200, + 0xe0685300, 0x701d0300, 0xb8f03b05, 0x80708170, 0xbf0d9973, 0xbfa20002, 0x84708970, 0xbfa00001, 0x84708a70, 0xb8fa1e06, 0x847a8a7a, 0x80707a70, + 0x8070ff70, 0x00000200, 0xbef600ff, 0x01000000, - 0xbef90080, 0xbefd0080, - 0xbf800000, 0xbe804100, - 0xbe824102, 0xbe844104, - 0xbe864106, 0xbe884108, - 0xbe8a410a, 0xbe8c410c, - 0xbe8e410e, 0xd7610002, - 0x0000f200, 0x80798179, - 0xd7610002, 0x0000f201, + 0x7e000280, 0x7e020280, + 0x7e040280, 0xbefd0080, + 0xd7610002, 0x0000fa71, + 0x807d817d, 0xd7610002, + 0x0000fa6c, 0x807d817d, + 0x917aff6d, 0x80000000, + 0xd7610002, 0x0000fa7a, + 0x807d817d, 0xd7610002, + 0x0000fa6e, 0x807d817d, + 0xd7610002, 0x0000fa6f, + 0x807d817d, 0xd7610002, + 0x0000fa78, 0x807d817d, + 0xb8faf803, 0xd7610002, + 0x0000fa7a, 0x807d817d, + 0xd7610002, 0x0000fa7b, + 0x807d817d, 0xb8f1f801, + 0xd7610002, 0x0000fa71, + 0x807d817d, 0xb8f1f814, + 0xd7610002, 0x0000fa71, + 0x807d817d, 0xb8f1f815, + 0xd7610002, 0x0000fa71, + 0x807d817d, 0xbefe00ff, + 0x0000ffff, 0xbeff0080, + 0xe0685000, 0x701d0200, + 0xbefe00c1, 0xb8f03b05, + 0x80708170, 0xbf0d9973, + 0xbfa20002, 0x84708970, + 0xbfa00001, 0x84708a70, + 0xb8fa1e06, 0x847a8a7a, + 0x80707a70, 0xbef600ff, + 0x01000000, 0xbef90080, + 0xbefd0080, 0xbf800000, + 0xbe804100, 0xbe824102, + 0xbe844104, 0xbe864106, + 0xbe884108, 0xbe8a410a, + 0xbe8c410c, 0xbe8e410e, + 0xd7610002, 0x0000f200, 0x80798179, 0xd7610002, - 0x0000f202, 0x80798179, - 0xd7610002, 0x0000f203, + 0x0000f201, 0x80798179, + 0xd7610002, 0x0000f202, 0x80798179, 0xd7610002, - 0x0000f204, 0x80798179, - 0xd7610002, 0x0000f205, + 0x0000f203, 0x80798179, + 0xd7610002, 0x0000f204, 0x80798179, 0xd7610002, - 0x0000f206, 0x80798179, - 0xd7610002, 0x0000f207, + 0x0000f205, 0x80798179, + 0xd7610002, 0x0000f206, 0x80798179, 0xd7610002, - 0x0000f208, 0x80798179, - 0xd7610002, 0x0000f209, + 0x0000f207, 0x80798179, + 0xd7610002, 0x0000f208, 0x80798179, 0xd7610002, - 0x0000f20a, 0x80798179, - 0xd7610002, 0x0000f20b, + 0x0000f209, 0x80798179, + 0xd7610002, 0x0000f20a, 0x80798179, 0xd7610002, - 0x0000f20c, 0x80798179, - 0xd7610002, 0x0000f20d, + 0x0000f20b, 0x80798179, + 0xd7610002, 0x0000f20c, 0x80798179, 0xd7610002, - 0x0000f20e, 0x80798179, - 0xd7610002, 0x0000f20f, - 0x80798179, 0xbf06a079, - 0xbfa10006, 0xe0685000, - 0x701d0200, 0x8070ff70, - 0x00000080, 0xbef90080, - 0x7e040280, 0x807d907d, - 0xbf0aff7d, 0x00000060, - 0xbfa2ffbc, 0xbe804100, - 0xbe824102, 0xbe844104, - 0xbe864106, 0xbe884108, - 0xbe8a410a, 0xd7610002, - 0x0000f200, 0x80798179, - 0xd7610002, 0x0000f201, + 0x0000f20d, 0x80798179, + 0xd7610002, 0x0000f20e, 0x80798179, 0xd7610002, - 0x0000f202, 0x80798179, - 0xd7610002, 0x0000f203, + 0x0000f20f, 0x80798179, + 0xbf06a079, 0xbfa10006, + 0xe0685000, 0x701d0200, + 0x8070ff70, 0x00000080, + 0xbef90080, 0x7e040280, + 0x807d907d, 0xbf0aff7d, + 0x00000060, 0xbfa2ffbc, + 0xbe804100, 0xbe824102, + 0xbe844104, 0xbe864106, + 0xbe884108, 0xbe8a410a, + 0xd7610002, 0x0000f200, 0x80798179, 0xd7610002, - 0x0000f204, 0x80798179, - 0xd7610002, 0x0000f205, + 0x0000f201, 0x80798179, + 0xd7610002, 0x0000f202, 0x80798179, 0xd7610002, - 0x0000f206, 0x80798179, - 0xd7610002, 0x0000f207, + 0x0000f203, 0x80798179, + 0xd7610002, 0x0000f204, 0x80798179, 0xd7610002, - 0x0000f208, 0x80798179, - 0xd7610002, 0x0000f209, + 0x0000f205, 0x80798179, + 0xd7610002, 0x0000f206, 0x80798179, 0xd7610002, - 0x0000f20a, 0x80798179, - 0xd7610002, 0x0000f20b, - 0x80798179, 0xe0685000, - 0x701d0200, 0xbefe00c1, - 0x857d9973, 0x8b7d817d, - 0xbf06817d, 0xbfa20002, - 0xbeff0080, 0xbfa00001, - 0xbeff00c1, 0xb8fb4306, - 0x8b7bc17b, 0xbfa10044, - 0xbfbd0000, 0x8b7aff6d, - 0x80000000, 0xbfa10040, - 0x847b867b, 0x847b827b, - 0xbef6007b, 0xb8f03b05, - 0x80708170, 0xbf0d9973, - 0xbfa20002, 0x84708970, - 0xbfa00001, 0x84708a70, - 0xb8fa1e06, 0x847a8a7a, - 0x80707a70, 0x8070ff70, - 0x00000200, 0x8070ff70, - 0x00000080, 0xbef600ff, - 0x01000000, 0xd71f0000, - 0x000100c1, 0xd7200000, - 0x000200c1, 0x16000084, - 0x857d9973, 0x8b7d817d, - 0xbf06817d, 0xbefd0080, - 0xbfa20012, 0xbe8300ff, - 0x00000080, 0xbf800000, - 0xbf800000, 0xbf800000, - 0xd8d80000, 0x01000000, - 0xbf890000, 0xe0685000, - 0x701d0100, 0x807d037d, - 0x80700370, 0xd5250000, - 0x0001ff00, 0x00000080, - 0xbf0a7b7d, 0xbfa2fff4, - 0xbfa00011, 0xbe8300ff, - 0x00000100, 0xbf800000, - 0xbf800000, 0xbf800000, - 0xd8d80000, 0x01000000, - 0xbf890000, 0xe0685000, - 0x701d0100, 0x807d037d, - 0x80700370, 0xd5250000, - 0x0001ff00, 0x00000100, - 0xbf0a7b7d, 0xbfa2fff4, + 0x0000f207, 0x80798179, + 0xd7610002, 0x0000f208, + 0x80798179, 0xd7610002, + 0x0000f209, 0x80798179, + 0xd7610002, 0x0000f20a, + 0x80798179, 0xd7610002, + 0x0000f20b, 0x80798179, + 0xe0685000, 0x701d0200, 0xbefe00c1, 0x857d9973, 0x8b7d817d, 0xbf06817d, - 0xbfa20004, 0xbef000ff, - 0x00000200, 0xbeff0080, - 0xbfa00003, 0xbef000ff, - 0x00000400, 0xbeff00c1, - 0xb8fb3b05, 0x807b817b, - 0x847b827b, 0x857d9973, + 0xbfa20002, 0xbeff0080, + 0xbfa00001, 0xbeff00c1, + 0xb8fb4306, 0x8b7bc17b, + 0xbfa10044, 0xbfbd0000, + 0x8b7aff6d, 0x80000000, + 0xbfa10040, 0x847b867b, + 0x847b827b, 0xbef6007b, + 0xb8f03b05, 0x80708170, + 0xbf0d9973, 0xbfa20002, + 0x84708970, 0xbfa00001, + 0x84708a70, 0xb8fa1e06, + 0x847a8a7a, 0x80707a70, + 0x8070ff70, 0x00000200, + 0x8070ff70, 0x00000080, + 0xbef600ff, 0x01000000, + 0xd71f0000, 0x000100c1, + 0xd7200000, 0x000200c1, + 0x16000084, 0x857d9973, 0x8b7d817d, 0xbf06817d, - 0xbfa20017, 0xbef600ff, - 0x01000000, 0xbefd0084, - 0xbf0a7b7d, 0xbfa10037, - 0x7e008700, 0x7e028701, - 0x7e048702, 0x7e068703, - 0xe0685000, 0x701d0000, - 0xe0685080, 0x701d0100, - 0xe0685100, 0x701d0200, - 0xe0685180, 0x701d0300, - 0x807d847d, 0x8070ff70, - 0x00000200, 0xbf0a7b7d, - 0xbfa2ffef, 0xbfa00025, + 0xbefd0080, 0xbfa20012, + 0xbe8300ff, 0x00000080, + 0xbf800000, 0xbf800000, + 0xbf800000, 0xd8d80000, + 0x01000000, 0xbf890000, + 0xe0685000, 0x701d0100, + 0x807d037d, 0x80700370, + 0xd5250000, 0x0001ff00, + 0x00000080, 0xbf0a7b7d, + 0xbfa2fff4, 0xbfa00011, + 0xbe8300ff, 0x00000100, + 0xbf800000, 0xbf800000, + 0xbf800000, 0xd8d80000, + 0x01000000, 0xbf890000, + 0xe0685000, 0x701d0100, + 0x807d037d, 0x80700370, + 0xd5250000, 0x0001ff00, + 0x00000100, 0xbf0a7b7d, + 0xbfa2fff4, 0xbefe00c1, + 0x857d9973, 0x8b7d817d, + 0xbf06817d, 0xbfa20004, + 0xbef000ff, 0x00000200, + 0xbeff0080, 0xbfa00003, + 0xbef000ff, 0x00000400, + 0xbeff00c1, 0xb8fb3b05, + 0x807b817b, 0x847b827b, + 0x857d9973, 0x8b7d817d, + 0xbf06817d, 0xbfa20017, 0xbef600ff, 0x01000000, 0xbefd0084, 0xbf0a7b7d, - 0xbfa10011, 0x7e008700, + 0xbfa10037, 0x7e008700, 0x7e028701, 0x7e048702, 0x7e068703, 0xe0685000, - 0x701d0000, 0xe0685100, - 0x701d0100, 0xe0685200, - 0x701d0200, 0xe0685300, + 0x701d0000, 0xe0685080, + 0x701d0100, 0xe0685100, + 0x701d0200, 0xe0685180, 0x701d0300, 0x807d847d, - 0x8070ff70, 0x00000400, + 0x8070ff70, 0x00000200, 0xbf0a7b7d, 0xbfa2ffef, - 0xb8fb1e06, 0x8b7bc17b, - 0xbfa1000c, 0x847b837b, - 0x807b7d7b, 0xbefe00c1, - 0xbeff0080, 0x7e008700, + 0xbfa00025, 0xbef600ff, + 0x01000000, 0xbefd0084, + 0xbf0a7b7d, 0xbfa10011, + 0x7e008700, 0x7e028701, + 0x7e048702, 0x7e068703, 0xe0685000, 0x701d0000, - 0x807d817d, 0x8070ff70, - 0x00000080, 0xbf0a7b7d, - 0xbfa2fff8, 0xbfa00146, - 0xbef4007e, 0x8b75ff7f, - 0x0000ffff, 0x8c75ff75, - 0x00040000, 0xbef60080, - 0xbef700ff, 0x10807fac, - 0xb8f202dc, 0x84729972, - 0x8b6eff7f, 0x04000000, - 0xbfa1003a, 0xbefe00c1, - 0x857d9972, 0x8b7d817d, - 0xbf06817d, 0xbfa20002, - 0xbeff0080, 0xbfa00001, - 0xbeff00c1, 0xb8ef4306, - 0x8b6fc16f, 0xbfa1002f, - 0x846f866f, 0x846f826f, - 0xbef6006f, 0xb8f83b05, - 0x80788178, 0xbf0d9972, - 0xbfa20002, 0x84788978, - 0xbfa00001, 0x84788a78, - 0xb8ee1e06, 0x846e8a6e, - 0x80786e78, 0x8078ff78, - 0x00000200, 0x8078ff78, - 0x00000080, 0xbef600ff, - 0x01000000, 0x857d9972, - 0x8b7d817d, 0xbf06817d, - 0xbefd0080, 0xbfa2000c, - 0xe0500000, 0x781d0000, - 0xbf8903f7, 0xdac00000, - 0x00000000, 0x807dff7d, - 0x00000080, 0x8078ff78, - 0x00000080, 0xbf0a6f7d, - 0xbfa2fff5, 0xbfa0000b, - 0xe0500000, 0x781d0000, - 0xbf8903f7, 0xdac00000, - 0x00000000, 0x807dff7d, - 0x00000100, 0x8078ff78, - 0x00000100, 0xbf0a6f7d, - 0xbfa2fff5, 0xbef80080, + 0xe0685100, 0x701d0100, + 0xe0685200, 0x701d0200, + 0xe0685300, 0x701d0300, + 0x807d847d, 0x8070ff70, + 0x00000400, 0xbf0a7b7d, + 0xbfa2ffef, 0xb8fb1e06, + 0x8b7bc17b, 0xbfa1000c, + 0x847b837b, 0x807b7d7b, + 0xbefe00c1, 0xbeff0080, + 0x7e008700, 0xe0685000, + 0x701d0000, 0x807d817d, + 0x8070ff70, 0x00000080, + 0xbf0a7b7d, 0xbfa2fff8, + 0xbfa00146, 0xbef4007e, + 0x8b75ff7f, 0x0000ffff, + 0x8c75ff75, 0x00040000, + 0xbef60080, 0xbef700ff, + 0x10807fac, 0xb8f202dc, + 0x84729972, 0x8b6eff7f, + 0x04000000, 0xbfa1003a, 0xbefe00c1, 0x857d9972, 0x8b7d817d, 0xbf06817d, 0xbfa20002, 0xbeff0080, 0xbfa00001, 0xbeff00c1, - 0xb8ef3b05, 0x806f816f, - 0x846f826f, 0x857d9972, - 0x8b7d817d, 0xbf06817d, - 0xbfa20024, 0xbef600ff, - 0x01000000, 0xbeee0078, + 0xb8ef4306, 0x8b6fc16f, + 0xbfa1002f, 0x846f866f, + 0x846f826f, 0xbef6006f, + 0xb8f83b05, 0x80788178, + 0xbf0d9972, 0xbfa20002, + 0x84788978, 0xbfa00001, + 0x84788a78, 0xb8ee1e06, + 0x846e8a6e, 0x80786e78, 0x8078ff78, 0x00000200, - 0xbefd0084, 0xbf0a6f7d, - 0xbfa10050, 0xe0505000, - 0x781d0000, 0xe0505080, - 0x781d0100, 0xe0505100, - 0x781d0200, 0xe0505180, - 0x781d0300, 0xbf8903f7, - 0x7e008500, 0x7e028501, - 0x7e048502, 0x7e068503, - 0x807d847d, 0x8078ff78, - 0x00000200, 0xbf0a6f7d, - 0xbfa2ffee, 0xe0505000, - 0x6e1d0000, 0xe0505080, - 0x6e1d0100, 0xe0505100, - 0x6e1d0200, 0xe0505180, - 0x6e1d0300, 0xbf8903f7, - 0xbfa00034, 0xbef600ff, - 0x01000000, 0xbeee0078, - 0x8078ff78, 0x00000400, - 0xbefd0084, 0xbf0a6f7d, - 0xbfa10012, 0xe0505000, - 0x781d0000, 0xe0505100, - 0x781d0100, 0xe0505200, - 0x781d0200, 0xe0505300, - 0x781d0300, 0xbf8903f7, - 0x7e008500, 0x7e028501, - 0x7e048502, 0x7e068503, - 0x807d847d, 0x8078ff78, - 0x00000400, 0xbf0a6f7d, - 0xbfa2ffee, 0xb8ef1e06, - 0x8b6fc16f, 0xbfa1000e, - 0x846f836f, 0x806f7d6f, - 0xbefe00c1, 0xbeff0080, + 0x8078ff78, 0x00000080, + 0xbef600ff, 0x01000000, + 0x857d9972, 0x8b7d817d, + 0xbf06817d, 0xbefd0080, + 0xbfa2000c, 0xe0500000, + 0x781d0000, 0xbf8903f7, + 0xdac00000, 0x00000000, + 0x807dff7d, 0x00000080, + 0x8078ff78, 0x00000080, + 0xbf0a6f7d, 0xbfa2fff5, + 0xbfa0000b, 0xe0500000, + 0x781d0000, 0xbf8903f7, + 0xdac00000, 0x00000000, + 0x807dff7d, 0x00000100, + 0x8078ff78, 0x00000100, + 0xbf0a6f7d, 0xbfa2fff5, + 0xbef80080, 0xbefe00c1, + 0x857d9972, 0x8b7d817d, + 0xbf06817d, 0xbfa20002, + 0xbeff0080, 0xbfa00001, + 0xbeff00c1, 0xb8ef3b05, + 0x806f816f, 0x846f826f, + 0x857d9972, 0x8b7d817d, + 0xbf06817d, 0xbfa20024, + 0xbef600ff, 0x01000000, + 0xbeee0078, 0x8078ff78, + 0x00000200, 0xbefd0084, + 0xbf0a6f7d, 0xbfa10050, 0xe0505000, 0x781d0000, + 0xe0505080, 0x781d0100, + 0xe0505100, 0x781d0200, + 0xe0505180, 0x781d0300, 0xbf8903f7, 0x7e008500, - 0x807d817d, 0x8078ff78, - 0x00000080, 0xbf0a6f7d, - 0xbfa2fff7, 0xbeff00c1, + 0x7e028501, 0x7e048502, + 0x7e068503, 0x807d847d, + 0x8078ff78, 0x00000200, + 0xbf0a6f7d, 0xbfa2ffee, 0xe0505000, 0x6e1d0000, - 0xe0505100, 0x6e1d0100, - 0xe0505200, 0x6e1d0200, - 0xe0505300, 0x6e1d0300, - 0xbf8903f7, 0xb8f83b05, - 0x80788178, 0xbf0d9972, - 0xbfa20002, 0x84788978, - 0xbfa00001, 0x84788a78, - 0xb8ee1e06, 0x846e8a6e, - 0x80786e78, 0x8078ff78, - 0x00000200, 0x80f8ff78, - 0x00000050, 0xbef600ff, - 0x01000000, 0xbefd00ff, - 0x0000006c, 0x80f89078, - 0xf428403a, 0xf0000000, - 0xbf89fc07, 0x80fd847d, - 0xbf800000, 0xbe804300, - 0xbe824302, 0x80f8a078, - 0xf42c403a, 0xf0000000, - 0xbf89fc07, 0x80fd887d, - 0xbf800000, 0xbe804300, - 0xbe824302, 0xbe844304, - 0xbe864306, 0x80f8c078, - 0xf430403a, 0xf0000000, - 0xbf89fc07, 0x80fd907d, - 0xbf800000, 0xbe804300, - 0xbe824302, 0xbe844304, - 0xbe864306, 0xbe884308, - 0xbe8a430a, 0xbe8c430c, - 0xbe8e430e, 0xbf06807d, - 0xbfa1fff0, 0xb980f801, - 0x00000000, 0xbfbd0000, + 0xe0505080, 0x6e1d0100, + 0xe0505100, 0x6e1d0200, + 0xe0505180, 0x6e1d0300, + 0xbf8903f7, 0xbfa00034, + 0xbef600ff, 0x01000000, + 0xbeee0078, 0x8078ff78, + 0x00000400, 0xbefd0084, + 0xbf0a6f7d, 0xbfa10012, + 0xe0505000, 0x781d0000, + 0xe0505100, 0x781d0100, + 0xe0505200, 0x781d0200, + 0xe0505300, 0x781d0300, + 0xbf8903f7, 0x7e008500, + 0x7e028501, 0x7e048502, + 0x7e068503, 0x807d847d, + 0x8078ff78, 0x00000400, + 0xbf0a6f7d, 0xbfa2ffee, + 0xb8ef1e06, 0x8b6fc16f, + 0xbfa1000e, 0x846f836f, + 0x806f7d6f, 0xbefe00c1, + 0xbeff0080, 0xe0505000, + 0x781d0000, 0xbf8903f7, + 0x7e008500, 0x807d817d, + 0x8078ff78, 0x00000080, + 0xbf0a6f7d, 0xbfa2fff7, + 0xbeff00c1, 0xe0505000, + 0x6e1d0000, 0xe0505100, + 0x6e1d0100, 0xe0505200, + 0x6e1d0200, 0xe0505300, + 0x6e1d0300, 0xbf8903f7, 0xb8f83b05, 0x80788178, 0xbf0d9972, 0xbfa20002, 0x84788978, 0xbfa00001, 0x84788a78, 0xb8ee1e06, 0x846e8a6e, 0x80786e78, 0x8078ff78, 0x00000200, + 0x80f8ff78, 0x00000050, 0xbef600ff, 0x01000000, - 0xf4205bfa, 0xf0000000, - 0x80788478, 0xf4205b3a, + 0xbefd00ff, 0x0000006c, + 0x80f89078, 0xf428403a, + 0xf0000000, 0xbf89fc07, + 0x80fd847d, 0xbf800000, + 0xbe804300, 0xbe824302, + 0x80f8a078, 0xf42c403a, + 0xf0000000, 0xbf89fc07, + 0x80fd887d, 0xbf800000, + 0xbe804300, 0xbe824302, + 0xbe844304, 0xbe864306, + 0x80f8c078, 0xf430403a, + 0xf0000000, 0xbf89fc07, + 0x80fd907d, 0xbf800000, + 0xbe804300, 0xbe824302, + 0xbe844304, 0xbe864306, + 0xbe884308, 0xbe8a430a, + 0xbe8c430c, 0xbe8e430e, + 0xbf06807d, 0xbfa1fff0, + 0xb980f801, 0x00000000, + 0xbfbd0000, 0xb8f83b05, + 0x80788178, 0xbf0d9972, + 0xbfa20002, 0x84788978, + 0xbfa00001, 0x84788a78, + 0xb8ee1e06, 0x846e8a6e, + 0x80786e78, 0x8078ff78, + 0x00000200, 0xbef600ff, + 0x01000000, 0xf4205bfa, 0xf0000000, 0x80788478, - 0xf4205b7a, 0xf0000000, - 0x80788478, 0xf4205c3a, + 0xf4205b3a, 0xf0000000, + 0x80788478, 0xf4205b7a, 0xf0000000, 0x80788478, - 0xf4205c7a, 0xf0000000, - 0x80788478, 0xf4205eba, + 0xf4205c3a, 0xf0000000, + 0x80788478, 0xf4205c7a, 0xf0000000, 0x80788478, - 0xf4205efa, 0xf0000000, - 0x80788478, 0xf4205e7a, + 0xf4205eba, 0xf0000000, + 0x80788478, 0xf4205efa, 0xf0000000, 0x80788478, - 0xf4205cfa, 0xf0000000, - 0x80788478, 0xf4205bba, + 0xf4205e7a, 0xf0000000, + 0x80788478, 0xf4205cfa, 0xf0000000, 0x80788478, - 0xbf89fc07, 0xb96ef814, 0xf4205bba, 0xf0000000, 0x80788478, 0xbf89fc07, - 0xb96ef815, 0xbefd006f, - 0xbefe0070, 0xbeff0071, - 0x8b6f7bff, 0x000003ff, - 0xb96f4803, 0x8b6f7bff, - 0xfffff800, 0x856f8b6f, - 0xb96fa2c3, 0xb973f801, - 0xb8ee3b05, 0x806e816e, - 0xbf0d9972, 0xbfa20002, - 0x846e896e, 0xbfa00001, - 0x846e8a6e, 0xb8ef1e06, - 0x846f8a6f, 0x806e6f6e, - 0x806eff6e, 0x00000200, - 0x806e746e, 0x826f8075, - 0x8b6fff6f, 0x0000ffff, - 0xf4085c37, 0xf8000050, - 0xf4085d37, 0xf8000060, - 0xf4005e77, 0xf8000074, - 0xbf89fc07, 0x8b6dff6d, - 0x0000ffff, 0x8bfe7e7e, - 0x8bea6a6a, 0xb8eef802, - 0xbf0d866e, 0xbfa20002, - 0xb97af802, 0xbe80486c, - 0xb97af802, 0xbe804a6c, - 0xbfb00000, 0xbf9f0000, + 0xb96ef814, 0xf4205bba, + 0xf0000000, 0x80788478, + 0xbf89fc07, 0xb96ef815, + 0xbefd006f, 0xbefe0070, + 0xbeff0071, 0x8b6f7bff, + 0x000003ff, 0xb96f4803, + 0x8b6f7bff, 0xfffff800, + 0x856f8b6f, 0xb96fa2c3, + 0xb973f801, 0xb8ee3b05, + 0x806e816e, 0xbf0d9972, + 0xbfa20002, 0x846e896e, + 0xbfa00001, 0x846e8a6e, + 0xb8ef1e06, 0x846f8a6f, + 0x806e6f6e, 0x806eff6e, + 0x00000200, 0x806e746e, + 0x826f8075, 0x8b6fff6f, + 0x0000ffff, 0xf4085c37, + 0xf8000050, 0xf4085d37, + 0xf8000060, 0xf4005e77, + 0xf8000074, 0xbf89fc07, + 0x8b6dff6d, 0x0000ffff, + 0x8bfe7e7e, 0x8bea6a6a, + 0xb8eef802, 0xbf0d866e, + 0xbfa20002, 0xb97af802, + 0xbe80486c, 0xb97af802, + 0xbe804a6c, 0xbfb00000, 0xbf9f0000, 0xbf9f0000, 0xbf9f0000, 0xbf9f0000, + 0xbf9f0000, 0x00000000, }; diff --git a/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler_gfx10.asm b/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler_gfx10.asm index 0f81670f6f9c6b9f11bfc880d8184565a5e5e04d..8b92c33c2a7c5c4cb412d150c7ec5b67f83b52a5 100644 --- a/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler_gfx10.asm +++ b/drivers/gpu/drm/amd/amdkfd/cwsr_trap_handler_gfx10.asm @@ -186,6 +186,12 @@ L_SKIP_RESTORE: s_getreg_b32 s_save_trapsts, hwreg(HW_REG_TRAPSTS) #if SW_SA_TRAP + // If ttmp1[30] is set then issue s_barrier to unblock dependent waves. + s_bitcmp1_b32 s_save_pc_hi, 30 + s_cbranch_scc0 L_TRAP_NO_BARRIER + s_barrier + +L_TRAP_NO_BARRIER: // If ttmp1[31] is set then trap may occur early. // Spin wait until SAVECTX exception is raised. s_bitcmp1_b32 s_save_pc_hi, 31 diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c index 5feaba6a77de48a1e521d4488b954d5a9c174e4f..6d291aa6386bd7561a6ed87d5c66ed9409fe2521 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c @@ -1950,7 +1950,7 @@ static int criu_checkpoint(struct file *filep, { int ret; uint32_t num_devices, num_bos, num_objects; - uint64_t priv_size, priv_offset = 0; + uint64_t priv_size, priv_offset = 0, bo_priv_offset; if (!args->devices || !args->bos || !args->priv_data) return -EINVAL; @@ -1994,38 +1994,34 @@ static int criu_checkpoint(struct file *filep, if (ret) goto exit_unlock; - ret = criu_checkpoint_bos(p, num_bos, (uint8_t __user *)args->bos, - (uint8_t __user *)args->priv_data, &priv_offset); - if (ret) - goto exit_unlock; + /* Leave room for BOs in the private data. They need to be restored + * before events, but we checkpoint them last to simplify the error + * handling. + */ + bo_priv_offset = priv_offset; + priv_offset += num_bos * sizeof(struct kfd_criu_bo_priv_data); if (num_objects) { ret = kfd_criu_checkpoint_queues(p, (uint8_t __user *)args->priv_data, &priv_offset); if (ret) - goto close_bo_fds; + goto exit_unlock; ret = kfd_criu_checkpoint_events(p, (uint8_t __user *)args->priv_data, &priv_offset); if (ret) - goto close_bo_fds; + goto exit_unlock; ret = kfd_criu_checkpoint_svm(p, (uint8_t __user *)args->priv_data, &priv_offset); if (ret) - goto close_bo_fds; + goto exit_unlock; } -close_bo_fds: - if (ret) { - /* If IOCTL returns err, user assumes all FDs opened in criu_dump_bos are closed */ - uint32_t i; - struct kfd_criu_bo_bucket *bo_buckets = (struct kfd_criu_bo_bucket *) args->bos; - - for (i = 0; i < num_bos; i++) { - if (bo_buckets[i].alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM) - close_fd(bo_buckets[i].dmabuf_fd); - } - } + /* This must be the last thing in this function that can fail. + * Otherwise we leak dmabuf file descriptors. + */ + ret = criu_checkpoint_bos(p, num_bos, (uint8_t __user *)args->bos, + (uint8_t __user *)args->priv_data, &bo_priv_offset); exit_unlock: mutex_unlock(&p->mutex); diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c index 83e3ce9f604911b554f5e1a600e1dee49db02b3a..729d26d648af3b7795ab45a090fc332809f4e3c4 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c @@ -506,6 +506,7 @@ int kfd_criu_restore_event(struct file *devkfd, ret = create_other_event(p, ev, &ev_priv->event_id); break; } + mutex_unlock(&p->event_mutex); exit: if (ret) @@ -513,8 +514,6 @@ int kfd_criu_restore_event(struct file *devkfd, kfree(ev_priv); - mutex_unlock(&p->event_mutex); - return ret; } diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c index 2797029bd50015f421a1ff74f03ddf37564ccc8f..22b077ac9a19623d478507d50295e9cbe0f253fc 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_migrate.c @@ -973,12 +973,10 @@ static vm_fault_t svm_migrate_to_ram(struct vm_fault *vmf) out_unlock_svms: mutex_unlock(&p->svms.lock); out_unref_process: + pr_debug("CPU fault svms 0x%p address 0x%lx done\n", &p->svms, addr); kfd_unref_process(p); out_mmput: mmput(mm); - - pr_debug("CPU fault svms 0x%p address 0x%lx done\n", &p->svms, addr); - return r ? VM_FAULT_SIGBUS : 0; } diff --git a/drivers/gpu/drm/amd/display/Kconfig b/drivers/gpu/drm/amd/display/Kconfig index 6925e0280dbe62110616321145f8363d89926d06..f4f3d2665a6b20b6c3027bded60207c41f6c3516 100644 --- a/drivers/gpu/drm/amd/display/Kconfig +++ b/drivers/gpu/drm/amd/display/Kconfig @@ -5,6 +5,7 @@ menu "Display Engine Configuration" config DRM_AMD_DC bool "AMD DC - Enable new display engine" default y + depends on BROKEN || !CC_IS_CLANG || X86_64 || SPARC64 || ARM64 select SND_HDA_COMPONENT if SND_HDA_CORE select DRM_AMD_DC_DCN if (X86 || PPC_LONG_DOUBLE_128) help @@ -12,6 +13,12 @@ config DRM_AMD_DC support for AMDGPU. This adds required support for Vega and Raven ASICs. + calculate_bandwidth() is presently broken on all !(X86_64 || SPARC64 || ARM64) + architectures built with Clang (all released versions), whereby the stack + frame gets blown up to well over 5k. This would cause an immediate kernel + panic on most architectures. We'll revert this when the following bug report + has been resolved: https://github.com/llvm/llvm-project/issues/41896. + config DRM_AMD_DC_DCN def_bool n help diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index c053cb79cd063eb3f9eab2e5a6fa2541f7d0ddc9..512c32327eb11c514e5e28335b02588a4a6aaf1d 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -147,6 +147,14 @@ MODULE_FIRMWARE(FIRMWARE_NAVI12_DMCU); /* Number of bytes in PSP footer for firmware. */ #define PSP_FOOTER_BYTES 0x100 +/* + * DMUB Async to Sync Mechanism Status + */ +#define DMUB_ASYNC_TO_SYNC_ACCESS_FAIL 1 +#define DMUB_ASYNC_TO_SYNC_ACCESS_TIMEOUT 2 +#define DMUB_ASYNC_TO_SYNC_ACCESS_SUCCESS 3 +#define DMUB_ASYNC_TO_SYNC_ACCESS_INVALID 4 + /** * DOC: overview * @@ -1364,7 +1372,44 @@ static const struct dmi_system_id hpd_disconnect_quirk_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "Precision 3460"), }, }, + { + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex Tower Plus 7010"), + }, + }, + { + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex Tower 7010"), + }, + }, + { + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex SFF Plus 7010"), + }, + }, + { + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex SFF 7010"), + }, + }, + { + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex Micro Plus 7010"), + }, + }, + { + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex Micro 7010"), + }, + }, {} + /* TODO: refactor this from a fixed table to a dynamic option */ }; static void retrieve_dmi_info(struct amdgpu_display_manager *dm) @@ -1549,6 +1594,9 @@ static int amdgpu_dm_init(struct amdgpu_device *adev) adev->dm.dc->debug.visual_confirm = amdgpu_dc_visual_confirm; + /* TODO: Remove after DP2 receiver gets proper support of Cable ID feature */ + adev->dm.dc->debug.ignore_cable_id = true; + r = dm_dmub_hw_init(adev); if (r) { DRM_ERROR("DMUB interface failed to initialize: status=%d\n", r); @@ -1634,12 +1682,6 @@ static int amdgpu_dm_init(struct amdgpu_device *adev) } } - if (amdgpu_dm_initialize_drm_device(adev)) { - DRM_ERROR( - "amdgpu: failed to initialize sw for display support.\n"); - goto error; - } - /* Enable outbox notification only after IRQ handlers are registered and DMUB is alive. * It is expected that DMUB will resend any pending notifications at this point, for * example HPD from DPIA. @@ -1647,6 +1689,12 @@ static int amdgpu_dm_init(struct amdgpu_device *adev) if (dc_is_dmub_outbox_supported(adev->dm.dc)) dc_enable_dmub_outbox(adev->dm.dc); + if (amdgpu_dm_initialize_drm_device(adev)) { + DRM_ERROR( + "amdgpu: failed to initialize sw for display support.\n"); + goto error; + } + /* create fake encoders for MST */ dm_dp_create_fake_mst_encoders(adev); @@ -6464,7 +6512,7 @@ static int dm_update_mst_vcpi_slots_for_dsc(struct drm_atomic_state *state, struct drm_connector_state *new_con_state; struct amdgpu_dm_connector *aconnector; struct dm_connector_state *dm_conn_state; - int i, j; + int i, j, ret; int vcpi, pbn_div, pbn, slot_num = 0; for_each_new_connector_in_state(state, connector, new_con_state, i) { @@ -6511,8 +6559,11 @@ static int dm_update_mst_vcpi_slots_for_dsc(struct drm_atomic_state *state, dm_conn_state->pbn = pbn; dm_conn_state->vcpi_slots = slot_num; - drm_dp_mst_atomic_enable_dsc(state, aconnector->port, dm_conn_state->pbn, - false); + ret = drm_dp_mst_atomic_enable_dsc(state, aconnector->port, + dm_conn_state->pbn, false); + if (ret < 0) + return ret; + continue; } @@ -7619,9 +7670,10 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state, bundle->surface_updates[planes_count].plane_info = &bundle->plane_infos[planes_count]; - fill_dc_dirty_rects(plane, old_plane_state, new_plane_state, - new_crtc_state, - &bundle->flip_addrs[planes_count]); + if (acrtc_state->stream->link->psr_settings.psr_feature_enabled) + fill_dc_dirty_rects(plane, old_plane_state, + new_plane_state, new_crtc_state, + &bundle->flip_addrs[planes_count]); /* * Only allow immediate flips for fast updates that don't @@ -9525,10 +9577,9 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, #if defined(CONFIG_DRM_AMD_DC_DCN) if (dc_resource_is_dsc_encoding_supported(dc)) { - if (!pre_validate_dsc(state, &dm_state, vars)) { - ret = -EINVAL; + ret = pre_validate_dsc(state, &dm_state, vars); + if (ret != 0) goto fail; - } } #endif @@ -9623,9 +9674,9 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, } #if defined(CONFIG_DRM_AMD_DC_DCN) - if (!compute_mst_dsc_configs_for_state(state, dm_state->context, vars)) { + ret = compute_mst_dsc_configs_for_state(state, dm_state->context, vars); + if (ret) { DRM_DEBUG_DRIVER("compute_mst_dsc_configs_for_state() failed\n"); - ret = -EINVAL; goto fail; } @@ -10105,6 +10156,8 @@ static int amdgpu_dm_set_dmub_async_sync_status(bool is_cmd_aux, *operation_result = AUX_RET_ERROR_TIMEOUT; } else if (status_type == DMUB_ASYNC_TO_SYNC_ACCESS_FAIL) { *operation_result = AUX_RET_ERROR_ENGINE_ACQUIRE; + } else if (status_type == DMUB_ASYNC_TO_SYNC_ACCESS_INVALID) { + *operation_result = AUX_RET_ERROR_INVALID_REPLY; } else { *operation_result = AUX_RET_ERROR_UNKNOWN; } @@ -10152,6 +10205,16 @@ int amdgpu_dm_process_dmub_aux_transfer_sync(bool is_cmd_aux, struct dc_context payload->reply[0] = adev->dm.dmub_notify->aux_reply.command; if (!payload->write && adev->dm.dmub_notify->aux_reply.length && payload->reply[0] == AUX_TRANSACTION_REPLY_AUX_ACK) { + + if (payload->length != adev->dm.dmub_notify->aux_reply.length) { + DRM_WARN("invalid read from DPIA AUX %x(%d) got length %d!\n", + payload->address, payload->length, + adev->dm.dmub_notify->aux_reply.length); + return amdgpu_dm_set_dmub_async_sync_status(is_cmd_aux, ctx, + DMUB_ASYNC_TO_SYNC_ACCESS_INVALID, + (uint32_t *)operation_result); + } + memcpy(payload->data, adev->dm.dmub_notify->aux_reply.data, adev->dm.dmub_notify->aux_reply.length); } diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h index b5ce15c43bcc1667ea79fbc8da5247f364738280..635c398fcefe7bb1a70858dcfe5b805fc19a47f0 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h @@ -50,12 +50,6 @@ #define AMDGPU_DMUB_NOTIFICATION_MAX 5 -/* - * DMUB Async to Sync Mechanism Status - */ -#define DMUB_ASYNC_TO_SYNC_ACCESS_FAIL 1 -#define DMUB_ASYNC_TO_SYNC_ACCESS_TIMEOUT 2 -#define DMUB_ASYNC_TO_SYNC_ACCESS_SUCCESS 3 /* #include "include/amdgpu_dal_power_if.h" #include "amdgpu_dm_irq.h" diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c index 594fe8a4d02b02f3ccb2b9852cfd60b90697ddfe..64dd029702926f70c32b5fd370d9c3ca8ef5bccd 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c @@ -412,7 +412,7 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm, { struct amdgpu_crtc *acrtc = NULL; struct drm_plane *cursor_plane; - + bool is_dcn; int res = -ENOMEM; cursor_plane = kzalloc(sizeof(*cursor_plane), GFP_KERNEL); @@ -450,8 +450,14 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm, acrtc->otg_inst = -1; dm->adev->mode_info.crtcs[crtc_index] = acrtc; - drm_crtc_enable_color_mgmt(&acrtc->base, MAX_COLOR_LUT_ENTRIES, + + /* Don't enable DRM CRTC degamma property for DCE since it doesn't + * support programmable degamma anywhere. + */ + is_dcn = dm->adev->dm.dc->caps.color.dpp.dcn_arch; + drm_crtc_enable_color_mgmt(&acrtc->base, is_dcn ? MAX_COLOR_LUT_ENTRIES : 0, true, MAX_COLOR_LUT_ENTRIES); + drm_mode_crtc_set_gamma_size(&acrtc->base, MAX_COLOR_LEGACY_LUT_ENTRIES); return 0; diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c index 6ff96b4bdda5c06e1d8b3daa93e480fe393d80ee..6483ba266893d33067a1b2a98905d3e737746a41 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c @@ -703,13 +703,13 @@ static int bpp_x16_from_pbn(struct dsc_mst_fairness_params param, int pbn) return dsc_config.bits_per_pixel; } -static bool increase_dsc_bpp(struct drm_atomic_state *state, - struct drm_dp_mst_topology_state *mst_state, - struct dc_link *dc_link, - struct dsc_mst_fairness_params *params, - struct dsc_mst_fairness_vars *vars, - int count, - int k) +static int increase_dsc_bpp(struct drm_atomic_state *state, + struct drm_dp_mst_topology_state *mst_state, + struct dc_link *dc_link, + struct dsc_mst_fairness_params *params, + struct dsc_mst_fairness_vars *vars, + int count, + int k) { int i; bool bpp_increased[MAX_PIPES]; @@ -719,6 +719,7 @@ static bool increase_dsc_bpp(struct drm_atomic_state *state, int remaining_to_increase = 0; int link_timeslots_used; int fair_pbn_alloc; + int ret = 0; for (i = 0; i < count; i++) { if (vars[i + k].dsc_enabled) { @@ -757,52 +758,60 @@ static bool increase_dsc_bpp(struct drm_atomic_state *state, if (initial_slack[next_index] > fair_pbn_alloc) { vars[next_index].pbn += fair_pbn_alloc; - if (drm_dp_atomic_find_time_slots(state, - params[next_index].port->mgr, - params[next_index].port, - vars[next_index].pbn) < 0) - return false; - if (!drm_dp_mst_atomic_check(state)) { + ret = drm_dp_atomic_find_time_slots(state, + params[next_index].port->mgr, + params[next_index].port, + vars[next_index].pbn); + if (ret < 0) + return ret; + + ret = drm_dp_mst_atomic_check(state); + if (ret == 0) { vars[next_index].bpp_x16 = bpp_x16_from_pbn(params[next_index], vars[next_index].pbn); } else { vars[next_index].pbn -= fair_pbn_alloc; - if (drm_dp_atomic_find_time_slots(state, - params[next_index].port->mgr, - params[next_index].port, - vars[next_index].pbn) < 0) - return false; + ret = drm_dp_atomic_find_time_slots(state, + params[next_index].port->mgr, + params[next_index].port, + vars[next_index].pbn); + if (ret < 0) + return ret; } } else { vars[next_index].pbn += initial_slack[next_index]; - if (drm_dp_atomic_find_time_slots(state, - params[next_index].port->mgr, - params[next_index].port, - vars[next_index].pbn) < 0) - return false; - if (!drm_dp_mst_atomic_check(state)) { + ret = drm_dp_atomic_find_time_slots(state, + params[next_index].port->mgr, + params[next_index].port, + vars[next_index].pbn); + if (ret < 0) + return ret; + + ret = drm_dp_mst_atomic_check(state); + if (ret == 0) { vars[next_index].bpp_x16 = params[next_index].bw_range.max_target_bpp_x16; } else { vars[next_index].pbn -= initial_slack[next_index]; - if (drm_dp_atomic_find_time_slots(state, - params[next_index].port->mgr, - params[next_index].port, - vars[next_index].pbn) < 0) - return false; + ret = drm_dp_atomic_find_time_slots(state, + params[next_index].port->mgr, + params[next_index].port, + vars[next_index].pbn); + if (ret < 0) + return ret; } } bpp_increased[next_index] = true; remaining_to_increase--; } - return true; + return 0; } -static bool try_disable_dsc(struct drm_atomic_state *state, - struct dc_link *dc_link, - struct dsc_mst_fairness_params *params, - struct dsc_mst_fairness_vars *vars, - int count, - int k) +static int try_disable_dsc(struct drm_atomic_state *state, + struct dc_link *dc_link, + struct dsc_mst_fairness_params *params, + struct dsc_mst_fairness_vars *vars, + int count, + int k) { int i; bool tried[MAX_PIPES]; @@ -810,6 +819,7 @@ static bool try_disable_dsc(struct drm_atomic_state *state, int max_kbps_increase; int next_index; int remaining_to_try = 0; + int ret; for (i = 0; i < count; i++) { if (vars[i + k].dsc_enabled @@ -840,49 +850,52 @@ static bool try_disable_dsc(struct drm_atomic_state *state, break; vars[next_index].pbn = kbps_to_peak_pbn(params[next_index].bw_range.stream_kbps); - if (drm_dp_atomic_find_time_slots(state, - params[next_index].port->mgr, - params[next_index].port, - vars[next_index].pbn) < 0) - return false; + ret = drm_dp_atomic_find_time_slots(state, + params[next_index].port->mgr, + params[next_index].port, + vars[next_index].pbn); + if (ret < 0) + return ret; - if (!drm_dp_mst_atomic_check(state)) { + ret = drm_dp_mst_atomic_check(state); + if (ret == 0) { vars[next_index].dsc_enabled = false; vars[next_index].bpp_x16 = 0; } else { vars[next_index].pbn = kbps_to_peak_pbn(params[next_index].bw_range.max_kbps); - if (drm_dp_atomic_find_time_slots(state, - params[next_index].port->mgr, - params[next_index].port, - vars[next_index].pbn) < 0) - return false; + ret = drm_dp_atomic_find_time_slots(state, + params[next_index].port->mgr, + params[next_index].port, + vars[next_index].pbn); + if (ret < 0) + return ret; } tried[next_index] = true; remaining_to_try--; } - return true; + return 0; } -static bool compute_mst_dsc_configs_for_link(struct drm_atomic_state *state, - struct dc_state *dc_state, - struct dc_link *dc_link, - struct dsc_mst_fairness_vars *vars, - struct drm_dp_mst_topology_mgr *mgr, - int *link_vars_start_index) +static int compute_mst_dsc_configs_for_link(struct drm_atomic_state *state, + struct dc_state *dc_state, + struct dc_link *dc_link, + struct dsc_mst_fairness_vars *vars, + struct drm_dp_mst_topology_mgr *mgr, + int *link_vars_start_index) { struct dc_stream_state *stream; struct dsc_mst_fairness_params params[MAX_PIPES]; struct amdgpu_dm_connector *aconnector; struct drm_dp_mst_topology_state *mst_state = drm_atomic_get_mst_topology_state(state, mgr); int count = 0; - int i, k; + int i, k, ret; bool debugfs_overwrite = false; memset(params, 0, sizeof(params)); if (IS_ERR(mst_state)) - return false; + return PTR_ERR(mst_state); mst_state->pbn_div = dm_mst_get_pbn_divider(dc_link); #if defined(CONFIG_DRM_AMD_DC_DCN) @@ -933,7 +946,7 @@ static bool compute_mst_dsc_configs_for_link(struct drm_atomic_state *state, if (count == 0) { ASSERT(0); - return true; + return 0; } /* k is start index of vars for current phy link used by mst hub */ @@ -947,13 +960,17 @@ static bool compute_mst_dsc_configs_for_link(struct drm_atomic_state *state, vars[i + k].pbn = kbps_to_peak_pbn(params[i].bw_range.stream_kbps); vars[i + k].dsc_enabled = false; vars[i + k].bpp_x16 = 0; - if (drm_dp_atomic_find_time_slots(state, params[i].port->mgr, params[i].port, - vars[i + k].pbn) < 0) - return false; + ret = drm_dp_atomic_find_time_slots(state, params[i].port->mgr, params[i].port, + vars[i + k].pbn); + if (ret < 0) + return ret; } - if (!drm_dp_mst_atomic_check(state) && !debugfs_overwrite) { + ret = drm_dp_mst_atomic_check(state); + if (ret == 0 && !debugfs_overwrite) { set_dsc_configs_from_fairness_vars(params, vars, count, k); - return true; + return 0; + } else if (ret != -ENOSPC) { + return ret; } /* Try max compression */ @@ -962,31 +979,36 @@ static bool compute_mst_dsc_configs_for_link(struct drm_atomic_state *state, vars[i + k].pbn = kbps_to_peak_pbn(params[i].bw_range.min_kbps); vars[i + k].dsc_enabled = true; vars[i + k].bpp_x16 = params[i].bw_range.min_target_bpp_x16; - if (drm_dp_atomic_find_time_slots(state, params[i].port->mgr, - params[i].port, vars[i + k].pbn) < 0) - return false; + ret = drm_dp_atomic_find_time_slots(state, params[i].port->mgr, + params[i].port, vars[i + k].pbn); + if (ret < 0) + return ret; } else { vars[i + k].pbn = kbps_to_peak_pbn(params[i].bw_range.stream_kbps); vars[i + k].dsc_enabled = false; vars[i + k].bpp_x16 = 0; - if (drm_dp_atomic_find_time_slots(state, params[i].port->mgr, - params[i].port, vars[i + k].pbn) < 0) - return false; + ret = drm_dp_atomic_find_time_slots(state, params[i].port->mgr, + params[i].port, vars[i + k].pbn); + if (ret < 0) + return ret; } } - if (drm_dp_mst_atomic_check(state)) - return false; + ret = drm_dp_mst_atomic_check(state); + if (ret != 0) + return ret; /* Optimize degree of compression */ - if (!increase_dsc_bpp(state, mst_state, dc_link, params, vars, count, k)) - return false; + ret = increase_dsc_bpp(state, mst_state, dc_link, params, vars, count, k); + if (ret < 0) + return ret; - if (!try_disable_dsc(state, dc_link, params, vars, count, k)) - return false; + ret = try_disable_dsc(state, dc_link, params, vars, count, k); + if (ret < 0) + return ret; set_dsc_configs_from_fairness_vars(params, vars, count, k); - return true; + return 0; } static bool is_dsc_need_re_compute( @@ -1087,15 +1109,17 @@ static bool is_dsc_need_re_compute( return is_dsc_need_re_compute; } -bool compute_mst_dsc_configs_for_state(struct drm_atomic_state *state, - struct dc_state *dc_state, - struct dsc_mst_fairness_vars *vars) +int compute_mst_dsc_configs_for_state(struct drm_atomic_state *state, + struct dc_state *dc_state, + struct dsc_mst_fairness_vars *vars) { int i, j; struct dc_stream_state *stream; bool computed_streams[MAX_PIPES]; struct amdgpu_dm_connector *aconnector; + struct drm_dp_mst_topology_mgr *mst_mgr; int link_vars_start_index = 0; + int ret = 0; for (i = 0; i < dc_state->stream_count; i++) computed_streams[i] = false; @@ -1108,7 +1132,7 @@ bool compute_mst_dsc_configs_for_state(struct drm_atomic_state *state, aconnector = (struct amdgpu_dm_connector *)stream->dm_stream_context; - if (!aconnector || !aconnector->dc_sink) + if (!aconnector || !aconnector->dc_sink || !aconnector->port) continue; if (!aconnector->dc_sink->dsc_caps.dsc_dec_caps.is_dsc_supported) @@ -1118,19 +1142,16 @@ bool compute_mst_dsc_configs_for_state(struct drm_atomic_state *state, continue; if (dcn20_remove_stream_from_ctx(stream->ctx->dc, dc_state, stream) != DC_OK) - return false; + return -EINVAL; if (!is_dsc_need_re_compute(state, dc_state, stream->link)) continue; - mutex_lock(&aconnector->mst_mgr.lock); - if (!compute_mst_dsc_configs_for_link(state, dc_state, stream->link, vars, - &aconnector->mst_mgr, - &link_vars_start_index)) { - mutex_unlock(&aconnector->mst_mgr.lock); - return false; - } - mutex_unlock(&aconnector->mst_mgr.lock); + mst_mgr = aconnector->port->mgr; + ret = compute_mst_dsc_configs_for_link(state, dc_state, stream->link, vars, mst_mgr, + &link_vars_start_index); + if (ret != 0) + return ret; for (j = 0; j < dc_state->stream_count; j++) { if (dc_state->streams[j]->link == stream->link) @@ -1143,22 +1164,23 @@ bool compute_mst_dsc_configs_for_state(struct drm_atomic_state *state, if (stream->timing.flags.DSC == 1) if (dc_stream_add_dsc_to_resource(stream->ctx->dc, dc_state, stream) != DC_OK) - return false; + return -EINVAL; } - return true; + return ret; } -static bool - pre_compute_mst_dsc_configs_for_state(struct drm_atomic_state *state, - struct dc_state *dc_state, - struct dsc_mst_fairness_vars *vars) +static int pre_compute_mst_dsc_configs_for_state(struct drm_atomic_state *state, + struct dc_state *dc_state, + struct dsc_mst_fairness_vars *vars) { int i, j; struct dc_stream_state *stream; bool computed_streams[MAX_PIPES]; struct amdgpu_dm_connector *aconnector; + struct drm_dp_mst_topology_mgr *mst_mgr; int link_vars_start_index = 0; + int ret = 0; for (i = 0; i < dc_state->stream_count; i++) computed_streams[i] = false; @@ -1171,7 +1193,7 @@ static bool aconnector = (struct amdgpu_dm_connector *)stream->dm_stream_context; - if (!aconnector || !aconnector->dc_sink) + if (!aconnector || !aconnector->dc_sink || !aconnector->port) continue; if (!aconnector->dc_sink->dsc_caps.dsc_dec_caps.is_dsc_supported) @@ -1183,14 +1205,11 @@ static bool if (!is_dsc_need_re_compute(state, dc_state, stream->link)) continue; - mutex_lock(&aconnector->mst_mgr.lock); - if (!compute_mst_dsc_configs_for_link(state, dc_state, stream->link, vars, - &aconnector->mst_mgr, - &link_vars_start_index)) { - mutex_unlock(&aconnector->mst_mgr.lock); - return false; - } - mutex_unlock(&aconnector->mst_mgr.lock); + mst_mgr = aconnector->port->mgr; + ret = compute_mst_dsc_configs_for_link(state, dc_state, stream->link, vars, mst_mgr, + &link_vars_start_index); + if (ret != 0) + return ret; for (j = 0; j < dc_state->stream_count; j++) { if (dc_state->streams[j]->link == stream->link) @@ -1198,7 +1217,7 @@ static bool } } - return true; + return ret; } static int find_crtc_index_in_state_by_stream(struct drm_atomic_state *state, @@ -1253,9 +1272,9 @@ static bool is_dsc_precompute_needed(struct drm_atomic_state *state) return ret; } -bool pre_validate_dsc(struct drm_atomic_state *state, - struct dm_atomic_state **dm_state_ptr, - struct dsc_mst_fairness_vars *vars) +int pre_validate_dsc(struct drm_atomic_state *state, + struct dm_atomic_state **dm_state_ptr, + struct dsc_mst_fairness_vars *vars) { int i; struct dm_atomic_state *dm_state; @@ -1264,11 +1283,12 @@ bool pre_validate_dsc(struct drm_atomic_state *state, if (!is_dsc_precompute_needed(state)) { DRM_INFO_ONCE("DSC precompute is not needed.\n"); - return true; + return 0; } - if (dm_atomic_get_state(state, dm_state_ptr)) { + ret = dm_atomic_get_state(state, dm_state_ptr); + if (ret != 0) { DRM_INFO_ONCE("dm_atomic_get_state() failed\n"); - return false; + return ret; } dm_state = *dm_state_ptr; @@ -1280,7 +1300,7 @@ bool pre_validate_dsc(struct drm_atomic_state *state, local_dc_state = kmemdup(dm_state->context, sizeof(struct dc_state), GFP_KERNEL); if (!local_dc_state) - return false; + return -ENOMEM; for (i = 0; i < local_dc_state->stream_count; i++) { struct dc_stream_state *stream = dm_state->context->streams[i]; @@ -1316,9 +1336,9 @@ bool pre_validate_dsc(struct drm_atomic_state *state, if (ret != 0) goto clean_exit; - if (!pre_compute_mst_dsc_configs_for_state(state, local_dc_state, vars)) { + ret = pre_compute_mst_dsc_configs_for_state(state, local_dc_state, vars); + if (ret != 0) { DRM_INFO_ONCE("pre_compute_mst_dsc_configs_for_state() failed\n"); - ret = -EINVAL; goto clean_exit; } @@ -1349,7 +1369,7 @@ bool pre_validate_dsc(struct drm_atomic_state *state, kfree(local_dc_state); - return (ret == 0); + return ret; } static unsigned int kbps_from_pbn(unsigned int pbn) @@ -1392,6 +1412,7 @@ enum dc_status dm_dp_mst_is_port_support_mode( unsigned int upper_link_bw_in_kbps = 0, down_link_bw_in_kbps = 0; unsigned int max_compressed_bw_in_kbps = 0; struct dc_dsc_bw_range bw_range = {0}; + struct drm_dp_mst_topology_mgr *mst_mgr; /* * check if the mode could be supported if DSC pass-through is supported @@ -1400,7 +1421,8 @@ enum dc_status dm_dp_mst_is_port_support_mode( */ if (is_dsc_common_config_possible(stream, &bw_range) && aconnector->port->passthrough_aux) { - mutex_lock(&aconnector->mst_mgr.lock); + mst_mgr = aconnector->port->mgr; + mutex_lock(&mst_mgr->lock); cur_link_settings = stream->link->verified_link_cap; @@ -1413,7 +1435,7 @@ enum dc_status dm_dp_mst_is_port_support_mode( end_to_end_bw_in_kbps = min(upper_link_bw_in_kbps, down_link_bw_in_kbps); - mutex_unlock(&aconnector->mst_mgr.lock); + mutex_unlock(&mst_mgr->lock); /* * use the maximum dsc compression bandwidth as the required diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h index b92a7c5671aa2d78f5e6e4db5f7bb571468ef8b5..97fd70df531bf1c4804b23d35301805ae472c8a1 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h @@ -53,15 +53,15 @@ struct dsc_mst_fairness_vars { struct amdgpu_dm_connector *aconnector; }; -bool compute_mst_dsc_configs_for_state(struct drm_atomic_state *state, - struct dc_state *dc_state, - struct dsc_mst_fairness_vars *vars); +int compute_mst_dsc_configs_for_state(struct drm_atomic_state *state, + struct dc_state *dc_state, + struct dsc_mst_fairness_vars *vars); bool needs_dsc_aux_workaround(struct dc_link *link); -bool pre_validate_dsc(struct drm_atomic_state *state, - struct dm_atomic_state **dm_state_ptr, - struct dsc_mst_fairness_vars *vars); +int pre_validate_dsc(struct drm_atomic_state *state, + struct dm_atomic_state **dm_state_ptr, + struct dsc_mst_fairness_vars *vars); enum dc_status dm_dp_mst_is_port_support_mode( struct amdgpu_dm_connector *aconnector, diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c b/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c index ee0456b5e14e443d030bcdea5e8f8b39ea6d0a03..e0c8d6f09bb4b922a93f6a7061c904620199ca88 100644 --- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c +++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c @@ -2393,6 +2393,26 @@ static enum bp_result get_vram_info_v25( return result; } +static enum bp_result get_vram_info_v30( + struct bios_parser *bp, + struct dc_vram_info *info) +{ + struct atom_vram_info_header_v3_0 *info_v30; + enum bp_result result = BP_RESULT_OK; + + info_v30 = GET_IMAGE(struct atom_vram_info_header_v3_0, + DATA_TABLES(vram_info)); + + if (info_v30 == NULL) + return BP_RESULT_BADBIOSTABLE; + + info->num_chans = info_v30->channel_num; + info->dram_channel_width_bytes = (1 << info_v30->channel_width) / 8; + + return result; +} + + /* * get_integrated_info_v11 * @@ -3060,6 +3080,16 @@ static enum bp_result bios_parser_get_vram_info( } break; + case 3: + switch (revision.minor) { + case 0: + result = get_vram_info_v30(bp, info); + break; + default: + break; + } + break; + default: return result; } diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.c index 1131c6d73f6cdd2bbfe30a18107428148f34054e..20a06c04e4a1d63f9d710c8f424a67956b154aed 100644 --- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.c +++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.c @@ -363,32 +363,32 @@ static struct wm_table ddr5_wm_table = { .wm_inst = WM_A, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.72, - .sr_exit_time_us = 9, - .sr_enter_plus_exit_time_us = 11, + .sr_exit_time_us = 12.5, + .sr_enter_plus_exit_time_us = 14.5, .valid = true, }, { .wm_inst = WM_B, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.72, - .sr_exit_time_us = 9, - .sr_enter_plus_exit_time_us = 11, + .sr_exit_time_us = 12.5, + .sr_enter_plus_exit_time_us = 14.5, .valid = true, }, { .wm_inst = WM_C, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.72, - .sr_exit_time_us = 9, - .sr_enter_plus_exit_time_us = 11, + .sr_exit_time_us = 12.5, + .sr_enter_plus_exit_time_us = 14.5, .valid = true, }, { .wm_inst = WM_D, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.72, - .sr_exit_time_us = 9, - .sr_enter_plus_exit_time_us = 11, + .sr_exit_time_us = 12.5, + .sr_enter_plus_exit_time_us = 14.5, .valid = true, }, } @@ -400,32 +400,32 @@ static struct wm_table lpddr5_wm_table = { .wm_inst = WM_A, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.65333, - .sr_exit_time_us = 11.5, - .sr_enter_plus_exit_time_us = 14.5, + .sr_exit_time_us = 16.5, + .sr_enter_plus_exit_time_us = 18.5, .valid = true, }, { .wm_inst = WM_B, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.65333, - .sr_exit_time_us = 11.5, - .sr_enter_plus_exit_time_us = 14.5, + .sr_exit_time_us = 16.5, + .sr_enter_plus_exit_time_us = 18.5, .valid = true, }, { .wm_inst = WM_C, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.65333, - .sr_exit_time_us = 11.5, - .sr_enter_plus_exit_time_us = 14.5, + .sr_exit_time_us = 16.5, + .sr_enter_plus_exit_time_us = 18.5, .valid = true, }, { .wm_inst = WM_D, .wm_type = WM_TYPE_PSTATE_CHG, .pstate_latency_us = 11.65333, - .sr_exit_time_us = 11.5, - .sr_enter_plus_exit_time_us = 14.5, + .sr_exit_time_us = 16.5, + .sr_enter_plus_exit_time_us = 18.5, .valid = true, }, } diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_smu.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_smu.c index ef0795b14a1fd0e2666661771aeab0f10f7da8d8..2db595672a469da3c760602532b1b8f53ac1719e 100644 --- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_smu.c +++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_smu.c @@ -123,9 +123,10 @@ static int dcn314_smu_send_msg_with_param(struct clk_mgr_internal *clk_mgr, uint32_t result; result = dcn314_smu_wait_for_response(clk_mgr, 10, 200000); - ASSERT(result == VBIOSSMC_Result_OK); - smu_print("SMU response after wait: %d\n", result); + if (result != VBIOSSMC_Result_OK) + smu_print("SMU Response was not OK. SMU response after wait received is: %d\n", + result); if (result == VBIOSSMC_Status_BUSY) return -1; @@ -216,6 +217,12 @@ int dcn314_smu_set_hard_min_dcfclk(struct clk_mgr_internal *clk_mgr, int request VBIOSSMC_MSG_SetHardMinDcfclkByFreq, khz_to_mhz_ceil(requested_dcfclk_khz)); +#ifdef DBG + smu_print("actual_dcfclk_set_mhz %d is set to : %d\n", + actual_dcfclk_set_mhz, + actual_dcfclk_set_mhz * 1000); +#endif + return actual_dcfclk_set_mhz * 1000; } diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c index 1c612ccf1944aecac044b67fa9234d907ed7b75d..6f77d8e538ab14a16e3bfd354c6bc8d4157c5127 100644 --- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c +++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c @@ -157,6 +157,7 @@ void dcn32_init_clocks(struct clk_mgr *clk_mgr_base) struct clk_mgr_internal *clk_mgr = TO_CLK_MGR_INTERNAL(clk_mgr_base); unsigned int num_levels; struct clk_limit_num_entries *num_entries_per_clk = &clk_mgr_base->bw_params->clk_table.num_entries_per_clk; + unsigned int i; memset(&(clk_mgr_base->clks), 0, sizeof(struct dc_clocks)); clk_mgr_base->clks.p_state_change_support = true; @@ -205,18 +206,17 @@ void dcn32_init_clocks(struct clk_mgr *clk_mgr_base) clk_mgr->dpm_present = true; if (clk_mgr_base->ctx->dc->debug.min_disp_clk_khz) { - unsigned int i; - for (i = 0; i < num_levels; i++) if (clk_mgr_base->bw_params->clk_table.entries[i].dispclk_mhz < khz_to_mhz_ceil(clk_mgr_base->ctx->dc->debug.min_disp_clk_khz)) clk_mgr_base->bw_params->clk_table.entries[i].dispclk_mhz = khz_to_mhz_ceil(clk_mgr_base->ctx->dc->debug.min_disp_clk_khz); } + for (i = 0; i < num_levels; i++) + if (clk_mgr_base->bw_params->clk_table.entries[i].dispclk_mhz > 1950) + clk_mgr_base->bw_params->clk_table.entries[i].dispclk_mhz = 1950; if (clk_mgr_base->ctx->dc->debug.min_dpp_clk_khz) { - unsigned int i; - for (i = 0; i < num_levels; i++) if (clk_mgr_base->bw_params->clk_table.entries[i].dppclk_mhz < khz_to_mhz_ceil(clk_mgr_base->ctx->dc->debug.min_dpp_clk_khz)) @@ -669,6 +669,9 @@ static void dcn32_get_memclk_states_from_smu(struct clk_mgr *clk_mgr_base) &clk_mgr_base->bw_params->clk_table.entries[0].memclk_mhz, &num_entries_per_clk->num_memclk_levels); + /* memclk must have at least one level */ + num_entries_per_clk->num_memclk_levels = num_entries_per_clk->num_memclk_levels ? num_entries_per_clk->num_memclk_levels : 1; + dcn32_init_single_clock(clk_mgr, PPCLK_FCLK, &clk_mgr_base->bw_params->clk_table.entries[0].fclk_mhz, &num_entries_per_clk->num_fclk_levels); diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h index bfc5474c0f4c90fdcae2fc44665ef31583ee752a..0598465fd1a1b597eb174d882f5874a1236f98b8 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@ -852,6 +852,8 @@ struct dc_debug_options { bool enable_double_buffered_dsc_pg_support; bool enable_dp_dig_pixel_rate_div_policy; enum lttpr_mode lttpr_mode_override; + unsigned int dsc_delay_factor_wa_x1000; + unsigned int min_prefetch_in_strobe_ns; }; struct gpu_info_soc_bounding_box_v1_0; diff --git a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c index 1b70b78e2fa157a27c6f53fe32f5a202e34dea35..af631085e88c56937ac4d1a119167bdf46f3d75f 100644 --- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c @@ -359,7 +359,8 @@ static const struct dce_audio_registers audio_regs[] = { audio_regs(2), audio_regs(3), audio_regs(4), - audio_regs(5) + audio_regs(5), + audio_regs(6), }; #define DCE120_AUD_COMMON_MASK_SH_LIST(mask_sh)\ diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c index b9765b3899e191cb4a04d6506d756f8542ceb2a2..ef52e6b6eccfbd1ea1a85df0094c2e8363380576 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c @@ -436,34 +436,48 @@ void dpp1_set_cursor_position( uint32_t height) { struct dcn10_dpp *dpp = TO_DCN10_DPP(dpp_base); - int src_x_offset = pos->x - pos->x_hotspot - param->viewport.x; - int src_y_offset = pos->y - pos->y_hotspot - param->viewport.y; + int x_pos = pos->x - param->viewport.x; + int y_pos = pos->y - param->viewport.y; + int x_hotspot = pos->x_hotspot; + int y_hotspot = pos->y_hotspot; + int src_x_offset = x_pos - pos->x_hotspot; + int src_y_offset = y_pos - pos->y_hotspot; + int cursor_height = (int)height; + int cursor_width = (int)width; uint32_t cur_en = pos->enable ? 1 : 0; - // Cursor width/height and hotspots need to be rotated for offset calculation + // Transform cursor width / height and hotspots for offset calculations if (param->rotation == ROTATION_ANGLE_90 || param->rotation == ROTATION_ANGLE_270) { - swap(width, height); + swap(cursor_height, cursor_width); + swap(x_hotspot, y_hotspot); + if (param->rotation == ROTATION_ANGLE_90) { - src_x_offset = pos->x - pos->y_hotspot - param->viewport.x; - src_y_offset = pos->y - pos->x_hotspot - param->viewport.y; + // hotspot = (-y, x) + src_x_offset = x_pos - (cursor_width - x_hotspot); + src_y_offset = y_pos - y_hotspot; + } else if (param->rotation == ROTATION_ANGLE_270) { + // hotspot = (y, -x) + src_x_offset = x_pos - x_hotspot; + src_y_offset = y_pos - (cursor_height - y_hotspot); } } else if (param->rotation == ROTATION_ANGLE_180) { + // hotspot = (-x, -y) if (!param->mirror) - src_x_offset = pos->x - param->viewport.x; + src_x_offset = x_pos - (cursor_width - x_hotspot); - src_y_offset = pos->y - param->viewport.y; + src_y_offset = y_pos - (cursor_height - y_hotspot); } if (src_x_offset >= (int)param->viewport.width) cur_en = 0; /* not visible beyond right edge*/ - if (src_x_offset + (int)width <= 0) + if (src_x_offset + cursor_width <= 0) cur_en = 0; /* not visible beyond left edge*/ if (src_y_offset >= (int)param->viewport.height) cur_en = 0; /* not visible beyond bottom edge*/ - if (src_y_offset + (int)height <= 0) + if (src_y_offset + cursor_height <= 0) cur_en = 0; /* not visible beyond top edge*/ REG_UPDATE(CURSOR0_CONTROL, diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c index 52e201e9b091702f4b4b34539d307e546c9349d5..a142a00bc43264050832a6037852a7eeb5e6b917 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c @@ -1179,10 +1179,12 @@ void hubp1_cursor_set_position( const struct dc_cursor_mi_param *param) { struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp); - int src_x_offset = pos->x - pos->x_hotspot - param->viewport.x; - int src_y_offset = pos->y - pos->y_hotspot - param->viewport.y; + int x_pos = pos->x - param->viewport.x; + int y_pos = pos->y - param->viewport.y; int x_hotspot = pos->x_hotspot; int y_hotspot = pos->y_hotspot; + int src_x_offset = x_pos - pos->x_hotspot; + int src_y_offset = y_pos - pos->y_hotspot; int cursor_height = (int)hubp->curs_attr.height; int cursor_width = (int)hubp->curs_attr.width; uint32_t dst_x_offset; @@ -1200,18 +1202,26 @@ void hubp1_cursor_set_position( if (hubp->curs_attr.address.quad_part == 0) return; - // Rotated cursor width/height and hotspots tweaks for offset calculation + // Transform cursor width / height and hotspots for offset calculations if (param->rotation == ROTATION_ANGLE_90 || param->rotation == ROTATION_ANGLE_270) { swap(cursor_height, cursor_width); + swap(x_hotspot, y_hotspot); + if (param->rotation == ROTATION_ANGLE_90) { - src_x_offset = pos->x - pos->y_hotspot - param->viewport.x; - src_y_offset = pos->y - pos->x_hotspot - param->viewport.y; + // hotspot = (-y, x) + src_x_offset = x_pos - (cursor_width - x_hotspot); + src_y_offset = y_pos - y_hotspot; + } else if (param->rotation == ROTATION_ANGLE_270) { + // hotspot = (y, -x) + src_x_offset = x_pos - x_hotspot; + src_y_offset = y_pos - (cursor_height - y_hotspot); } } else if (param->rotation == ROTATION_ANGLE_180) { + // hotspot = (-x, -y) if (!param->mirror) - src_x_offset = pos->x - param->viewport.x; + src_x_offset = x_pos - (cursor_width - x_hotspot); - src_y_offset = pos->y - param->viewport.y; + src_y_offset = y_pos - (cursor_height - y_hotspot); } dst_x_offset = (src_x_offset >= 0) ? src_x_offset : 0; @@ -1248,8 +1258,8 @@ void hubp1_cursor_set_position( CURSOR_Y_POSITION, pos->y); REG_SET_2(CURSOR_HOT_SPOT, 0, - CURSOR_HOT_SPOT_X, x_hotspot, - CURSOR_HOT_SPOT_Y, y_hotspot); + CURSOR_HOT_SPOT_X, pos->x_hotspot, + CURSOR_HOT_SPOT_Y, pos->y_hotspot); REG_SET(CURSOR_DST_OFFSET, 0, CURSOR_DST_X_OFFSET, dst_x_offset); diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c index 4996d2810edb8e1b12183976428adc63cb0ee59c..4566bc7abf17e6247379650c63f1481f3ae7b311 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c +++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c @@ -623,6 +623,10 @@ void hubp2_cursor_set_attributes( hubp->att.size.bits.width = attr->width; hubp->att.size.bits.height = attr->height; hubp->att.cur_ctl.bits.mode = attr->color_format; + + hubp->cur_rect.w = attr->width; + hubp->cur_rect.h = attr->height; + hubp->att.cur_ctl.bits.pitch = hw_pitch; hubp->att.cur_ctl.bits.line_per_chunk = lpc; hubp->att.cur_ctl.bits.cur_2x_magnify = attr->attribute_flags.bits.ENABLE_MAGNIFICATION; @@ -969,10 +973,12 @@ void hubp2_cursor_set_position( const struct dc_cursor_mi_param *param) { struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp); - int src_x_offset = pos->x - pos->x_hotspot - param->viewport.x; - int src_y_offset = pos->y - pos->y_hotspot - param->viewport.y; + int x_pos = pos->x - param->viewport.x; + int y_pos = pos->y - param->viewport.y; int x_hotspot = pos->x_hotspot; int y_hotspot = pos->y_hotspot; + int src_x_offset = x_pos - pos->x_hotspot; + int src_y_offset = y_pos - pos->y_hotspot; int cursor_height = (int)hubp->curs_attr.height; int cursor_width = (int)hubp->curs_attr.width; uint32_t dst_x_offset; @@ -990,18 +996,26 @@ void hubp2_cursor_set_position( if (hubp->curs_attr.address.quad_part == 0) return; - // Rotated cursor width/height and hotspots tweaks for offset calculation + // Transform cursor width / height and hotspots for offset calculations if (param->rotation == ROTATION_ANGLE_90 || param->rotation == ROTATION_ANGLE_270) { swap(cursor_height, cursor_width); + swap(x_hotspot, y_hotspot); + if (param->rotation == ROTATION_ANGLE_90) { - src_x_offset = pos->x - pos->y_hotspot - param->viewport.x; - src_y_offset = pos->y - pos->x_hotspot - param->viewport.y; + // hotspot = (-y, x) + src_x_offset = x_pos - (cursor_width - x_hotspot); + src_y_offset = y_pos - y_hotspot; + } else if (param->rotation == ROTATION_ANGLE_270) { + // hotspot = (y, -x) + src_x_offset = x_pos - x_hotspot; + src_y_offset = y_pos - (cursor_height - y_hotspot); } } else if (param->rotation == ROTATION_ANGLE_180) { + // hotspot = (-x, -y) if (!param->mirror) - src_x_offset = pos->x - param->viewport.x; + src_x_offset = x_pos - (cursor_width - x_hotspot); - src_y_offset = pos->y - param->viewport.y; + src_y_offset = y_pos - (cursor_height - y_hotspot); } dst_x_offset = (src_x_offset >= 0) ? src_x_offset : 0; @@ -1038,8 +1052,8 @@ void hubp2_cursor_set_position( CURSOR_Y_POSITION, pos->y); REG_SET_2(CURSOR_HOT_SPOT, 0, - CURSOR_HOT_SPOT_X, x_hotspot, - CURSOR_HOT_SPOT_Y, y_hotspot); + CURSOR_HOT_SPOT_X, pos->x_hotspot, + CURSOR_HOT_SPOT_Y, pos->y_hotspot); REG_SET(CURSOR_DST_OFFSET, 0, CURSOR_DST_X_OFFSET, dst_x_offset); @@ -1048,8 +1062,8 @@ void hubp2_cursor_set_position( hubp->pos.cur_ctl.bits.cur_enable = cur_en; hubp->pos.position.bits.x_pos = pos->x; hubp->pos.position.bits.y_pos = pos->y; - hubp->pos.hot_spot.bits.x_hot = x_hotspot; - hubp->pos.hot_spot.bits.y_hot = y_hotspot; + hubp->pos.hot_spot.bits.x_hot = pos->x_hotspot; + hubp->pos.hot_spot.bits.y_hot = pos->y_hotspot; hubp->pos.dst_offset.bits.dst_x_offset = dst_x_offset; /* Cursor Rectangle Cache * Cursor bitmaps have different hotspot values diff --git a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubp.c index 84e1486f3d5151080b8fb6da6d3ebd98bd82adbb..39a57bcd78667a9abd2d5b98f6eadbed53e5a2d8 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubp.c +++ b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hubp.c @@ -87,6 +87,7 @@ static struct hubp_funcs dcn31_hubp_funcs = { .hubp_init = hubp3_init, .set_unbounded_requesting = hubp31_set_unbounded_requesting, .hubp_soft_reset = hubp31_soft_reset, + .hubp_set_flip_int = hubp1_set_flip_int, .hubp_in_blank = hubp1_in_blank, .program_extended_blank = hubp31_program_extended_blank, }; diff --git a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dccg.c b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dccg.c index 1bd7e0f327d8128d183ac40ac5fea9683d1abf1b..389a8938ee4515b99f7edbe858897662db2c4c91 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dccg.c +++ b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dccg.c @@ -96,6 +96,13 @@ static void dccg314_set_pixel_rate_div( struct dcn_dccg *dccg_dcn = TO_DCN_DCCG(dccg); enum pixel_rate_div cur_k1 = PIXEL_RATE_DIV_NA, cur_k2 = PIXEL_RATE_DIV_NA; + // Don't program 0xF into the register field. Not valid since + // K1 / K2 field is only 1 / 2 bits wide + if (k1 == PIXEL_RATE_DIV_NA || k2 == PIXEL_RATE_DIV_NA) { + BREAK_TO_DEBUGGER(); + return; + } + dccg314_get_pixel_rate_div(dccg, otg_inst, &cur_k1, &cur_k2); if (k1 == PIXEL_RATE_DIV_NA || k2 == PIXEL_RATE_DIV_NA || (k1 == cur_k1 && k2 == cur_k2)) return; diff --git a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dio_stream_encoder.c b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dio_stream_encoder.c index 7e773bf7b895f05b7d5c715ddc6d2cf7aefa0b8f..38842f938bed0bc9a36bfe0254adcf5b1fa60400 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dio_stream_encoder.c +++ b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dio_stream_encoder.c @@ -49,18 +49,30 @@ #define CTX \ enc1->base.ctx +static void enc314_reset_fifo(struct stream_encoder *enc, bool reset) +{ + struct dcn10_stream_encoder *enc1 = DCN10STRENC_FROM_STRENC(enc); + uint32_t reset_val = reset ? 1 : 0; + uint32_t is_symclk_on; + + REG_UPDATE(DIG_FIFO_CTRL0, DIG_FIFO_RESET, reset_val); + REG_GET(DIG_FE_CNTL, DIG_SYMCLK_FE_ON, &is_symclk_on); + + if (is_symclk_on) + REG_WAIT(DIG_FIFO_CTRL0, DIG_FIFO_RESET_DONE, reset_val, 10, 5000); + else + udelay(10); +} static void enc314_enable_fifo(struct stream_encoder *enc) { struct dcn10_stream_encoder *enc1 = DCN10STRENC_FROM_STRENC(enc); - /* TODO: Confirm if we need to wait for DIG_SYMCLK_FE_ON */ - REG_WAIT(DIG_FE_CNTL, DIG_SYMCLK_FE_ON, 1, 10, 5000); REG_UPDATE(DIG_FIFO_CTRL0, DIG_FIFO_READ_START_LEVEL, 0x7); - REG_UPDATE(DIG_FIFO_CTRL0, DIG_FIFO_RESET, 1); - REG_WAIT(DIG_FIFO_CTRL0, DIG_FIFO_RESET_DONE, 1, 10, 5000); - REG_UPDATE(DIG_FIFO_CTRL0, DIG_FIFO_RESET, 0); - REG_WAIT(DIG_FIFO_CTRL0, DIG_FIFO_RESET_DONE, 0, 10, 5000); + + enc314_reset_fifo(enc, true); + enc314_reset_fifo(enc, false); + REG_UPDATE(DIG_FIFO_CTRL0, DIG_FIFO_ENABLE, 1); } diff --git a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.c index 588c1c71241fac112b27902e60b7233a4a459e42..a0741794db62aa77af7a3be1c8c75485e149a0e7 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.c +++ b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.c @@ -348,10 +348,8 @@ unsigned int dcn314_calculate_dccg_k1_k2_values(struct pipe_ctx *pipe_ctx, unsig two_pix_per_container = optc2_is_two_pixels_per_containter(&stream->timing); odm_combine_factor = get_odm_config(pipe_ctx, NULL); - if (pipe_ctx->stream->signal == SIGNAL_TYPE_VIRTUAL) - return odm_combine_factor; - if (is_dp_128b_132b_signal(pipe_ctx)) { + *k1_div = PIXEL_RATE_DIV_BY_1; *k2_div = PIXEL_RATE_DIV_BY_1; } else if (dc_is_hdmi_tmds_signal(pipe_ctx->stream->signal) || dc_is_dvi_signal(pipe_ctx->stream->signal)) { *k1_div = PIXEL_RATE_DIV_BY_1; @@ -359,7 +357,7 @@ unsigned int dcn314_calculate_dccg_k1_k2_values(struct pipe_ctx *pipe_ctx, unsig *k2_div = PIXEL_RATE_DIV_BY_2; else *k2_div = PIXEL_RATE_DIV_BY_4; - } else if (dc_is_dp_signal(pipe_ctx->stream->signal)) { + } else if (dc_is_dp_signal(pipe_ctx->stream->signal) || dc_is_virtual_signal(pipe_ctx->stream->signal)) { if (two_pix_per_container) { *k1_div = PIXEL_RATE_DIV_BY_1; *k2_div = PIXEL_RATE_DIV_BY_2; diff --git a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_optc.c b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_optc.c index 47eb162f1a7587a6e32bd61fc0620db5e2bab926..7dd36e402bac73784c5cc8952a0696602521d8d7 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_optc.c +++ b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_optc.c @@ -237,7 +237,7 @@ static struct timing_generator_funcs dcn314_tg_funcs = { .clear_optc_underflow = optc1_clear_optc_underflow, .setup_global_swap_lock = NULL, .get_crc = optc1_get_crc, - .configure_crc = optc2_configure_crc, + .configure_crc = optc1_configure_crc, .set_dsc_config = optc3_set_dsc_config, .get_dsc_status = optc2_get_dsc_status, .set_dwb_source = NULL, diff --git a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c index d0ad72caead289dd11b5d9ced58c27d1a097b84f..9066c511a0529e084ca9f5ecc8fe3ddb5b518bb3 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c @@ -847,7 +847,7 @@ static const struct resource_caps res_cap_dcn314 = { .num_ddc = 5, .num_vmid = 16, .num_mpc_3dlut = 2, - .num_dsc = 3, + .num_dsc = 4, }; static const struct dc_plane_cap plane_cap = { diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c index e4daed44ef5f9038c81f31c5da5d0263e2acb060..df4f251191424e730699249ef2d1657db5556d0c 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c +++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c @@ -96,8 +96,10 @@ static void dccg32_set_pixel_rate_div( // Don't program 0xF into the register field. Not valid since // K1 / K2 field is only 1 / 2 bits wide - if (k1 == PIXEL_RATE_DIV_NA || k2 == PIXEL_RATE_DIV_NA) + if (k1 == PIXEL_RATE_DIV_NA || k2 == PIXEL_RATE_DIV_NA) { + BREAK_TO_DEBUGGER(); return; + } dccg32_get_pixel_rate_div(dccg, otg_inst, &cur_k1, &cur_k2); if (k1 == cur_k1 && k2 == cur_k2) diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c index cf5bd9713f54f4c4890a960c7a88cc8d49fef939..d0b46a3e01551a4a93819f5011a463af47ef0222 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c +++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c @@ -283,8 +283,7 @@ static uint32_t dcn32_calculate_cab_allocation(struct dc *dc, struct dc_state *c using the max for calculation */ if (hubp->curs_attr.width > 0) { - // Round cursor width to next multiple of 64 - cursor_size = (((hubp->curs_attr.width + 63) / 64) * 64) * hubp->curs_attr.height; + cursor_size = hubp->curs_attr.pitch * hubp->curs_attr.height; switch (pipe->stream->cursor_attributes.color_format) { case CURSOR_MODE_MONO: @@ -309,9 +308,9 @@ static uint32_t dcn32_calculate_cab_allocation(struct dc *dc, struct dc_state *c cursor_size > 16384) { /* cursor_num_mblk = CEILING(num_cursors*cursor_width*cursor_width*cursor_Bpe/mblk_bytes, 1) */ - cache_lines_used += (((hubp->curs_attr.width * hubp->curs_attr.height * cursor_bpp + - DCN3_2_MALL_MBLK_SIZE_BYTES - 1) / DCN3_2_MALL_MBLK_SIZE_BYTES) * - DCN3_2_MALL_MBLK_SIZE_BYTES) / dc->caps.cache_line_size + 2; + cache_lines_used += (((cursor_size + DCN3_2_MALL_MBLK_SIZE_BYTES - 1) / + DCN3_2_MALL_MBLK_SIZE_BYTES) * DCN3_2_MALL_MBLK_SIZE_BYTES) / + dc->caps.cache_line_size + 2; } break; } @@ -727,10 +726,7 @@ void dcn32_update_mall_sel(struct dc *dc, struct dc_state *context) struct hubp *hubp = pipe->plane_res.hubp; if (pipe->stream && pipe->plane_state && hubp && hubp->funcs->hubp_update_mall_sel) { - //Round cursor width up to next multiple of 64 - int cursor_width = ((hubp->curs_attr.width + 63) / 64) * 64; - int cursor_height = hubp->curs_attr.height; - int cursor_size = cursor_width * cursor_height; + int cursor_size = hubp->curs_attr.pitch * hubp->curs_attr.height; switch (hubp->curs_attr.color_format) { case CURSOR_MODE_MONO: @@ -1175,10 +1171,8 @@ unsigned int dcn32_calculate_dccg_k1_k2_values(struct pipe_ctx *pipe_ctx, unsign two_pix_per_container = optc2_is_two_pixels_per_containter(&stream->timing); odm_combine_factor = get_odm_config(pipe_ctx, NULL); - if (pipe_ctx->stream->signal == SIGNAL_TYPE_VIRTUAL) - return odm_combine_factor; - if (is_dp_128b_132b_signal(pipe_ctx)) { + *k1_div = PIXEL_RATE_DIV_BY_1; *k2_div = PIXEL_RATE_DIV_BY_1; } else if (dc_is_hdmi_tmds_signal(pipe_ctx->stream->signal) || dc_is_dvi_signal(pipe_ctx->stream->signal)) { *k1_div = PIXEL_RATE_DIV_BY_1; diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c index a88dd7b3d1c10e01774301b74076ecc413634881..d1598e3131f66d861099a6e29ad0e5318f1c731b 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c @@ -724,6 +724,7 @@ static const struct dc_debug_options debug_defaults_drv = { .enable_dp_dig_pixel_rate_div_policy = 1, .allow_sw_cursor_fallback = false, .alloc_extra_way_for_cursor = true, + .min_prefetch_in_strobe_ns = 60000, // 60us }; static const struct dc_debug_options debug_defaults_diags = { diff --git a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource_helpers.c b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource_helpers.c index b03a7814e96d80a1ce046efb5899ee93379d035b..fa3778849db141102aa69b656d8c966093b20851 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource_helpers.c +++ b/drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource_helpers.c @@ -111,7 +111,7 @@ uint32_t dcn32_helper_calculate_num_ways_for_subvp(struct dc *dc, struct dc_stat mall_alloc_width_blk_aligned = full_vp_width_blk_aligned; /* mall_alloc_height_blk_aligned_l/c = CEILING(sub_vp_height_l/c - 1, blk_height_l/c) + blk_height_l/c */ - mall_alloc_height_blk_aligned = (pipe->stream->timing.v_addressable - 1 + mblk_height - 1) / + mall_alloc_height_blk_aligned = (pipe->plane_res.scl_data.viewport.height - 1 + mblk_height - 1) / mblk_height * mblk_height + mblk_height; /* full_mblk_width_ub_l/c = mall_alloc_width_blk_aligned_l/c; diff --git a/drivers/gpu/drm/amd/display/dc/dcn321/dcn321_resource.c b/drivers/gpu/drm/amd/display/dc/dcn321/dcn321_resource.c index 61087f2385a96ccc351bbad7e107b8d6525f31e1..6292ac515d1a448b8b492cd3fe6bc6081cfcb3b3 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn321/dcn321_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn321/dcn321_resource.c @@ -722,6 +722,7 @@ static const struct dc_debug_options debug_defaults_drv = { .enable_dp_dig_pixel_rate_div_policy = 1, .allow_sw_cursor_fallback = false, .alloc_extra_way_for_cursor = true, + .min_prefetch_in_strobe_ns = 60000, // 60us }; static const struct dc_debug_options debug_defaults_diags = { diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c b/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c index d680f1c5b69f8329cde8ba880b1b1198fbd3b7e3..45db40c41882ca03e7fe10e2dd7b625ef94ef817 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c @@ -1228,6 +1228,7 @@ int dcn20_populate_dml_pipes_from_context( pipes[pipe_cnt].pipe.src.dcc = false; pipes[pipe_cnt].pipe.src.dcc_rate = 1; pipes[pipe_cnt].pipe.dest.synchronized_vblank_all_planes = synchronized_vblank; + pipes[pipe_cnt].pipe.dest.synchronize_timings = synchronized_vblank; pipes[pipe_cnt].pipe.dest.hblank_start = timing->h_total - timing->h_front_porch; pipes[pipe_cnt].pipe.dest.hblank_end = pipes[pipe_cnt].pipe.dest.hblank_start - timing->h_addressable diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/dcn314_fpu.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/dcn314_fpu.c index cf420ad2b8dcd577b2e1fb28c33f8dcc7b9453d2..34b6c763a455478fc8d17b263f79b3161febb90f 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/dcn314_fpu.c +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/dcn314_fpu.c @@ -146,8 +146,8 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_14_soc = { }, }, .num_states = 5, - .sr_exit_time_us = 9.0, - .sr_enter_plus_exit_time_us = 11.0, + .sr_exit_time_us = 16.5, + .sr_enter_plus_exit_time_us = 18.5, .sr_exit_z8_time_us = 442.0, .sr_enter_plus_exit_z8_time_us = 560.0, .writeback_latency_us = 12.0, diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c b/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c index 819de0f110126eed5059298b5bd50d78e57a0539..2abe3967f7fbdeac93c94060c335846967685ee3 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c @@ -157,7 +157,7 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_2_soc = { .dispclk_dppclk_vco_speed_mhz = 4300.0, .do_urgent_latency_adjustment = true, .urgent_latency_adjustment_fabric_clock_component_us = 1.0, - .urgent_latency_adjustment_fabric_clock_reference_mhz = 1000, + .urgent_latency_adjustment_fabric_clock_reference_mhz = 3000, }; void dcn32_build_wm_range_table_fpu(struct clk_mgr_internal *clk_mgr) @@ -211,7 +211,7 @@ void dcn32_build_wm_range_table_fpu(struct clk_mgr_internal *clk_mgr) /* 'DalDummyClockChangeLatencyNs' registry key option set to 0x7FFFFFFF can be used to disable Set C for dummy p-state */ if (clk_mgr->base.ctx->dc->bb_overrides.dummy_clock_change_latency_ns != 0x7FFFFFFF) { clk_mgr->base.bw_params->wm_table.nv_entries[WM_C].valid = true; - clk_mgr->base.bw_params->wm_table.nv_entries[WM_C].dml_input.pstate_latency_us = 38; + clk_mgr->base.bw_params->wm_table.nv_entries[WM_C].dml_input.pstate_latency_us = 50; clk_mgr->base.bw_params->wm_table.nv_entries[WM_C].dml_input.fclk_change_latency_us = fclk_change_latency_us; clk_mgr->base.bw_params->wm_table.nv_entries[WM_C].dml_input.sr_exit_time_us = sr_exit_time_us; clk_mgr->base.bw_params->wm_table.nv_entries[WM_C].dml_input.sr_enter_plus_exit_time_us = sr_enter_plus_exit_time_us; @@ -221,7 +221,7 @@ void dcn32_build_wm_range_table_fpu(struct clk_mgr_internal *clk_mgr) clk_mgr->base.bw_params->wm_table.nv_entries[WM_C].pmfw_breakdown.min_uclk = min_uclk_mhz; clk_mgr->base.bw_params->wm_table.nv_entries[WM_C].pmfw_breakdown.max_uclk = 0xFFFF; clk_mgr->base.bw_params->dummy_pstate_table[0].dram_speed_mts = clk_mgr->base.bw_params->clk_table.entries[0].memclk_mhz * 16; - clk_mgr->base.bw_params->dummy_pstate_table[0].dummy_pstate_latency_us = 38; + clk_mgr->base.bw_params->dummy_pstate_table[0].dummy_pstate_latency_us = 50; clk_mgr->base.bw_params->dummy_pstate_table[1].dram_speed_mts = clk_mgr->base.bw_params->clk_table.entries[1].memclk_mhz * 16; clk_mgr->base.bw_params->dummy_pstate_table[1].dummy_pstate_latency_us = 9; clk_mgr->base.bw_params->dummy_pstate_table[2].dram_speed_mts = clk_mgr->base.bw_params->clk_table.entries[2].memclk_mhz * 16; @@ -1803,6 +1803,12 @@ void dcn32_calculate_wm_and_dlg_fpu(struct dc *dc, struct dc_state *context, */ context->bw_ctx.dml.soc.dram_clock_change_latency_us = dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.pstate_latency_us; + /* For DCN32/321 need to validate with fclk pstate change latency equal to dummy so + * prefetch is scheduled correctly to account for dummy pstate. + */ + if (dummy_latency_index == 0) + context->bw_ctx.dml.soc.fclk_change_latency_us = + dc->clk_mgr->bw_params->dummy_pstate_table[dummy_latency_index].dummy_pstate_latency_us; dcn32_internal_validate_bw(dc, context, pipes, &pipe_cnt, &vlevel, false); maxMpcComb = context->bw_ctx.dml.vba.maxMpcComb; dcfclk_from_fw_based_mclk_switching = context->bw_ctx.dml.vba.DCFCLKState[vlevel][context->bw_ctx.dml.vba.maxMpcComb]; @@ -1904,7 +1910,7 @@ void dcn32_calculate_wm_and_dlg_fpu(struct dc *dc, struct dc_state *context, if (context->bw_ctx.dml.vba.DRAMClockChangeSupport[vlevel][maxMpcComb] == dm_dram_clock_change_unsupported) { - int min_dram_speed_mts_offset = dc->clk_mgr->bw_params->clk_table.num_entries - 1; + int min_dram_speed_mts_offset = dc->clk_mgr->bw_params->clk_table.num_entries_per_clk.num_memclk_levels - 1; min_dram_speed_mts = dc->clk_mgr->bw_params->clk_table.entries[min_dram_speed_mts_offset].memclk_mhz * 16; @@ -1990,6 +1996,10 @@ void dcn32_calculate_wm_and_dlg_fpu(struct dc *dc, struct dc_state *context, context->perf_params.stutter_period_us = context->bw_ctx.dml.vba.StutterPeriod; + if (context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching && dummy_latency_index == 0) + context->bw_ctx.dml.soc.fclk_change_latency_us = + dc->clk_mgr->bw_params->dummy_pstate_table[dummy_latency_index].dummy_pstate_latency_us; + dcn32_calculate_dlg_params(dc, context, pipes, pipe_cnt, vlevel); if (!pstate_en) @@ -1997,8 +2007,12 @@ void dcn32_calculate_wm_and_dlg_fpu(struct dc *dc, struct dc_state *context, context->bw_ctx.dml.soc.dram_clock_change_latency_us = dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.pstate_latency_us; - if (context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching) + if (context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching) { dcn30_setup_mclk_switch_using_fw_based_vblank_stretch(dc, context); + if (dummy_latency_index == 0) + context->bw_ctx.dml.soc.fclk_change_latency_us = + dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.fclk_change_latency_us; + } } static void dcn32_get_optimal_dcfclk_fclk_for_uclk(unsigned int uclk_mts, @@ -2359,9 +2373,13 @@ void dcn32_update_bw_bounding_box_fpu(struct dc *dc, struct clk_bw_params *bw_pa if (dc->ctx->dc_bios->vram_info.dram_channel_width_bytes) dcn3_2_soc.dram_channel_width_bytes = dc->ctx->dc_bios->vram_info.dram_channel_width_bytes; - } + /* DML DSC delay factor workaround */ + dcn3_2_ip.dsc_delay_factor_wa = dc->debug.dsc_delay_factor_wa_x1000 / 1000.0; + + dcn3_2_ip.min_prefetch_in_strobe_us = dc->debug.min_prefetch_in_strobe_ns / 1000.0; + /* Override dispclk_dppclk_vco_speed_mhz from Clk Mgr */ dcn3_2_soc.dispclk_dppclk_vco_speed_mhz = dc->clk_mgr->dentist_vco_freq_khz / 1000.0; dc->dml.soc.dispclk_dppclk_vco_speed_mhz = dc->clk_mgr->dentist_vco_freq_khz / 1000.0; diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.c b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.c index 5b91660a6496b410b48249f1a16d61af4991ac0e..9afd9ba23fb2af9d6cabc2454236e05957bec815 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.c +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.c @@ -364,10 +364,11 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman for (k = 0; k < mode_lib->vba.NumberOfActiveSurfaces; ++k) { v->DSCDelay[k] = dml32_DSCDelayRequirement(mode_lib->vba.DSCEnabled[k], mode_lib->vba.ODMCombineEnabled[k], mode_lib->vba.DSCInputBitPerComponent[k], - mode_lib->vba.OutputBpp[k], mode_lib->vba.HActive[k], mode_lib->vba.HTotal[k], + mode_lib->vba.OutputBppPerState[mode_lib->vba.VoltageLevel][k], + mode_lib->vba.HActive[k], mode_lib->vba.HTotal[k], mode_lib->vba.NumberOfDSCSlices[k], mode_lib->vba.OutputFormat[k], mode_lib->vba.Output[k], mode_lib->vba.PixelClock[k], - mode_lib->vba.PixelClockBackEnd[k]); + mode_lib->vba.PixelClockBackEnd[k], mode_lib->vba.ip.dsc_delay_factor_wa); } for (k = 0; k < mode_lib->vba.NumberOfActiveSurfaces; ++k) @@ -717,6 +718,8 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman do { MaxTotalRDBandwidth = 0; + DestinationLineTimesForPrefetchLessThan2 = false; + VRatioPrefetchMoreThanMax = false; #ifdef __DML_VBA_DEBUG__ dml_print("DML::%s: Start loop: VStartup = %d\n", __func__, mode_lib->vba.VStartupLines); #endif @@ -785,6 +788,8 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman v->SwathHeightY[k], v->SwathHeightC[k], TWait, + v->DRAMSpeedPerState[mode_lib->vba.VoltageLevel] <= MEM_STROBE_FREQ_MHZ ? + mode_lib->vba.ip.min_prefetch_in_strobe_us : 0, /* Output */ &v->DSTXAfterScaler[k], &v->DSTYAfterScaler[k], @@ -1627,7 +1632,7 @@ static void mode_support_configuration(struct vba_vars_st *v, && !mode_lib->vba.MSOOrODMSplitWithNonDPLink && !mode_lib->vba.NotEnoughLanesForMSO && mode_lib->vba.LinkCapacitySupport[i] == true && !mode_lib->vba.P2IWith420 - && !mode_lib->vba.DSCOnlyIfNecessaryWithBPP + //&& !mode_lib->vba.DSCOnlyIfNecessaryWithBPP && !mode_lib->vba.DSC422NativeNotSupported && !mode_lib->vba.MPCCombineMethodIncompatible && mode_lib->vba.ODMCombine2To1SupportCheckOK[i] == true @@ -2475,7 +2480,8 @@ void dml32_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l mode_lib->vba.OutputBppPerState[i][k], mode_lib->vba.HActive[k], mode_lib->vba.HTotal[k], mode_lib->vba.NumberOfDSCSlices[k], mode_lib->vba.OutputFormat[k], mode_lib->vba.Output[k], - mode_lib->vba.PixelClock[k], mode_lib->vba.PixelClockBackEnd[k]); + mode_lib->vba.PixelClock[k], mode_lib->vba.PixelClockBackEnd[k], + mode_lib->vba.ip.dsc_delay_factor_wa); } for (k = 0; k <= mode_lib->vba.NumberOfActiveSurfaces - 1; k++) { @@ -3190,6 +3196,7 @@ void dml32_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l mode_lib->vba.FCLKChangeLatency, mode_lib->vba.UrgLatency[i], mode_lib->vba.SREnterPlusExitTime); + memset(&v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull, 0, sizeof(DmlPipe)); v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.myPipe.Dppclk = mode_lib->vba.RequiredDPPCLK[i][j][k]; v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.myPipe.Dispclk = mode_lib->vba.RequiredDISPCLK[i][j]; v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.myPipe.PixelClock = mode_lib->vba.PixelClock[k]; @@ -3242,6 +3249,8 @@ void dml32_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l v->swath_width_chroma_ub_this_state[k], v->SwathHeightYThisState[k], v->SwathHeightCThisState[k], v->TWait, + v->DRAMSpeedPerState[i] <= MEM_STROBE_FREQ_MHZ ? + mode_lib->vba.ip.min_prefetch_in_strobe_us : 0, /* Output */ &v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.DSTXAfterScaler[k], diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.h b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.h index c62e0991358b32ed66fb457cebfbad64964fa09f..c8b28c83ddf480d597a833dd60ca77dfe9f25d52 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.h +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.h @@ -46,9 +46,14 @@ // Prefetch schedule max vratio #define __DML_MAX_VRATIO_PRE__ 4.0 +#define __DML_VBA_MAX_DST_Y_PRE__ 63.75 + #define BPP_INVALID 0 #define BPP_BLENDED_PIPE 0xffffffff +#define MEM_STROBE_FREQ_MHZ 1600 +#define MEM_STROBE_MAX_DELIVERY_TIME_US 60.0 + struct display_mode_lib; void dml32_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib); diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c index ad66e241f9ae21fb5a0b54e81ba7a9b7143b418d..debe46b24a3e14addc4aa7c43158979e10c32c8f 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c @@ -1726,7 +1726,8 @@ unsigned int dml32_DSCDelayRequirement(bool DSCEnabled, enum output_format_class OutputFormat, enum output_encoder_class Output, double PixelClock, - double PixelClockBackEnd) + double PixelClockBackEnd, + double dsc_delay_factor_wa) { unsigned int DSCDelayRequirement_val; @@ -1746,7 +1747,7 @@ unsigned int dml32_DSCDelayRequirement(bool DSCEnabled, } DSCDelayRequirement_val = DSCDelayRequirement_val + (HTotal - HActive) * - dml_ceil(DSCDelayRequirement_val / HActive, 1); + dml_ceil((double)DSCDelayRequirement_val / HActive, 1); DSCDelayRequirement_val = DSCDelayRequirement_val * PixelClock / PixelClockBackEnd; @@ -1764,7 +1765,7 @@ unsigned int dml32_DSCDelayRequirement(bool DSCEnabled, dml_print("DML::%s: DSCDelayRequirement_val = %d\n", __func__, DSCDelayRequirement_val); #endif - return DSCDelayRequirement_val; + return dml_ceil(DSCDelayRequirement_val * dsc_delay_factor_wa, 1); } void dml32_CalculateSurfaceSizeInMall( @@ -3416,6 +3417,7 @@ bool dml32_CalculatePrefetchSchedule( unsigned int SwathHeightY, unsigned int SwathHeightC, double TWait, + double TPreReq, /* Output */ double *DSTXAfterScaler, double *DSTYAfterScaler, @@ -3666,6 +3668,7 @@ bool dml32_CalculatePrefetchSchedule( dst_y_prefetch_equ = VStartup - (*TSetup + dml_max(TWait + TCalc, *Tdmdl)) / LineTime - (*DSTYAfterScaler + (double) *DSTXAfterScaler / (double) myPipe->HTotal); + dst_y_prefetch_equ = dml_min(dst_y_prefetch_equ, __DML_VBA_MAX_DST_Y_PRE__); #ifdef __DML_VBA_DEBUG__ dml_print("DML::%s: HTotal = %d\n", __func__, myPipe->HTotal); dml_print("DML::%s: min_Lsw = %f\n", __func__, min_Lsw); @@ -3725,7 +3728,8 @@ bool dml32_CalculatePrefetchSchedule( *VRatioPrefetchY = 0; *VRatioPrefetchC = 0; *RequiredPrefetchPixDataBWLuma = 0; - if (dst_y_prefetch_equ > 1) { + if (dst_y_prefetch_equ > 1 && + (Tpre_rounded >= TPreReq || dst_y_prefetch_equ == __DML_VBA_MAX_DST_Y_PRE__)) { double PrefetchBandwidth1; double PrefetchBandwidth2; double PrefetchBandwidth3; @@ -3871,7 +3875,11 @@ bool dml32_CalculatePrefetchSchedule( } if (dst_y_prefetch_oto < dst_y_prefetch_equ) { - *DestinationLinesForPrefetch = dst_y_prefetch_oto; + if (dst_y_prefetch_oto * LineTime < TPreReq) { + *DestinationLinesForPrefetch = dst_y_prefetch_equ; + } else { + *DestinationLinesForPrefetch = dst_y_prefetch_oto; + } TimeForFetchingMetaPTE = Tvm_oto; TimeForFetchingRowInVBlank = Tr0_oto; *PrefetchBandwidth = prefetch_bw_oto; @@ -4396,7 +4404,7 @@ void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport( if (v->NumberOfActiveSurfaces > 1) { ActiveClockChangeLatencyHidingY = ActiveClockChangeLatencyHidingY - - (1 - 1 / v->NumberOfActiveSurfaces) * SwathHeightY[k] * v->HTotal[k] + - (1.0 - 1.0 / v->NumberOfActiveSurfaces) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k]; } diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.h b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.h index 55cead0d423747331cf617f0f9c2373977ba21a0..3989c2a28faec6680392c9c4a56575a00e0be10f 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.h +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.h @@ -30,7 +30,7 @@ #include "os_types.h" #include "../dc_features.h" #include "../display_mode_structs.h" -#include "dml/display_mode_vba.h" +#include "../display_mode_vba.h" unsigned int dml32_dscceComputeDelay( unsigned int bpc, @@ -327,7 +327,8 @@ unsigned int dml32_DSCDelayRequirement(bool DSCEnabled, enum output_format_class OutputFormat, enum output_encoder_class Output, double PixelClock, - double PixelClockBackEnd); + double PixelClockBackEnd, + double dsc_delay_factor_wa); void dml32_CalculateSurfaceSizeInMall( unsigned int NumberOfActiveSurfaces, @@ -742,6 +743,7 @@ bool dml32_CalculatePrefetchSchedule( unsigned int SwathHeightY, unsigned int SwathHeightC, double TWait, + double TPreReq, /* Output */ double *DSTXAfterScaler, double *DSTYAfterScaler, diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_rq_dlg_calc_32.c b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_rq_dlg_calc_32.c index a1276f6b9581b493cd5a0733f326a59b0f198250..395ae8761980ff1fe3f73a9d1d088559ac9c6b1c 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_rq_dlg_calc_32.c +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_rq_dlg_calc_32.c @@ -291,8 +291,8 @@ void dml32_rq_dlg_get_dlg_reg(struct display_mode_lib *mode_lib, dml_print("DML_DLG: %s: vready_after_vcount0 = %d\n", __func__, dlg_regs->vready_after_vcount0); - dst_x_after_scaler = get_dst_x_after_scaler(mode_lib, e2e_pipe_param, num_pipes, pipe_idx); - dst_y_after_scaler = get_dst_y_after_scaler(mode_lib, e2e_pipe_param, num_pipes, pipe_idx); + dst_x_after_scaler = dml_ceil(get_dst_x_after_scaler(mode_lib, e2e_pipe_param, num_pipes, pipe_idx), 1); + dst_y_after_scaler = dml_ceil(get_dst_y_after_scaler(mode_lib, e2e_pipe_param, num_pipes, pipe_idx), 1); // do some adjustment on the dst_after scaler to account for odm combine mode dml_print("DML_DLG: %s: input dst_x_after_scaler = %d\n", __func__, dst_x_after_scaler); diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c b/drivers/gpu/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c index dd90f241e906527f376cb6e53acaedfefd3e7054..f4b176599be7a185da701399515ee0221357f27d 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c @@ -29,6 +29,7 @@ #include "dcn321_fpu.h" #include "dcn32/dcn32_resource.h" #include "dcn321/dcn321_resource.h" +#include "dml/dcn32/display_mode_vba_util_32.h" #define DCN3_2_DEFAULT_DET_SIZE 256 @@ -119,15 +120,15 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_21_soc = { }, }, .num_states = 1, - .sr_exit_time_us = 12.36, - .sr_enter_plus_exit_time_us = 16.72, + .sr_exit_time_us = 19.95, + .sr_enter_plus_exit_time_us = 24.36, .sr_exit_z8_time_us = 285.0, .sr_enter_plus_exit_z8_time_us = 320, .writeback_latency_us = 12.0, .round_trip_ping_latency_dcfclk_cycles = 263, - .urgent_latency_pixel_data_only_us = 4.0, - .urgent_latency_pixel_mixed_with_vm_data_us = 4.0, - .urgent_latency_vm_data_only_us = 4.0, + .urgent_latency_pixel_data_only_us = 4, + .urgent_latency_pixel_mixed_with_vm_data_us = 4, + .urgent_latency_vm_data_only_us = 4, .fclk_change_latency_us = 20, .usr_retraining_latency_us = 2, .smn_latency_us = 2, @@ -155,7 +156,7 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_21_soc = { .dispclk_dppclk_vco_speed_mhz = 4300.0, .do_urgent_latency_adjustment = true, .urgent_latency_adjustment_fabric_clock_component_us = 1.0, - .urgent_latency_adjustment_fabric_clock_reference_mhz = 1000, + .urgent_latency_adjustment_fabric_clock_reference_mhz = 3000, }; static void get_optimal_ntuple(struct _vcs_dpi_voltage_scaling_st *entry) @@ -538,9 +539,13 @@ void dcn321_update_bw_bounding_box_fpu(struct dc *dc, struct clk_bw_params *bw_p if (dc->ctx->dc_bios->vram_info.dram_channel_width_bytes) dcn3_21_soc.dram_channel_width_bytes = dc->ctx->dc_bios->vram_info.dram_channel_width_bytes; - } + /* DML DSC delay factor workaround */ + dcn3_21_ip.dsc_delay_factor_wa = dc->debug.dsc_delay_factor_wa_x1000 / 1000.0; + + dcn3_21_ip.min_prefetch_in_strobe_us = dc->debug.min_prefetch_in_strobe_ns / 1000.0; + /* Override dispclk_dppclk_vco_speed_mhz from Clk Mgr */ dcn3_21_soc.dispclk_dppclk_vco_speed_mhz = dc->clk_mgr->dentist_vco_freq_khz / 1000.0; dc->dml.soc.dispclk_dppclk_vco_speed_mhz = dc->clk_mgr->dentist_vco_freq_khz / 1000.0; diff --git a/drivers/gpu/drm/amd/display/dc/dml/display_mode_structs.h b/drivers/gpu/drm/amd/display/dc/dml/display_mode_structs.h index f33a8879b05ad66f87072b4efd634de020b15b35..64d602e6412f16ee288c23c33e4e14bc7983a1aa 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/display_mode_structs.h +++ b/drivers/gpu/drm/amd/display/dc/dml/display_mode_structs.h @@ -364,6 +364,10 @@ struct _vcs_dpi_ip_params_st { unsigned int max_num_dp2p0_outputs; unsigned int max_num_dp2p0_streams; unsigned int VBlankNomDefaultUS; + + /* DM workarounds */ + double dsc_delay_factor_wa; // TODO: Remove after implementing root cause fix + double min_prefetch_in_strobe_us; }; struct _vcs_dpi_display_xfc_params_st { diff --git a/drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c b/drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c index 03924aed8d5c77bc856b4a8c0200435957b45959..8e6585dab20ef31158cd28f47378f9a805529946 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c +++ b/drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c @@ -625,7 +625,7 @@ static void fetch_pipe_params(struct display_mode_lib *mode_lib) mode_lib->vba.skip_dio_check[mode_lib->vba.NumberOfActivePlanes] = dout->is_virtual; - if (!dout->dsc_enable) + if (dout->dsc_enable) mode_lib->vba.ForcedOutputLinkBPP[mode_lib->vba.NumberOfActivePlanes] = dout->output_bpp; else mode_lib->vba.ForcedOutputLinkBPP[mode_lib->vba.NumberOfActivePlanes] = 0.0; diff --git a/drivers/gpu/drm/amd/display/dc/gpio/dcn32/hw_factory_dcn32.c b/drivers/gpu/drm/amd/display/dc/gpio/dcn32/hw_factory_dcn32.c index d635b73af46fe3eaff6649897802d4445cbf769b..0ea52ba5ac827e162fecd74969ff21f301d4e90e 100644 --- a/drivers/gpu/drm/amd/display/dc/gpio/dcn32/hw_factory_dcn32.c +++ b/drivers/gpu/drm/amd/display/dc/gpio/dcn32/hw_factory_dcn32.c @@ -107,6 +107,13 @@ static const struct ddc_registers ddc_data_regs_dcn[] = { ddc_data_regs_dcn2(3), ddc_data_regs_dcn2(4), ddc_data_regs_dcn2(5), + { + // add a dummy entry for cases no such port + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, + .ddc_setup = 0, + .phy_aux_cntl = 0, + .dc_gpio_aux_ctrl_5 = 0 + }, { DDC_GPIO_VGA_REG_LIST(DATA), .ddc_setup = 0, @@ -121,6 +128,13 @@ static const struct ddc_registers ddc_clk_regs_dcn[] = { ddc_clk_regs_dcn2(3), ddc_clk_regs_dcn2(4), ddc_clk_regs_dcn2(5), + { + // add a dummy entry for cases no such port + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, + .ddc_setup = 0, + .phy_aux_cntl = 0, + .dc_gpio_aux_ctrl_5 = 0 + }, { DDC_GPIO_VGA_REG_LIST(CLK), .ddc_setup = 0, diff --git a/drivers/gpu/drm/amd/display/dc/gpio/hw_ddc.c b/drivers/gpu/drm/amd/display/dc/gpio/hw_ddc.c index 6fd38cdd68c0cb98cd2ab746fcf2bcfef99ba07c..525bc8881950d268a4534fe77f49312079aadbc3 100644 --- a/drivers/gpu/drm/amd/display/dc/gpio/hw_ddc.c +++ b/drivers/gpu/drm/amd/display/dc/gpio/hw_ddc.c @@ -94,11 +94,14 @@ static enum gpio_result set_config( * is required for detection of AUX mode */ if (hw_gpio->base.en != GPIO_DDC_LINE_VIP_PAD) { if (!ddc_data_pd_en || !ddc_clk_pd_en) { - - REG_SET_2(gpio.MASK_reg, regval, + if (hw_gpio->base.en == GPIO_DDC_LINE_DDC_VGA) { + // bit 4 of mask has different usage in some cases + REG_SET(gpio.MASK_reg, regval, DC_GPIO_DDC1DATA_PD_EN, 1); + } else { + REG_SET_2(gpio.MASK_reg, regval, DC_GPIO_DDC1DATA_PD_EN, 1, DC_GPIO_DDC1CLK_PD_EN, 1); - + } if (config_data->type == GPIO_CONFIG_TYPE_I2C_AUX_DUAL_MODE) msleep(3); diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_thermal.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_thermal.c index dad3e3741a4e8a5b2852cc7ae700eb3a55274005..190af79f3236fdb097b6c9e521ad8aac76bbbbe4 100644 --- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_thermal.c +++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_thermal.c @@ -67,22 +67,21 @@ int vega10_fan_ctrl_get_fan_speed_info(struct pp_hwmgr *hwmgr, int vega10_fan_ctrl_get_fan_speed_pwm(struct pp_hwmgr *hwmgr, uint32_t *speed) { - uint32_t current_rpm; - uint32_t percent = 0; - - if (hwmgr->thermal_controller.fanInfo.bNoFan) - return 0; + struct amdgpu_device *adev = hwmgr->adev; + uint32_t duty100, duty; + uint64_t tmp64; - if (vega10_get_current_rpm(hwmgr, ¤t_rpm)) - return -1; + duty100 = REG_GET_FIELD(RREG32_SOC15(THM, 0, mmCG_FDO_CTRL1), + CG_FDO_CTRL1, FMAX_DUTY100); + duty = REG_GET_FIELD(RREG32_SOC15(THM, 0, mmCG_THERMAL_STATUS), + CG_THERMAL_STATUS, FDO_PWM_DUTY); - if (hwmgr->thermal_controller. - advanceFanControlParameters.usMaxFanRPM != 0) - percent = current_rpm * 255 / - hwmgr->thermal_controller. - advanceFanControlParameters.usMaxFanRPM; + if (!duty100) + return -EINVAL; - *speed = MIN(percent, 255); + tmp64 = (uint64_t)duty * 255; + do_div(tmp64, duty100); + *speed = MIN((uint32_t)tmp64, 255); return 0; } diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c index 4fe75dd2b329daaa0cc94df3a40bbf4b5ae1148d..b880f4d7d67e628ed57cb8fad92f31887836a78f 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c @@ -1156,22 +1156,21 @@ static int smu_smc_hw_setup(struct smu_context *smu) uint64_t features_supported; int ret = 0; - if (adev->in_suspend && smu_is_dpm_running(smu)) { - dev_info(adev->dev, "dpm has been enabled\n"); - /* this is needed specifically */ - switch (adev->ip_versions[MP1_HWIP][0]) { - case IP_VERSION(11, 0, 7): - case IP_VERSION(11, 0, 11): - case IP_VERSION(11, 5, 0): - case IP_VERSION(11, 0, 12): + switch (adev->ip_versions[MP1_HWIP][0]) { + case IP_VERSION(11, 0, 7): + case IP_VERSION(11, 0, 11): + case IP_VERSION(11, 5, 0): + case IP_VERSION(11, 0, 12): + if (adev->in_suspend && smu_is_dpm_running(smu)) { + dev_info(adev->dev, "dpm has been enabled\n"); ret = smu_system_features_control(smu, true); if (ret) dev_err(adev->dev, "Failed system features control!\n"); - break; - default: - break; + return ret; } - return ret; + break; + default: + break; } ret = smu_init_display_count(smu, 0); diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h index e2fa3b066b968966a6e0e54a6d71ae884a10a790..f816b1dd110ee6a0fa44af6752a97820e507a046 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h @@ -1388,6 +1388,14 @@ enum smu_cmn2asic_mapping_type { CMN2ASIC_MAPPING_WORKLOAD, }; +enum smu_baco_seq { + BACO_SEQ_BACO = 0, + BACO_SEQ_MSR, + BACO_SEQ_BAMACO, + BACO_SEQ_ULPS, + BACO_SEQ_COUNT, +}; + #define MSG_MAP(msg, index, valid_in_vf) \ [SMU_MSG_##msg] = {1, (index), (valid_in_vf)} diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu13_driver_if_v13_0_7.h b/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu13_driver_if_v13_0_7.h index 25c08f963f4994fb827f2a09599930e221db1504..d6b13933a98fbe781aa7dac134680fd4c9b23554 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu13_driver_if_v13_0_7.h +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu13_driver_if_v13_0_7.h @@ -25,10 +25,10 @@ // *** IMPORTANT *** // PMFW TEAM: Always increment the interface version on any change to this file -#define SMU13_DRIVER_IF_VERSION 0x2C +#define SMU13_DRIVER_IF_VERSION 0x35 //Increment this version if SkuTable_t or BoardTable_t change -#define PPTABLE_VERSION 0x20 +#define PPTABLE_VERSION 0x27 #define NUM_GFXCLK_DPM_LEVELS 16 #define NUM_SOCCLK_DPM_LEVELS 8 @@ -96,7 +96,7 @@ #define FEATURE_MEM_TEMP_READ_BIT 47 #define FEATURE_ATHUB_MMHUB_PG_BIT 48 #define FEATURE_SOC_PCC_BIT 49 -#define FEATURE_SPARE_50_BIT 50 +#define FEATURE_EDC_PWRBRK_BIT 50 #define FEATURE_SPARE_51_BIT 51 #define FEATURE_SPARE_52_BIT 52 #define FEATURE_SPARE_53_BIT 53 @@ -282,15 +282,15 @@ typedef enum { } I2cControllerPort_e; typedef enum { - I2C_CONTROLLER_NAME_VR_GFX = 0, - I2C_CONTROLLER_NAME_VR_SOC, - I2C_CONTROLLER_NAME_VR_VMEMP, - I2C_CONTROLLER_NAME_VR_VDDIO, - I2C_CONTROLLER_NAME_LIQUID0, - I2C_CONTROLLER_NAME_LIQUID1, - I2C_CONTROLLER_NAME_PLX, - I2C_CONTROLLER_NAME_OTHER, - I2C_CONTROLLER_NAME_COUNT, + I2C_CONTROLLER_NAME_VR_GFX = 0, + I2C_CONTROLLER_NAME_VR_SOC, + I2C_CONTROLLER_NAME_VR_VMEMP, + I2C_CONTROLLER_NAME_VR_VDDIO, + I2C_CONTROLLER_NAME_LIQUID0, + I2C_CONTROLLER_NAME_LIQUID1, + I2C_CONTROLLER_NAME_PLX, + I2C_CONTROLLER_NAME_FAN_INTAKE, + I2C_CONTROLLER_NAME_COUNT, } I2cControllerName_e; typedef enum { @@ -302,6 +302,7 @@ typedef enum { I2C_CONTROLLER_THROTTLER_LIQUID0, I2C_CONTROLLER_THROTTLER_LIQUID1, I2C_CONTROLLER_THROTTLER_PLX, + I2C_CONTROLLER_THROTTLER_FAN_INTAKE, I2C_CONTROLLER_THROTTLER_INA3221, I2C_CONTROLLER_THROTTLER_COUNT, } I2cControllerThrottler_e; @@ -309,8 +310,9 @@ typedef enum { typedef enum { I2C_CONTROLLER_PROTOCOL_VR_XPDE132G5, I2C_CONTROLLER_PROTOCOL_VR_IR35217, - I2C_CONTROLLER_PROTOCOL_TMP_TMP102A, + I2C_CONTROLLER_PROTOCOL_TMP_MAX31875, I2C_CONTROLLER_PROTOCOL_INA3221, + I2C_CONTROLLER_PROTOCOL_TMP_MAX6604, I2C_CONTROLLER_PROTOCOL_COUNT, } I2cControllerProtocol_e; @@ -690,6 +692,9 @@ typedef struct { #define PP_OD_FEATURE_UCLK_BIT 8 #define PP_OD_FEATURE_ZERO_FAN_BIT 9 #define PP_OD_FEATURE_TEMPERATURE_BIT 10 +#define PP_OD_FEATURE_POWER_FEATURE_CTRL_BIT 11 +#define PP_OD_FEATURE_ASIC_TDC_BIT 12 +#define PP_OD_FEATURE_COUNT 13 typedef enum { PP_OD_POWER_FEATURE_ALWAYS_ENABLED, @@ -697,6 +702,11 @@ typedef enum { PP_OD_POWER_FEATURE_ALWAYS_DISABLED, } PP_OD_POWER_FEATURE_e; +typedef enum { + FAN_MODE_AUTO = 0, + FAN_MODE_MANUAL_LINEAR, +} FanMode_e; + typedef struct { uint32_t FeatureCtrlMask; @@ -708,8 +718,8 @@ typedef struct { uint8_t RuntimePwrSavingFeaturesCtrl; //Frequency changes - int16_t GfxclkFmin; // MHz - int16_t GfxclkFmax; // MHz + int16_t GfxclkFmin; // MHz + int16_t GfxclkFmax; // MHz uint16_t UclkFmin; // MHz uint16_t UclkFmax; // MHz @@ -730,7 +740,12 @@ typedef struct { uint8_t MaxOpTemp; uint8_t Padding[4]; - uint32_t Spare[12]; + uint16_t GfxVoltageFullCtrlMode; + uint16_t GfxclkFullCtrlMode; + uint16_t UclkFullCtrlMode; + int16_t AsicTdc; + + uint32_t Spare[10]; uint32_t MmHubPadding[8]; // SMU internal use. Adding here instead of external as a workaround } OverDriveTable_t; @@ -748,8 +763,8 @@ typedef struct { uint8_t IdlePwrSavingFeaturesCtrl; uint8_t RuntimePwrSavingFeaturesCtrl; - uint16_t GfxclkFmin; // MHz - uint16_t GfxclkFmax; // MHz + int16_t GfxclkFmin; // MHz + int16_t GfxclkFmax; // MHz uint16_t UclkFmin; // MHz uint16_t UclkFmax; // MHz @@ -769,7 +784,12 @@ typedef struct { uint8_t MaxOpTemp; uint8_t Padding[4]; - uint32_t Spare[12]; + uint16_t GfxVoltageFullCtrlMode; + uint16_t GfxclkFullCtrlMode; + uint16_t UclkFullCtrlMode; + int16_t AsicTdc; + + uint32_t Spare[10]; } OverDriveLimits_t; @@ -903,7 +923,8 @@ typedef struct { uint16_t FanStartTempMin; uint16_t FanStartTempMax; - uint32_t Spare[12]; + uint16_t PowerMinPpt0[POWER_SOURCE_COUNT]; + uint32_t Spare[11]; } MsgLimits_t; @@ -1086,11 +1107,13 @@ typedef struct { uint32_t GfxoffSpare[15]; // GFX GPO - float DfllBtcMasterScalerM; + uint32_t DfllBtcMasterScalerM; int32_t DfllBtcMasterScalerB; - float DfllBtcSlaveScalerM; + uint32_t DfllBtcSlaveScalerM; int32_t DfllBtcSlaveScalerB; - uint32_t GfxGpoSpare[12]; + uint32_t DfllPccAsWaitCtrl; //GDFLL_AS_WAIT_CTRL_PCC register value to be passed to RLC msg + uint32_t DfllPccAsStepCtrl; //GDFLL_AS_STEP_CTRL_PCC register value to be passed to RLC msg + uint32_t GfxGpoSpare[10]; // GFX DCS @@ -1106,7 +1129,10 @@ typedef struct { uint16_t DcsTimeout; //This is the amount of time SMU FW waits for RLC to put GFX into GFXOFF before reverting to the fallback mechanism of throttling GFXCLK to Fmin. - uint32_t DcsSpare[16]; + uint32_t DcsSpare[14]; + + // UCLK section + uint16_t ShadowFreqTableUclk[NUM_UCLK_DPM_LEVELS]; // In MHz // UCLK section uint8_t UseStrobeModeOptimizations; //Set to indicate that FW should use strobe mode optimizations @@ -1163,13 +1189,14 @@ typedef struct { uint16_t IntakeTempHighIntakeAcousticLimit; uint16_t IntakeTempAcouticLimitReleaseRate; - uint16_t FanStalledTempLimitOffset; + int16_t FanAbnormalTempLimitOffset; uint16_t FanStalledTriggerRpm; - uint16_t FanAbnormalTriggerRpm; - uint16_t FanPadding; - - uint32_t FanSpare[14]; + uint16_t FanAbnormalTriggerRpmCoeff; + uint16_t FanAbnormalDetectionEnable; + uint8_t FanIntakeSensorSupport; + uint8_t FanIntakePadding[3]; + uint32_t FanSpare[13]; // SECTION: VDD_GFX AVFS uint8_t OverrideGfxAvfsFuses; @@ -1193,7 +1220,6 @@ typedef struct { uint32_t dGbV_dT_vmin; uint32_t dGbV_dT_vmax; - //Unused: PMFW-9370 uint32_t V2F_vmin_range_low; uint32_t V2F_vmin_range_high; uint32_t V2F_vmax_range_low; @@ -1238,8 +1264,21 @@ typedef struct { // SECTION: Advanced Options uint32_t DebugOverrides; + // Section: Total Board Power idle vs active coefficients + uint8_t TotalBoardPowerSupport; + uint8_t TotalBoardPowerPadding[3]; + + int16_t TotalIdleBoardPowerM; + int16_t TotalIdleBoardPowerB; + int16_t TotalBoardPowerM; + int16_t TotalBoardPowerB; + + QuadraticInt_t qFeffCoeffGameClock[POWER_SOURCE_COUNT]; + QuadraticInt_t qFeffCoeffBaseClock[POWER_SOURCE_COUNT]; + QuadraticInt_t qFeffCoeffBoostClock[POWER_SOURCE_COUNT]; + // SECTION: Sku Reserved - uint32_t Spare[64]; + uint32_t Spare[43]; // Padding for MMHUB - do not modify this uint32_t MmHubPadding[8]; @@ -1304,7 +1343,8 @@ typedef struct { // SECTION: Clock Spread Spectrum // UCLK Spread Spectrum - uint16_t UclkSpreadPadding; + uint8_t UclkTrainingModeSpreadPercent; // Q4.4 + uint8_t UclkSpreadPadding; uint16_t UclkSpreadFreq; // kHz // UCLK Spread Spectrum @@ -1317,11 +1357,7 @@ typedef struct { // Section: Memory Config uint8_t DramWidth; // Width of interface to the channel for each DRAM module. See DRAM_BIT_WIDTH_TYPE_e - uint8_t PaddingMem1[3]; - - // Section: Total Board Power - uint16_t TotalBoardPower; //Only needed for TCP Estimated case, where TCP = TGP+Total Board Power - uint16_t BoardPowerPadding; + uint8_t PaddingMem1[7]; // SECTION: UMC feature flags uint8_t HsrEnabled; @@ -1423,8 +1459,11 @@ typedef struct { uint16_t Vcn1ActivityPercentage ; uint32_t EnergyAccumulator; - uint16_t AverageSocketPower ; + uint16_t AverageSocketPower; + uint16_t AverageTotalBoardPower; + uint16_t AvgTemperature[TEMP_COUNT]; + uint16_t AvgTemperatureFanIntake; uint8_t PcieRate ; uint8_t PcieWidth ; @@ -1592,5 +1631,7 @@ typedef struct { #define IH_INTERRUPT_CONTEXT_ID_AUDIO_D0 0x5 #define IH_INTERRUPT_CONTEXT_ID_AUDIO_D3 0x6 #define IH_INTERRUPT_CONTEXT_ID_THERMAL_THROTTLING 0x7 +#define IH_INTERRUPT_CONTEXT_ID_FAN_ABNORMAL 0x8 +#define IH_INTERRUPT_CONTEXT_ID_FAN_RECOVERY 0x9 #endif diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v13_0_4_ppsmc.h b/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v13_0_4_ppsmc.h index d9b0cd752200656f53e48ff5adfadffe88ed7f5a..f4d6c07b56ea7c75d3073a6634fb75148408c4a4 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v13_0_4_ppsmc.h +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/pmfw_if/smu_v13_0_4_ppsmc.h @@ -54,14 +54,14 @@ #define PPSMC_MSG_TestMessage 0x01 ///< To check if PMFW is alive and responding. Requirement specified by PMFW team #define PPSMC_MSG_GetPmfwVersion 0x02 ///< Get PMFW version #define PPSMC_MSG_GetDriverIfVersion 0x03 ///< Get PMFW_DRIVER_IF version -#define PPSMC_MSG_EnableGfxOff 0x04 ///< Enable GFXOFF -#define PPSMC_MSG_DisableGfxOff 0x05 ///< Disable GFXOFF +#define PPSMC_MSG_SPARE0 0x04 ///< SPARE +#define PPSMC_MSG_SPARE1 0x05 ///< SPARE #define PPSMC_MSG_PowerDownVcn 0x06 ///< Power down VCN #define PPSMC_MSG_PowerUpVcn 0x07 ///< Power up VCN; VCN is power gated by default #define PPSMC_MSG_SetHardMinVcn 0x08 ///< For wireless display #define PPSMC_MSG_SetSoftMinGfxclk 0x09 ///< Set SoftMin for GFXCLK, argument is frequency in MHz -#define PPSMC_MSG_ActiveProcessNotify 0x0A ///< Needs update -#define PPSMC_MSG_ForcePowerDownGfx 0x0B ///< Force power down GFX, i.e. enter GFXOFF +#define PPSMC_MSG_SPARE2 0x0A ///< SPARE +#define PPSMC_MSG_SPARE3 0x0B ///< SPARE #define PPSMC_MSG_PrepareMp1ForUnload 0x0C ///< Prepare PMFW for GFX driver unload #define PPSMC_MSG_SetDriverDramAddrHigh 0x0D ///< Set high 32 bits of DRAM address for Driver table transfer #define PPSMC_MSG_SetDriverDramAddrLow 0x0E ///< Set low 32 bits of DRAM address for Driver table transfer @@ -73,8 +73,7 @@ #define PPSMC_MSG_SetSoftMinFclk 0x14 ///< Set hard min for FCLK #define PPSMC_MSG_SetSoftMinVcn 0x15 ///< Set soft min for VCN clocks (VCLK and DCLK) - -#define PPSMC_MSG_EnableGfxImu 0x16 ///< Needs update +#define PPSMC_MSG_EnableGfxImu 0x16 ///< Enable GFX IMU #define PPSMC_MSG_GetGfxclkFrequency 0x17 ///< Get GFX clock frequency #define PPSMC_MSG_GetFclkFrequency 0x18 ///< Get FCLK frequency @@ -102,8 +101,8 @@ #define PPSMC_MSG_SetHardMinIspxclkByFreq 0x2C ///< Set HardMin by frequency for ISPXCLK #define PPSMC_MSG_PowerDownUmsch 0x2D ///< Power down VCN.UMSCH (aka VSCH) scheduler #define PPSMC_MSG_PowerUpUmsch 0x2E ///< Power up VCN.UMSCH (aka VSCH) scheduler -#define PPSMC_Message_IspStutterOn_MmhubPgDis 0x2F ///< ISP StutterOn mmHub PgDis -#define PPSMC_Message_IspStutterOff_MmhubPgEn 0x30 ///< ISP StufferOff mmHub PgEn +#define PPSMC_MSG_IspStutterOn_MmhubPgDis 0x2F ///< ISP StutterOn mmHub PgDis +#define PPSMC_MSG_IspStutterOff_MmhubPgEn 0x30 ///< ISP StufferOff mmHub PgEn #define PPSMC_Message_Count 0x31 ///< Total number of PPSMC messages /** @}*/ diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h index a9215494dcddb66d2e7919581b6ff863bac7d57e..d466db6f0ad4f43cae9615b6596aba77baec7c47 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h @@ -147,14 +147,6 @@ struct smu_11_5_power_context { uint32_t max_fast_ppt_limit; }; -enum smu_v11_0_baco_seq { - BACO_SEQ_BACO = 0, - BACO_SEQ_MSR, - BACO_SEQ_BAMACO, - BACO_SEQ_ULPS, - BACO_SEQ_COUNT, -}; - #if defined(SWSMU_CODE_LAYER_L2) || defined(SWSMU_CODE_LAYER_L3) int smu_v11_0_init_microcode(struct smu_context *smu); @@ -257,7 +249,7 @@ int smu_v11_0_baco_enter(struct smu_context *smu); int smu_v11_0_baco_exit(struct smu_context *smu); int smu_v11_0_baco_set_armd3_sequence(struct smu_context *smu, - enum smu_v11_0_baco_seq baco_seq); + enum smu_baco_seq baco_seq); int smu_v11_0_mode1_reset(struct smu_context *smu); diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h index 80fb583b18d93f0d0ddf4c92315632456f74e9cb..865d6358918d27a0a8152836cf2892a6b4e8f4de 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h @@ -31,7 +31,7 @@ #define SMU13_DRIVER_IF_VERSION_SMU_V13_0_4 0x07 #define SMU13_DRIVER_IF_VERSION_SMU_V13_0_5 0x04 #define SMU13_DRIVER_IF_VERSION_SMU_V13_0_0_10 0x32 -#define SMU13_DRIVER_IF_VERSION_SMU_V13_0_7 0x2C +#define SMU13_DRIVER_IF_VERSION_SMU_V13_0_7 0x35 #define SMU13_DRIVER_IF_VERSION_SMU_V13_0_10 0x1D #define SMU13_MODE1_RESET_WAIT_TIME_IN_MS 500 //500ms @@ -124,14 +124,6 @@ struct smu_13_0_power_context { enum smu_13_0_power_state power_state; }; -enum smu_v13_0_baco_seq { - BACO_SEQ_BACO = 0, - BACO_SEQ_MSR, - BACO_SEQ_BAMACO, - BACO_SEQ_ULPS, - BACO_SEQ_COUNT, -}; - #if defined(SWSMU_CODE_LAYER_L2) || defined(SWSMU_CODE_LAYER_L3) int smu_v13_0_init_microcode(struct smu_context *smu); @@ -218,6 +210,9 @@ int smu_v13_0_set_azalia_d3_pme(struct smu_context *smu); int smu_v13_0_get_max_sustainable_clocks_by_dc(struct smu_context *smu, struct pp_smu_nv_clock_table *max_clocks); +int smu_v13_0_baco_set_armd3_sequence(struct smu_context *smu, + enum smu_baco_seq baco_seq); + bool smu_v13_0_baco_is_support(struct smu_context *smu); enum smu_baco_state smu_v13_0_baco_get_state(struct smu_context *smu); diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c index 74996a8fb67122de87e8f5238e92635e293fa8b0..697e98a0a20ab9c5afc74305e2eb5b66e6e34a1e 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c @@ -377,7 +377,13 @@ static void sienna_cichlid_check_bxco_support(struct smu_context *smu) if (((adev->pdev->device == 0x73A1) && (adev->pdev->revision == 0x00)) || ((adev->pdev->device == 0x73BF) && - (adev->pdev->revision == 0xCF))) + (adev->pdev->revision == 0xCF)) || + ((adev->pdev->device == 0x7422) && + (adev->pdev->revision == 0x00)) || + ((adev->pdev->device == 0x73A3) && + (adev->pdev->revision == 0x00)) || + ((adev->pdev->device == 0x73E3) && + (adev->pdev->revision == 0x00))) smu_baco->platform_support = false; } diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c index dccbd9f707238922da482404622241aa09926f4a..70b560737687e95db48dac437eae24705c4504e3 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c @@ -1576,7 +1576,7 @@ int smu_v11_0_set_azalia_d3_pme(struct smu_context *smu) } int smu_v11_0_baco_set_armd3_sequence(struct smu_context *smu, - enum smu_v11_0_baco_seq baco_seq) + enum smu_baco_seq baco_seq) { return smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_ArmD3, baco_seq, NULL); } diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c index 43fb102a65f56847d5e1874882b4f0e2e2bae1c9..89f0f6eb19f3d12d7077a436961a0d1841c208e7 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c @@ -2230,6 +2230,15 @@ int smu_v13_0_gfx_ulv_control(struct smu_context *smu, return ret; } +int smu_v13_0_baco_set_armd3_sequence(struct smu_context *smu, + enum smu_baco_seq baco_seq) +{ + return smu_cmn_send_smc_msg_with_param(smu, + SMU_MSG_ArmD3, + baco_seq, + NULL); +} + bool smu_v13_0_baco_is_support(struct smu_context *smu) { struct smu_baco_context *smu_baco = &smu->smu_baco; diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c index 29529328152d017bba1fc879f915af3321de81fc..f0121d171630198a7297d2d8e6cea9fc90836b8e 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c @@ -120,6 +120,7 @@ static struct cmn2asic_msg_mapping smu_v13_0_0_message_map[SMU_MSG_MAX_COUNT] = MSG_MAP(Mode1Reset, PPSMC_MSG_Mode1Reset, 0), MSG_MAP(PrepareMp1ForUnload, PPSMC_MSG_PrepareMp1ForUnload, 0), MSG_MAP(DFCstateControl, PPSMC_MSG_SetExternalClientDfCstateAllow, 0), + MSG_MAP(ArmD3, PPSMC_MSG_ArmD3, 0), }; static struct cmn2asic_mapping smu_v13_0_0_clk_map[SMU_CLK_COUNT] = { @@ -1566,6 +1567,31 @@ static int smu_v13_0_0_set_power_profile_mode(struct smu_context *smu, NULL); } +static int smu_v13_0_0_baco_enter(struct smu_context *smu) +{ + struct smu_baco_context *smu_baco = &smu->smu_baco; + struct amdgpu_device *adev = smu->adev; + + if (adev->in_runpm && smu_cmn_is_audio_func_enabled(adev)) + return smu_v13_0_baco_set_armd3_sequence(smu, + smu_baco->maco_support ? BACO_SEQ_BAMACO : BACO_SEQ_BACO); + else + return smu_v13_0_baco_enter(smu); +} + +static int smu_v13_0_0_baco_exit(struct smu_context *smu) +{ + struct amdgpu_device *adev = smu->adev; + + if (adev->in_runpm && smu_cmn_is_audio_func_enabled(adev)) { + /* Wait for PMFW handling for the Dstate change */ + usleep_range(10000, 11000); + return smu_v13_0_baco_set_armd3_sequence(smu, BACO_SEQ_ULPS); + } else { + return smu_v13_0_baco_exit(smu); + } +} + static bool smu_v13_0_0_is_mode1_reset_supported(struct smu_context *smu) { struct amdgpu_device *adev = smu->adev; @@ -1827,8 +1853,8 @@ static const struct pptable_funcs smu_v13_0_0_ppt_funcs = { .baco_is_support = smu_v13_0_baco_is_support, .baco_get_state = smu_v13_0_baco_get_state, .baco_set_state = smu_v13_0_baco_set_state, - .baco_enter = smu_v13_0_baco_enter, - .baco_exit = smu_v13_0_baco_exit, + .baco_enter = smu_v13_0_0_baco_enter, + .baco_exit = smu_v13_0_0_baco_exit, .mode1_reset_is_support = smu_v13_0_0_is_mode1_reset_supported, .mode1_reset = smu_v13_0_mode1_reset, .set_mp1_state = smu_v13_0_0_set_mp1_state, diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c index c4102cfb734c24802824be9300e768a2f4382e3f..d74debc584f89abec9bba396e8988d7d8b0573c0 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c @@ -122,6 +122,7 @@ static struct cmn2asic_msg_mapping smu_v13_0_7_message_map[SMU_MSG_MAX_COUNT] = MSG_MAP(PrepareMp1ForUnload, PPSMC_MSG_PrepareMp1ForUnload, 0), MSG_MAP(SetMGpuFanBoostLimitRpm, PPSMC_MSG_SetMGpuFanBoostLimitRpm, 0), MSG_MAP(DFCstateControl, PPSMC_MSG_SetExternalClientDfCstateAllow, 0), + MSG_MAP(ArmD3, PPSMC_MSG_ArmD3, 0), }; static struct cmn2asic_mapping smu_v13_0_7_clk_map[SMU_CLK_COUNT] = { @@ -1578,6 +1579,31 @@ static int smu_v13_0_7_set_mp1_state(struct smu_context *smu, return ret; } +static int smu_v13_0_7_baco_enter(struct smu_context *smu) +{ + struct smu_baco_context *smu_baco = &smu->smu_baco; + struct amdgpu_device *adev = smu->adev; + + if (adev->in_runpm && smu_cmn_is_audio_func_enabled(adev)) + return smu_v13_0_baco_set_armd3_sequence(smu, + smu_baco->maco_support ? BACO_SEQ_BAMACO : BACO_SEQ_BACO); + else + return smu_v13_0_baco_enter(smu); +} + +static int smu_v13_0_7_baco_exit(struct smu_context *smu) +{ + struct amdgpu_device *adev = smu->adev; + + if (adev->in_runpm && smu_cmn_is_audio_func_enabled(adev)) { + /* Wait for PMFW handling for the Dstate change */ + usleep_range(10000, 11000); + return smu_v13_0_baco_set_armd3_sequence(smu, BACO_SEQ_ULPS); + } else { + return smu_v13_0_baco_exit(smu); + } +} + static bool smu_v13_0_7_is_mode1_reset_supported(struct smu_context *smu) { struct amdgpu_device *adev = smu->adev; @@ -1655,8 +1681,8 @@ static const struct pptable_funcs smu_v13_0_7_ppt_funcs = { .baco_is_support = smu_v13_0_baco_is_support, .baco_get_state = smu_v13_0_baco_get_state, .baco_set_state = smu_v13_0_baco_set_state, - .baco_enter = smu_v13_0_baco_enter, - .baco_exit = smu_v13_0_baco_exit, + .baco_enter = smu_v13_0_7_baco_enter, + .baco_exit = smu_v13_0_7_baco_exit, .mode1_reset_is_support = smu_v13_0_7_is_mode1_reset_supported, .mode1_reset = smu_v13_0_mode1_reset, .set_mp1_state = smu_v13_0_7_set_mp1_state, diff --git a/drivers/gpu/drm/display/drm_dp_dual_mode_helper.c b/drivers/gpu/drm/display/drm_dp_dual_mode_helper.c index 3ea53bb67d3bdd316138c423925d24c72c1d1175..bd61e20770a5be20b8978be47a3ba2eaae0c3289 100644 --- a/drivers/gpu/drm/display/drm_dp_dual_mode_helper.c +++ b/drivers/gpu/drm/display/drm_dp_dual_mode_helper.c @@ -63,23 +63,45 @@ ssize_t drm_dp_dual_mode_read(struct i2c_adapter *adapter, u8 offset, void *buffer, size_t size) { + u8 zero = 0; + char *tmpbuf = NULL; + /* + * As sub-addressing is not supported by all adaptors, + * always explicitly read from the start and discard + * any bytes that come before the requested offset. + * This way, no matter whether the adaptor supports it + * or not, we'll end up reading the proper data. + */ struct i2c_msg msgs[] = { { .addr = DP_DUAL_MODE_SLAVE_ADDRESS, .flags = 0, .len = 1, - .buf = &offset, + .buf = &zero, }, { .addr = DP_DUAL_MODE_SLAVE_ADDRESS, .flags = I2C_M_RD, - .len = size, + .len = size + offset, .buf = buffer, }, }; int ret; + if (offset) { + tmpbuf = kmalloc(size + offset, GFP_KERNEL); + if (!tmpbuf) + return -ENOMEM; + + msgs[1].buf = tmpbuf; + } + ret = i2c_transfer(adapter, msgs, ARRAY_SIZE(msgs)); + if (tmpbuf) + memcpy(buffer, tmpbuf + offset, size); + + kfree(tmpbuf); + if (ret < 0) return ret; if (ret != ARRAY_SIZE(msgs)) @@ -208,18 +230,6 @@ enum drm_dp_dual_mode_type drm_dp_dual_mode_detect(const struct drm_device *dev, if (ret) return DRM_DP_DUAL_MODE_UNKNOWN; - /* - * Sigh. Some (maybe all?) type 1 adaptors are broken and ack - * the offset but ignore it, and instead they just always return - * data from the start of the HDMI ID buffer. So for a broken - * type 1 HDMI adaptor a single byte read will always give us - * 0x44, and for a type 1 DVI adaptor it should give 0x00 - * (assuming it implements any registers). Fortunately neither - * of those values will match the type 2 signature of the - * DP_DUAL_MODE_ADAPTOR_ID register so we can proceed with - * the type 2 adaptor detection safely even in the presence - * of broken type 1 adaptors. - */ ret = drm_dp_dual_mode_read(adapter, DP_DUAL_MODE_ADAPTOR_ID, &adaptor_id, sizeof(adaptor_id)); drm_dbg_kms(dev, "DP dual mode adaptor ID: %02x (err %zd)\n", adaptor_id, ret); @@ -233,11 +243,10 @@ enum drm_dp_dual_mode_type drm_dp_dual_mode_detect(const struct drm_device *dev, return DRM_DP_DUAL_MODE_TYPE2_DVI; } /* - * If neither a proper type 1 ID nor a broken type 1 adaptor - * as described above, assume type 1, but let the user know - * that we may have misdetected the type. + * If not a proper type 1 ID, still assume type 1, but let + * the user know that we may have misdetected the type. */ - if (!is_type1_adaptor(adaptor_id) && adaptor_id != hdmi_id[0]) + if (!is_type1_adaptor(adaptor_id)) drm_err(dev, "Unexpected DP dual mode adaptor ID %02x\n", adaptor_id); } @@ -343,10 +352,8 @@ EXPORT_SYMBOL(drm_dp_dual_mode_get_tmds_output); * @enable: enable (as opposed to disable) the TMDS output buffers * * Set the state of the TMDS output buffers in the adaptor. For - * type2 this is set via the DP_DUAL_MODE_TMDS_OEN register. As - * some type 1 adaptors have problems with registers (see comments - * in drm_dp_dual_mode_detect()) we avoid touching the register, - * making this function a no-op on type 1 adaptors. + * type2 this is set via the DP_DUAL_MODE_TMDS_OEN register. + * Type1 adaptors do not support any register writes. * * Returns: * 0 on success, negative error code on failure diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c index ecd22c038c8c0cae461ee14c42b95fdcf5e471ad..51a46689cda70f0b7e2ae8471a6ec410546844b2 100644 --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c @@ -5186,7 +5186,7 @@ int drm_dp_mst_add_affected_dsc_crtcs(struct drm_atomic_state *state, struct drm mst_state = drm_atomic_get_mst_topology_state(state, mgr); if (IS_ERR(mst_state)) - return -EINVAL; + return PTR_ERR(mst_state); list_for_each_entry(pos, &mst_state->payloads, next) { diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 8214a0b1ab7f18e52d6f58631897b67200d2c7f7..203bf8d6c34c4a5f9c015c602142868c8bf7052f 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -615,7 +615,7 @@ static int drm_dev_init(struct drm_device *dev, mutex_init(&dev->clientlist_mutex); mutex_init(&dev->master_mutex); - ret = drmm_add_action(dev, drm_dev_init_release, NULL); + ret = drmm_add_action_or_reset(dev, drm_dev_init_release, NULL); if (ret) return ret; diff --git a/drivers/gpu/drm/drm_format_helper.c b/drivers/gpu/drm/drm_format_helper.c index e2f76621453c7bfdae76d727800b5886bba98b13..3ee59bae9d2ffee1f7304ed0b14617b49a59b047 100644 --- a/drivers/gpu/drm/drm_format_helper.c +++ b/drivers/gpu/drm/drm_format_helper.c @@ -807,6 +807,38 @@ static bool is_listed_fourcc(const uint32_t *fourccs, size_t nfourccs, uint32_t return false; } +static const uint32_t conv_from_xrgb8888[] = { + DRM_FORMAT_XRGB8888, + DRM_FORMAT_ARGB8888, + DRM_FORMAT_XRGB2101010, + DRM_FORMAT_ARGB2101010, + DRM_FORMAT_RGB565, + DRM_FORMAT_RGB888, +}; + +static const uint32_t conv_from_rgb565_888[] = { + DRM_FORMAT_XRGB8888, + DRM_FORMAT_ARGB8888, +}; + +static bool is_conversion_supported(uint32_t from, uint32_t to) +{ + switch (from) { + case DRM_FORMAT_XRGB8888: + case DRM_FORMAT_ARGB8888: + return is_listed_fourcc(conv_from_xrgb8888, ARRAY_SIZE(conv_from_xrgb8888), to); + case DRM_FORMAT_RGB565: + case DRM_FORMAT_RGB888: + return is_listed_fourcc(conv_from_rgb565_888, ARRAY_SIZE(conv_from_rgb565_888), to); + case DRM_FORMAT_XRGB2101010: + return to == DRM_FORMAT_ARGB2101010; + case DRM_FORMAT_ARGB2101010: + return to == DRM_FORMAT_XRGB2101010; + default: + return false; + } +} + /** * drm_fb_build_fourcc_list - Filters a list of supported color formats against * the device's native formats @@ -827,7 +859,9 @@ static bool is_listed_fourcc(const uint32_t *fourccs, size_t nfourccs, uint32_t * be handed over to drm_universal_plane_init() et al. Native formats * will go before emulated formats. Other heuristics might be applied * to optimize the order. Formats near the beginning of the list are - * usually preferred over formats near the end of the list. + * usually preferred over formats near the end of the list. Formats + * without conversion helpers will be skipped. New drivers should only + * pass in XRGB8888 and avoid exposing additional emulated formats. * * Returns: * The number of color-formats 4CC codes returned in @fourccs_out. @@ -839,7 +873,7 @@ size_t drm_fb_build_fourcc_list(struct drm_device *dev, { u32 *fourccs = fourccs_out; const u32 *fourccs_end = fourccs_out + nfourccs_out; - bool found_native = false; + uint32_t native_format = 0; size_t i; /* @@ -858,26 +892,18 @@ size_t drm_fb_build_fourcc_list(struct drm_device *dev, drm_dbg_kms(dev, "adding native format %p4cc\n", &fourcc); - if (!found_native) - found_native = is_listed_fourcc(driver_fourccs, driver_nfourccs, fourcc); + /* + * There should only be one native format with the current API. + * This API needs to be refactored to correctly support arbitrary + * sets of native formats, since it needs to report which native + * format to use for each emulated format. + */ + if (!native_format) + native_format = fourcc; *fourccs = fourcc; ++fourccs; } - /* - * The plane's atomic_update helper converts the framebuffer's color format - * to a native format when copying to device memory. - * - * If there is not a single format supported by both, device and - * driver, the native formats are likely not supported by the conversion - * helpers. Therefore *only* support the native formats and add a - * conversion helper ASAP. - */ - if (!found_native) { - drm_warn(dev, "Format conversion helpers required to add extra formats.\n"); - goto out; - } - /* * The extra formats, emulated by the driver, go second. */ @@ -890,6 +916,9 @@ size_t drm_fb_build_fourcc_list(struct drm_device *dev, } else if (fourccs == fourccs_end) { drm_warn(dev, "Ignoring emulated format %p4cc\n", &fourcc); continue; /* end of available output buffer */ + } else if (!is_conversion_supported(fourcc, native_format)) { + drm_dbg_kms(dev, "Unsupported emulated format %p4cc\n", &fourcc); + continue; /* format is not supported for conversion */ } drm_dbg_kms(dev, "adding emulated format %p4cc\n", &fourcc); @@ -898,7 +927,6 @@ size_t drm_fb_build_fourcc_list(struct drm_device *dev, ++fourccs; } -out: return fourccs - fourccs_out; } EXPORT_SYMBOL(drm_fb_build_fourcc_list); diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h index 7bb98e6a446d08311e9714536f7397bfc7511c7b..5ea5e260118c2f8c08e280cc2d5f20e368bbf4d2 100644 --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h @@ -104,7 +104,8 @@ static inline void drm_vblank_flush_worker(struct drm_vblank_crtc *vblank) static inline void drm_vblank_destroy_worker(struct drm_vblank_crtc *vblank) { - kthread_destroy_worker(vblank->worker); + if (vblank->worker) + kthread_destroy_worker(vblank->worker); } int drm_vblank_worker_init(struct drm_vblank_crtc *vblank); diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c index 939d621c9ad4bf845391ad03c90d2fef9b307228..688c8afe0bf174af2430659b5c3b49ef825c0dc3 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -151,9 +151,6 @@ int drm_mode_getresources(struct drm_device *dev, void *data, count = 0; connector_id = u64_to_user_ptr(card_res->connector_id_ptr); drm_for_each_connector_iter(connector, &conn_iter) { - if (connector->registration_state != DRM_CONNECTOR_REGISTERED) - continue; - /* only expose writeback connectors if userspace understands them */ if (!file_priv->writeback_connectors && (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK)) diff --git a/drivers/gpu/drm/drm_panel_orientation_quirks.c b/drivers/gpu/drm/drm_panel_orientation_quirks.c index 8a0c0e0bb5bd2d318d9ed109bb411e9247bd489a..52d8800a8ab86c76f88b2b5e6ab2c11d7033fd87 100644 --- a/drivers/gpu/drm/drm_panel_orientation_quirks.c +++ b/drivers/gpu/drm/drm_panel_orientation_quirks.c @@ -134,6 +134,12 @@ static const struct dmi_system_id orientation_data[] = { DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "One S1003"), }, .driver_data = (void *)&lcd800x1280_rightside_up, + }, { /* Acer Switch V 10 (SW5-017) */ + .matches = { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Acer"), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "SW5-017"), + }, + .driver_data = (void *)&lcd800x1280_rightside_up, }, { /* Anbernic Win600 */ .matches = { DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "Anbernic"), @@ -319,6 +325,12 @@ static const struct dmi_system_id orientation_data[] = { DMI_MATCH(DMI_BIOS_VERSION, "BLADE_21"), }, .driver_data = (void *)&lcd1200x1920_rightside_up, + }, { /* Nanote UMPC-01 */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "RWC CO.,LTD"), + DMI_MATCH(DMI_PRODUCT_NAME, "UMPC-01"), + }, + .driver_data = (void *)&lcd1200x1920_rightside_up, }, { /* OneGX1 Pro */ .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "SYSTEM_MANUFACTURER"), diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile index a26edcdadc217906834b0a7ebc44e0ceca5bb4c1..cea00aaca04b62ea75ce1636e49c9e68a08ae515 100644 --- a/drivers/gpu/drm/i915/Makefile +++ b/drivers/gpu/drm/i915/Makefile @@ -282,6 +282,7 @@ i915-y += \ display/intel_ddi.o \ display/intel_ddi_buf_trans.o \ display/intel_display_trace.o \ + display/intel_dkl_phy.o \ display/intel_dp.o \ display/intel_dp_aux.o \ display/intel_dp_aux_backlight.o \ diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c index da8472cdc135709d83fc645b23e96f8d13a8c11e..69ecf2a3d6c653a95f35db27bed8eb9fc2d6dc98 100644 --- a/drivers/gpu/drm/i915/display/intel_ddi.c +++ b/drivers/gpu/drm/i915/display/intel_ddi.c @@ -43,6 +43,7 @@ #include "intel_de.h" #include "intel_display_power.h" #include "intel_display_types.h" +#include "intel_dkl_phy.h" #include "intel_dp.h" #include "intel_dp_link_training.h" #include "intel_dp_mst.h" @@ -1262,33 +1263,30 @@ static void tgl_dkl_phy_set_signal_levels(struct intel_encoder *encoder, for (ln = 0; ln < 2; ln++) { int level; - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), - HIP_INDEX_VAL(tc_port, ln)); - - intel_de_write(dev_priv, DKL_TX_PMD_LANE_SUS(tc_port), 0); + intel_dkl_phy_write(dev_priv, DKL_TX_PMD_LANE_SUS(tc_port), ln, 0); level = intel_ddi_level(encoder, crtc_state, 2*ln+0); - intel_de_rmw(dev_priv, DKL_TX_DPCNTL0(tc_port), - DKL_TX_PRESHOOT_COEFF_MASK | - DKL_TX_DE_EMPAHSIS_COEFF_MASK | - DKL_TX_VSWING_CONTROL_MASK, - DKL_TX_PRESHOOT_COEFF(trans->entries[level].dkl.preshoot) | - DKL_TX_DE_EMPHASIS_COEFF(trans->entries[level].dkl.de_emphasis) | - DKL_TX_VSWING_CONTROL(trans->entries[level].dkl.vswing)); + intel_dkl_phy_rmw(dev_priv, DKL_TX_DPCNTL0(tc_port), ln, + DKL_TX_PRESHOOT_COEFF_MASK | + DKL_TX_DE_EMPAHSIS_COEFF_MASK | + DKL_TX_VSWING_CONTROL_MASK, + DKL_TX_PRESHOOT_COEFF(trans->entries[level].dkl.preshoot) | + DKL_TX_DE_EMPHASIS_COEFF(trans->entries[level].dkl.de_emphasis) | + DKL_TX_VSWING_CONTROL(trans->entries[level].dkl.vswing)); level = intel_ddi_level(encoder, crtc_state, 2*ln+1); - intel_de_rmw(dev_priv, DKL_TX_DPCNTL1(tc_port), - DKL_TX_PRESHOOT_COEFF_MASK | - DKL_TX_DE_EMPAHSIS_COEFF_MASK | - DKL_TX_VSWING_CONTROL_MASK, - DKL_TX_PRESHOOT_COEFF(trans->entries[level].dkl.preshoot) | - DKL_TX_DE_EMPHASIS_COEFF(trans->entries[level].dkl.de_emphasis) | - DKL_TX_VSWING_CONTROL(trans->entries[level].dkl.vswing)); + intel_dkl_phy_rmw(dev_priv, DKL_TX_DPCNTL1(tc_port), ln, + DKL_TX_PRESHOOT_COEFF_MASK | + DKL_TX_DE_EMPAHSIS_COEFF_MASK | + DKL_TX_VSWING_CONTROL_MASK, + DKL_TX_PRESHOOT_COEFF(trans->entries[level].dkl.preshoot) | + DKL_TX_DE_EMPHASIS_COEFF(trans->entries[level].dkl.de_emphasis) | + DKL_TX_VSWING_CONTROL(trans->entries[level].dkl.vswing)); - intel_de_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port), - DKL_TX_DP20BITMODE, 0); + intel_dkl_phy_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port), ln, + DKL_TX_DP20BITMODE, 0); if (IS_ALDERLAKE_P(dev_priv)) { u32 val; @@ -1306,10 +1304,10 @@ static void tgl_dkl_phy_set_signal_levels(struct intel_encoder *encoder, val |= DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2(0); } - intel_de_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port), - DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX1_MASK | - DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2_MASK, - val); + intel_dkl_phy_rmw(dev_priv, DKL_TX_DPCNTL2(tc_port), ln, + DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX1_MASK | + DKL_TX_DPCNTL2_CFG_LOADGENSELECT_TX2_MASK, + val); } } } @@ -2019,12 +2017,8 @@ icl_program_mg_dp_mode(struct intel_digital_port *dig_port, return; if (DISPLAY_VER(dev_priv) >= 12) { - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), - HIP_INDEX_VAL(tc_port, 0x0)); - ln0 = intel_de_read(dev_priv, DKL_DP_MODE(tc_port)); - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), - HIP_INDEX_VAL(tc_port, 0x1)); - ln1 = intel_de_read(dev_priv, DKL_DP_MODE(tc_port)); + ln0 = intel_dkl_phy_read(dev_priv, DKL_DP_MODE(tc_port), 0); + ln1 = intel_dkl_phy_read(dev_priv, DKL_DP_MODE(tc_port), 1); } else { ln0 = intel_de_read(dev_priv, MG_DP_MODE(0, tc_port)); ln1 = intel_de_read(dev_priv, MG_DP_MODE(1, tc_port)); @@ -2085,12 +2079,8 @@ icl_program_mg_dp_mode(struct intel_digital_port *dig_port, } if (DISPLAY_VER(dev_priv) >= 12) { - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), - HIP_INDEX_VAL(tc_port, 0x0)); - intel_de_write(dev_priv, DKL_DP_MODE(tc_port), ln0); - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), - HIP_INDEX_VAL(tc_port, 0x1)); - intel_de_write(dev_priv, DKL_DP_MODE(tc_port), ln1); + intel_dkl_phy_write(dev_priv, DKL_DP_MODE(tc_port), 0, ln0); + intel_dkl_phy_write(dev_priv, DKL_DP_MODE(tc_port), 1, ln1); } else { intel_de_write(dev_priv, MG_DP_MODE(0, tc_port), ln0); intel_de_write(dev_priv, MG_DP_MODE(1, tc_port), ln1); @@ -3094,10 +3084,8 @@ static void adlp_tbt_to_dp_alt_switch_wa(struct intel_encoder *encoder) enum tc_port tc_port = intel_port_to_tc(i915, encoder->port); int ln; - for (ln = 0; ln < 2; ln++) { - intel_de_write(i915, HIP_INDEX_REG(tc_port), HIP_INDEX_VAL(tc_port, ln)); - intel_de_rmw(i915, DKL_PCS_DW5(tc_port), DKL_PCS_DW5_CORE_SOFTRESET, 0); - } + for (ln = 0; ln < 2; ln++) + intel_dkl_phy_rmw(i915, DKL_PCS_DW5(tc_port), ln, DKL_PCS_DW5_CORE_SOFTRESET, 0); } static void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp, diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 461c62c884133a567a8ee1d6e67d6deb60d0ed64..de77054195c6812652e5cad596af6cd9f6e63f45 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -3723,12 +3723,16 @@ static bool ilk_get_pipe_config(struct intel_crtc *crtc, static u8 bigjoiner_pipes(struct drm_i915_private *i915) { + u8 pipes; + if (DISPLAY_VER(i915) >= 12) - return BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D); + pipes = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D); else if (DISPLAY_VER(i915) >= 11) - return BIT(PIPE_B) | BIT(PIPE_C); + pipes = BIT(PIPE_B) | BIT(PIPE_C); else - return 0; + pipes = 0; + + return pipes & RUNTIME_INFO(i915)->pipe_mask; } static bool transcoder_ddi_func_is_enabled(struct drm_i915_private *dev_priv, diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h index 96cf994b0ad1fedb94adb372ab1322903e0b9010..9b51148e8ba5653138774b7e262dba900dc8b243 100644 --- a/drivers/gpu/drm/i915/display/intel_display_core.h +++ b/drivers/gpu/drm/i915/display/intel_display_core.h @@ -315,6 +315,14 @@ struct intel_display { struct intel_global_obj obj; } dbuf; + struct { + /* + * dkl.phy_lock protects against concurrent access of the + * Dekel TypeC PHYs. + */ + spinlock_t phy_lock; + } dkl; + struct { /* VLV/CHV/BXT/GLK DSI MMIO register base address */ u32 mmio_base; diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c b/drivers/gpu/drm/i915/display/intel_display_power.c index 1e608b9e5055932f74ff1785d8e17abeb877dbf6..1a63da28f33002ad04baaca89c5a5510f552092c 100644 --- a/drivers/gpu/drm/i915/display/intel_display_power.c +++ b/drivers/gpu/drm/i915/display/intel_display_power.c @@ -2434,7 +2434,7 @@ intel_display_power_ddi_io_domain(struct drm_i915_private *i915, enum port port) { const struct intel_ddi_port_domains *domains = intel_port_domains_for_port(i915, port); - if (drm_WARN_ON(&i915->drm, !domains) || domains->ddi_io == POWER_DOMAIN_INVALID) + if (drm_WARN_ON(&i915->drm, !domains || domains->ddi_io == POWER_DOMAIN_INVALID)) return POWER_DOMAIN_PORT_DDI_IO_A; return domains->ddi_io + (int)(port - domains->port_start); @@ -2445,7 +2445,7 @@ intel_display_power_ddi_lanes_domain(struct drm_i915_private *i915, enum port po { const struct intel_ddi_port_domains *domains = intel_port_domains_for_port(i915, port); - if (drm_WARN_ON(&i915->drm, !domains) || domains->ddi_lanes == POWER_DOMAIN_INVALID) + if (drm_WARN_ON(&i915->drm, !domains || domains->ddi_lanes == POWER_DOMAIN_INVALID)) return POWER_DOMAIN_PORT_DDI_LANES_A; return domains->ddi_lanes + (int)(port - domains->port_start); @@ -2471,7 +2471,7 @@ intel_display_power_legacy_aux_domain(struct drm_i915_private *i915, enum aux_ch { const struct intel_ddi_port_domains *domains = intel_port_domains_for_aux_ch(i915, aux_ch); - if (drm_WARN_ON(&i915->drm, !domains) || domains->aux_legacy_usbc == POWER_DOMAIN_INVALID) + if (drm_WARN_ON(&i915->drm, !domains || domains->aux_legacy_usbc == POWER_DOMAIN_INVALID)) return POWER_DOMAIN_AUX_A; return domains->aux_legacy_usbc + (int)(aux_ch - domains->aux_ch_start); @@ -2482,7 +2482,7 @@ intel_display_power_tbt_aux_domain(struct drm_i915_private *i915, enum aux_ch au { const struct intel_ddi_port_domains *domains = intel_port_domains_for_aux_ch(i915, aux_ch); - if (drm_WARN_ON(&i915->drm, !domains) || domains->aux_tbt == POWER_DOMAIN_INVALID) + if (drm_WARN_ON(&i915->drm, !domains || domains->aux_tbt == POWER_DOMAIN_INVALID)) return POWER_DOMAIN_AUX_TBT1; return domains->aux_tbt + (int)(aux_ch - domains->aux_ch_start); diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c b/drivers/gpu/drm/i915/display/intel_display_power_well.c index df7ee4969ef174f672158c3e13c2be38aa51d7d7..1d18eee562534581782e19c8d79100c52f3eecb9 100644 --- a/drivers/gpu/drm/i915/display/intel_display_power_well.c +++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c @@ -12,6 +12,7 @@ #include "intel_de.h" #include "intel_display_power_well.h" #include "intel_display_types.h" +#include "intel_dkl_phy.h" #include "intel_dmc.h" #include "intel_dpio_phy.h" #include "intel_dpll.h" @@ -529,11 +530,9 @@ icl_tc_phy_aux_power_well_enable(struct drm_i915_private *dev_priv, enum tc_port tc_port; tc_port = TGL_AUX_PW_TO_TC_PORT(i915_power_well_instance(power_well)->hsw.idx); - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), - HIP_INDEX_VAL(tc_port, 0x2)); - if (intel_de_wait_for_set(dev_priv, DKL_CMN_UC_DW_27(tc_port), - DKL_CMN_UC_DW27_UC_HEALTH, 1)) + if (wait_for(intel_dkl_phy_read(dev_priv, DKL_CMN_UC_DW_27(tc_port), 2) & + DKL_CMN_UC_DW27_UC_HEALTH, 1)) drm_warn(&dev_priv->drm, "Timeout waiting TC uC health\n"); } diff --git a/drivers/gpu/drm/i915/display/intel_dkl_phy.c b/drivers/gpu/drm/i915/display/intel_dkl_phy.c new file mode 100644 index 0000000000000000000000000000000000000000..710b030c7ed54dd6869b3c865737191e31f3f8f8 --- /dev/null +++ b/drivers/gpu/drm/i915/display/intel_dkl_phy.c @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright © 2022 Intel Corporation + */ + +#include "i915_drv.h" +#include "i915_reg.h" + +#include "intel_de.h" +#include "intel_display.h" +#include "intel_dkl_phy.h" + +static void +dkl_phy_set_hip_idx(struct drm_i915_private *i915, i915_reg_t reg, int idx) +{ + enum tc_port tc_port = DKL_REG_TC_PORT(reg); + + drm_WARN_ON(&i915->drm, tc_port < TC_PORT_1 || tc_port >= I915_MAX_TC_PORTS); + + intel_de_write(i915, + HIP_INDEX_REG(tc_port), + HIP_INDEX_VAL(tc_port, idx)); +} + +/** + * intel_dkl_phy_read - read a Dekel PHY register + * @i915: i915 device instance + * @reg: Dekel PHY register + * @ln: lane instance of @reg + * + * Read the @reg Dekel PHY register. + * + * Returns the read value. + */ +u32 +intel_dkl_phy_read(struct drm_i915_private *i915, i915_reg_t reg, int ln) +{ + u32 val; + + spin_lock(&i915->display.dkl.phy_lock); + + dkl_phy_set_hip_idx(i915, reg, ln); + val = intel_de_read(i915, reg); + + spin_unlock(&i915->display.dkl.phy_lock); + + return val; +} + +/** + * intel_dkl_phy_write - write a Dekel PHY register + * @i915: i915 device instance + * @reg: Dekel PHY register + * @ln: lane instance of @reg + * @val: value to write + * + * Write @val to the @reg Dekel PHY register. + */ +void +intel_dkl_phy_write(struct drm_i915_private *i915, i915_reg_t reg, int ln, u32 val) +{ + spin_lock(&i915->display.dkl.phy_lock); + + dkl_phy_set_hip_idx(i915, reg, ln); + intel_de_write(i915, reg, val); + + spin_unlock(&i915->display.dkl.phy_lock); +} + +/** + * intel_dkl_phy_rmw - read-modify-write a Dekel PHY register + * @i915: i915 device instance + * @reg: Dekel PHY register + * @ln: lane instance of @reg + * @clear: mask to clear + * @set: mask to set + * + * Read the @reg Dekel PHY register, clearing then setting the @clear/@set bits in it, and writing + * this value back to the register if the value differs from the read one. + */ +void +intel_dkl_phy_rmw(struct drm_i915_private *i915, i915_reg_t reg, int ln, u32 clear, u32 set) +{ + spin_lock(&i915->display.dkl.phy_lock); + + dkl_phy_set_hip_idx(i915, reg, ln); + intel_de_rmw(i915, reg, clear, set); + + spin_unlock(&i915->display.dkl.phy_lock); +} + +/** + * intel_dkl_phy_posting_read - do a posting read from a Dekel PHY register + * @i915: i915 device instance + * @reg: Dekel PHY register + * @ln: lane instance of @reg + * + * Read the @reg Dekel PHY register without returning the read value. + */ +void +intel_dkl_phy_posting_read(struct drm_i915_private *i915, i915_reg_t reg, int ln) +{ + spin_lock(&i915->display.dkl.phy_lock); + + dkl_phy_set_hip_idx(i915, reg, ln); + intel_de_posting_read(i915, reg); + + spin_unlock(&i915->display.dkl.phy_lock); +} diff --git a/drivers/gpu/drm/i915/display/intel_dkl_phy.h b/drivers/gpu/drm/i915/display/intel_dkl_phy.h new file mode 100644 index 0000000000000000000000000000000000000000..260ad121a0b1807cda02234761175e5581a6eda9 --- /dev/null +++ b/drivers/gpu/drm/i915/display/intel_dkl_phy.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright © 2022 Intel Corporation + */ + +#ifndef __INTEL_DKL_PHY_H__ +#define __INTEL_DKL_PHY_H__ + +#include + +#include "i915_reg_defs.h" + +struct drm_i915_private; + +u32 +intel_dkl_phy_read(struct drm_i915_private *i915, i915_reg_t reg, int ln); +void +intel_dkl_phy_write(struct drm_i915_private *i915, i915_reg_t reg, int ln, u32 val); +void +intel_dkl_phy_rmw(struct drm_i915_private *i915, i915_reg_t reg, int ln, u32 clear, u32 set); +void +intel_dkl_phy_posting_read(struct drm_i915_private *i915, i915_reg_t reg, int ln); + +#endif /* __INTEL_DKL_PHY_H__ */ diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c index 47419d162f3026025ca37d864ab4a116e8c18cd7..2b5bc95a8b0df467461b6c5ea05b2e0c610b620c 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -5276,7 +5276,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp, encoder->devdata, IS_ERR(edid) ? NULL : edid); intel_panel_add_edid_fixed_modes(intel_connector, - intel_connector->panel.vbt.drrs_type != DRRS_TYPE_NONE, + intel_connector->panel.vbt.drrs_type != DRRS_TYPE_NONE || intel_vrr_is_capable(intel_connector)); /* MSO requires information from the EDID */ diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c index e5fb66a5dd0257d4bcf0c1ecc256019f2f240145..64dd603dc69aaa30a78d869f1269309e8f7e5796 100644 --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c @@ -25,6 +25,7 @@ #include "intel_de.h" #include "intel_display_types.h" +#include "intel_dkl_phy.h" #include "intel_dpio_phy.h" #include "intel_dpll.h" #include "intel_dpll_mgr.h" @@ -3508,15 +3509,12 @@ static bool dkl_pll_get_hw_state(struct drm_i915_private *dev_priv, * All registers read here have the same HIP_INDEX_REG even though * they are on different building blocks */ - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), - HIP_INDEX_VAL(tc_port, 0x2)); - - hw_state->mg_refclkin_ctl = intel_de_read(dev_priv, - DKL_REFCLKIN_CTL(tc_port)); + hw_state->mg_refclkin_ctl = intel_dkl_phy_read(dev_priv, + DKL_REFCLKIN_CTL(tc_port), 2); hw_state->mg_refclkin_ctl &= MG_REFCLKIN_CTL_OD_2_MUX_MASK; hw_state->mg_clktop2_hsclkctl = - intel_de_read(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port)); + intel_dkl_phy_read(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port), 2); hw_state->mg_clktop2_hsclkctl &= MG_CLKTOP2_HSCLKCTL_TLINEDRV_CLKSEL_MASK | MG_CLKTOP2_HSCLKCTL_CORE_INPUTSEL_MASK | @@ -3524,32 +3522,32 @@ static bool dkl_pll_get_hw_state(struct drm_i915_private *dev_priv, MG_CLKTOP2_HSCLKCTL_DSDIV_RATIO_MASK; hw_state->mg_clktop2_coreclkctl1 = - intel_de_read(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port)); + intel_dkl_phy_read(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port), 2); hw_state->mg_clktop2_coreclkctl1 &= MG_CLKTOP2_CORECLKCTL1_A_DIVRATIO_MASK; - hw_state->mg_pll_div0 = intel_de_read(dev_priv, DKL_PLL_DIV0(tc_port)); + hw_state->mg_pll_div0 = intel_dkl_phy_read(dev_priv, DKL_PLL_DIV0(tc_port), 2); val = DKL_PLL_DIV0_MASK; if (dev_priv->display.vbt.override_afc_startup) val |= DKL_PLL_DIV0_AFC_STARTUP_MASK; hw_state->mg_pll_div0 &= val; - hw_state->mg_pll_div1 = intel_de_read(dev_priv, DKL_PLL_DIV1(tc_port)); + hw_state->mg_pll_div1 = intel_dkl_phy_read(dev_priv, DKL_PLL_DIV1(tc_port), 2); hw_state->mg_pll_div1 &= (DKL_PLL_DIV1_IREF_TRIM_MASK | DKL_PLL_DIV1_TDC_TARGET_CNT_MASK); - hw_state->mg_pll_ssc = intel_de_read(dev_priv, DKL_PLL_SSC(tc_port)); + hw_state->mg_pll_ssc = intel_dkl_phy_read(dev_priv, DKL_PLL_SSC(tc_port), 2); hw_state->mg_pll_ssc &= (DKL_PLL_SSC_IREF_NDIV_RATIO_MASK | DKL_PLL_SSC_STEP_LEN_MASK | DKL_PLL_SSC_STEP_NUM_MASK | DKL_PLL_SSC_EN); - hw_state->mg_pll_bias = intel_de_read(dev_priv, DKL_PLL_BIAS(tc_port)); + hw_state->mg_pll_bias = intel_dkl_phy_read(dev_priv, DKL_PLL_BIAS(tc_port), 2); hw_state->mg_pll_bias &= (DKL_PLL_BIAS_FRAC_EN_H | DKL_PLL_BIAS_FBDIV_FRAC_MASK); hw_state->mg_pll_tdc_coldst_bias = - intel_de_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port)); + intel_dkl_phy_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), 2); hw_state->mg_pll_tdc_coldst_bias &= (DKL_PLL_TDC_SSC_STEP_SIZE_MASK | DKL_PLL_TDC_FEED_FWD_GAIN_MASK); @@ -3737,61 +3735,58 @@ static void dkl_pll_write(struct drm_i915_private *dev_priv, * All registers programmed here have the same HIP_INDEX_REG even * though on different building block */ - intel_de_write(dev_priv, HIP_INDEX_REG(tc_port), - HIP_INDEX_VAL(tc_port, 0x2)); - /* All the registers are RMW */ - val = intel_de_read(dev_priv, DKL_REFCLKIN_CTL(tc_port)); + val = intel_dkl_phy_read(dev_priv, DKL_REFCLKIN_CTL(tc_port), 2); val &= ~MG_REFCLKIN_CTL_OD_2_MUX_MASK; val |= hw_state->mg_refclkin_ctl; - intel_de_write(dev_priv, DKL_REFCLKIN_CTL(tc_port), val); + intel_dkl_phy_write(dev_priv, DKL_REFCLKIN_CTL(tc_port), 2, val); - val = intel_de_read(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port)); + val = intel_dkl_phy_read(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port), 2); val &= ~MG_CLKTOP2_CORECLKCTL1_A_DIVRATIO_MASK; val |= hw_state->mg_clktop2_coreclkctl1; - intel_de_write(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port), val); + intel_dkl_phy_write(dev_priv, DKL_CLKTOP2_CORECLKCTL1(tc_port), 2, val); - val = intel_de_read(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port)); + val = intel_dkl_phy_read(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port), 2); val &= ~(MG_CLKTOP2_HSCLKCTL_TLINEDRV_CLKSEL_MASK | MG_CLKTOP2_HSCLKCTL_CORE_INPUTSEL_MASK | MG_CLKTOP2_HSCLKCTL_HSDIV_RATIO_MASK | MG_CLKTOP2_HSCLKCTL_DSDIV_RATIO_MASK); val |= hw_state->mg_clktop2_hsclkctl; - intel_de_write(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port), val); + intel_dkl_phy_write(dev_priv, DKL_CLKTOP2_HSCLKCTL(tc_port), 2, val); val = DKL_PLL_DIV0_MASK; if (dev_priv->display.vbt.override_afc_startup) val |= DKL_PLL_DIV0_AFC_STARTUP_MASK; - intel_de_rmw(dev_priv, DKL_PLL_DIV0(tc_port), val, - hw_state->mg_pll_div0); + intel_dkl_phy_rmw(dev_priv, DKL_PLL_DIV0(tc_port), 2, val, + hw_state->mg_pll_div0); - val = intel_de_read(dev_priv, DKL_PLL_DIV1(tc_port)); + val = intel_dkl_phy_read(dev_priv, DKL_PLL_DIV1(tc_port), 2); val &= ~(DKL_PLL_DIV1_IREF_TRIM_MASK | DKL_PLL_DIV1_TDC_TARGET_CNT_MASK); val |= hw_state->mg_pll_div1; - intel_de_write(dev_priv, DKL_PLL_DIV1(tc_port), val); + intel_dkl_phy_write(dev_priv, DKL_PLL_DIV1(tc_port), 2, val); - val = intel_de_read(dev_priv, DKL_PLL_SSC(tc_port)); + val = intel_dkl_phy_read(dev_priv, DKL_PLL_SSC(tc_port), 2); val &= ~(DKL_PLL_SSC_IREF_NDIV_RATIO_MASK | DKL_PLL_SSC_STEP_LEN_MASK | DKL_PLL_SSC_STEP_NUM_MASK | DKL_PLL_SSC_EN); val |= hw_state->mg_pll_ssc; - intel_de_write(dev_priv, DKL_PLL_SSC(tc_port), val); + intel_dkl_phy_write(dev_priv, DKL_PLL_SSC(tc_port), 2, val); - val = intel_de_read(dev_priv, DKL_PLL_BIAS(tc_port)); + val = intel_dkl_phy_read(dev_priv, DKL_PLL_BIAS(tc_port), 2); val &= ~(DKL_PLL_BIAS_FRAC_EN_H | DKL_PLL_BIAS_FBDIV_FRAC_MASK); val |= hw_state->mg_pll_bias; - intel_de_write(dev_priv, DKL_PLL_BIAS(tc_port), val); + intel_dkl_phy_write(dev_priv, DKL_PLL_BIAS(tc_port), 2, val); - val = intel_de_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port)); + val = intel_dkl_phy_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), 2); val &= ~(DKL_PLL_TDC_SSC_STEP_SIZE_MASK | DKL_PLL_TDC_FEED_FWD_GAIN_MASK); val |= hw_state->mg_pll_tdc_coldst_bias; - intel_de_write(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), val); + intel_dkl_phy_write(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), 2, val); - intel_de_posting_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port)); + intel_dkl_phy_posting_read(dev_priv, DKL_PLL_TDC_COLDST_BIAS(tc_port), 2); } static void icl_pll_power_enable(struct drm_i915_private *dev_priv, diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c index 9aa38e8141b52affdd160fcd9f40cdfa6a3f3f4d..e5352239b2a2ffea5132efacad485655ecd149c6 100644 --- a/drivers/gpu/drm/i915/display/intel_lvds.c +++ b/drivers/gpu/drm/i915/display/intel_lvds.c @@ -972,8 +972,7 @@ void intel_lvds_init(struct drm_i915_private *dev_priv) /* Try EDID first */ intel_panel_add_edid_fixed_modes(intel_connector, - intel_connector->panel.vbt.drrs_type != DRRS_TYPE_NONE, - false); + intel_connector->panel.vbt.drrs_type != DRRS_TYPE_NONE); /* Failed to get EDID, what about VBT? */ if (!intel_panel_preferred_fixed_mode(intel_connector)) diff --git a/drivers/gpu/drm/i915/display/intel_panel.c b/drivers/gpu/drm/i915/display/intel_panel.c index a3a3f9fe4342f476e35dda69bc0eefdce1409cfd..41cec9dc422312e15ea9ec1915aa9d0a306f2ae1 100644 --- a/drivers/gpu/drm/i915/display/intel_panel.c +++ b/drivers/gpu/drm/i915/display/intel_panel.c @@ -254,10 +254,10 @@ static void intel_panel_destroy_probed_modes(struct intel_connector *connector) } void intel_panel_add_edid_fixed_modes(struct intel_connector *connector, - bool has_drrs, bool has_vrr) + bool use_alt_fixed_modes) { intel_panel_add_edid_preferred_mode(connector); - if (intel_panel_preferred_fixed_mode(connector) && (has_drrs || has_vrr)) + if (intel_panel_preferred_fixed_mode(connector) && use_alt_fixed_modes) intel_panel_add_edid_alt_fixed_modes(connector); intel_panel_destroy_probed_modes(connector); } diff --git a/drivers/gpu/drm/i915/display/intel_panel.h b/drivers/gpu/drm/i915/display/intel_panel.h index eff3ffd3d08255af6b29660038395fd5437e015e..5c5b5b7f95b6c5dd1ccac3115d248e15f7c14d64 100644 --- a/drivers/gpu/drm/i915/display/intel_panel.h +++ b/drivers/gpu/drm/i915/display/intel_panel.h @@ -44,7 +44,7 @@ int intel_panel_fitting(struct intel_crtc_state *crtc_state, int intel_panel_compute_config(struct intel_connector *connector, struct drm_display_mode *adjusted_mode); void intel_panel_add_edid_fixed_modes(struct intel_connector *connector, - bool has_drrs, bool has_vrr); + bool use_alt_fixed_modes); void intel_panel_add_vbt_lfp_fixed_mode(struct intel_connector *connector); void intel_panel_add_vbt_sdvo_fixed_mode(struct intel_connector *connector); void intel_panel_add_encoder_fixed_mode(struct intel_connector *connector, diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c index d4cce627d7a87f4b51575f1a45994f699130e019..15c3e448aa0e6e0863bd8049b4aee95eabdcd81d 100644 --- a/drivers/gpu/drm/i915/display/intel_psr.c +++ b/drivers/gpu/drm/i915/display/intel_psr.c @@ -2201,8 +2201,11 @@ static void _psr_invalidate_handle(struct intel_dp *intel_dp) if (intel_dp->psr.psr2_sel_fetch_enabled) { u32 val; - if (intel_dp->psr.psr2_sel_fetch_cff_enabled) + if (intel_dp->psr.psr2_sel_fetch_cff_enabled) { + /* Send one update otherwise lag is observed in screen */ + intel_de_write(dev_priv, CURSURFLIVE(intel_dp->psr.pipe), 0); return; + } val = man_trk_ctl_enable_bit_get(dev_priv) | man_trk_ctl_partial_frame_bit_get(dev_priv) | diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c index f5b744bef18ffe974a5b41b3ae0fd49002c24f00..774c1dc31a52107d3cf0b3cdfd62d393e3221072 100644 --- a/drivers/gpu/drm/i915/display/intel_sdvo.c +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c @@ -2747,13 +2747,10 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device) if (!intel_sdvo_connector) return false; - if (device == 0) { - intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS0; + if (device == 0) intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS0; - } else if (device == 1) { - intel_sdvo->controlled_output |= SDVO_OUTPUT_TMDS1; + else if (device == 1) intel_sdvo_connector->output_flag = SDVO_OUTPUT_TMDS1; - } intel_connector = &intel_sdvo_connector->base; connector = &intel_connector->base; @@ -2808,7 +2805,6 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type) encoder->encoder_type = DRM_MODE_ENCODER_TVDAC; connector->connector_type = DRM_MODE_CONNECTOR_SVIDEO; - intel_sdvo->controlled_output |= type; intel_sdvo_connector->output_flag = type; if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { @@ -2849,13 +2845,10 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device) encoder->encoder_type = DRM_MODE_ENCODER_DAC; connector->connector_type = DRM_MODE_CONNECTOR_VGA; - if (device == 0) { - intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB0; + if (device == 0) intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB0; - } else if (device == 1) { - intel_sdvo->controlled_output |= SDVO_OUTPUT_RGB1; + else if (device == 1) intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1; - } if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { kfree(intel_sdvo_connector); @@ -2885,13 +2878,10 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device) encoder->encoder_type = DRM_MODE_ENCODER_LVDS; connector->connector_type = DRM_MODE_CONNECTOR_LVDS; - if (device == 0) { - intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS0; + if (device == 0) intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS0; - } else if (device == 1) { - intel_sdvo->controlled_output |= SDVO_OUTPUT_LVDS1; + else if (device == 1) intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1; - } if (intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo) < 0) { kfree(intel_sdvo_connector); @@ -2910,8 +2900,12 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device) intel_panel_add_vbt_sdvo_fixed_mode(intel_connector); if (!intel_panel_preferred_fixed_mode(intel_connector)) { + mutex_lock(&i915->drm.mode_config.mutex); + intel_ddc_get_modes(connector, &intel_sdvo->ddc); - intel_panel_add_edid_fixed_modes(intel_connector, false, false); + intel_panel_add_edid_fixed_modes(intel_connector, false); + + mutex_unlock(&i915->drm.mode_config.mutex); } intel_panel_init(intel_connector); @@ -2926,16 +2920,39 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device) return false; } +static u16 intel_sdvo_filter_output_flags(u16 flags) +{ + flags &= SDVO_OUTPUT_MASK; + + /* SDVO requires XXX1 function may not exist unless it has XXX0 function.*/ + if (!(flags & SDVO_OUTPUT_TMDS0)) + flags &= ~SDVO_OUTPUT_TMDS1; + + if (!(flags & SDVO_OUTPUT_RGB0)) + flags &= ~SDVO_OUTPUT_RGB1; + + if (!(flags & SDVO_OUTPUT_LVDS0)) + flags &= ~SDVO_OUTPUT_LVDS1; + + return flags; +} + static bool intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags) { - /* SDVO requires XXX1 function may not exist unless it has XXX0 function.*/ + struct drm_i915_private *i915 = to_i915(intel_sdvo->base.base.dev); + + flags = intel_sdvo_filter_output_flags(flags); + + intel_sdvo->controlled_output = flags; + + intel_sdvo_select_ddc_bus(i915, intel_sdvo); if (flags & SDVO_OUTPUT_TMDS0) if (!intel_sdvo_dvi_init(intel_sdvo, 0)) return false; - if ((flags & SDVO_TMDS_MASK) == SDVO_TMDS_MASK) + if (flags & SDVO_OUTPUT_TMDS1) if (!intel_sdvo_dvi_init(intel_sdvo, 1)) return false; @@ -2956,7 +2973,7 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags) if (!intel_sdvo_analog_init(intel_sdvo, 0)) return false; - if ((flags & SDVO_RGB_MASK) == SDVO_RGB_MASK) + if (flags & SDVO_OUTPUT_RGB1) if (!intel_sdvo_analog_init(intel_sdvo, 1)) return false; @@ -2964,14 +2981,13 @@ intel_sdvo_output_setup(struct intel_sdvo *intel_sdvo, u16 flags) if (!intel_sdvo_lvds_init(intel_sdvo, 0)) return false; - if ((flags & SDVO_LVDS_MASK) == SDVO_LVDS_MASK) + if (flags & SDVO_OUTPUT_LVDS1) if (!intel_sdvo_lvds_init(intel_sdvo, 1)) return false; - if ((flags & SDVO_OUTPUT_MASK) == 0) { + if (flags == 0) { unsigned char bytes[2]; - intel_sdvo->controlled_output = 0; memcpy(bytes, &intel_sdvo->caps.output_flags, 2); DRM_DEBUG_KMS("%s: Unknown SDVO output type (0x%02x%02x)\n", SDVO_NAME(intel_sdvo), @@ -3383,8 +3399,6 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv, */ intel_sdvo->base.cloneable = 0; - intel_sdvo_select_ddc_bus(dev_priv, intel_sdvo); - /* Set the input timing to the screen. Assume always input 0. */ if (!intel_sdvo_set_target_input(intel_sdvo)) goto err_output; diff --git a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c index f5062d0c63336fcd1569fc019289108bae2ba214..824971a1ceece191867d1be3915deaf498aaa5e5 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c @@ -40,13 +40,13 @@ static struct sg_table *i915_gem_map_dma_buf(struct dma_buf_attachment *attachme goto err; } - ret = sg_alloc_table(st, obj->mm.pages->nents, GFP_KERNEL); + ret = sg_alloc_table(st, obj->mm.pages->orig_nents, GFP_KERNEL); if (ret) goto err_free; src = obj->mm.pages->sgl; dst = st->sgl; - for (i = 0; i < obj->mm.pages->nents; i++) { + for (i = 0; i < obj->mm.pages->orig_nents; i++) { sg_set_page(dst, sg_page(src), src->length, 0); dst = sg_next(dst); src = sg_next(src); diff --git a/drivers/gpu/drm/i915/gem/i915_gem_internal.c b/drivers/gpu/drm/i915/gem/i915_gem_internal.c index c698f95af15fee0af3b5f04dd06799643474eed3..629acb403a2c975971a1406822b75c7e38961b75 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_internal.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_internal.c @@ -6,7 +6,6 @@ #include #include -#include #include "i915_drv.h" #include "i915_gem.h" @@ -38,22 +37,12 @@ static int i915_gem_object_get_pages_internal(struct drm_i915_gem_object *obj) struct scatterlist *sg; unsigned int sg_page_sizes; unsigned int npages; - int max_order; + int max_order = MAX_ORDER; + unsigned int max_segment; gfp_t gfp; - max_order = MAX_ORDER; -#ifdef CONFIG_SWIOTLB - if (is_swiotlb_active(obj->base.dev->dev)) { - unsigned int max_segment; - - max_segment = swiotlb_max_segment(); - if (max_segment) { - max_segment = max_t(unsigned int, max_segment, - PAGE_SIZE) >> PAGE_SHIFT; - max_order = min(max_order, ilog2(max_segment)); - } - } -#endif + max_segment = i915_sg_segment_size(i915->drm.dev) >> PAGE_SHIFT; + max_order = min(max_order, get_order(max_segment)); gfp = GFP_KERNEL | __GFP_HIGHMEM | __GFP_RECLAIMABLE; if (IS_I965GM(i915) || IS_I965G(i915)) { diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c index f42ca1179f3732e9aeb9158c2e295fda30ae1eea..2f7804492cd5cb6df70c284d9ec0e033af4f9829 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_shmem.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_shmem.c @@ -194,7 +194,7 @@ static int shmem_get_pages(struct drm_i915_gem_object *obj) struct intel_memory_region *mem = obj->mm.region; struct address_space *mapping = obj->base.filp->f_mapping; const unsigned long page_count = obj->base.size / PAGE_SIZE; - unsigned int max_segment = i915_sg_segment_size(); + unsigned int max_segment = i915_sg_segment_size(i915->drm.dev); struct sg_table *st; struct sgt_iter sgt_iter; struct page *page; @@ -369,14 +369,14 @@ __i915_gem_object_release_shmem(struct drm_i915_gem_object *obj, __start_cpu_write(obj); /* - * On non-LLC platforms, force the flush-on-acquire if this is ever + * On non-LLC igfx platforms, force the flush-on-acquire if this is ever * swapped-in. Our async flush path is not trust worthy enough yet(and * happens in the wrong order), and with some tricks it's conceivable * for userspace to change the cache-level to I915_CACHE_NONE after the * pages are swapped-in, and since execbuf binds the object before doing * the async flush, we have a race window. */ - if (!HAS_LLC(i915)) + if (!HAS_LLC(i915) && !IS_DGFX(i915)) obj->cache_dirty = true; } diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c index 4f861782c3e85a16ce4e56b07908624ea9f91c4f..0d6d640225fc8bfc44c274d92390a1ba8c6cd691 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c @@ -189,7 +189,7 @@ static int i915_ttm_tt_shmem_populate(struct ttm_device *bdev, struct drm_i915_private *i915 = container_of(bdev, typeof(*i915), bdev); struct intel_memory_region *mr = i915->mm.regions[INTEL_MEMORY_SYSTEM]; struct i915_ttm_tt *i915_tt = container_of(ttm, typeof(*i915_tt), ttm); - const unsigned int max_segment = i915_sg_segment_size(); + const unsigned int max_segment = i915_sg_segment_size(i915->drm.dev); const size_t size = (size_t)ttm->num_pages << PAGE_SHIFT; struct file *filp = i915_tt->filp; struct sgt_iter sgt_iter; @@ -538,7 +538,7 @@ static struct i915_refct_sgt *i915_ttm_tt_get_st(struct ttm_tt *ttm) ret = sg_alloc_table_from_pages_segment(st, ttm->pages, ttm->num_pages, 0, (unsigned long)ttm->num_pages << PAGE_SHIFT, - i915_sg_segment_size(), GFP_KERNEL); + i915_sg_segment_size(i915_tt->dev), GFP_KERNEL); if (ret) { st->sgl = NULL; return ERR_PTR(ret); @@ -612,6 +612,10 @@ static int i915_ttm_truncate(struct drm_i915_gem_object *obj) WARN_ON_ONCE(obj->mm.madv == I915_MADV_WILLNEED); + err = ttm_bo_wait(bo, true, false); + if (err) + return err; + err = i915_ttm_move_notify(bo); if (err) return err; @@ -1013,9 +1017,6 @@ static vm_fault_t vm_fault_ttm(struct vm_fault *vmf) return VM_FAULT_SIGBUS; } - if (i915_ttm_cpu_maps_iomem(bo->resource)) - wakeref = intel_runtime_pm_get(&to_i915(obj->base.dev)->runtime_pm); - if (!i915_ttm_resource_mappable(bo->resource)) { int err = -ENODEV; int i; @@ -1042,6 +1043,9 @@ static vm_fault_t vm_fault_ttm(struct vm_fault *vmf) } } + if (i915_ttm_cpu_maps_iomem(bo->resource)) + wakeref = intel_runtime_pm_get(&to_i915(obj->base.dev)->runtime_pm); + if (drm_dev_enter(dev, &idx)) { ret = ttm_bo_vm_fault_reserved(vmf, vmf->vma->vm_page_prot, TTM_BO_VM_NUM_PREFAULT); diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c index d4398948f01623d7474593eb4fb8de2690136301..ba14b18d65f380cc75fe2fa7a52b4eff84886e5c 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c @@ -129,7 +129,7 @@ static void i915_gem_object_userptr_drop_ref(struct drm_i915_gem_object *obj) static int i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj) { const unsigned long num_pages = obj->base.size >> PAGE_SHIFT; - unsigned int max_segment = i915_sg_segment_size(); + unsigned int max_segment = i915_sg_segment_size(obj->base.dev->dev); struct sg_table *st; unsigned int sg_page_sizes; struct page **pvec; @@ -428,9 +428,10 @@ probe_range(struct mm_struct *mm, unsigned long addr, unsigned long len) { VMA_ITERATOR(vmi, mm, addr); struct vm_area_struct *vma; + unsigned long end = addr + len; mmap_read_lock(mm); - for_each_vma_range(vmi, vma, addr + len) { + for_each_vma_range(vmi, vma, end) { /* Check for holes, note that we also update the addr below */ if (vma->vm_start > addr) break; @@ -442,7 +443,7 @@ probe_range(struct mm_struct *mm, unsigned long addr, unsigned long len) } mmap_read_unlock(mm); - if (vma) + if (vma || addr < end) return -EFAULT; return 0; } diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c index d0b03a928b9acaaae274907fa73e4431186470e6..7caa3412a24468c42f2686e1d33908a50fac9dec 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt.c +++ b/drivers/gpu/drm/i915/gt/intel_gt.c @@ -625,8 +625,13 @@ int intel_gt_wait_for_idle(struct intel_gt *gt, long timeout) return -EINTR; } - return timeout ? timeout : intel_uc_wait_for_idle(>->uc, - remaining_timeout); + if (timeout) + return timeout; + + if (remaining_timeout < 0) + remaining_timeout = 0; + + return intel_uc_wait_for_idle(>->uc, remaining_timeout); } int intel_gt_init(struct intel_gt *gt) @@ -1017,6 +1022,11 @@ static void mmio_invalidate_full(struct intel_gt *gt) if (!i915_mmio_reg_offset(rb.reg)) continue; + if (GRAPHICS_VER(i915) == 12 && (engine->class == VIDEO_DECODE_CLASS || + engine->class == VIDEO_ENHANCEMENT_CLASS || + engine->class == COMPUTE_CLASS)) + rb.bit = _MASKED_BIT_ENABLE(rb.bit); + intel_uncore_write_fw(uncore, rb.reg, rb.bit); awake |= engine->mask; } diff --git a/drivers/gpu/drm/i915/gt/intel_gt_requests.c b/drivers/gpu/drm/i915/gt/intel_gt_requests.c index edb881d7563099926023c8a3cd8c34236afc720e..1dfd01668c79c638aa525d9f6a224b904bf381f4 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_requests.c +++ b/drivers/gpu/drm/i915/gt/intel_gt_requests.c @@ -199,7 +199,7 @@ out_active: spin_lock(&timelines->lock); if (remaining_timeout) *remaining_timeout = timeout; - return active_count ? timeout : 0; + return active_count ? timeout ?: -ETIME : 0; } static void retire_work_handler(struct work_struct *work) diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c index 7a45e5360caf2df17e8be371dcb9d5e2adecc74c..714221f9a13154050389e7fc76cb102a014bc714 100644 --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -664,8 +664,6 @@ static int intel_vgpu_open_device(struct vfio_device *vfio_dev) return -ESRCH; } - kvm_get_kvm(vgpu->vfio_device.kvm); - if (__kvmgt_vgpu_exist(vgpu)) return -EEXIST; @@ -676,6 +674,7 @@ static int intel_vgpu_open_device(struct vfio_device *vfio_dev) vgpu->track_node.track_write = kvmgt_page_track_write; vgpu->track_node.track_flush_slot = kvmgt_page_track_flush_slot; + kvm_get_kvm(vgpu->vfio_device.kvm); kvm_page_track_register_notifier(vgpu->vfio_device.kvm, &vgpu->track_node); @@ -715,15 +714,14 @@ static void intel_vgpu_close_device(struct vfio_device *vfio_dev) kvm_page_track_unregister_notifier(vgpu->vfio_device.kvm, &vgpu->track_node); + kvm_put_kvm(vgpu->vfio_device.kvm); + kvmgt_protect_table_destroy(vgpu); gvt_cache_destroy(vgpu); intel_vgpu_release_msi_eventfd_ctx(vgpu); vgpu->attached = false; - - if (vgpu->vfio_device.kvm) - kvm_put_kvm(vgpu->vfio_device.kvm); } static u64 intel_vgpu_get_bar_addr(struct intel_vgpu *vgpu, int bar) diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c index c459eb362c47f7e505c920d6736ee361566f46ed..f2a15d8155f4a1be085d86b7eb86d4ddfc018121 100644 --- a/drivers/gpu/drm/i915/i915_driver.c +++ b/drivers/gpu/drm/i915/i915_driver.c @@ -353,6 +353,7 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv) mutex_init(&dev_priv->display.wm.wm_mutex); mutex_init(&dev_priv->display.pps.mutex); mutex_init(&dev_priv->display.hdcp.comp_mutex); + spin_lock_init(&dev_priv->display.dkl.phy_lock); i915_memcpy_init_early(dev_priv); intel_runtime_pm_init_early(&dev_priv->runtime_pm); diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 0b287a59dc2f4350b501367b6c01283d6ef6b571..da35bb2db26b6eea152cef50f62bd58532eb850d 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h @@ -7420,6 +7420,9 @@ enum skl_power_gate { #define _DKL_PHY5_BASE 0x16C000 #define _DKL_PHY6_BASE 0x16D000 +#define DKL_REG_TC_PORT(__reg) \ + (TC_PORT_1 + ((__reg).reg - _DKL_PHY1_BASE) / (_DKL_PHY2_BASE - _DKL_PHY1_BASE)) + /* DEKEL PHY MMIO Address = Phy base + (internal address & ~index_mask) */ #define _DKL_PCS_DW5 0x14 #define DKL_PCS_DW5(tc_port) _MMIO(_PORT(tc_port, _DKL_PHY1_BASE, \ diff --git a/drivers/gpu/drm/i915/i915_scatterlist.h b/drivers/gpu/drm/i915/i915_scatterlist.h index 9ddb3e743a3e517dfe5d4006c822d396cef9492d..b0a1db44f89504a43ebb48c28ca58bc70bb0214d 100644 --- a/drivers/gpu/drm/i915/i915_scatterlist.h +++ b/drivers/gpu/drm/i915/i915_scatterlist.h @@ -9,7 +9,8 @@ #include #include -#include +#include +#include #include "i915_gem.h" @@ -127,19 +128,26 @@ static inline unsigned int i915_sg_dma_sizes(struct scatterlist *sg) return page_sizes; } -static inline unsigned int i915_sg_segment_size(void) +static inline unsigned int i915_sg_segment_size(struct device *dev) { - unsigned int size = swiotlb_max_segment(); - - if (size == 0) - size = UINT_MAX; - - size = rounddown(size, PAGE_SIZE); - /* swiotlb_max_segment_size can return 1 byte when it means one page. */ - if (size < PAGE_SIZE) - size = PAGE_SIZE; - - return size; + size_t max = min_t(size_t, UINT_MAX, dma_max_mapping_size(dev)); + + /* + * For Xen PV guests pages aren't contiguous in DMA (machine) address + * space. The DMA API takes care of that both in dma_alloc_* (by + * calling into the hypervisor to make the pages contiguous) and in + * dma_map_* (by bounce buffering). But i915 abuses ignores the + * coherency aspects of the DMA API and thus can't cope with bounce + * buffering actually happening, so add a hack here to force small + * allocations and mappings when running in PV mode on Xen. + * + * Note this will still break if bounce buffering is required for other + * reasons, like confidential computing hypervisors or PCIe root ports + * with addressing limitations. + */ + if (xen_pv_domain()) + max = PAGE_SIZE; + return round_down(max, PAGE_SIZE); } bool i915_sg_trim(struct sg_table *orig_st); diff --git a/drivers/gpu/drm/i915/intel_dram.c b/drivers/gpu/drm/i915/intel_dram.c index 2403ccd52c74a123edfa28013434f5326c0763fe..bba8cb6e8ae42e18fa69f0889d3bb483ce25bc5f 100644 --- a/drivers/gpu/drm/i915/intel_dram.c +++ b/drivers/gpu/drm/i915/intel_dram.c @@ -471,8 +471,7 @@ static int xelpdp_get_dram_info(struct drm_i915_private *i915) u32 val = intel_uncore_read(&i915->uncore, MTL_MEM_SS_INFO_GLOBAL); struct dram_info *dram_info = &i915->dram_info; - val = REG_FIELD_GET(MTL_DDR_TYPE_MASK, val); - switch (val) { + switch (REG_FIELD_GET(MTL_DDR_TYPE_MASK, val)) { case 0: dram_info->type = INTEL_DRAM_DDR4; break; diff --git a/drivers/gpu/drm/imx/Kconfig b/drivers/gpu/drm/imx/Kconfig index 975de4ff7313cb9dbd5e206f7f327d1aa4a3faf2..fd5b2471fdf0a44f25c21958eb47f1dd41dc5717 100644 --- a/drivers/gpu/drm/imx/Kconfig +++ b/drivers/gpu/drm/imx/Kconfig @@ -4,7 +4,6 @@ config DRM_IMX select DRM_KMS_HELPER select VIDEOMODE_HELPERS select DRM_GEM_DMA_HELPER - select DRM_KMS_HELPER depends on DRM && (ARCH_MXC || ARCH_MULTIPLATFORM || COMPILE_TEST) depends on IMX_IPUV3_CORE help diff --git a/drivers/gpu/drm/imx/imx-tve.c b/drivers/gpu/drm/imx/imx-tve.c index 6b34fac3f73a0a50a525c4ec72692d19e7a7ebbe..ab4d1c878fda3fde3fe9c6fff7ea950deb876227 100644 --- a/drivers/gpu/drm/imx/imx-tve.c +++ b/drivers/gpu/drm/imx/imx-tve.c @@ -218,8 +218,9 @@ static int imx_tve_connector_get_modes(struct drm_connector *connector) return ret; } -static int imx_tve_connector_mode_valid(struct drm_connector *connector, - struct drm_display_mode *mode) +static enum drm_mode_status +imx_tve_connector_mode_valid(struct drm_connector *connector, + struct drm_display_mode *mode) { struct imx_tve *tve = con_to_tve(connector); unsigned long rate; diff --git a/drivers/gpu/drm/lima/lima_devfreq.c b/drivers/gpu/drm/lima/lima_devfreq.c index 011be7ff51e1aa44756d743e07417bc75fb55289..bc8fb4e38d0a7279cc038d086869f0345ca418da 100644 --- a/drivers/gpu/drm/lima/lima_devfreq.c +++ b/drivers/gpu/drm/lima/lima_devfreq.c @@ -112,11 +112,6 @@ int lima_devfreq_init(struct lima_device *ldev) unsigned long cur_freq; int ret; const char *regulator_names[] = { "mali", NULL }; - const char *clk_names[] = { "core", NULL }; - struct dev_pm_opp_config config = { - .regulator_names = regulator_names, - .clk_names = clk_names, - }; if (!device_property_present(dev, "operating-points-v2")) /* Optional, continue without devfreq */ @@ -124,7 +119,15 @@ int lima_devfreq_init(struct lima_device *ldev) spin_lock_init(&ldevfreq->lock); - ret = devm_pm_opp_set_config(dev, &config); + /* + * clkname is set separately so it is not affected by the optional + * regulator setting which may return error. + */ + ret = devm_pm_opp_set_clkname(dev, "core"); + if (ret) + return ret; + + ret = devm_pm_opp_set_regulators(dev, regulator_names); if (ret) { /* Continue if the optional regulator is missing */ if (ret != -ENODEV) diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 2944228a8e2c4e0666c745f2b032e3ea0f9bc400..8a3b685c2fcc05796d581a52dd19fd2a2b0665e0 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -2500,6 +2500,7 @@ static const struct display_timing logictechno_lt161010_2nh_timing = { static const struct panel_desc logictechno_lt161010_2nh = { .timings = &logictechno_lt161010_2nh_timing, .num_timings = 1, + .bpc = 6, .size = { .width = 154, .height = 86, @@ -2529,6 +2530,7 @@ static const struct display_timing logictechno_lt170410_2whc_timing = { static const struct panel_desc logictechno_lt170410_2whc = { .timings = &logictechno_lt170410_2whc_timing, .num_timings = 1, + .bpc = 8, .size = { .width = 217, .height = 136, diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panfrost/panfrost_mmu.c index e246d914e7f6b28eb815b00ab6b8d0a3d156a048..4e83a1891f3edc493ac3c5b9bbe1b7eab8b5b52b 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c @@ -250,13 +250,22 @@ void panfrost_mmu_reset(struct panfrost_device *pfdev) static size_t get_pgsize(u64 addr, size_t size, size_t *count) { + /* + * io-pgtable only operates on multiple pages within a single table + * entry, so we need to split at boundaries of the table size, i.e. + * the next block size up. The distance from address A to the next + * boundary of block size B is logically B - A % B, but in unsigned + * two's complement where B is a power of two we get the equivalence + * B - A % B == (B - A) % B == (n * B - A) % B, and choose n = 0 :) + */ size_t blk_offset = -addr % SZ_2M; if (blk_offset || size < SZ_2M) { *count = min_not_zero(blk_offset, size) / SZ_4K; return SZ_4K; } - *count = size / SZ_2M; + blk_offset = -addr % SZ_1G ?: SZ_1G; + *count = min(blk_offset, size) / SZ_2M; return SZ_2M; } diff --git a/drivers/gpu/drm/rcar-du/Kconfig b/drivers/gpu/drm/rcar-du/Kconfig index c959e8c6be7d4e5c39e56c548d6c55d6b6c37710..fd2c2eaee26ba182681981a37de45fccac727b9a 100644 --- a/drivers/gpu/drm/rcar-du/Kconfig +++ b/drivers/gpu/drm/rcar-du/Kconfig @@ -44,13 +44,18 @@ config DRM_RCAR_LVDS select OF_FLATTREE select OF_OVERLAY -config DRM_RCAR_MIPI_DSI - tristate "R-Car DU MIPI DSI Encoder Support" - depends on DRM && DRM_BRIDGE && OF - select DRM_MIPI_DSI +config DRM_RCAR_USE_MIPI_DSI + bool "R-Car DU MIPI DSI Encoder Support" + depends on DRM_BRIDGE && OF + default DRM_RCAR_DU help Enable support for the R-Car Display Unit embedded MIPI DSI encoders. +config DRM_RCAR_MIPI_DSI + def_tristate DRM_RCAR_DU + depends on DRM_RCAR_USE_MIPI_DSI + select DRM_MIPI_DSI + config DRM_RCAR_VSP bool "R-Car DU VSP Compositor Support" if ARM default y if ARM64 diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c index bf6948125b8415082b9698ebf44ecedca2496b2a..f4df9820b295dc8850d66261a8a9f6f534557849 100644 --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c @@ -752,7 +752,7 @@ static void dw_mipi_dsi_rockchip_config(struct dw_mipi_dsi_rockchip *dsi) static void dw_mipi_dsi_rockchip_set_lcdsel(struct dw_mipi_dsi_rockchip *dsi, int mux) { - if (dsi->cdata->lcdsel_grf_reg < 0) + if (dsi->cdata->lcdsel_grf_reg) regmap_write(dsi->grf_regmap, dsi->cdata->lcdsel_grf_reg, mux ? dsi->cdata->lcdsel_lit : dsi->cdata->lcdsel_big); } @@ -1051,23 +1051,31 @@ static int dw_mipi_dsi_rockchip_host_attach(void *priv_data, if (ret) { DRM_DEV_ERROR(dsi->dev, "Failed to register component: %d\n", ret); - return ret; + goto out; } second = dw_mipi_dsi_rockchip_find_second(dsi); - if (IS_ERR(second)) - return PTR_ERR(second); + if (IS_ERR(second)) { + ret = PTR_ERR(second); + goto out; + } if (second) { ret = component_add(second, &dw_mipi_dsi_rockchip_ops); if (ret) { DRM_DEV_ERROR(second, "Failed to register component: %d\n", ret); - return ret; + goto out; } } return 0; + +out: + mutex_lock(&dsi->usage_mutex); + dsi->usage_mode = DW_DSI_USAGE_IDLE; + mutex_unlock(&dsi->usage_mutex); + return ret; } static int dw_mipi_dsi_rockchip_host_detach(void *priv_data, @@ -1635,7 +1643,6 @@ static const struct rockchip_dw_dsi_chip_data rk3399_chip_data[] = { static const struct rockchip_dw_dsi_chip_data rk3568_chip_data[] = { { .reg = 0xfe060000, - .lcdsel_grf_reg = -1, .lanecfg1_grf_reg = RK3568_GRF_VO_CON2, .lanecfg1 = HIWORD_UPDATE(0, RK3568_DSI0_SKEWCALHS | RK3568_DSI0_FORCETXSTOPMODE | @@ -1645,7 +1652,6 @@ static const struct rockchip_dw_dsi_chip_data rk3568_chip_data[] = { }, { .reg = 0xfe070000, - .lcdsel_grf_reg = -1, .lanecfg1_grf_reg = RK3568_GRF_VO_CON3, .lanecfg1 = HIWORD_UPDATE(0, RK3568_DSI1_SKEWCALHS | RK3568_DSI1_FORCETXSTOPMODE | @@ -1681,5 +1687,11 @@ struct platform_driver dw_mipi_dsi_rockchip_driver = { .of_match_table = dw_mipi_dsi_rockchip_dt_ids, .pm = &dw_mipi_dsi_rockchip_pm_ops, .name = "dw-mipi-dsi-rockchip", + /* + * For dual-DSI display, one DSI pokes at the other DSI's + * drvdata in dw_mipi_dsi_rockchip_find_second(). This is not + * safe for asynchronous probe. + */ + .probe_type = PROBE_FORCE_SYNCHRONOUS, }, }; diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c index c14f888938688826b28758b53aa7db6ae54e68b3..2f4b8f64cbad33fdf4be3c4f27eea6a123816128 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c @@ -565,7 +565,8 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master, ret = rockchip_hdmi_parse_dt(hdmi); if (ret) { - DRM_DEV_ERROR(hdmi->dev, "Unable to parse OF data\n"); + if (ret != -EPROBE_DEFER) + DRM_DEV_ERROR(hdmi->dev, "Unable to parse OF data\n"); return ret; } diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c index 614e97aaac805464205473b2320dc573349d1b1a..da8a69953706d941aabea89208025fba4bdf8ef8 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c @@ -364,9 +364,12 @@ rockchip_gem_create_with_handle(struct drm_file *file_priv, { struct rockchip_gem_object *rk_obj; struct drm_gem_object *obj; + bool is_framebuffer; int ret; - rk_obj = rockchip_gem_create_object(drm, size, false); + is_framebuffer = drm->fb_helper && file_priv == drm->fb_helper->client.file; + + rk_obj = rockchip_gem_create_object(drm, size, is_framebuffer); if (IS_ERR(rk_obj)) return ERR_CAST(rk_obj); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index aac20be5ac0820cde9dd275ac2d1f9b812c4f01c..105a548d0abeb3972487fd0ea527ef35efbe691f 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -877,10 +877,14 @@ static void vop2_crtc_atomic_disable(struct drm_crtc *crtc, { struct vop2_video_port *vp = to_vop2_video_port(crtc); struct vop2 *vop2 = vp->vop2; + struct drm_crtc_state *old_crtc_state; int ret; vop2_lock(vop2); + old_crtc_state = drm_atomic_get_old_crtc_state(state, crtc); + drm_atomic_helper_disable_planes_on_crtc(old_crtc_state, false); + drm_crtc_vblank_off(crtc); /* @@ -996,13 +1000,15 @@ static int vop2_plane_atomic_check(struct drm_plane *plane, static void vop2_plane_atomic_disable(struct drm_plane *plane, struct drm_atomic_state *state) { - struct drm_plane_state *old_pstate = drm_atomic_get_old_plane_state(state, plane); + struct drm_plane_state *old_pstate = NULL; struct vop2_win *win = to_vop2_win(plane); struct vop2 *vop2 = win->vop2; drm_dbg(vop2->drm, "%s disable\n", win->data->name); - if (!old_pstate->crtc) + if (state) + old_pstate = drm_atomic_get_old_plane_state(state, plane); + if (old_pstate && !old_pstate->crtc) return; vop2_win_disable(win); diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c index 6748ec1e00057da7060e90813d0bb49bf11b95f4..a1f909dac89a7657c3ccf415025df22e5b4cf7fc 100644 --- a/drivers/gpu/drm/tegra/drm.c +++ b/drivers/gpu/drm/tegra/drm.c @@ -1093,6 +1093,10 @@ static bool host1x_drm_wants_iommu(struct host1x_device *dev) struct host1x *host1x = dev_get_drvdata(dev->dev.parent); struct iommu_domain *domain; + /* Our IOMMU usage policy doesn't currently play well with GART */ + if (of_machine_is_compatible("nvidia,tegra20")) + return false; + /* * If the Tegra DRM clients are backed by an IOMMU, push buffers are * likely to be allocated beyond the 32-bit boundary if sufficient diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c index 2027063fdc3097c59dae9c865a59c149d5db5484..8c329c071c62d047498ae7182f3739a1642aad76 100644 --- a/drivers/gpu/drm/vc4/vc4_drv.c +++ b/drivers/gpu/drm/vc4/vc4_drv.c @@ -476,7 +476,12 @@ static int __init vc4_drm_register(void) if (ret) return ret; - return platform_driver_register(&vc4_platform_driver); + ret = platform_driver_register(&vc4_platform_driver); + if (ret) + platform_unregister_drivers(component_drivers, + ARRAY_SIZE(component_drivers)); + + return ret; } static void __exit vc4_drm_unregister(void) diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index 596e311d6e58eaf7c2c914b531643f7d34979052..470432c8fd707a06c0bbefcec164389004003cb8 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -349,27 +349,40 @@ static int vc4_hdmi_reset_link(struct drm_connector *connector, if (!crtc_state->active) return 0; - if (!vc4_hdmi_supports_scrambling(encoder)) + mutex_lock(&vc4_hdmi->mutex); + + if (!vc4_hdmi_supports_scrambling(encoder)) { + mutex_unlock(&vc4_hdmi->mutex); return 0; + } scrambling_needed = vc4_hdmi_mode_needs_scrambling(&vc4_hdmi->saved_adjusted_mode, vc4_hdmi->output_bpc, vc4_hdmi->output_format); - if (!scrambling_needed) + if (!scrambling_needed) { + mutex_unlock(&vc4_hdmi->mutex); return 0; + } if (conn_state->commit && - !try_wait_for_completion(&conn_state->commit->hw_done)) + !try_wait_for_completion(&conn_state->commit->hw_done)) { + mutex_unlock(&vc4_hdmi->mutex); return 0; + } ret = drm_scdc_readb(connector->ddc, SCDC_TMDS_CONFIG, &config); if (ret < 0) { drm_err(drm, "Failed to read TMDS config: %d\n", ret); + mutex_unlock(&vc4_hdmi->mutex); return 0; } - if (!!(config & SCDC_SCRAMBLING_ENABLE) == scrambling_needed) + if (!!(config & SCDC_SCRAMBLING_ENABLE) == scrambling_needed) { + mutex_unlock(&vc4_hdmi->mutex); return 0; + } + + mutex_unlock(&vc4_hdmi->mutex); /* * HDMI 2.0 says that one should not send scrambled data @@ -397,9 +410,8 @@ static void vc4_hdmi_handle_hotplug(struct vc4_hdmi *vc4_hdmi, * .adap_enable, which leads to that funtion being called with * our mutex held. * - * A similar situation occurs with - * drm_atomic_helper_connector_hdmi_reset_link() that will call - * into our KMS hooks if the scrambling was enabled. + * A similar situation occurs with vc4_hdmi_reset_link() that + * will call into our KMS hooks if the scrambling was enabled. * * Concurrency isn't an issue at the moment since we don't share * any state with any of the other frameworks so we can ignore @@ -3160,9 +3172,16 @@ static int vc4_hdmi_init_resources(struct drm_device *drm, DRM_ERROR("Failed to get HDMI state machine clock\n"); return PTR_ERR(vc4_hdmi->hsm_clock); } + vc4_hdmi->audio_clock = vc4_hdmi->hsm_clock; vc4_hdmi->cec_clock = vc4_hdmi->hsm_clock; + vc4_hdmi->hsm_rpm_clock = devm_clk_get(dev, "hdmi"); + if (IS_ERR(vc4_hdmi->hsm_rpm_clock)) { + DRM_ERROR("Failed to get HDMI state machine clock\n"); + return PTR_ERR(vc4_hdmi->hsm_rpm_clock); + } + return 0; } @@ -3245,6 +3264,12 @@ static int vc5_hdmi_init_resources(struct drm_device *drm, return PTR_ERR(vc4_hdmi->hsm_clock); } + vc4_hdmi->hsm_rpm_clock = devm_clk_get(dev, "hdmi"); + if (IS_ERR(vc4_hdmi->hsm_rpm_clock)) { + DRM_ERROR("Failed to get HDMI state machine clock\n"); + return PTR_ERR(vc4_hdmi->hsm_rpm_clock); + } + vc4_hdmi->pixel_bvb_clock = devm_clk_get(dev, "bvb"); if (IS_ERR(vc4_hdmi->pixel_bvb_clock)) { DRM_ERROR("Failed to get pixel bvb clock\n"); @@ -3308,7 +3333,7 @@ static int vc4_hdmi_runtime_suspend(struct device *dev) { struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev); - clk_disable_unprepare(vc4_hdmi->hsm_clock); + clk_disable_unprepare(vc4_hdmi->hsm_rpm_clock); return 0; } @@ -3326,11 +3351,11 @@ static int vc4_hdmi_runtime_resume(struct device *dev) * its frequency while the power domain is active so that it * keeps its rate. */ - ret = clk_set_min_rate(vc4_hdmi->hsm_clock, HSM_MIN_CLOCK_FREQ); + ret = clk_set_min_rate(vc4_hdmi->hsm_rpm_clock, HSM_MIN_CLOCK_FREQ); if (ret) return ret; - ret = clk_prepare_enable(vc4_hdmi->hsm_clock); + ret = clk_prepare_enable(vc4_hdmi->hsm_rpm_clock); if (ret) return ret; @@ -3343,7 +3368,7 @@ static int vc4_hdmi_runtime_resume(struct device *dev) * case, it will lead to a silent CPU stall. Let's make sure we * prevent such a case. */ - rate = clk_get_rate(vc4_hdmi->hsm_clock); + rate = clk_get_rate(vc4_hdmi->hsm_rpm_clock); if (!rate) { ret = -EINVAL; goto err_disable_clk; diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.h b/drivers/gpu/drm/vc4/vc4_hdmi.h index db823efb256399146a0a66b4dd5b9bdfba31e98c..1ad8e8c377e2770c888c8a8a62fbf6cda346eb57 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.h +++ b/drivers/gpu/drm/vc4/vc4_hdmi.h @@ -172,6 +172,7 @@ struct vc4_hdmi { struct clk *cec_clock; struct clk *pixel_clock; struct clk *hsm_clock; + struct clk *hsm_rpm_clock; struct clk *audio_clock; struct clk *pixel_bvb_clock; diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c index 4419e810103de3e77525163226d7bbd7270d5b9b..0a6347c05df491f72546fedcf43766de10af3b42 100644 --- a/drivers/gpu/drm/vc4/vc4_kms.c +++ b/drivers/gpu/drm/vc4/vc4_kms.c @@ -197,8 +197,8 @@ vc4_hvs_get_new_global_state(struct drm_atomic_state *state) struct drm_private_state *priv_state; priv_state = drm_atomic_get_new_private_obj_state(state, &vc4->hvs_channels); - if (IS_ERR(priv_state)) - return ERR_CAST(priv_state); + if (!priv_state) + return ERR_PTR(-EINVAL); return to_vc4_hvs_state(priv_state); } @@ -210,8 +210,8 @@ vc4_hvs_get_old_global_state(struct drm_atomic_state *state) struct drm_private_state *priv_state; priv_state = drm_atomic_get_old_private_obj_state(state, &vc4->hvs_channels); - if (IS_ERR(priv_state)) - return ERR_CAST(priv_state); + if (!priv_state) + return ERR_PTR(-EINVAL); return to_vc4_hvs_state(priv_state); } diff --git a/drivers/gpu/host1x/dev.c b/drivers/gpu/host1x/dev.c index 0cd3f97e7e49f2a35083dc58fec9e14170ac2bed..f60ea24db0ec8cf72f23e1e5989049ef65fb1175 100644 --- a/drivers/gpu/host1x/dev.c +++ b/drivers/gpu/host1x/dev.c @@ -292,6 +292,10 @@ static void host1x_setup_virtualization_tables(struct host1x *host) static bool host1x_wants_iommu(struct host1x *host1x) { + /* Our IOMMU usage policy doesn't currently play well with GART */ + if (of_machine_is_compatible("nvidia,tegra20")) + return false; + /* * If we support addressing a maximum of 32 bits of physical memory * and if the host1x firewall is enabled, there's no need to enable diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c index b59c3dafa6a48de3cebd53e14c2475e01485dd6a..f99752b998f3d8fc0a7a01c8f49a59c600b965cc 100644 --- a/drivers/hid/hid-asus.c +++ b/drivers/hid/hid-asus.c @@ -219,14 +219,13 @@ static void asus_report_tool_width(struct asus_drvdata *drvdat) { struct input_mt *mt = drvdat->input->mt; struct input_mt_slot *oldest; - int oldid, count, i; + int oldid, i; if (drvdat->tp->contact_size < 5) return; oldest = NULL; oldid = mt->trkid; - count = 0; for (i = 0; i < mt->num_slots; ++i) { struct input_mt_slot *ps = &mt->slots[i]; @@ -238,7 +237,6 @@ static void asus_report_tool_width(struct asus_drvdata *drvdat) oldest = ps; oldid = id; } - count++; } if (oldest) { diff --git a/drivers/hid/hid-hyperv.c b/drivers/hid/hid-hyperv.c index e0bc731241960dc1bec7c837227d88768226b83f..ab57b49a44ed966962ccf49dc9218c899c23ccf0 100644 --- a/drivers/hid/hid-hyperv.c +++ b/drivers/hid/hid-hyperv.c @@ -499,7 +499,7 @@ static int mousevsc_probe(struct hv_device *device, ret = hid_add_device(hid_dev); if (ret) - goto probe_err1; + goto probe_err2; ret = hid_parse(hid_dev); diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c index 77486962a773f5a197d151d62ed5e387f1890570..0f3d57b42684671337ef615b479728629ed148d2 100644 --- a/drivers/hid/wacom_wac.c +++ b/drivers/hid/wacom_wac.c @@ -2520,11 +2520,12 @@ static void wacom_wac_pen_report(struct hid_device *hdev, if (!delay_pen_events(wacom_wac) && wacom_wac->tool[0]) { int id = wacom_wac->id[0]; - if (wacom_wac->features.quirks & WACOM_QUIRK_PEN_BUTTON3 && - wacom_wac->hid_data.barrelswitch & wacom_wac->hid_data.barrelswitch2) { - wacom_wac->hid_data.barrelswitch = 0; - wacom_wac->hid_data.barrelswitch2 = 0; - wacom_wac->hid_data.barrelswitch3 = 1; + if (wacom_wac->features.quirks & WACOM_QUIRK_PEN_BUTTON3) { + int sw_state = wacom_wac->hid_data.barrelswitch | + (wacom_wac->hid_data.barrelswitch2 << 1); + wacom_wac->hid_data.barrelswitch = sw_state == 1; + wacom_wac->hid_data.barrelswitch2 = sw_state == 2; + wacom_wac->hid_data.barrelswitch3 = sw_state == 3; } input_report_key(input, BTN_STYLUS, wacom_wac->hid_data.barrelswitch); input_report_key(input, BTN_STYLUS2, wacom_wac->hid_data.barrelswitch2); diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c index 5b120402d4057ef9eac985db6dcf5e91fa0e22ee..cc23b90cae02f9780016211f378954cb63febdd8 100644 --- a/drivers/hv/channel_mgmt.c +++ b/drivers/hv/channel_mgmt.c @@ -533,13 +533,17 @@ static void vmbus_add_channel_work(struct work_struct *work) * Add the new device to the bus. This will kick off device-driver * binding which eventually invokes the device driver's AddDevice() * method. + * + * If vmbus_device_register() fails, the 'device_obj' is freed in + * vmbus_device_release() as called by device_unregister() in the + * error path of vmbus_device_register(). In the outside error + * path, there's no need to free it. */ ret = vmbus_device_register(newchannel->device_obj); if (ret != 0) { pr_err("unable to add child device object (relid %d)\n", newchannel->offermsg.child_relid); - kfree(newchannel->device_obj); goto err_deq_chan; } diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c index fdf6decacf067f9ed84910194357f71e4258966c..6c127f061f06db8ba763d616673551f5641132a6 100644 --- a/drivers/hv/hv_balloon.c +++ b/drivers/hv/hv_balloon.c @@ -905,7 +905,7 @@ static unsigned long handle_pg_range(unsigned long pg_start, * We have some residual hot add range * that needs to be hot added; hot add * it now. Hot add a multiple of - * of HA_CHUNK that fully covers the pages + * HA_CHUNK that fully covers the pages * we have. */ size = (has->end_pfn - has->ha_end_pfn); diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index 8b2e413bf19cc1ef9f55c9cd9d2bd9213ddc2a0e..e592c481f7aeea0d60a541a7dcd78b83d41f665b 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -2082,6 +2082,7 @@ int vmbus_device_register(struct hv_device *child_device_obj) ret = device_register(&child_device_obj->device); if (ret) { pr_err("Unable to register child device\n"); + put_device(&child_device_obj->device); return ret; } diff --git a/drivers/hwmon/asus-ec-sensors.c b/drivers/hwmon/asus-ec-sensors.c index 81e688975c6a79583e61004f2ff4d47901521f93..a901e4e33d81d0430df620e06fd2d9adf428b23e 100644 --- a/drivers/hwmon/asus-ec-sensors.c +++ b/drivers/hwmon/asus-ec-sensors.c @@ -938,6 +938,8 @@ static int asus_ec_probe(struct platform_device *pdev) ec_data->nr_sensors = hweight_long(ec_data->board_info->sensors); ec_data->sensors = devm_kcalloc(dev, ec_data->nr_sensors, sizeof(struct ec_sensor), GFP_KERNEL); + if (!ec_data->sensors) + return -ENOMEM; status = setup_lock_data(dev); if (status) { diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c index 8bf32c6c85d95a3c655f1819aa4c69ddbd1033fb..9bee4d33fbdf0a0ad1efe99541ba066a89aacf0d 100644 --- a/drivers/hwmon/coretemp.c +++ b/drivers/hwmon/coretemp.c @@ -242,10 +242,13 @@ static int adjust_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev) */ if (host_bridge && host_bridge->vendor == PCI_VENDOR_ID_INTEL) { for (i = 0; i < ARRAY_SIZE(tjmax_pci_table); i++) { - if (host_bridge->device == tjmax_pci_table[i].device) + if (host_bridge->device == tjmax_pci_table[i].device) { + pci_dev_put(host_bridge); return tjmax_pci_table[i].tjmax; + } } } + pci_dev_put(host_bridge); for (i = 0; i < ARRAY_SIZE(tjmax_table); i++) { if (strstr(c->x86_model_id, tjmax_table[i].id)) @@ -533,6 +536,10 @@ static void coretemp_remove_core(struct platform_data *pdata, int indx) { struct temp_data *tdata = pdata->core_data[indx]; + /* if we errored on add then this is already gone */ + if (!tdata) + return; + /* Remove the sysfs attributes */ sysfs_remove_group(&pdata->hwmon_dev->kobj, &tdata->attr_group); diff --git a/drivers/hwmon/i5500_temp.c b/drivers/hwmon/i5500_temp.c index 05f68e9c9477ed50c54334afe569cba772b5cac3..23b9f94fe0a9b6aca09f449d49869cd445ff1381 100644 --- a/drivers/hwmon/i5500_temp.c +++ b/drivers/hwmon/i5500_temp.c @@ -117,7 +117,7 @@ static int i5500_temp_probe(struct pci_dev *pdev, u32 tstimer; s8 tsfsc; - err = pci_enable_device(pdev); + err = pcim_enable_device(pdev); if (err) { dev_err(&pdev->dev, "Failed to enable device\n"); return err; diff --git a/drivers/hwmon/ibmpex.c b/drivers/hwmon/ibmpex.c index f6ec165c0fa8b6bdbe8986bbcb7023b8342361b3..1837cccd993c8fd13f015903fbf392aef9dccc46 100644 --- a/drivers/hwmon/ibmpex.c +++ b/drivers/hwmon/ibmpex.c @@ -502,6 +502,7 @@ static void ibmpex_register_bmc(int iface, struct device *dev) return; out_register: + list_del(&data->list); hwmon_device_unregister(data->hwmon_dev); out_user: ipmi_destroy_user(data->user); diff --git a/drivers/hwmon/ina3221.c b/drivers/hwmon/ina3221.c index 2a57f4b60c29d5042dcc2adc7fbcc240204a5c78..e06186986444ee4853248deb4ec8424b616ed726 100644 --- a/drivers/hwmon/ina3221.c +++ b/drivers/hwmon/ina3221.c @@ -228,7 +228,7 @@ static int ina3221_read_value(struct ina3221_data *ina, unsigned int reg, * Shunt Voltage Sum register has 14-bit value with 1-bit shift * Other Shunt Voltage registers have 12 bits with 3-bit shift */ - if (reg == INA3221_SHUNT_SUM) + if (reg == INA3221_SHUNT_SUM || reg == INA3221_CRIT_SUM) *val = sign_extend32(regval >> 1, 14); else *val = sign_extend32(regval >> 3, 12); @@ -465,7 +465,7 @@ static int ina3221_write_curr(struct device *dev, u32 attr, * SHUNT_SUM: (1 / 40uV) << 1 = 1 / 20uV * SHUNT[1-3]: (1 / 40uV) << 3 = 1 / 5uV */ - if (reg == INA3221_SHUNT_SUM) + if (reg == INA3221_SHUNT_SUM || reg == INA3221_CRIT_SUM) regval = DIV_ROUND_CLOSEST(voltage_uv, 20) & 0xfffe; else regval = DIV_ROUND_CLOSEST(voltage_uv, 5) & 0xfff8; diff --git a/drivers/hwmon/ltc2947-core.c b/drivers/hwmon/ltc2947-core.c index 7404e974762fd7e9cba7cee36e7e1bf2e2e02408..2dbbbac9de093d6afa2f1ef7cb8a8e646322ff2a 100644 --- a/drivers/hwmon/ltc2947-core.c +++ b/drivers/hwmon/ltc2947-core.c @@ -396,7 +396,7 @@ static int ltc2947_read_temp(struct device *dev, const u32 attr, long *val, return ret; /* in milidegrees celcius, temp is given by: */ - *val = (__val * 204) + 550; + *val = (__val * 204) + 5500; return 0; } diff --git a/drivers/hwmon/pmbus/pmbus.h b/drivers/hwmon/pmbus/pmbus.h index 7daaf0caf4d30a0dbd9b5669a86f01b0ff1850a2..10fb17879f8ed986cc6146897a8270ddd3d1f10b 100644 --- a/drivers/hwmon/pmbus/pmbus.h +++ b/drivers/hwmon/pmbus/pmbus.h @@ -467,7 +467,6 @@ extern const struct regulator_ops pmbus_regulator_ops; #define PMBUS_REGULATOR_STEP(_name, _id, _voltages, _step) \ [_id] = { \ .name = (_name # _id), \ - .supply_name = "vin", \ .id = (_id), \ .of_match = of_match_ptr(_name # _id), \ .regulators_node = of_match_ptr("regulators"), \ diff --git a/drivers/hwmon/scmi-hwmon.c b/drivers/hwmon/scmi-hwmon.c index b1329a58ce403d5fdb185609a6345833bcf1d056..e192f0c6714654f4107f60a34f1e74a230455c8e 100644 --- a/drivers/hwmon/scmi-hwmon.c +++ b/drivers/hwmon/scmi-hwmon.c @@ -20,6 +20,11 @@ struct scmi_sensors { const struct scmi_sensor_info **info[hwmon_max]; }; +struct scmi_thermal_sensor { + const struct scmi_protocol_handle *ph; + const struct scmi_sensor_info *info; +}; + static inline u64 __pow10(u8 x) { u64 r = 1; @@ -64,16 +69,14 @@ static int scmi_hwmon_scale(const struct scmi_sensor_info *sensor, u64 *value) return 0; } -static int scmi_hwmon_read(struct device *dev, enum hwmon_sensor_types type, - u32 attr, int channel, long *val) +static int scmi_hwmon_read_scaled_value(const struct scmi_protocol_handle *ph, + const struct scmi_sensor_info *sensor, + long *val) { int ret; u64 value; - const struct scmi_sensor_info *sensor; - struct scmi_sensors *scmi_sensors = dev_get_drvdata(dev); - sensor = *(scmi_sensors->info[type] + channel); - ret = sensor_ops->reading_get(scmi_sensors->ph, sensor->id, &value); + ret = sensor_ops->reading_get(ph, sensor->id, &value); if (ret) return ret; @@ -84,6 +87,17 @@ static int scmi_hwmon_read(struct device *dev, enum hwmon_sensor_types type, return ret; } +static int scmi_hwmon_read(struct device *dev, enum hwmon_sensor_types type, + u32 attr, int channel, long *val) +{ + const struct scmi_sensor_info *sensor; + struct scmi_sensors *scmi_sensors = dev_get_drvdata(dev); + + sensor = *(scmi_sensors->info[type] + channel); + + return scmi_hwmon_read_scaled_value(scmi_sensors->ph, sensor, val); +} + static int scmi_hwmon_read_string(struct device *dev, enum hwmon_sensor_types type, u32 attr, int channel, const char **str) @@ -122,6 +136,25 @@ static struct hwmon_chip_info scmi_chip_info = { .info = NULL, }; +static int scmi_hwmon_thermal_get_temp(struct thermal_zone_device *tz, + int *temp) +{ + int ret; + long value; + struct scmi_thermal_sensor *th_sensor = tz->devdata; + + ret = scmi_hwmon_read_scaled_value(th_sensor->ph, th_sensor->info, + &value); + if (!ret) + *temp = value; + + return ret; +} + +static const struct thermal_zone_device_ops scmi_hwmon_thermal_ops = { + .get_temp = scmi_hwmon_thermal_get_temp, +}; + static int scmi_hwmon_add_chan_info(struct hwmon_channel_info *scmi_hwmon_chan, struct device *dev, int num, enum hwmon_sensor_types type, u32 config) @@ -149,7 +182,6 @@ static enum hwmon_sensor_types scmi_types[] = { }; static u32 hwmon_attributes[hwmon_max] = { - [hwmon_chip] = HWMON_C_REGISTER_TZ, [hwmon_temp] = HWMON_T_INPUT | HWMON_T_LABEL, [hwmon_in] = HWMON_I_INPUT | HWMON_I_LABEL, [hwmon_curr] = HWMON_C_INPUT | HWMON_C_LABEL, @@ -157,6 +189,43 @@ static u32 hwmon_attributes[hwmon_max] = { [hwmon_energy] = HWMON_E_INPUT | HWMON_E_LABEL, }; +static int scmi_thermal_sensor_register(struct device *dev, + const struct scmi_protocol_handle *ph, + const struct scmi_sensor_info *sensor) +{ + struct scmi_thermal_sensor *th_sensor; + struct thermal_zone_device *tzd; + + th_sensor = devm_kzalloc(dev, sizeof(*th_sensor), GFP_KERNEL); + if (!th_sensor) + return -ENOMEM; + + th_sensor->ph = ph; + th_sensor->info = sensor; + + /* + * Try to register a temperature sensor with the Thermal Framework: + * skip sensors not defined as part of any thermal zone (-ENODEV) but + * report any other errors related to misconfigured zones/sensors. + */ + tzd = devm_thermal_of_zone_register(dev, th_sensor->info->id, th_sensor, + &scmi_hwmon_thermal_ops); + if (IS_ERR(tzd)) { + devm_kfree(dev, th_sensor); + + if (PTR_ERR(tzd) != -ENODEV) + return PTR_ERR(tzd); + + dev_dbg(dev, "Sensor '%s' not attached to any thermal zone.\n", + sensor->name); + } else { + dev_dbg(dev, "Sensor '%s' attached to thermal zone ID:%d\n", + sensor->name, tzd->id); + } + + return 0; +} + static int scmi_hwmon_probe(struct scmi_device *sdev) { int i, idx; @@ -164,7 +233,7 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) enum hwmon_sensor_types type; struct scmi_sensors *scmi_sensors; const struct scmi_sensor_info *sensor; - int nr_count[hwmon_max] = {0}, nr_types = 0; + int nr_count[hwmon_max] = {0}, nr_types = 0, nr_count_temp = 0; const struct hwmon_chip_info *chip_info; struct device *hwdev, *dev = &sdev->dev; struct hwmon_channel_info *scmi_hwmon_chan; @@ -208,10 +277,8 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) } } - if (nr_count[hwmon_temp]) { - nr_count[hwmon_chip]++; - nr_types++; - } + if (nr_count[hwmon_temp]) + nr_count_temp = nr_count[hwmon_temp]; scmi_hwmon_chan = devm_kcalloc(dev, nr_types, sizeof(*scmi_hwmon_chan), GFP_KERNEL); @@ -262,8 +329,31 @@ static int scmi_hwmon_probe(struct scmi_device *sdev) hwdev = devm_hwmon_device_register_with_info(dev, "scmi_sensors", scmi_sensors, chip_info, NULL); + if (IS_ERR(hwdev)) + return PTR_ERR(hwdev); - return PTR_ERR_OR_ZERO(hwdev); + for (i = 0; i < nr_count_temp; i++) { + int ret; + + sensor = *(scmi_sensors->info[hwmon_temp] + i); + if (!sensor) + continue; + + /* + * Warn on any misconfiguration related to thermal zones but + * bail out of probing only on memory errors. + */ + ret = scmi_thermal_sensor_register(dev, ph, sensor); + if (ret) { + if (ret == -ENOMEM) + return ret; + dev_warn(dev, + "Thermal zone misconfigured for %s. err=%d\n", + sensor->name, ret); + } + } + + return 0; } static const struct scmi_device_id scmi_id_table[] = { diff --git a/drivers/hwspinlock/qcom_hwspinlock.c b/drivers/hwspinlock/qcom_hwspinlock.c index 80ea45b3a815fbda0a9787efbb853e7178a381a2..9cf186362ae2f0f76565e5758ac778618e0baaac 100644 --- a/drivers/hwspinlock/qcom_hwspinlock.c +++ b/drivers/hwspinlock/qcom_hwspinlock.c @@ -22,6 +22,7 @@ struct qcom_hwspinlock_of_data { u32 offset; u32 stride; + const struct regmap_config *regmap_config; }; static int qcom_hwspinlock_trylock(struct hwspinlock *lock) @@ -73,15 +74,42 @@ static const struct qcom_hwspinlock_of_data of_sfpb_mutex = { .stride = 0x4, }; -/* All modern platform has offset 0 and stride of 4k */ +static const struct regmap_config tcsr_msm8226_mutex_config = { + .reg_bits = 32, + .reg_stride = 4, + .val_bits = 32, + .max_register = 0x1000, + .fast_io = true, +}; + +static const struct qcom_hwspinlock_of_data of_msm8226_tcsr_mutex = { + .offset = 0, + .stride = 0x80, + .regmap_config = &tcsr_msm8226_mutex_config, +}; + +static const struct regmap_config tcsr_mutex_config = { + .reg_bits = 32, + .reg_stride = 4, + .val_bits = 32, + .max_register = 0x20000, + .fast_io = true, +}; + static const struct qcom_hwspinlock_of_data of_tcsr_mutex = { .offset = 0, .stride = 0x1000, + .regmap_config = &tcsr_mutex_config, }; static const struct of_device_id qcom_hwspinlock_of_match[] = { { .compatible = "qcom,sfpb-mutex", .data = &of_sfpb_mutex }, { .compatible = "qcom,tcsr-mutex", .data = &of_tcsr_mutex }, + { .compatible = "qcom,apq8084-tcsr-mutex", .data = &of_msm8226_tcsr_mutex }, + { .compatible = "qcom,ipq6018-tcsr-mutex", .data = &of_msm8226_tcsr_mutex }, + { .compatible = "qcom,msm8226-tcsr-mutex", .data = &of_msm8226_tcsr_mutex }, + { .compatible = "qcom,msm8974-tcsr-mutex", .data = &of_msm8226_tcsr_mutex }, + { .compatible = "qcom,msm8994-tcsr-mutex", .data = &of_msm8226_tcsr_mutex }, { } }; MODULE_DEVICE_TABLE(of, qcom_hwspinlock_of_match); @@ -117,14 +145,6 @@ static struct regmap *qcom_hwspinlock_probe_syscon(struct platform_device *pdev, return regmap; } -static const struct regmap_config tcsr_mutex_config = { - .reg_bits = 32, - .reg_stride = 4, - .val_bits = 32, - .max_register = 0x40000, - .fast_io = true, -}; - static struct regmap *qcom_hwspinlock_probe_mmio(struct platform_device *pdev, u32 *offset, u32 *stride) { @@ -133,6 +153,8 @@ static struct regmap *qcom_hwspinlock_probe_mmio(struct platform_device *pdev, void __iomem *base; data = of_device_get_match_data(dev); + if (!data->regmap_config) + return ERR_PTR(-EINVAL); *offset = data->offset; *stride = data->stride; @@ -141,7 +163,7 @@ static struct regmap *qcom_hwspinlock_probe_mmio(struct platform_device *pdev, if (IS_ERR(base)) return ERR_CAST(base); - return devm_regmap_init_mmio(dev, base, &tcsr_mutex_config); + return devm_regmap_init_mmio(dev, base, data->regmap_config); } static int qcom_hwspinlock_probe(struct platform_device *pdev) diff --git a/drivers/i2c/busses/i2c-cadence.c b/drivers/i2c/busses/i2c-cadence.c index fe0cd205502de94658d455b494070df8d76f139c..f58943cb134147b3e34111f9545570a301032eca 100644 --- a/drivers/i2c/busses/i2c-cadence.c +++ b/drivers/i2c/busses/i2c-cadence.c @@ -852,7 +852,8 @@ static int cdns_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, CDNS_I2C_POLL_US, CDNS_I2C_TIMEOUT_US); if (ret) { ret = -EAGAIN; - i2c_recover_bus(adap); + if (id->adap.bus_recovery_info) + i2c_recover_bus(adap); goto out; } @@ -1263,8 +1264,13 @@ static int cdns_i2c_probe(struct platform_device *pdev) id->rinfo.pinctrl = devm_pinctrl_get(&pdev->dev); if (IS_ERR(id->rinfo.pinctrl)) { + int err = PTR_ERR(id->rinfo.pinctrl); + dev_info(&pdev->dev, "can't get pinctrl, bus recovery not supported\n"); - return PTR_ERR(id->rinfo.pinctrl); + if (err != -ENODEV) + return err; + } else { + id->adap.bus_recovery_info = &id->rinfo; } id->membase = devm_platform_get_and_ioremap_resource(pdev, 0, &r_mem); @@ -1283,7 +1289,6 @@ static int cdns_i2c_probe(struct platform_device *pdev) id->adap.retries = 3; /* Default retry value. */ id->adap.algo_data = id; id->adap.dev.parent = &pdev->dev; - id->adap.bus_recovery_info = &id->rinfo; init_completion(&id->xfer_done); snprintf(id->adap.name, sizeof(id->adap.name), "Cadence I2C at %08lx", (unsigned long)r_mem->start); diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c index e06509edc5f39f0708ccf5001eee41d962f15db3..1fda1eaa6d6ab0560ffbe2cfdca79cd7a7d887c6 100644 --- a/drivers/i2c/busses/i2c-i801.c +++ b/drivers/i2c/busses/i2c-i801.c @@ -1243,6 +1243,7 @@ static const struct { */ { "Latitude 5480", 0x29 }, { "Vostro V131", 0x1d }, + { "Vostro 5568", 0x29 }, }; static void register_dell_lis3lv02d_i2c_device(struct i801_priv *priv) diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index 3082183bd66a490e51b7cdcd5c57ed79d5b9a405..fc70920c4ddabab247eae7de1434d48e3d83d593 100644 --- a/drivers/i2c/busses/i2c-imx.c +++ b/drivers/i2c/busses/i2c-imx.c @@ -1132,7 +1132,8 @@ static int i2c_imx_read(struct imx_i2c_struct *i2c_imx, struct i2c_msg *msgs, int i, result; unsigned int temp; int block_data = msgs->flags & I2C_M_RECV_LEN; - int use_dma = i2c_imx->dma && msgs->len >= DMA_THRESHOLD && !block_data; + int use_dma = i2c_imx->dma && msgs->flags & I2C_M_DMA_SAFE && + msgs->len >= DMA_THRESHOLD && !block_data; dev_dbg(&i2c_imx->adapter.dev, "<%s> write slave address: addr=0x%x\n", @@ -1298,7 +1299,8 @@ static int i2c_imx_xfer_common(struct i2c_adapter *adapter, result = i2c_imx_read(i2c_imx, &msgs[i], is_lastmsg, atomic); } else { if (!atomic && - i2c_imx->dma && msgs[i].len >= DMA_THRESHOLD) + i2c_imx->dma && msgs[i].len >= DMA_THRESHOLD && + msgs[i].flags & I2C_M_DMA_SAFE) result = i2c_imx_dma_write(i2c_imx, &msgs[i]); else result = i2c_imx_write(i2c_imx, &msgs[i], atomic); diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c index 0c365b57d9572327746e3cf0e7af28cf0c41efa3..83457359ec450ed80e243b8f2feb7b1f931d93a1 100644 --- a/drivers/i2c/busses/i2c-npcm7xx.c +++ b/drivers/i2c/busses/i2c-npcm7xx.c @@ -2393,8 +2393,17 @@ static struct platform_driver npcm_i2c_bus_driver = { static int __init npcm_i2c_init(void) { + int ret; + npcm_i2c_debugfs_dir = debugfs_create_dir("npcm_i2c", NULL); - return platform_driver_register(&npcm_i2c_bus_driver); + + ret = platform_driver_register(&npcm_i2c_bus_driver); + if (ret) { + debugfs_remove_recursive(npcm_i2c_debugfs_dir); + return ret; + } + + return 0; } module_init(npcm_i2c_init); diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c index 39cb1b7bb8656c6f34bc194b9ed7537ad70cf293..809fbd014cd6833749a677bba4b6845854459d3b 100644 --- a/drivers/i2c/busses/i2c-piix4.c +++ b/drivers/i2c/busses/i2c-piix4.c @@ -1080,6 +1080,7 @@ static int piix4_probe(struct pci_dev *dev, const struct pci_device_id *id) "", &piix4_main_adapters[0]); if (retval < 0) return retval; + piix4_adapter_count = 1; } /* Check for auxiliary SMBus on some AMD chipsets */ diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qcom-geni.c index 84a77512614d9fbdd9462cf5644426af3d4b2de4..8fce98bb77ff974a23bebfc51e9189e7d11d592e 100644 --- a/drivers/i2c/busses/i2c-qcom-geni.c +++ b/drivers/i2c/busses/i2c-qcom-geni.c @@ -626,7 +626,6 @@ static int geni_i2c_gpi_xfer(struct geni_i2c_dev *gi2c, struct i2c_msg msgs[], i dev_err(gi2c->se.dev, "I2C timeout gpi flags:%d addr:0x%x\n", gi2c->cur->flags, gi2c->cur->addr); gi2c->err = -ETIMEDOUT; - goto err; } if (gi2c->err) { diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 954022c04cc422dbc03569a9770adc7bee054818..3869c258a52965b8e71013e96fae23991cda4551 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -284,6 +284,7 @@ struct tegra_i2c_dev { struct dma_chan *tx_dma_chan; struct dma_chan *rx_dma_chan; unsigned int dma_buf_size; + struct device *dma_dev; dma_addr_t dma_phys; void *dma_buf; @@ -420,7 +421,7 @@ static int tegra_i2c_dma_submit(struct tegra_i2c_dev *i2c_dev, size_t len) static void tegra_i2c_release_dma(struct tegra_i2c_dev *i2c_dev) { if (i2c_dev->dma_buf) { - dma_free_coherent(i2c_dev->dev, i2c_dev->dma_buf_size, + dma_free_coherent(i2c_dev->dma_dev, i2c_dev->dma_buf_size, i2c_dev->dma_buf, i2c_dev->dma_phys); i2c_dev->dma_buf = NULL; } @@ -472,10 +473,13 @@ static int tegra_i2c_init_dma(struct tegra_i2c_dev *i2c_dev) i2c_dev->tx_dma_chan = chan; + WARN_ON(i2c_dev->tx_dma_chan->device != i2c_dev->rx_dma_chan->device); + i2c_dev->dma_dev = chan->device->dev; + i2c_dev->dma_buf_size = i2c_dev->hw->quirks->max_write_len + I2C_PACKET_HEADER_SIZE; - dma_buf = dma_alloc_coherent(i2c_dev->dev, i2c_dev->dma_buf_size, + dma_buf = dma_alloc_coherent(i2c_dev->dma_dev, i2c_dev->dma_buf_size, &dma_phys, GFP_KERNEL | __GFP_NOWARN); if (!dma_buf) { dev_err(i2c_dev->dev, "failed to allocate DMA buffer\n"); @@ -1272,7 +1276,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, if (i2c_dev->dma_mode) { if (i2c_dev->msg_read) { - dma_sync_single_for_device(i2c_dev->dev, + dma_sync_single_for_device(i2c_dev->dma_dev, i2c_dev->dma_phys, xfer_size, DMA_FROM_DEVICE); @@ -1280,7 +1284,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, if (err) return err; } else { - dma_sync_single_for_cpu(i2c_dev->dev, + dma_sync_single_for_cpu(i2c_dev->dma_dev, i2c_dev->dma_phys, xfer_size, DMA_TO_DEVICE); } @@ -1293,7 +1297,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, memcpy(i2c_dev->dma_buf + I2C_PACKET_HEADER_SIZE, msg->buf, msg->len); - dma_sync_single_for_device(i2c_dev->dev, + dma_sync_single_for_device(i2c_dev->dma_dev, i2c_dev->dma_phys, xfer_size, DMA_TO_DEVICE); @@ -1344,7 +1348,7 @@ static int tegra_i2c_xfer_msg(struct tegra_i2c_dev *i2c_dev, } if (i2c_dev->msg_read && i2c_dev->msg_err == I2C_ERR_NONE) { - dma_sync_single_for_cpu(i2c_dev->dev, + dma_sync_single_for_cpu(i2c_dev->dma_dev, i2c_dev->dma_phys, xfer_size, DMA_FROM_DEVICE); diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c index b4edf10e8fd06a575bb1e8f8f494b9a2839c54e7..7539b0740351d13c8555b0f8bbe73c64c3b891dd 100644 --- a/drivers/i2c/i2c-core-base.c +++ b/drivers/i2c/i2c-core-base.c @@ -467,6 +467,7 @@ static int i2c_device_probe(struct device *dev) { struct i2c_client *client = i2c_verify_client(dev); struct i2c_driver *driver; + bool do_power_on; int status; if (!client) @@ -545,8 +546,8 @@ static int i2c_device_probe(struct device *dev) if (status < 0) goto err_clear_wakeup_irq; - status = dev_pm_domain_attach(&client->dev, - !i2c_acpi_waive_d0_probe(dev)); + do_power_on = !i2c_acpi_waive_d0_probe(dev); + status = dev_pm_domain_attach(&client->dev, do_power_on); if (status) goto err_clear_wakeup_irq; @@ -585,7 +586,7 @@ static int i2c_device_probe(struct device *dev) err_release_driver_resources: devres_release_group(&client->dev, client->devres_group_id); err_detach_pm_domain: - dev_pm_domain_detach(&client->dev, !i2c_acpi_waive_d0_probe(dev)); + dev_pm_domain_detach(&client->dev, do_power_on); err_clear_wakeup_irq: dev_pm_clear_wake_irq(&client->dev); device_init_wakeup(&client->dev, false); @@ -610,7 +611,7 @@ static void i2c_device_remove(struct device *dev) devres_release_group(&client->dev, client->devres_group_id); - dev_pm_domain_detach(&client->dev, !i2c_acpi_waive_d0_probe(dev)); + dev_pm_domain_detach(&client->dev, true); dev_pm_clear_wake_irq(&client->dev); device_init_wakeup(&client->dev, false); diff --git a/drivers/iio/accel/bma400_core.c b/drivers/iio/accel/bma400_core.c index ad8fce3e08cd0d9ce0a1fafa63360ee7056c8866..6e4d10a7cd32210de606f70b42e845a4806e93ad 100644 --- a/drivers/iio/accel/bma400_core.c +++ b/drivers/iio/accel/bma400_core.c @@ -805,8 +805,10 @@ static int bma400_get_steps_reg(struct bma400_data *data, int *val) ret = regmap_bulk_read(data->regmap, BMA400_STEP_CNT0_REG, steps_raw, BMA400_STEP_RAW_LEN); - if (ret) + if (ret) { + kfree(steps_raw); return ret; + } *val = get_unaligned_le24(steps_raw); kfree(steps_raw); return IIO_VAL_INT; @@ -869,18 +871,6 @@ static int bma400_init(struct bma400_data *data) unsigned int val; int ret; - /* Try to read chip_id register. It must return 0x90. */ - ret = regmap_read(data->regmap, BMA400_CHIP_ID_REG, &val); - if (ret) { - dev_err(data->dev, "Failed to read chip id register\n"); - return ret; - } - - if (val != BMA400_ID_REG_VAL) { - dev_err(data->dev, "Chip ID mismatch\n"); - return -ENODEV; - } - data->regulators[BMA400_VDD_REGULATOR].supply = "vdd"; data->regulators[BMA400_VDDIO_REGULATOR].supply = "vddio"; ret = devm_regulator_bulk_get(data->dev, @@ -906,6 +896,18 @@ static int bma400_init(struct bma400_data *data) if (ret) return ret; + /* Try to read chip_id register. It must return 0x90. */ + ret = regmap_read(data->regmap, BMA400_CHIP_ID_REG, &val); + if (ret) { + dev_err(data->dev, "Failed to read chip id register\n"); + return ret; + } + + if (val != BMA400_ID_REG_VAL) { + dev_err(data->dev, "Chip ID mismatch\n"); + return -ENODEV; + } + ret = bma400_get_power_mode(data); if (ret) { dev_err(data->dev, "Failed to get the initial power-mode\n"); diff --git a/drivers/iio/adc/aspeed_adc.c b/drivers/iio/adc/aspeed_adc.c index 9341e0e0eb556125b7370ded600e9adbd7f4d5b6..998e8bcc06e1dbc948ecd62dded463b712039ad8 100644 --- a/drivers/iio/adc/aspeed_adc.c +++ b/drivers/iio/adc/aspeed_adc.c @@ -202,6 +202,8 @@ static int aspeed_adc_set_trim_data(struct iio_dev *indio_dev) ((scu_otp) & (data->model_data->trim_locate->field)) >> __ffs(data->model_data->trim_locate->field); + if (!trimming_val) + trimming_val = 0x8; } dev_dbg(data->dev, "trimming val = %d, offset = %08x, fields = %08x\n", @@ -563,12 +565,9 @@ static int aspeed_adc_probe(struct platform_device *pdev) if (ret) return ret; - if (of_find_property(data->dev->of_node, "aspeed,trim-data-valid", - NULL)) { - ret = aspeed_adc_set_trim_data(indio_dev); - if (ret) - return ret; - } + ret = aspeed_adc_set_trim_data(indio_dev); + if (ret) + return ret; if (of_find_property(data->dev->of_node, "aspeed,battery-sensing", NULL)) { diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c index 33e25155221490934a4d5ff478cd45e57990ad8d..870f4cb609237d85be6a2de25fa45a2fbf28595b 100644 --- a/drivers/iio/adc/at91-sama5d2_adc.c +++ b/drivers/iio/adc/at91-sama5d2_adc.c @@ -2307,11 +2307,9 @@ static int at91_adc_temp_sensor_init(struct at91_adc_state *st, clb->p6 = buf[AT91_ADC_TS_CLB_IDX_P6]; /* - * We prepare here the conversion to milli and also add constant - * factor (5 degrees Celsius) to p1 here to avoid doing it on - * hotpath. + * We prepare here the conversion to milli to avoid doing it on hotpath. */ - clb->p1 = clb->p1 * 1000 + 5000; + clb->p1 = clb->p1 * 1000; free_buf: kfree(buf); diff --git a/drivers/iio/adc/at91_adc.c b/drivers/iio/adc/at91_adc.c index 532daaa6f943ccf07e4c8dc88c4c3f39aff41bc2..366e252ebeb0776454e56351947633d1e0e0ddc2 100644 --- a/drivers/iio/adc/at91_adc.c +++ b/drivers/iio/adc/at91_adc.c @@ -634,8 +634,10 @@ static struct iio_trigger *at91_adc_allocate_trigger(struct iio_dev *idev, trig->ops = &at91_adc_trigger_ops; ret = iio_trigger_register(trig); - if (ret) + if (ret) { + iio_trigger_free(trig); return NULL; + } return trig; } diff --git a/drivers/iio/adc/mp2629_adc.c b/drivers/iio/adc/mp2629_adc.c index 30a31f185d08dbc89c583222e4d209a3526fdc61..88e947f300cfda4fb9725421ef2d1adab3d3fa8f 100644 --- a/drivers/iio/adc/mp2629_adc.c +++ b/drivers/iio/adc/mp2629_adc.c @@ -57,7 +57,8 @@ static struct iio_map mp2629_adc_maps[] = { MP2629_MAP(SYSTEM_VOLT, "system-volt"), MP2629_MAP(INPUT_VOLT, "input-volt"), MP2629_MAP(BATT_CURRENT, "batt-current"), - MP2629_MAP(INPUT_CURRENT, "input-current") + MP2629_MAP(INPUT_CURRENT, "input-current"), + { } }; static int mp2629_read_raw(struct iio_dev *indio_dev, @@ -74,7 +75,7 @@ static int mp2629_read_raw(struct iio_dev *indio_dev, if (ret) return ret; - if (chan->address == MP2629_INPUT_VOLT) + if (chan->channel == MP2629_INPUT_VOLT) rval &= GENMASK(6, 0); *val = rval; return IIO_VAL_INT; diff --git a/drivers/iio/health/afe4403.c b/drivers/iio/health/afe4403.c index 3bb4028c5d747ac71661404d2f47879f92d78e2f..df3bc5c3d3786d05c0e3ed4896e8d464a5ede396 100644 --- a/drivers/iio/health/afe4403.c +++ b/drivers/iio/health/afe4403.c @@ -245,14 +245,14 @@ static int afe4403_read_raw(struct iio_dev *indio_dev, int *val, int *val2, long mask) { struct afe4403_data *afe = iio_priv(indio_dev); - unsigned int reg = afe4403_channel_values[chan->address]; - unsigned int field = afe4403_channel_leds[chan->address]; + unsigned int reg, field; int ret; switch (chan->type) { case IIO_INTENSITY: switch (mask) { case IIO_CHAN_INFO_RAW: + reg = afe4403_channel_values[chan->address]; ret = afe4403_read(afe, reg, val); if (ret) return ret; @@ -262,6 +262,7 @@ static int afe4403_read_raw(struct iio_dev *indio_dev, case IIO_CURRENT: switch (mask) { case IIO_CHAN_INFO_RAW: + field = afe4403_channel_leds[chan->address]; ret = regmap_field_read(afe->fields[field], val); if (ret) return ret; diff --git a/drivers/iio/health/afe4404.c b/drivers/iio/health/afe4404.c index 8fca787b25245ff6712fcebad517cce2356b4bbd..836da31b7e30cb67eeee3daf748aa656c5e37745 100644 --- a/drivers/iio/health/afe4404.c +++ b/drivers/iio/health/afe4404.c @@ -250,20 +250,20 @@ static int afe4404_read_raw(struct iio_dev *indio_dev, int *val, int *val2, long mask) { struct afe4404_data *afe = iio_priv(indio_dev); - unsigned int value_reg = afe4404_channel_values[chan->address]; - unsigned int led_field = afe4404_channel_leds[chan->address]; - unsigned int offdac_field = afe4404_channel_offdacs[chan->address]; + unsigned int value_reg, led_field, offdac_field; int ret; switch (chan->type) { case IIO_INTENSITY: switch (mask) { case IIO_CHAN_INFO_RAW: + value_reg = afe4404_channel_values[chan->address]; ret = regmap_read(afe->regmap, value_reg, val); if (ret) return ret; return IIO_VAL_INT; case IIO_CHAN_INFO_OFFSET: + offdac_field = afe4404_channel_offdacs[chan->address]; ret = regmap_field_read(afe->fields[offdac_field], val); if (ret) return ret; @@ -273,6 +273,7 @@ static int afe4404_read_raw(struct iio_dev *indio_dev, case IIO_CURRENT: switch (mask) { case IIO_CHAN_INFO_RAW: + led_field = afe4404_channel_leds[chan->address]; ret = regmap_field_read(afe->fields[led_field], val); if (ret) return ret; @@ -295,19 +296,20 @@ static int afe4404_write_raw(struct iio_dev *indio_dev, int val, int val2, long mask) { struct afe4404_data *afe = iio_priv(indio_dev); - unsigned int led_field = afe4404_channel_leds[chan->address]; - unsigned int offdac_field = afe4404_channel_offdacs[chan->address]; + unsigned int led_field, offdac_field; switch (chan->type) { case IIO_INTENSITY: switch (mask) { case IIO_CHAN_INFO_OFFSET: + offdac_field = afe4404_channel_offdacs[chan->address]; return regmap_field_write(afe->fields[offdac_field], val); } break; case IIO_CURRENT: switch (mask) { case IIO_CHAN_INFO_RAW: + led_field = afe4404_channel_leds[chan->address]; return regmap_field_write(afe->fields[led_field], val); } break; diff --git a/drivers/iio/imu/bno055/bno055.c b/drivers/iio/imu/bno055/bno055.c index 307557a609e3f0b099be87d5f38f53e994b07e45..52744dd98e65b41630489affdc44ea65e82b192b 100644 --- a/drivers/iio/imu/bno055/bno055.c +++ b/drivers/iio/imu/bno055/bno055.c @@ -632,7 +632,7 @@ static int bno055_set_regmask(struct bno055_priv *priv, int val, int val2, return -EINVAL; } delta = abs(tbl_val - req_val); - if (delta < best_delta || first) { + if (first || delta < best_delta) { best_delta = delta; hwval = i; first = false; diff --git a/drivers/iio/industrialio-sw-trigger.c b/drivers/iio/industrialio-sw-trigger.c index 994f03a715204f5bda01e81a318f93f368407612..d86a3305d9e8d7bdfcedf2488fbf328427507ca2 100644 --- a/drivers/iio/industrialio-sw-trigger.c +++ b/drivers/iio/industrialio-sw-trigger.c @@ -58,8 +58,12 @@ int iio_register_sw_trigger_type(struct iio_sw_trigger_type *t) t->group = configfs_register_default_group(iio_triggers_group, t->name, &iio_trigger_type_group_type); - if (IS_ERR(t->group)) + if (IS_ERR(t->group)) { + mutex_lock(&iio_trigger_types_lock); + list_del(&t->list); + mutex_unlock(&iio_trigger_types_lock); ret = PTR_ERR(t->group); + } return ret; } diff --git a/drivers/iio/light/Kconfig b/drivers/iio/light/Kconfig index 7cf6e84901231ddb1e2cc22e3fca4dcaf9bc5944..0d4447df7200e86ce6f665f1608503907fcd66d1 100644 --- a/drivers/iio/light/Kconfig +++ b/drivers/iio/light/Kconfig @@ -293,6 +293,8 @@ config RPR0521 tristate "ROHM RPR0521 ALS and proximity sensor driver" depends on I2C select REGMAP_I2C + select IIO_BUFFER + select IIO_TRIGGERED_BUFFER help Say Y here if you want to build support for ROHM's RPR0521 ambient light and proximity sensor device. diff --git a/drivers/iio/light/apds9960.c b/drivers/iio/light/apds9960.c index b62c139baf414c518a5be684e6f34d6b92322a4a..38d4c7644befc71031aca0f75d4b93b9c01dd274 100644 --- a/drivers/iio/light/apds9960.c +++ b/drivers/iio/light/apds9960.c @@ -54,9 +54,6 @@ #define APDS9960_REG_CONTROL_PGAIN_MASK_SHIFT 2 #define APDS9960_REG_CONFIG_2 0x90 -#define APDS9960_REG_CONFIG_2_GGAIN_MASK 0x60 -#define APDS9960_REG_CONFIG_2_GGAIN_MASK_SHIFT 5 - #define APDS9960_REG_ID 0x92 #define APDS9960_REG_STATUS 0x93 @@ -77,6 +74,9 @@ #define APDS9960_REG_GCONF_1_GFIFO_THRES_MASK_SHIFT 6 #define APDS9960_REG_GCONF_2 0xa3 +#define APDS9960_REG_GCONF_2_GGAIN_MASK 0x60 +#define APDS9960_REG_GCONF_2_GGAIN_MASK_SHIFT 5 + #define APDS9960_REG_GOFFSET_U 0xa4 #define APDS9960_REG_GOFFSET_D 0xa5 #define APDS9960_REG_GPULSE 0xa6 @@ -396,9 +396,9 @@ static int apds9960_set_pxs_gain(struct apds9960_data *data, int val) } ret = regmap_update_bits(data->regmap, - APDS9960_REG_CONFIG_2, - APDS9960_REG_CONFIG_2_GGAIN_MASK, - idx << APDS9960_REG_CONFIG_2_GGAIN_MASK_SHIFT); + APDS9960_REG_GCONF_2, + APDS9960_REG_GCONF_2_GGAIN_MASK, + idx << APDS9960_REG_GCONF_2_GGAIN_MASK_SHIFT); if (!ret) data->pxs_gain = idx; mutex_unlock(&data->lock); diff --git a/drivers/iio/pressure/ms5611.h b/drivers/iio/pressure/ms5611.h index cbc9349c342a991873c75d4c81fb3c3217b240ed..550b75b7186fb0eb380045109099dc76349def31 100644 --- a/drivers/iio/pressure/ms5611.h +++ b/drivers/iio/pressure/ms5611.h @@ -25,13 +25,6 @@ enum { MS5607, }; -struct ms5611_chip_info { - u16 prom[MS5611_PROM_WORDS_NB]; - - int (*temp_and_pressure_compensate)(struct ms5611_chip_info *chip_info, - s32 *temp, s32 *pressure); -}; - /* * OverSampling Rate descriptor. * Warning: cmd MUST be kept aligned on a word boundary (see @@ -50,12 +43,15 @@ struct ms5611_state { const struct ms5611_osr *pressure_osr; const struct ms5611_osr *temp_osr; + u16 prom[MS5611_PROM_WORDS_NB]; + int (*reset)(struct ms5611_state *st); int (*read_prom_word)(struct ms5611_state *st, int index, u16 *word); int (*read_adc_temp_and_pressure)(struct ms5611_state *st, s32 *temp, s32 *pressure); - struct ms5611_chip_info *chip_info; + int (*compensate_temp_and_pressure)(struct ms5611_state *st, s32 *temp, + s32 *pressure); struct regulator *vdd; }; diff --git a/drivers/iio/pressure/ms5611_core.c b/drivers/iio/pressure/ms5611_core.c index 717521de66c47a4071f6c34799d44c20b901a079..c564a1d6cafe80f03e2c5ae95d924e6841c76345 100644 --- a/drivers/iio/pressure/ms5611_core.c +++ b/drivers/iio/pressure/ms5611_core.c @@ -85,7 +85,7 @@ static int ms5611_read_prom(struct iio_dev *indio_dev) struct ms5611_state *st = iio_priv(indio_dev); for (i = 0; i < MS5611_PROM_WORDS_NB; i++) { - ret = st->read_prom_word(st, i, &st->chip_info->prom[i]); + ret = st->read_prom_word(st, i, &st->prom[i]); if (ret < 0) { dev_err(&indio_dev->dev, "failed to read prom at %d\n", i); @@ -93,7 +93,7 @@ static int ms5611_read_prom(struct iio_dev *indio_dev) } } - if (!ms5611_prom_is_valid(st->chip_info->prom, MS5611_PROM_WORDS_NB)) { + if (!ms5611_prom_is_valid(st->prom, MS5611_PROM_WORDS_NB)) { dev_err(&indio_dev->dev, "PROM integrity check failed\n"); return -ENODEV; } @@ -114,21 +114,20 @@ static int ms5611_read_temp_and_pressure(struct iio_dev *indio_dev, return ret; } - return st->chip_info->temp_and_pressure_compensate(st->chip_info, - temp, pressure); + return st->compensate_temp_and_pressure(st, temp, pressure); } -static int ms5611_temp_and_pressure_compensate(struct ms5611_chip_info *chip_info, +static int ms5611_temp_and_pressure_compensate(struct ms5611_state *st, s32 *temp, s32 *pressure) { s32 t = *temp, p = *pressure; s64 off, sens, dt; - dt = t - (chip_info->prom[5] << 8); - off = ((s64)chip_info->prom[2] << 16) + ((chip_info->prom[4] * dt) >> 7); - sens = ((s64)chip_info->prom[1] << 15) + ((chip_info->prom[3] * dt) >> 8); + dt = t - (st->prom[5] << 8); + off = ((s64)st->prom[2] << 16) + ((st->prom[4] * dt) >> 7); + sens = ((s64)st->prom[1] << 15) + ((st->prom[3] * dt) >> 8); - t = 2000 + ((chip_info->prom[6] * dt) >> 23); + t = 2000 + ((st->prom[6] * dt) >> 23); if (t < 2000) { s64 off2, sens2, t2; @@ -154,17 +153,17 @@ static int ms5611_temp_and_pressure_compensate(struct ms5611_chip_info *chip_inf return 0; } -static int ms5607_temp_and_pressure_compensate(struct ms5611_chip_info *chip_info, +static int ms5607_temp_and_pressure_compensate(struct ms5611_state *st, s32 *temp, s32 *pressure) { s32 t = *temp, p = *pressure; s64 off, sens, dt; - dt = t - (chip_info->prom[5] << 8); - off = ((s64)chip_info->prom[2] << 17) + ((chip_info->prom[4] * dt) >> 6); - sens = ((s64)chip_info->prom[1] << 16) + ((chip_info->prom[3] * dt) >> 7); + dt = t - (st->prom[5] << 8); + off = ((s64)st->prom[2] << 17) + ((st->prom[4] * dt) >> 6); + sens = ((s64)st->prom[1] << 16) + ((st->prom[3] * dt) >> 7); - t = 2000 + ((chip_info->prom[6] * dt) >> 23); + t = 2000 + ((st->prom[6] * dt) >> 23); if (t < 2000) { s64 off2, sens2, t2, tmp; @@ -342,15 +341,6 @@ static int ms5611_write_raw(struct iio_dev *indio_dev, static const unsigned long ms5611_scan_masks[] = {0x3, 0}; -static struct ms5611_chip_info chip_info_tbl[] = { - [MS5611] = { - .temp_and_pressure_compensate = ms5611_temp_and_pressure_compensate, - }, - [MS5607] = { - .temp_and_pressure_compensate = ms5607_temp_and_pressure_compensate, - } -}; - static const struct iio_chan_spec ms5611_channels[] = { { .type = IIO_PRESSURE, @@ -433,7 +423,20 @@ int ms5611_probe(struct iio_dev *indio_dev, struct device *dev, struct ms5611_state *st = iio_priv(indio_dev); mutex_init(&st->lock); - st->chip_info = &chip_info_tbl[type]; + + switch (type) { + case MS5611: + st->compensate_temp_and_pressure = + ms5611_temp_and_pressure_compensate; + break; + case MS5607: + st->compensate_temp_and_pressure = + ms5607_temp_and_pressure_compensate; + break; + default: + return -EINVAL; + } + st->temp_osr = &ms5611_avail_temp_osr[ARRAY_SIZE(ms5611_avail_temp_osr) - 1]; st->pressure_osr = diff --git a/drivers/iio/pressure/ms5611_spi.c b/drivers/iio/pressure/ms5611_spi.c index 432e912096f4235bbac0de1f14052576b503a7d8..a0a7205c9c3a453d831a816772fbebba5f5453f2 100644 --- a/drivers/iio/pressure/ms5611_spi.c +++ b/drivers/iio/pressure/ms5611_spi.c @@ -91,7 +91,7 @@ static int ms5611_spi_probe(struct spi_device *spi) spi_set_drvdata(spi, indio_dev); spi->mode = SPI_MODE_0; - spi->max_speed_hz = 20000000; + spi->max_speed_hz = min(spi->max_speed_hz, 20000000U); spi->bits_per_word = 8; ret = spi_setup(spi); if (ret < 0) diff --git a/drivers/iio/trigger/iio-trig-sysfs.c b/drivers/iio/trigger/iio-trig-sysfs.c index d6c5e96447383d6510f49815560f035a34e0d86d..6b05eed41612bdcb864fa837a6706a4d5d7895e9 100644 --- a/drivers/iio/trigger/iio-trig-sysfs.c +++ b/drivers/iio/trigger/iio-trig-sysfs.c @@ -203,9 +203,13 @@ static int iio_sysfs_trigger_remove(int id) static int __init iio_sysfs_trig_init(void) { + int ret; device_initialize(&iio_sysfs_trig_dev); dev_set_name(&iio_sysfs_trig_dev, "iio_sysfs_trigger"); - return device_add(&iio_sysfs_trig_dev); + ret = device_add(&iio_sysfs_trig_dev); + if (ret) + put_device(&iio_sysfs_trig_dev); + return ret; } module_init(iio_sysfs_trig_init); diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index 2f5b5e6f3d110f72d65e210f500b79ed56bd19c8..13e0ab785baa24f03d7871a408c593c802aefc61 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c @@ -1556,7 +1556,7 @@ static bool validate_ipv4_net_dev(struct net_device *net_dev, return false; memset(&fl4, 0, sizeof(fl4)); - fl4.flowi4_iif = net_dev->ifindex; + fl4.flowi4_oif = net_dev->ifindex; fl4.daddr = daddr; fl4.saddr = saddr; diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c index ff35cebb25e265ec83c318e8b0138c132c484323..9211d2794aac79a2dfb44ab729d44c8a88647518 100644 --- a/drivers/infiniband/core/device.c +++ b/drivers/infiniband/core/device.c @@ -2817,10 +2817,18 @@ static int __init ib_core_init(void) nldev_init(); rdma_nl_register(RDMA_NL_LS, ibnl_ls_cb_table); - roce_gid_mgmt_init(); + ret = roce_gid_mgmt_init(); + if (ret) { + pr_warn("Couldn't init RoCE GID management\n"); + goto err_parent; + } return 0; +err_parent: + rdma_nl_unregister(RDMA_NL_LS); + nldev_exit(); + unregister_pernet_device(&rdma_dev_net_ops); err_compat: unregister_blocking_lsm_notifier(&ibdev_lsm_nb); err_sa: diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c index a981ac2f09758df5c5b0a32f8c7ec75e50a72104..d5d3e4f0de779ef1e82f06482287b3de355323e1 100644 --- a/drivers/infiniband/core/nldev.c +++ b/drivers/infiniband/core/nldev.c @@ -2567,7 +2567,7 @@ void __init nldev_init(void) rdma_nl_register(RDMA_NL_NLDEV, nldev_cb_table); } -void __exit nldev_exit(void) +void nldev_exit(void) { rdma_nl_unregister(RDMA_NL_NLDEV); } diff --git a/drivers/infiniband/hw/efa/efa_main.c b/drivers/infiniband/hw/efa/efa_main.c index 94b94cca487092fdf026ce749e4db58ef28b6444..15ee9208111879979104aa47f3b3eeeabf02c2e4 100644 --- a/drivers/infiniband/hw/efa/efa_main.c +++ b/drivers/infiniband/hw/efa/efa_main.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause /* - * Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All rights reserved. + * Copyright 2018-2022 Amazon.com, Inc. or its affiliates. All rights reserved. */ #include @@ -14,10 +14,12 @@ #define PCI_DEV_ID_EFA0_VF 0xefa0 #define PCI_DEV_ID_EFA1_VF 0xefa1 +#define PCI_DEV_ID_EFA2_VF 0xefa2 static const struct pci_device_id efa_pci_tbl[] = { { PCI_VDEVICE(AMAZON, PCI_DEV_ID_EFA0_VF) }, { PCI_VDEVICE(AMAZON, PCI_DEV_ID_EFA1_VF) }, + { PCI_VDEVICE(AMAZON, PCI_DEV_ID_EFA2_VF) }, { } }; diff --git a/drivers/infiniband/hw/hfi1/pio.c b/drivers/infiniband/hw/hfi1/pio.c index 3d42bd2b36bd431788cfd11e43d212d6e76a3871..51ae58c02b15c76d2919e2059dcbcdb02ead7fd3 100644 --- a/drivers/infiniband/hw/hfi1/pio.c +++ b/drivers/infiniband/hw/hfi1/pio.c @@ -913,8 +913,7 @@ void sc_disable(struct send_context *sc) spin_unlock(&sc->release_lock); write_seqlock(&sc->waitlock); - if (!list_empty(&sc->piowait)) - list_move(&sc->piowait, &wake_list); + list_splice_init(&sc->piowait, &wake_list); write_sequnlock(&sc->waitlock); while (!list_empty(&wake_list)) { struct iowait *wait; diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c index 2716852f5e92909180eb4020e0135ae64fb0cdef..b2421883993b104ad1e48c5bdd01a501d66eccb9 100644 --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c @@ -118,7 +118,6 @@ static const u32 hns_roce_op_code[] = { HR_OPC_MAP(ATOMIC_CMP_AND_SWP, ATOM_CMP_AND_SWAP), HR_OPC_MAP(ATOMIC_FETCH_AND_ADD, ATOM_FETCH_AND_ADD), HR_OPC_MAP(SEND_WITH_INV, SEND_WITH_INV), - HR_OPC_MAP(LOCAL_INV, LOCAL_INV), HR_OPC_MAP(MASKED_ATOMIC_CMP_AND_SWP, ATOM_MSK_CMP_AND_SWAP), HR_OPC_MAP(MASKED_ATOMIC_FETCH_AND_ADD, ATOM_MSK_FETCH_AND_ADD), HR_OPC_MAP(REG_MR, FAST_REG_PMR), @@ -558,9 +557,6 @@ static int set_rc_opcode(struct hns_roce_dev *hr_dev, else ret = -EOPNOTSUPP; break; - case IB_WR_LOCAL_INV: - hr_reg_enable(rc_sq_wqe, RC_SEND_WQE_SO); - fallthrough; case IB_WR_SEND_WITH_INV: rc_sq_wqe->inv_key = cpu_to_le32(wr->ex.invalidate_rkey); break; @@ -2921,8 +2917,12 @@ static int free_mr_modify_qp(struct hns_roce_dev *hr_dev) static int free_mr_init(struct hns_roce_dev *hr_dev) { + struct hns_roce_v2_priv *priv = hr_dev->priv; + struct hns_roce_v2_free_mr *free_mr = &priv->free_mr; int ret; + mutex_init(&free_mr->mutex); + ret = free_mr_alloc_res(hr_dev); if (ret) return ret; @@ -3339,7 +3339,6 @@ static int hns_roce_v2_write_mtpt(struct hns_roce_dev *hr_dev, hr_reg_write(mpt_entry, MPT_ST, V2_MPT_ST_VALID); hr_reg_write(mpt_entry, MPT_PD, mr->pd); - hr_reg_enable(mpt_entry, MPT_L_INV_EN); hr_reg_write_bool(mpt_entry, MPT_BIND_EN, mr->access & IB_ACCESS_MW_BIND); @@ -3430,7 +3429,6 @@ static int hns_roce_v2_frmr_write_mtpt(struct hns_roce_dev *hr_dev, hr_reg_enable(mpt_entry, MPT_RA_EN); hr_reg_enable(mpt_entry, MPT_R_INV_EN); - hr_reg_enable(mpt_entry, MPT_L_INV_EN); hr_reg_enable(mpt_entry, MPT_FRE); hr_reg_clear(mpt_entry, MPT_MR_MW); @@ -3462,7 +3460,6 @@ static int hns_roce_v2_mw_write_mtpt(void *mb_buf, struct hns_roce_mw *mw) hr_reg_write(mpt_entry, MPT_PD, mw->pdn); hr_reg_enable(mpt_entry, MPT_R_INV_EN); - hr_reg_enable(mpt_entry, MPT_L_INV_EN); hr_reg_enable(mpt_entry, MPT_LW_EN); hr_reg_enable(mpt_entry, MPT_MR_MW); @@ -3911,7 +3908,6 @@ static const u32 wc_send_op_map[] = { HR_WC_OP_MAP(RDMA_READ, RDMA_READ), HR_WC_OP_MAP(RDMA_WRITE, RDMA_WRITE), HR_WC_OP_MAP(RDMA_WRITE_WITH_IMM, RDMA_WRITE), - HR_WC_OP_MAP(LOCAL_INV, LOCAL_INV), HR_WC_OP_MAP(ATOM_CMP_AND_SWAP, COMP_SWAP), HR_WC_OP_MAP(ATOM_FETCH_AND_ADD, FETCH_ADD), HR_WC_OP_MAP(ATOM_MSK_CMP_AND_SWAP, MASKED_COMP_SWAP), @@ -3961,9 +3957,6 @@ static void fill_send_wc(struct ib_wc *wc, struct hns_roce_v2_cqe *cqe) case HNS_ROCE_V2_WQE_OP_RDMA_WRITE_WITH_IMM: wc->wc_flags |= IB_WC_WITH_IMM; break; - case HNS_ROCE_V2_WQE_OP_LOCAL_INV: - wc->wc_flags |= IB_WC_WITH_INVALIDATE; - break; case HNS_ROCE_V2_WQE_OP_ATOM_CMP_AND_SWAP: case HNS_ROCE_V2_WQE_OP_ATOM_FETCH_AND_ADD: case HNS_ROCE_V2_WQE_OP_ATOM_MSK_CMP_AND_SWAP: diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.h b/drivers/infiniband/hw/hns/hns_roce_hw_v2.h index 47fad456839d16ff4203bb71033389790b7058aa..b1b3e1e0b84e55d8774285e75a8760204e8cad6a 100644 --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.h +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.h @@ -179,7 +179,6 @@ enum { HNS_ROCE_V2_WQE_OP_ATOM_MSK_CMP_AND_SWAP = 0x8, HNS_ROCE_V2_WQE_OP_ATOM_MSK_FETCH_AND_ADD = 0x9, HNS_ROCE_V2_WQE_OP_FAST_REG_PMR = 0xa, - HNS_ROCE_V2_WQE_OP_LOCAL_INV = 0xb, HNS_ROCE_V2_WQE_OP_BIND_MW = 0xc, HNS_ROCE_V2_WQE_OP_MASK = 0x1f, }; @@ -920,7 +919,6 @@ struct hns_roce_v2_rc_send_wqe { #define RC_SEND_WQE_OWNER RC_SEND_WQE_FIELD_LOC(7, 7) #define RC_SEND_WQE_CQE RC_SEND_WQE_FIELD_LOC(8, 8) #define RC_SEND_WQE_FENCE RC_SEND_WQE_FIELD_LOC(9, 9) -#define RC_SEND_WQE_SO RC_SEND_WQE_FIELD_LOC(10, 10) #define RC_SEND_WQE_SE RC_SEND_WQE_FIELD_LOC(11, 11) #define RC_SEND_WQE_INLINE RC_SEND_WQE_FIELD_LOC(12, 12) #define RC_SEND_WQE_WQE_INDEX RC_SEND_WQE_FIELD_LOC(30, 15) diff --git a/drivers/infiniband/hw/qedr/main.c b/drivers/infiniband/hw/qedr/main.c index 5e7069b76d4657ac18c72d3c8f7508d540d820b2..ecdfeff3d44f364fc728b018fdb0b1b3da6d7984 100644 --- a/drivers/infiniband/hw/qedr/main.c +++ b/drivers/infiniband/hw/qedr/main.c @@ -344,6 +344,10 @@ static int qedr_alloc_resources(struct qedr_dev *dev) if (IS_IWARP(dev)) { xa_init(&dev->qps); dev->iwarp_wq = create_singlethread_workqueue("qedr_iwarpq"); + if (!dev->iwarp_wq) { + rc = -ENOMEM; + goto err1; + } } /* Allocate Status blocks for CNQ */ @@ -351,7 +355,7 @@ static int qedr_alloc_resources(struct qedr_dev *dev) GFP_KERNEL); if (!dev->sb_array) { rc = -ENOMEM; - goto err1; + goto err_destroy_wq; } dev->cnq_array = kcalloc(dev->num_cnq, @@ -402,6 +406,9 @@ static int qedr_alloc_resources(struct qedr_dev *dev) kfree(dev->cnq_array); err2: kfree(dev->sb_array); +err_destroy_wq: + if (IS_IWARP(dev)) + destroy_workqueue(dev->iwarp_wq); err1: kfree(dev->sgid_tbl); return rc; diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c index 6ac544477f3f737b9bc32ab4ddb3878dcc5e1101..12eb85e8d4154f0d64b06ebce96bdcfe49e1413c 100644 --- a/drivers/infiniband/sw/rxe/rxe_resp.c +++ b/drivers/infiniband/sw/rxe/rxe_resp.c @@ -879,8 +879,10 @@ static enum resp_states read_reply(struct rxe_qp *qp, skb = prepare_ack_packet(qp, &ack_pkt, opcode, payload, res->cur_psn, AETH_ACK_UNLIMITED); - if (!skb) + if (!skb) { + rxe_put(mr); return RESPST_ERR_RNR; + } err = rxe_mr_copy(mr, res->read.va, payload_addr(&ack_pkt), payload, RXE_FROM_MR_OBJ); diff --git a/drivers/input/joystick/iforce/iforce-main.c b/drivers/input/joystick/iforce/iforce-main.c index b86de1312512bd3a1b41ab795956bdbe317f5974..84b87526b7ba319d98494c53a06364e5369f4d23 100644 --- a/drivers/input/joystick/iforce/iforce-main.c +++ b/drivers/input/joystick/iforce/iforce-main.c @@ -273,22 +273,22 @@ int iforce_init_device(struct device *parent, u16 bustype, * Get device info. */ - if (!iforce_get_id_packet(iforce, 'M', buf, &len) || len < 3) + if (!iforce_get_id_packet(iforce, 'M', buf, &len) && len >= 3) input_dev->id.vendor = get_unaligned_le16(buf + 1); else dev_warn(&iforce->dev->dev, "Device does not respond to id packet M\n"); - if (!iforce_get_id_packet(iforce, 'P', buf, &len) || len < 3) + if (!iforce_get_id_packet(iforce, 'P', buf, &len) && len >= 3) input_dev->id.product = get_unaligned_le16(buf + 1); else dev_warn(&iforce->dev->dev, "Device does not respond to id packet P\n"); - if (!iforce_get_id_packet(iforce, 'B', buf, &len) || len < 3) + if (!iforce_get_id_packet(iforce, 'B', buf, &len) && len >= 3) iforce->device_memory.end = get_unaligned_le16(buf + 1); else dev_warn(&iforce->dev->dev, "Device does not respond to id packet B\n"); - if (!iforce_get_id_packet(iforce, 'N', buf, &len) || len < 2) + if (!iforce_get_id_packet(iforce, 'N', buf, &len) && len >= 2) ff_effects = buf[1]; else dev_warn(&iforce->dev->dev, "Device does not respond to id packet N\n"); diff --git a/drivers/input/misc/soc_button_array.c b/drivers/input/misc/soc_button_array.c index 480476121c0105dde875a1902a8a5531fa539762..09489380afda7a78d1f331e1c092f6d90d7b0f66 100644 --- a/drivers/input/misc/soc_button_array.c +++ b/drivers/input/misc/soc_button_array.c @@ -18,6 +18,10 @@ #include #include +static bool use_low_level_irq; +module_param(use_low_level_irq, bool, 0444); +MODULE_PARM_DESC(use_low_level_irq, "Use low-level triggered IRQ instead of edge triggered"); + struct soc_button_info { const char *name; int acpi_index; @@ -73,6 +77,13 @@ static const struct dmi_system_id dmi_use_low_level_irq[] = { DMI_MATCH(DMI_PRODUCT_NAME, "Aspire SW5-012"), }, }, + { + /* Acer Switch V 10 SW5-017, same issue as Acer Switch 10 SW5-012. */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), + DMI_MATCH(DMI_PRODUCT_NAME, "SW5-017"), + }, + }, { /* * Acer One S1003. _LID method messes with power-button GPIO @@ -164,7 +175,8 @@ soc_button_device_create(struct platform_device *pdev, } /* See dmi_use_low_level_irq[] comment */ - if (!autorepeat && dmi_check_system(dmi_use_low_level_irq)) { + if (!autorepeat && (use_low_level_irq || + dmi_check_system(dmi_use_low_level_irq))) { irq_set_irq_type(irq, IRQ_TYPE_LEVEL_LOW); gpio_keys[n_buttons].irq = irq; gpio_keys[n_buttons].gpio = -ENOENT; diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index fa021af8506e4f8c3309026ca474a1c1d20a7824..b0f776448a1cdd758ee6286c91e6fe8865ba6310 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c @@ -192,6 +192,7 @@ static const char * const smbus_pnp_ids[] = { "SYN3221", /* HP 15-ay000 */ "SYN323d", /* HP Spectre X360 13-w013dx */ "SYN3257", /* HP Envy 13-ad105ng */ + "SYN3286", /* HP Laptop 15-da3001TU */ NULL }; diff --git a/drivers/input/serio/i8042-acpipnpio.h b/drivers/input/serio/i8042-acpipnpio.h index 0778dc03cd9e08b8bb3e24c0d1b4f651a29adf46..46f8a694291edd13578b850317fdab2872f36cb6 100644 --- a/drivers/input/serio/i8042-acpipnpio.h +++ b/drivers/input/serio/i8042-acpipnpio.h @@ -115,18 +115,18 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = { .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_NEVER) }, { - /* ASUS ZenBook UX425UA */ + /* ASUS ZenBook UX425UA/QA */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), - DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425UA"), + DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425"), }, .driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER) }, { - /* ASUS ZenBook UM325UA */ + /* ASUS ZenBook UM325UA/QA */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), - DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UA_UM325UA"), + DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325"), }, .driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER) }, diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c index f9486495baefaa22c1db1d9cf859c75b2ac97384..6dac7c1853a54189f50784b85b5ae3eaf9b6b93e 100644 --- a/drivers/input/serio/i8042.c +++ b/drivers/input/serio/i8042.c @@ -1543,8 +1543,6 @@ static int i8042_probe(struct platform_device *dev) { int error; - i8042_platform_device = dev; - if (i8042_reset == I8042_RESET_ALWAYS) { error = i8042_controller_selftest(); if (error) @@ -1582,7 +1580,6 @@ static int i8042_probe(struct platform_device *dev) i8042_free_aux_ports(); /* in case KBD failed but AUX not */ i8042_free_irqs(); i8042_controller_reset(false); - i8042_platform_device = NULL; return error; } @@ -1592,7 +1589,6 @@ static int i8042_remove(struct platform_device *dev) i8042_unregister_ports(); i8042_free_irqs(); i8042_controller_reset(false); - i8042_platform_device = NULL; return 0; } diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c index a33cc7950cf5b1c4e1fd8f7930180c9770b3db8e..c281e49826c2367227dce0a8f9e3688377b00e7e 100644 --- a/drivers/input/touchscreen/goodix.c +++ b/drivers/input/touchscreen/goodix.c @@ -1158,6 +1158,7 @@ static int goodix_configure_dev(struct goodix_ts_data *ts) input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0); input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); +retry_read_config: /* Read configuration and apply touchscreen parameters */ goodix_read_config(ts); @@ -1165,6 +1166,16 @@ static int goodix_configure_dev(struct goodix_ts_data *ts) touchscreen_parse_properties(ts->input_dev, true, &ts->prop); if (!ts->prop.max_x || !ts->prop.max_y || !ts->max_touch_num) { + if (!ts->reset_controller_at_probe && + ts->irq_pin_access_method != IRQ_PIN_ACCESS_NONE) { + dev_info(&ts->client->dev, "Config not set, resetting controller\n"); + /* Retry after a controller reset */ + ts->reset_controller_at_probe = true; + error = goodix_reset(ts); + if (error) + return error; + goto retry_read_config; + } dev_err(&ts->client->dev, "Invalid config (%d, %d, %d), using defaults\n", ts->prop.max_x, ts->prop.max_y, ts->max_touch_num); diff --git a/drivers/input/touchscreen/raydium_i2c_ts.c b/drivers/input/touchscreen/raydium_i2c_ts.c index 3a4952935366f91b157bf0b7350f366248ab49c8..3d9c5758d8a447317b38610cab0fc9c3f6f6729a 100644 --- a/drivers/input/touchscreen/raydium_i2c_ts.c +++ b/drivers/input/touchscreen/raydium_i2c_ts.c @@ -211,12 +211,14 @@ static int raydium_i2c_send(struct i2c_client *client, error = raydium_i2c_xfer(client, addr, xfer, ARRAY_SIZE(xfer)); if (likely(!error)) - return 0; + goto out; msleep(RM_RETRY_DELAY_MS); } while (++tries < RM_MAX_RETRIES); dev_err(&client->dev, "%s failed: %d\n", __func__, error); +out: + kfree(tx_buf); return error; } diff --git a/drivers/iommu/intel/dmar.c b/drivers/iommu/intel/dmar.c index 5a8f780e7ffd8d95fa162a06c165aac8f2c35cc4..bc94059a5b870abbd28b8e92fe7116170eb53259 100644 --- a/drivers/iommu/intel/dmar.c +++ b/drivers/iommu/intel/dmar.c @@ -820,6 +820,7 @@ int __init dmar_dev_scope_init(void) info = dmar_alloc_pci_notify_info(dev, BUS_NOTIFY_ADD_DEVICE); if (!info) { + pci_dev_put(dev); return dmar_dev_scope_status; } else { dmar_pci_bus_add_dev(info); diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index 48cdcd0a5cf346fe8136b35ebd12b65d5546fde8..5287efe247b16b6c46f94ce33c21b23774891882 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -959,11 +959,9 @@ static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain, domain_flush_cache(domain, tmp_page, VTD_PAGE_SIZE); pteval = ((uint64_t)virt_to_dma_pfn(tmp_page) << VTD_PAGE_SHIFT) | DMA_PTE_READ | DMA_PTE_WRITE; - if (domain_use_first_level(domain)) { - pteval |= DMA_FL_PTE_XD | DMA_FL_PTE_US; - if (iommu_is_dma_domain(&domain->domain)) - pteval |= DMA_FL_PTE_ACCESS; - } + if (domain_use_first_level(domain)) + pteval |= DMA_FL_PTE_XD | DMA_FL_PTE_US | DMA_FL_PTE_ACCESS; + if (cmpxchg64(&pte->val, 0ULL, pteval)) /* Someone else set it while we were thinking; use theirs. */ free_pgtable_page(tmp_page); @@ -1398,6 +1396,24 @@ static void domain_update_iotlb(struct dmar_domain *domain) spin_unlock_irqrestore(&domain->lock, flags); } +/* + * The extra devTLB flush quirk impacts those QAT devices with PCI device + * IDs ranging from 0x4940 to 0x4943. It is exempted from risky_device() + * check because it applies only to the built-in QAT devices and it doesn't + * grant additional privileges. + */ +#define BUGGY_QAT_DEVID_MASK 0x494c +static bool dev_needs_extra_dtlb_flush(struct pci_dev *pdev) +{ + if (pdev->vendor != PCI_VENDOR_ID_INTEL) + return false; + + if ((pdev->device & 0xfffc) != BUGGY_QAT_DEVID_MASK) + return false; + + return true; +} + static void iommu_enable_pci_caps(struct device_domain_info *info) { struct pci_dev *pdev; @@ -1480,6 +1496,7 @@ static void __iommu_flush_dev_iotlb(struct device_domain_info *info, qdep = info->ats_qdep; qi_flush_dev_iotlb(info->iommu, sid, info->pfsid, qdep, addr, mask); + quirk_extra_dev_tlb_flush(info, addr, mask, PASID_RID2PASID, qdep); } static void iommu_flush_dev_iotlb(struct dmar_domain *domain, @@ -3856,8 +3873,10 @@ static inline bool has_external_pci(void) struct pci_dev *pdev = NULL; for_each_pci_dev(pdev) - if (pdev->external_facing) + if (pdev->external_facing) { + pci_dev_put(pdev); return true; + } return false; } @@ -4492,9 +4511,10 @@ static struct iommu_device *intel_iommu_probe_device(struct device *dev) if (dev_is_pci(dev)) { if (ecap_dev_iotlb_support(iommu->ecap) && pci_ats_supported(pdev) && - dmar_ats_supported(pdev, iommu)) + dmar_ats_supported(pdev, iommu)) { info->ats_supported = 1; - + info->dtlb_extra_inval = dev_needs_extra_dtlb_flush(pdev); + } if (sm_supported(iommu)) { if (pasid_supported(iommu)) { int features = pci_pasid_features(pdev); @@ -4933,3 +4953,48 @@ static void __init check_tylersburg_isoch(void) pr_warn("Recommended TLB entries for ISOCH unit is 16; your BIOS set %d\n", vtisochctrl); } + +/* + * Here we deal with a device TLB defect where device may inadvertently issue ATS + * invalidation completion before posted writes initiated with translated address + * that utilized translations matching the invalidation address range, violating + * the invalidation completion ordering. + * Therefore, any use cases that cannot guarantee DMA is stopped before unmap is + * vulnerable to this defect. In other words, any dTLB invalidation initiated not + * under the control of the trusted/privileged host device driver must use this + * quirk. + * Device TLBs are invalidated under the following six conditions: + * 1. Device driver does DMA API unmap IOVA + * 2. Device driver unbind a PASID from a process, sva_unbind_device() + * 3. PASID is torn down, after PASID cache is flushed. e.g. process + * exit_mmap() due to crash + * 4. Under SVA usage, called by mmu_notifier.invalidate_range() where + * VM has to free pages that were unmapped + * 5. Userspace driver unmaps a DMA buffer + * 6. Cache invalidation in vSVA usage (upcoming) + * + * For #1 and #2, device drivers are responsible for stopping DMA traffic + * before unmap/unbind. For #3, iommu driver gets mmu_notifier to + * invalidate TLB the same way as normal user unmap which will use this quirk. + * The dTLB invalidation after PASID cache flush does not need this quirk. + * + * As a reminder, #6 will *NEED* this quirk as we enable nested translation. + */ +void quirk_extra_dev_tlb_flush(struct device_domain_info *info, + unsigned long address, unsigned long mask, + u32 pasid, u16 qdep) +{ + u16 sid; + + if (likely(!info->dtlb_extra_inval)) + return; + + sid = PCI_DEVID(info->bus, info->devfn); + if (pasid == PASID_RID2PASID) { + qi_flush_dev_iotlb(info->iommu, sid, info->pfsid, + qdep, address, mask); + } else { + qi_flush_dev_iotlb_pasid(info->iommu, sid, info->pfsid, + pasid, qdep, address, mask); + } +} diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h index 92023dff9513ab1fe7f71176a1c7326d735e608b..db9df7c3790cd1aeeec85f6c7fb8a6598cb2268b 100644 --- a/drivers/iommu/intel/iommu.h +++ b/drivers/iommu/intel/iommu.h @@ -623,6 +623,7 @@ struct device_domain_info { u8 pri_enabled:1; u8 ats_supported:1; u8 ats_enabled:1; + u8 dtlb_extra_inval:1; /* Quirk for devices need extra flush */ u8 ats_qdep; struct device *dev; /* it's NULL for PCIe-to-PCI bridge */ struct intel_iommu *iommu; /* IOMMU used by this device */ @@ -728,6 +729,9 @@ void qi_flush_piotlb(struct intel_iommu *iommu, u16 did, u32 pasid, u64 addr, void qi_flush_dev_iotlb_pasid(struct intel_iommu *iommu, u16 sid, u16 pfsid, u32 pasid, u16 qdep, u64 addr, unsigned int size_order); +void quirk_extra_dev_tlb_flush(struct device_domain_info *info, + unsigned long address, unsigned long pages, + u32 pasid, u16 qdep); void qi_flush_pasid_cache(struct intel_iommu *iommu, u16 did, u64 granu, u32 pasid); diff --git a/drivers/iommu/intel/pasid.c b/drivers/iommu/intel/pasid.c index c30ddac40ee5fc2d5ce79cc1353854959bf5a998..e13d7e5273e195cc0bc84019e650e4c7e7a5523c 100644 --- a/drivers/iommu/intel/pasid.c +++ b/drivers/iommu/intel/pasid.c @@ -642,7 +642,7 @@ int intel_pasid_setup_second_level(struct intel_iommu *iommu, * Since it is a second level only translation setup, we should * set SRE bit as well (addresses are expected to be GPAs). */ - if (pasid != PASID_RID2PASID) + if (pasid != PASID_RID2PASID && ecap_srs(iommu->ecap)) pasid_set_sre(pte); pasid_set_present(pte); spin_unlock(&iommu->lock); @@ -685,7 +685,8 @@ int intel_pasid_setup_pass_through(struct intel_iommu *iommu, * We should set SRE bit as well since the addresses are expected * to be GPAs. */ - pasid_set_sre(pte); + if (ecap_srs(iommu->ecap)) + pasid_set_sre(pte); pasid_set_present(pte); spin_unlock(&iommu->lock); diff --git a/drivers/iommu/intel/svm.c b/drivers/iommu/intel/svm.c index 7d08eb034f2d2e2bfb72d2a1f69b48fcc0a46a11..03b25358946c4fa00d101f69a8178effc61d7664 100644 --- a/drivers/iommu/intel/svm.c +++ b/drivers/iommu/intel/svm.c @@ -184,10 +184,13 @@ static void __flush_svm_range_dev(struct intel_svm *svm, return; qi_flush_piotlb(sdev->iommu, sdev->did, svm->pasid, address, pages, ih); - if (info->ats_enabled) + if (info->ats_enabled) { qi_flush_dev_iotlb_pasid(sdev->iommu, sdev->sid, info->pfsid, svm->pasid, sdev->qdep, address, order_base_2(pages)); + quirk_extra_dev_tlb_flush(info, address, order_base_2(pages), + svm->pasid, sdev->qdep); + } } static void intel_flush_svm_range_dev(struct intel_svm *svm, @@ -745,12 +748,16 @@ static irqreturn_t prq_event_thread(int irq, void *d) * If prq is to be handled outside iommu driver via receiver of * the fault notifiers, we skip the page response here. */ - if (!pdev || intel_svm_prq_report(iommu, &pdev->dev, req)) - handle_bad_prq_event(iommu, req, QI_RESP_INVALID); + if (!pdev) + goto bad_req; - trace_prq_report(iommu, &pdev->dev, req->qw_0, req->qw_1, - req->priv_data[0], req->priv_data[1], - iommu->prq_seq_number++); + if (intel_svm_prq_report(iommu, &pdev->dev, req)) + handle_bad_prq_event(iommu, req, QI_RESP_INVALID); + else + trace_prq_report(iommu, &pdev->dev, req->qw_0, req->qw_1, + req->priv_data[0], req->priv_data[1], + iommu->prq_seq_number++); + pci_dev_put(pdev); prq_advance: head = (head + sizeof(*req)) & PRQ_RING_MASK; } diff --git a/drivers/isdn/hardware/mISDN/netjet.c b/drivers/isdn/hardware/mISDN/netjet.c index a52f275f826348475b0f49a241ee73b2c6553fca..f8447135a90220bf24eef9403d13f725035ef43a 100644 --- a/drivers/isdn/hardware/mISDN/netjet.c +++ b/drivers/isdn/hardware/mISDN/netjet.c @@ -956,7 +956,7 @@ nj_release(struct tiger_hw *card) } if (card->irq > 0) free_irq(card->irq, card); - if (card->isac.dch.dev.dev.class) + if (device_is_registered(&card->isac.dch.dev.dev)) mISDN_unregister_device(&card->isac.dch.dev); for (i = 0; i < 2; i++) { diff --git a/drivers/isdn/mISDN/core.c b/drivers/isdn/mISDN/core.c index a41b4b264594121e45b338d151c59fd4937c16c4..90ee56d07a6e92f434619e15a90cd2c613093abf 100644 --- a/drivers/isdn/mISDN/core.c +++ b/drivers/isdn/mISDN/core.c @@ -222,7 +222,7 @@ mISDN_register_device(struct mISDNdevice *dev, err = get_free_devid(); if (err < 0) - goto error1; + return err; dev->id = err; device_initialize(&dev->dev); @@ -233,11 +233,12 @@ mISDN_register_device(struct mISDNdevice *dev, if (debug & DEBUG_CORE) printk(KERN_DEBUG "mISDN_register %s %d\n", dev_name(&dev->dev), dev->id); + dev->dev.class = &mISDN_class; + err = create_stack(dev); if (err) goto error1; - dev->dev.class = &mISDN_class; dev->dev.platform_data = dev; dev->dev.parent = parent; dev_set_drvdata(&dev->dev, dev); @@ -249,8 +250,8 @@ mISDN_register_device(struct mISDNdevice *dev, error3: delete_stack(dev); - return err; error1: + put_device(&dev->dev); return err; } diff --git a/drivers/isdn/mISDN/dsp_pipeline.c b/drivers/isdn/mISDN/dsp_pipeline.c index c3b2c99b5cd5ceaf12c9fc7dcd929840ec6b3870..cfbcd9e973c2e64f71dd82710f59b1a2dd78dfc8 100644 --- a/drivers/isdn/mISDN/dsp_pipeline.c +++ b/drivers/isdn/mISDN/dsp_pipeline.c @@ -77,6 +77,7 @@ int mISDN_dsp_element_register(struct mISDN_dsp_element *elem) if (!entry) return -ENOMEM; + INIT_LIST_HEAD(&entry->list); entry->elem = elem; entry->dev.class = elements_class; @@ -107,7 +108,7 @@ int mISDN_dsp_element_register(struct mISDN_dsp_element *elem) device_unregister(&entry->dev); return ret; err1: - kfree(entry); + put_device(&entry->dev); return ret; } EXPORT_SYMBOL(mISDN_dsp_element_register); diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c index 9c5ef818ca3657e6183b161cbff69aef3e6e6e48..bb786c39545ec8d2909512113023d924a11770c7 100644 --- a/drivers/md/dm-bufio.c +++ b/drivers/md/dm-bufio.c @@ -1858,6 +1858,8 @@ struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsign dm_io_client_destroy(c->dm_io); bad_dm_io: mutex_destroy(&c->lock); + if (c->no_sleep) + static_branch_dec(&no_sleep_enabled); kfree(c); bad_client: return ERR_PTR(r); diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c index 159c6806c19b8991fdcf33121f6c130fa1882f7f..2653516bcdef50708c1ae9568158c5c279dfad19 100644 --- a/drivers/md/dm-crypt.c +++ b/drivers/md/dm-crypt.c @@ -3630,6 +3630,7 @@ static void crypt_io_hints(struct dm_target *ti, struct queue_limits *limits) limits->physical_block_size = max_t(unsigned, limits->physical_block_size, cc->sector_size); limits->io_min = max_t(unsigned, limits->io_min, cc->sector_size); + limits->dma_alignment = limits->logical_block_size - 1; } static struct target_type crypt_target = { diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c index aaf2472df6e58d4ca47119098c069a0ae3b64875..e97e9f97456d468274b615415e03d3030efcd5d0 100644 --- a/drivers/md/dm-integrity.c +++ b/drivers/md/dm-integrity.c @@ -263,6 +263,7 @@ struct dm_integrity_c { struct completion crypto_backoff; + bool wrote_to_journal; bool journal_uptodate; bool just_formatted; bool recalculate_flag; @@ -2375,6 +2376,8 @@ static void integrity_commit(struct work_struct *w) if (!commit_sections) goto release_flush_bios; + ic->wrote_to_journal = true; + i = commit_start; for (n = 0; n < commit_sections; n++) { for (j = 0; j < ic->journal_section_entries; j++) { @@ -2591,10 +2594,6 @@ static void integrity_writer(struct work_struct *w) unsigned prev_free_sectors; - /* the following test is not needed, but it tests the replay code */ - if (unlikely(dm_post_suspending(ic->ti)) && !ic->meta_dev) - return; - spin_lock_irq(&ic->endio_wait.lock); write_start = ic->committed_section; write_sections = ic->n_committed_sections; @@ -3101,10 +3100,17 @@ static void dm_integrity_postsuspend(struct dm_target *ti) drain_workqueue(ic->commit_wq); if (ic->mode == 'J') { - if (ic->meta_dev) - queue_work(ic->writer_wq, &ic->writer_work); + queue_work(ic->writer_wq, &ic->writer_work); drain_workqueue(ic->writer_wq); dm_integrity_flush_buffers(ic, true); + if (ic->wrote_to_journal) { + init_journal(ic, ic->free_section, + ic->journal_sections - ic->free_section, ic->commit_seq); + if (ic->free_section) { + init_journal(ic, 0, ic->free_section, + next_commit_seq(ic->commit_seq)); + } + } } if (ic->mode == 'B') { @@ -3132,6 +3138,8 @@ static void dm_integrity_resume(struct dm_target *ti) DEBUG_print("resume\n"); + ic->wrote_to_journal = false; + if (ic->provided_data_sectors != old_provided_data_sectors) { if (ic->provided_data_sectors > old_provided_data_sectors && ic->mode == 'B' && @@ -3370,6 +3378,7 @@ static void dm_integrity_io_hints(struct dm_target *ti, struct queue_limits *lim limits->logical_block_size = ic->sectors_per_block << SECTOR_SHIFT; limits->physical_block_size = ic->sectors_per_block << SECTOR_SHIFT; blk_limits_io_min(limits, ic->sectors_per_block << SECTOR_SHIFT); + limits->dma_alignment = limits->logical_block_size - 1; } } diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c index 6b3f867d0b70781592acaf5c52288ce745a71d9a..3bfc1583c20a2d348b3642739b0faf5b58ee8e62 100644 --- a/drivers/md/dm-ioctl.c +++ b/drivers/md/dm-ioctl.c @@ -655,7 +655,7 @@ static void list_version_get_needed(struct target_type *tt, void *needed_param) size_t *needed = needed_param; *needed += sizeof(struct dm_target_versions); - *needed += strlen(tt->name); + *needed += strlen(tt->name) + 1; *needed += ALIGN_MASK; } @@ -720,7 +720,7 @@ static int __list_versions(struct dm_ioctl *param, size_t param_size, const char iter_info.old_vers = NULL; iter_info.vers = vers; iter_info.flags = 0; - iter_info.end = (char *)vers+len; + iter_info.end = (char *)vers + needed; /* * Now loop through filling out the names & versions. diff --git a/drivers/md/dm-log-writes.c b/drivers/md/dm-log-writes.c index 20fd688f72e7c0cd9cabd92c740fedcfd1235730..178e13a5b059ff00f3c3052ad5bff72039be6b18 100644 --- a/drivers/md/dm-log-writes.c +++ b/drivers/md/dm-log-writes.c @@ -875,6 +875,7 @@ static void log_writes_io_hints(struct dm_target *ti, struct queue_limits *limit limits->logical_block_size = bdev_logical_block_size(lc->dev->bdev); limits->physical_block_size = bdev_physical_block_size(lc->dev->bdev); limits->io_min = limits->physical_block_size; + limits->dma_alignment = limits->logical_block_size - 1; } #if IS_ENABLED(CONFIG_FS_DAX) diff --git a/drivers/media/common/videobuf2/frame_vector.c b/drivers/media/common/videobuf2/frame_vector.c index 542dde9d2609be07700f6cf63d46f7a9b4557444..144027035892a5c8e2af5870a1eb190735c9bd0a 100644 --- a/drivers/media/common/videobuf2/frame_vector.c +++ b/drivers/media/common/videobuf2/frame_vector.c @@ -35,11 +35,7 @@ int get_vaddr_frames(unsigned long start, unsigned int nr_frames, struct frame_vector *vec) { - struct mm_struct *mm = current->mm; - struct vm_area_struct *vma; - int ret_pin_user_pages_fast = 0; - int ret = 0; - int err; + int ret; if (nr_frames == 0) return 0; @@ -52,57 +48,17 @@ int get_vaddr_frames(unsigned long start, unsigned int nr_frames, ret = pin_user_pages_fast(start, nr_frames, FOLL_FORCE | FOLL_WRITE | FOLL_LONGTERM, (struct page **)(vec->ptrs)); - if (ret > 0) { - vec->got_ref = true; - vec->is_pfns = false; - goto out_unlocked; - } - ret_pin_user_pages_fast = ret; - - mmap_read_lock(mm); - vec->got_ref = false; - vec->is_pfns = true; - ret = 0; - do { - unsigned long *nums = frame_vector_pfns(vec); - - vma = vma_lookup(mm, start); - if (!vma) - break; - - while (ret < nr_frames && start + PAGE_SIZE <= vma->vm_end) { - err = follow_pfn(vma, start, &nums[ret]); - if (err) { - if (ret) - goto out; - // If follow_pfn() returns -EINVAL, then this - // is not an IO mapping or a raw PFN mapping. - // In that case, return the original error from - // pin_user_pages_fast(). Otherwise this - // function would return -EINVAL when - // pin_user_pages_fast() returned -ENOMEM, - // which makes debugging hard. - if (err == -EINVAL && ret_pin_user_pages_fast) - ret = ret_pin_user_pages_fast; - else - ret = err; - goto out; - } - start += PAGE_SIZE; - ret++; - } - /* Bail out if VMA doesn't completely cover the tail page. */ - if (start < vma->vm_end) - break; - } while (ret < nr_frames); -out: - mmap_read_unlock(mm); -out_unlocked: - if (!ret) - ret = -EFAULT; - if (ret > 0) - vec->nr_frames = ret; - return ret; + vec->got_ref = true; + vec->is_pfns = false; + vec->nr_frames = ret; + + if (likely(ret > 0)) + return ret; + + /* This used to (racily) return non-refcounted pfns. Let people know */ + WARN_ONCE(1, "get_vaddr_frames() cannot follow VM_IO mapping"); + vec->nr_frames = 0; + return ret ? ret : -EFAULT; } EXPORT_SYMBOL(get_vaddr_frames); diff --git a/drivers/misc/vmw_vmci/vmci_queue_pair.c b/drivers/misc/vmw_vmci/vmci_queue_pair.c index e71068f7759b34b6ac650df1272ff724879691cc..844264e1b88cc4404c3f28642b436c95a559b2da 100644 --- a/drivers/misc/vmw_vmci/vmci_queue_pair.c +++ b/drivers/misc/vmw_vmci/vmci_queue_pair.c @@ -854,6 +854,7 @@ static int qp_notify_peer_local(bool attach, struct vmci_handle handle) u32 context_id = vmci_get_context_id(); struct vmci_event_qp ev; + memset(&ev, 0, sizeof(ev)); ev.msg.hdr.dst = vmci_make_handle(context_id, VMCI_EVENT_HANDLER); ev.msg.hdr.src = vmci_make_handle(VMCI_HYPERVISOR_CONTEXT_ID, VMCI_CONTEXT_RESOURCE_ID); @@ -1467,6 +1468,7 @@ static int qp_notify_peer(bool attach, * kernel. */ + memset(&ev, 0, sizeof(ev)); ev.msg.hdr.dst = vmci_make_handle(peer_id, VMCI_EVENT_HANDLER); ev.msg.hdr.src = vmci_make_handle(VMCI_HYPERVISOR_CONTEXT_ID, VMCI_CONTEXT_RESOURCE_ID); diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 95fa8fb1d45f2b5475805147b0bcf40b601abbfd..de1cc9e1ae57638e97d7f0d8bf8617e40036b794 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -1134,7 +1134,13 @@ u32 mmc_select_voltage(struct mmc_host *host, u32 ocr) mmc_power_cycle(host, ocr); } else { bit = fls(ocr) - 1; - ocr &= 3 << bit; + /* + * The bit variable represents the highest voltage bit set in + * the OCR register. + * To keep a range of 2 values (e.g. 3.2V/3.3V and 3.3V/3.4V), + * we must shift the mask '3' with (bit - 1). + */ + ocr &= 3 << (bit - 1); if (bit != host->ios.vdd) dev_warn(mmc_dev(host), "exceeding card's volts\n"); } @@ -1478,6 +1484,11 @@ void mmc_init_erase(struct mmc_card *card) card->pref_erase = 0; } +static bool is_trim_arg(unsigned int arg) +{ + return (arg & MMC_TRIM_OR_DISCARD_ARGS) && arg != MMC_DISCARD_ARG; +} + static unsigned int mmc_mmc_erase_timeout(struct mmc_card *card, unsigned int arg, unsigned int qty) { @@ -1760,7 +1771,7 @@ int mmc_erase(struct mmc_card *card, unsigned int from, unsigned int nr, !(card->ext_csd.sec_feature_support & EXT_CSD_SEC_ER_EN)) return -EOPNOTSUPP; - if (mmc_card_mmc(card) && (arg & MMC_TRIM_ARGS) && + if (mmc_card_mmc(card) && is_trim_arg(arg) && !(card->ext_csd.sec_feature_support & EXT_CSD_SEC_GB_CL_EN)) return -EOPNOTSUPP; @@ -1790,7 +1801,7 @@ int mmc_erase(struct mmc_card *card, unsigned int from, unsigned int nr, * identified by the card->eg_boundary flag. */ rem = card->erase_size - (from % card->erase_size); - if ((arg & MMC_TRIM_ARGS) && (card->eg_boundary) && (nr > rem)) { + if ((arg & MMC_TRIM_OR_DISCARD_ARGS) && card->eg_boundary && nr > rem) { err = mmc_do_erase(card, from, from + rem - 1, arg); from += rem; if ((err) || (to <= from)) diff --git a/drivers/mmc/core/mmc_test.c b/drivers/mmc/core/mmc_test.c index 8d9bceeff9864b02c7488432e0cb5d8399b70608..155ce2bdfe6220adb94fbe03da702610a160e2e2 100644 --- a/drivers/mmc/core/mmc_test.c +++ b/drivers/mmc/core/mmc_test.c @@ -3179,7 +3179,8 @@ static int __mmc_test_register_dbgfs_file(struct mmc_card *card, struct mmc_test_dbgfs_file *df; if (card->debugfs_root) - debugfs_create_file(name, mode, card->debugfs_root, card, fops); + file = debugfs_create_file(name, mode, card->debugfs_root, + card, fops); df = kmalloc(sizeof(*df), GFP_KERNEL); if (!df) { diff --git a/drivers/mmc/host/mtk-sd.c b/drivers/mmc/host/mtk-sd.c index df941438aef57610062521bb6ba9c0eb2ed354d7..26bc59b5a7ccfde5b490d65f996bef78b1454ca5 100644 --- a/drivers/mmc/host/mtk-sd.c +++ b/drivers/mmc/host/mtk-sd.c @@ -2588,13 +2588,11 @@ static int msdc_of_clock_parse(struct platform_device *pdev, return PTR_ERR(host->src_clk_cg); } - host->sys_clk_cg = devm_clk_get_optional(&pdev->dev, "sys_cg"); + /* If present, always enable for this clock gate */ + host->sys_clk_cg = devm_clk_get_optional_enabled(&pdev->dev, "sys_cg"); if (IS_ERR(host->sys_clk_cg)) host->sys_clk_cg = NULL; - /* If present, always enable for this clock gate */ - clk_prepare_enable(host->sys_clk_cg); - host->bulk_clks[0].id = "pclk_cg"; host->bulk_clks[1].id = "axi_cg"; host->bulk_clks[2].id = "ahb_cg"; diff --git a/drivers/mmc/host/sdhci-brcmstb.c b/drivers/mmc/host/sdhci-brcmstb.c index aff36a933ebecaeb77ac22f72a7f90d5e9dddc35..55d8bd232695c38fb2292d1c7a656878e0910fa8 100644 --- a/drivers/mmc/host/sdhci-brcmstb.c +++ b/drivers/mmc/host/sdhci-brcmstb.c @@ -12,6 +12,7 @@ #include #include +#include "sdhci-cqhci.h" #include "sdhci-pltfm.h" #include "cqhci.h" @@ -55,7 +56,7 @@ static void brcmstb_reset(struct sdhci_host *host, u8 mask) struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); struct sdhci_brcmstb_priv *priv = sdhci_pltfm_priv(pltfm_host); - sdhci_reset(host, mask); + sdhci_and_cqhci_reset(host, mask); /* Reset will clear this, so re-enable it */ if (priv->flags & BRCMSTB_PRIV_FLAGS_GATE_CLOCK) diff --git a/drivers/mmc/host/sdhci-cqhci.h b/drivers/mmc/host/sdhci-cqhci.h new file mode 100644 index 0000000000000000000000000000000000000000..cf8e7ba71bbd7b932191c3e9fca02e4095a12676 --- /dev/null +++ b/drivers/mmc/host/sdhci-cqhci.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright 2022 The Chromium OS Authors + * + * Support that applies to the combination of SDHCI and CQHCI, while not + * expressing a dependency between the two modules. + */ + +#ifndef __MMC_HOST_SDHCI_CQHCI_H__ +#define __MMC_HOST_SDHCI_CQHCI_H__ + +#include "cqhci.h" +#include "sdhci.h" + +static inline void sdhci_and_cqhci_reset(struct sdhci_host *host, u8 mask) +{ + if ((host->mmc->caps2 & MMC_CAP2_CQE) && (mask & SDHCI_RESET_ALL) && + host->mmc->cqe_private) + cqhci_deactivate(host->mmc); + + sdhci_reset(host, mask); +} + +#endif /* __MMC_HOST_SDHCI_CQHCI_H__ */ diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c index 747df79d90eef675277066b51819da74ca4b3868..ffeb5759830ff401f5450eca2fc83e0d054be2ec 100644 --- a/drivers/mmc/host/sdhci-esdhc-imx.c +++ b/drivers/mmc/host/sdhci-esdhc-imx.c @@ -25,6 +25,7 @@ #include #include #include +#include "sdhci-cqhci.h" #include "sdhci-pltfm.h" #include "sdhci-esdhc.h" #include "cqhci.h" @@ -1288,7 +1289,7 @@ static void esdhc_set_uhs_signaling(struct sdhci_host *host, unsigned timing) static void esdhc_reset(struct sdhci_host *host, u8 mask) { - sdhci_reset(host, mask); + sdhci_and_cqhci_reset(host, mask); sdhci_writel(host, host->ier, SDHCI_INT_ENABLE); sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE); @@ -1511,7 +1512,7 @@ static void esdhc_cqe_enable(struct mmc_host *mmc) * system resume back. */ cqhci_writel(cq_host, 0, CQHCI_CTL); - if (cqhci_readl(cq_host, CQHCI_CTL) && CQHCI_HALT) + if (cqhci_readl(cq_host, CQHCI_CTL) & CQHCI_HALT) dev_err(mmc_dev(host->mmc), "failed to exit halt state when enable CQE\n"); @@ -1671,14 +1672,14 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev) if (imx_data->socdata->flags & ESDHC_FLAG_ERR004536) host->quirks |= SDHCI_QUIRK_BROKEN_ADMA; - if (host->caps & MMC_CAP_8_BIT_DATA && + if (host->mmc->caps & MMC_CAP_8_BIT_DATA && imx_data->socdata->flags & ESDHC_FLAG_HS400) host->mmc->caps2 |= MMC_CAP2_HS400; if (imx_data->socdata->flags & ESDHC_FLAG_BROKEN_AUTO_CMD23) host->quirks2 |= SDHCI_QUIRK2_ACMD23_BROKEN; - if (host->caps & MMC_CAP_8_BIT_DATA && + if (host->mmc->caps & MMC_CAP_8_BIT_DATA && imx_data->socdata->flags & ESDHC_FLAG_HS400_ES) { host->mmc->caps2 |= MMC_CAP2_HS400_ES; host->mmc_host_ops.hs400_enhanced_strobe = diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c index 3997cad1f793d182f48748533210f13920881cd9..cfb891430174ab941f818eeb3344ebcf13dc7867 100644 --- a/drivers/mmc/host/sdhci-of-arasan.c +++ b/drivers/mmc/host/sdhci-of-arasan.c @@ -25,6 +25,7 @@ #include #include "cqhci.h" +#include "sdhci-cqhci.h" #include "sdhci-pltfm.h" #define SDHCI_ARASAN_VENDOR_REGISTER 0x78 @@ -366,7 +367,7 @@ static void sdhci_arasan_reset(struct sdhci_host *host, u8 mask) struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); - sdhci_reset(host, mask); + sdhci_and_cqhci_reset(host, mask); if (sdhci_arasan->quirks & SDHCI_ARASAN_QUIRK_FORCE_CDTEST) { ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL); diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c index 34ea1acbb3ccf7c467b099d5888a6579e4010c3f..28dc65023fa9f81da45223cc0871047017a05306 100644 --- a/drivers/mmc/host/sdhci-pci-core.c +++ b/drivers/mmc/host/sdhci-pci-core.c @@ -1749,6 +1749,8 @@ static int amd_probe(struct sdhci_pci_chip *chip) } } + pci_dev_put(smbus_dev); + if (gen == AMD_CHIPSET_BEFORE_ML || gen == AMD_CHIPSET_CZ) chip->quirks2 |= SDHCI_QUIRK2_CLEAR_TRANSFERMODE_REG_BEFORE_CMD; diff --git a/drivers/mmc/host/sdhci-pci-o2micro.c b/drivers/mmc/host/sdhci-pci-o2micro.c index ad457cd9cbaabc8c7b6f719f00c6372f812d46b6..bca1d095b7597dae6df0b2dbb5afbdd667b66d12 100644 --- a/drivers/mmc/host/sdhci-pci-o2micro.c +++ b/drivers/mmc/host/sdhci-pci-o2micro.c @@ -32,6 +32,7 @@ #define O2_SD_CAPS 0xE0 #define O2_SD_ADMA1 0xE2 #define O2_SD_ADMA2 0xE7 +#define O2_SD_MISC_CTRL2 0xF0 #define O2_SD_INF_MOD 0xF1 #define O2_SD_MISC_CTRL4 0xFC #define O2_SD_MISC_CTRL 0x1C0 @@ -877,6 +878,12 @@ static int sdhci_pci_o2_probe(struct sdhci_pci_chip *chip) /* Set Tuning Windows to 5 */ pci_write_config_byte(chip->pdev, O2_SD_TUNING_CTRL, 0x55); + //Adjust 1st and 2nd CD debounce time + pci_read_config_dword(chip->pdev, O2_SD_MISC_CTRL2, &scratch_32); + scratch_32 &= 0xFFE7FFFF; + scratch_32 |= 0x00180000; + pci_write_config_dword(chip->pdev, O2_SD_MISC_CTRL2, scratch_32); + pci_write_config_dword(chip->pdev, O2_SD_DETECT_SETTING, 1); /* Lock WP */ ret = pci_read_config_byte(chip->pdev, O2_SD_LOCK_WP, &scratch); diff --git a/drivers/mmc/host/sdhci-sprd.c b/drivers/mmc/host/sdhci-sprd.c index b92a408f138ddf66868513cb173105d1988e7de1..bec3f9e3cd3fabe760a281ad2ec8298d83e28a36 100644 --- a/drivers/mmc/host/sdhci-sprd.c +++ b/drivers/mmc/host/sdhci-sprd.c @@ -470,7 +470,7 @@ static int sdhci_sprd_voltage_switch(struct mmc_host *mmc, struct mmc_ios *ios) } if (IS_ERR(sprd_host->pinctrl)) - return 0; + goto reset; switch (ios->signal_voltage) { case MMC_SIGNAL_VOLTAGE_180: @@ -498,6 +498,8 @@ static int sdhci_sprd_voltage_switch(struct mmc_host *mmc, struct mmc_ios *ios) /* Wait for 300 ~ 500 us for pin state stable */ usleep_range(300, 500); + +reset: sdhci_reset(host, SDHCI_RESET_CMD | SDHCI_RESET_DATA); return 0; diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c index 413925bce0ca8c6587b28afcaee44f5ef332eb3f..c71000a07656eaa403643260a09081162c375aee 100644 --- a/drivers/mmc/host/sdhci-tegra.c +++ b/drivers/mmc/host/sdhci-tegra.c @@ -28,6 +28,7 @@ #include +#include "sdhci-cqhci.h" #include "sdhci-pltfm.h" #include "cqhci.h" @@ -367,7 +368,7 @@ static void tegra_sdhci_reset(struct sdhci_host *host, u8 mask) const struct sdhci_tegra_soc_data *soc_data = tegra_host->soc_data; u32 misc_ctrl, clk_ctrl, pad_ctrl; - sdhci_reset(host, mask); + sdhci_and_cqhci_reset(host, mask); if (!(mask & SDHCI_RESET_ALL)) return; diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index fef03de85b99f3b7dd2b5a2ab46d7ecdbbcd9d7a..c7ad32a75b570a73c849ae7a5945c0564b67e89a 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -373,6 +373,7 @@ static void sdhci_init(struct sdhci_host *host, int soft) if (soft) { /* force clock reconfiguration */ host->clock = 0; + host->reinit_uhs = true; mmc->ops->set_ios(mmc, &mmc->ios); } } @@ -2293,11 +2294,46 @@ void sdhci_set_uhs_signaling(struct sdhci_host *host, unsigned timing) } EXPORT_SYMBOL_GPL(sdhci_set_uhs_signaling); +static bool sdhci_timing_has_preset(unsigned char timing) +{ + switch (timing) { + case MMC_TIMING_UHS_SDR12: + case MMC_TIMING_UHS_SDR25: + case MMC_TIMING_UHS_SDR50: + case MMC_TIMING_UHS_SDR104: + case MMC_TIMING_UHS_DDR50: + case MMC_TIMING_MMC_DDR52: + return true; + }; + return false; +} + +static bool sdhci_preset_needed(struct sdhci_host *host, unsigned char timing) +{ + return !(host->quirks2 & SDHCI_QUIRK2_PRESET_VALUE_BROKEN) && + sdhci_timing_has_preset(timing); +} + +static bool sdhci_presetable_values_change(struct sdhci_host *host, struct mmc_ios *ios) +{ + /* + * Preset Values are: Driver Strength, Clock Generator and SDCLK/RCLK + * Frequency. Check if preset values need to be enabled, or the Driver + * Strength needs updating. Note, clock changes are handled separately. + */ + return !host->preset_enabled && + (sdhci_preset_needed(host, ios->timing) || host->drv_type != ios->drv_type); +} + void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) { struct sdhci_host *host = mmc_priv(mmc); + bool reinit_uhs = host->reinit_uhs; + bool turning_on_clk = false; u8 ctrl; + host->reinit_uhs = false; + if (ios->power_mode == MMC_POWER_UNDEFINED) return; @@ -2323,6 +2359,8 @@ void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) sdhci_enable_preset_value(host, false); if (!ios->clock || ios->clock != host->clock) { + turning_on_clk = ios->clock && !host->clock; + host->ops->set_clock(host, ios->clock); host->clock = ios->clock; @@ -2349,6 +2387,17 @@ void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) host->ops->set_bus_width(host, ios->bus_width); + /* + * Special case to avoid multiple clock changes during voltage + * switching. + */ + if (!reinit_uhs && + turning_on_clk && + host->timing == ios->timing && + host->version >= SDHCI_SPEC_300 && + !sdhci_presetable_values_change(host, ios)) + return; + ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL); if (!(host->quirks & SDHCI_QUIRK_NO_HISPD_BIT)) { @@ -2392,6 +2441,7 @@ void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) } sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2); + host->drv_type = ios->drv_type; } else { /* * According to SDHC Spec v3.00, if the Preset Value @@ -2419,19 +2469,14 @@ void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) host->ops->set_uhs_signaling(host, ios->timing); host->timing = ios->timing; - if (!(host->quirks2 & SDHCI_QUIRK2_PRESET_VALUE_BROKEN) && - ((ios->timing == MMC_TIMING_UHS_SDR12) || - (ios->timing == MMC_TIMING_UHS_SDR25) || - (ios->timing == MMC_TIMING_UHS_SDR50) || - (ios->timing == MMC_TIMING_UHS_SDR104) || - (ios->timing == MMC_TIMING_UHS_DDR50) || - (ios->timing == MMC_TIMING_MMC_DDR52))) { + if (sdhci_preset_needed(host, ios->timing)) { u16 preset; sdhci_enable_preset_value(host, true); preset = sdhci_get_preset_value(host); ios->drv_type = FIELD_GET(SDHCI_PRESET_DRV_MASK, preset); + host->drv_type = ios->drv_type; } /* Re-enable SD Clock */ @@ -3768,6 +3813,7 @@ int sdhci_resume_host(struct sdhci_host *host) sdhci_init(host, 0); host->pwr = 0; host->clock = 0; + host->reinit_uhs = true; mmc->ops->set_ios(mmc, &mmc->ios); } else { sdhci_init(host, (mmc->pm_flags & MMC_PM_KEEP_POWER)); @@ -3830,6 +3876,7 @@ int sdhci_runtime_resume_host(struct sdhci_host *host, int soft_reset) /* Force clock and power re-program */ host->pwr = 0; host->clock = 0; + host->reinit_uhs = true; mmc->ops->start_signal_voltage_switch(mmc, &mmc->ios); mmc->ops->set_ios(mmc, &mmc->ios); diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index d750c464bd1e59291fe4c85f7f3d189f3aff1587..87a3aaa0743873e9cf2a8a8e0d717d9d421f5dec 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -524,6 +524,8 @@ struct sdhci_host { unsigned int clock; /* Current clock (MHz) */ u8 pwr; /* Current voltage */ + u8 drv_type; /* Current UHS-I driver type */ + bool reinit_uhs; /* Force UHS-related re-initialization */ bool runtime_suspended; /* Host is runtime suspended */ bool bus_on; /* Bus power prevents runtime suspend */ diff --git a/drivers/mmc/host/sdhci_am654.c b/drivers/mmc/host/sdhci_am654.c index 8f1023480e12ccb95ec1c81d5f44af756e3ff0b8..c2333c7acac9b58fb0400d11949ddee2f8c11270 100644 --- a/drivers/mmc/host/sdhci_am654.c +++ b/drivers/mmc/host/sdhci_am654.c @@ -15,6 +15,7 @@ #include #include "cqhci.h" +#include "sdhci-cqhci.h" #include "sdhci-pltfm.h" /* CTL_CFG Registers */ @@ -378,7 +379,7 @@ static void sdhci_am654_reset(struct sdhci_host *host, u8 mask) struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); struct sdhci_am654_data *sdhci_am654 = sdhci_pltfm_priv(pltfm_host); - sdhci_reset(host, mask); + sdhci_and_cqhci_reset(host, mask); if (sdhci_am654->quirks & SDHCI_AM654_QUIRK_FORCE_CDTEST) { ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL); @@ -464,7 +465,7 @@ static struct sdhci_ops sdhci_am654_ops = { .set_clock = sdhci_am654_set_clock, .write_b = sdhci_am654_write_b, .irq = sdhci_am654_cqhci_irq, - .reset = sdhci_reset, + .reset = sdhci_and_cqhci_reset, }; static const struct sdhci_pltfm_data sdhci_am654_pdata = { @@ -494,7 +495,7 @@ static struct sdhci_ops sdhci_j721e_8bit_ops = { .set_clock = sdhci_am654_set_clock, .write_b = sdhci_am654_write_b, .irq = sdhci_am654_cqhci_irq, - .reset = sdhci_reset, + .reset = sdhci_and_cqhci_reset, }; static const struct sdhci_pltfm_data sdhci_j721e_8bit_pdata = { diff --git a/drivers/mtd/nand/onenand/Kconfig b/drivers/mtd/nand/onenand/Kconfig index 34d9a7a82ad4ea8e4453f4ed2f040602d625f47d..c94bf483541e13f8369d6fc61575df7f6e5f7847 100644 --- a/drivers/mtd/nand/onenand/Kconfig +++ b/drivers/mtd/nand/onenand/Kconfig @@ -26,6 +26,7 @@ config MTD_ONENAND_OMAP2 tristate "OneNAND on OMAP2/OMAP3 support" depends on ARCH_OMAP2 || ARCH_OMAP3 || (COMPILE_TEST && ARM) depends on OF || COMPILE_TEST + depends on OMAP_GPMC help Support for a OneNAND flash device connected to an OMAP2/OMAP3 SoC via the GPMC memory controller. diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c index 33f2c98a030ebb700139e2e9fc67eef339703255..c3cc660399255469c7f427fffc6780e8b1a6c83e 100644 --- a/drivers/mtd/nand/raw/nand_base.c +++ b/drivers/mtd/nand/raw/nand_base.c @@ -5834,7 +5834,7 @@ nand_match_ecc_req(struct nand_chip *chip, int req_step = requirements->step_size; int req_strength = requirements->strength; int req_corr, step_size, strength, nsteps, ecc_bytes, ecc_bytes_total; - int best_step, best_strength, best_ecc_bytes; + int best_step = 0, best_strength = 0, best_ecc_bytes = 0; int best_ecc_bytes_total = INT_MAX; int i, j; @@ -5915,7 +5915,7 @@ nand_maximize_ecc(struct nand_chip *chip, int step_size, strength, nsteps, ecc_bytes, corr; int best_corr = 0; int best_step = 0; - int best_strength, best_ecc_bytes; + int best_strength = 0, best_ecc_bytes = 0; int i, j; for (i = 0; i < caps->nstepinfos; i++) { diff --git a/drivers/mtd/nand/raw/qcom_nandc.c b/drivers/mtd/nand/raw/qcom_nandc.c index 8f80019a9f0167c46584059064e13c72138fb2cf..198a44794d2dc06a982a0759b477e8853d86a3fc 100644 --- a/drivers/mtd/nand/raw/qcom_nandc.c +++ b/drivers/mtd/nand/raw/qcom_nandc.c @@ -3167,16 +3167,18 @@ static int qcom_nand_host_init_and_register(struct qcom_nand_controller *nandc, ret = mtd_device_parse_register(mtd, probes, NULL, NULL, 0); if (ret) - nand_cleanup(chip); + goto err; if (nandc->props->use_codeword_fixup) { ret = qcom_nand_host_parse_boot_partitions(nandc, host, dn); - if (ret) { - nand_cleanup(chip); - return ret; - } + if (ret) + goto err; } + return 0; + +err: + nand_cleanup(chip); return ret; } diff --git a/drivers/net/arcnet/com20020_cs.c b/drivers/net/arcnet/com20020_cs.c index 24150c933fcbe96f02477bf581303702e49903c7..dc3253b318dafc3e668df035880a8bccabeb0fdc 100644 --- a/drivers/net/arcnet/com20020_cs.c +++ b/drivers/net/arcnet/com20020_cs.c @@ -113,6 +113,7 @@ static int com20020_probe(struct pcmcia_device *p_dev) struct com20020_dev *info; struct net_device *dev; struct arcnet_local *lp; + int ret = -ENOMEM; dev_dbg(&p_dev->dev, "com20020_attach()\n"); @@ -142,12 +143,18 @@ static int com20020_probe(struct pcmcia_device *p_dev) info->dev = dev; p_dev->priv = info; - return com20020_config(p_dev); + ret = com20020_config(p_dev); + if (ret) + goto fail_config; + + return 0; +fail_config: + free_arcdev(dev); fail_alloc_dev: kfree(info); fail_alloc_info: - return -ENOMEM; + return ret; } /* com20020_attach */ static void com20020_detach(struct pcmcia_device *link) diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index e84c49bf4d0c37ff2649bd2baaf737bd84303814..f298b9b3eb77e417f81fe06b3838b340ef56bf86 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -3231,16 +3231,23 @@ static int bond_na_rcv(const struct sk_buff *skb, struct bonding *bond, struct slave *slave) { struct slave *curr_active_slave, *curr_arp_slave; - struct icmp6hdr *hdr = icmp6_hdr(skb); struct in6_addr *saddr, *daddr; + struct { + struct ipv6hdr ip6; + struct icmp6hdr icmp6; + } *combined, _combined; if (skb->pkt_type == PACKET_OTHERHOST || - skb->pkt_type == PACKET_LOOPBACK || - hdr->icmp6_type != NDISC_NEIGHBOUR_ADVERTISEMENT) + skb->pkt_type == PACKET_LOOPBACK) + goto out; + + combined = skb_header_pointer(skb, 0, sizeof(_combined), &_combined); + if (!combined || combined->ip6.nexthdr != NEXTHDR_ICMP || + combined->icmp6.icmp6_type != NDISC_NEIGHBOUR_ADVERTISEMENT) goto out; - saddr = &ipv6_hdr(skb)->saddr; - daddr = &ipv6_hdr(skb)->daddr; + saddr = &combined->ip6.saddr; + daddr = &combined->ip6.saddr; slave_dbg(bond->dev, slave->dev, "%s: %s/%d av %d sv %d sip %pI6c tip %pI6c\n", __func__, slave->dev->name, bond_slave_state(slave), diff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c index 3a2d109a3792fdfc61fbd64ffa472669a939dde7..199cb200f2bdd246068830de3d00ceeb4cae4047 100644 --- a/drivers/net/can/at91_can.c +++ b/drivers/net/can/at91_can.c @@ -452,7 +452,7 @@ static netdev_tx_t at91_start_xmit(struct sk_buff *skb, struct net_device *dev) unsigned int mb, prio; u32 reg_mid, reg_mcr; - if (can_dropped_invalid_skb(dev, skb)) + if (can_dev_dropped_skb(dev, skb)) return NETDEV_TX_OK; mb = get_tx_next_mb(priv); diff --git a/drivers/net/can/c_can/c_can_main.c b/drivers/net/can/c_can/c_can_main.c index d6605dbb7737bb7227301e8760d00a86fd78c3a7..c63f7fc1e69177b7a9f4b5de890d59d942a96803 100644 --- a/drivers/net/can/c_can/c_can_main.c +++ b/drivers/net/can/c_can/c_can_main.c @@ -457,7 +457,7 @@ static netdev_tx_t c_can_start_xmit(struct sk_buff *skb, struct c_can_tx_ring *tx_ring = &priv->tx; u32 idx, obj, cmd = IF_COMM_TX; - if (can_dropped_invalid_skb(dev, skb)) + if (can_dev_dropped_skb(dev, skb)) return NETDEV_TX_OK; if (c_can_tx_busy(priv, tx_ring)) diff --git a/drivers/net/can/can327.c b/drivers/net/can/can327.c index 0aa1af31d0fe4990a699e8cc37a8f2b13e3d0483..ed3d0b8989a076eefb09eaf5fc392a21ee1c3b8e 100644 --- a/drivers/net/can/can327.c +++ b/drivers/net/can/can327.c @@ -263,8 +263,10 @@ static void can327_feed_frame_to_netdev(struct can327 *elm, struct sk_buff *skb) { lockdep_assert_held(&elm->lock); - if (!netif_running(elm->dev)) + if (!netif_running(elm->dev)) { + kfree_skb(skb); return; + } /* Queue for NAPI pickup. * rx-offload will update stats and LEDs for us. @@ -813,7 +815,7 @@ static netdev_tx_t can327_netdev_start_xmit(struct sk_buff *skb, struct can327 *elm = netdev_priv(dev); struct can_frame *frame = (struct can_frame *)skb->data; - if (can_dropped_invalid_skb(dev, skb)) + if (can_dev_dropped_skb(dev, skb)) return NETDEV_TX_OK; /* We shouldn't get here after a hardware fault: diff --git a/drivers/net/can/cc770/cc770.c b/drivers/net/can/cc770/cc770.c index 0b9dfc76e769cf8338b32b299099fc7cc160b8c7..30909f3aab576fb8eefb46b83f0aeca2fa7ffda1 100644 --- a/drivers/net/can/cc770/cc770.c +++ b/drivers/net/can/cc770/cc770.c @@ -429,7 +429,7 @@ static netdev_tx_t cc770_start_xmit(struct sk_buff *skb, struct net_device *dev) struct cc770_priv *priv = netdev_priv(dev); unsigned int mo = obj2msgobj(CC770_OBJ_TX); - if (can_dropped_invalid_skb(dev, skb)) + if (can_dev_dropped_skb(dev, skb)) return NETDEV_TX_OK; netif_stop_queue(dev); diff --git a/drivers/net/can/cc770/cc770_isa.c b/drivers/net/can/cc770/cc770_isa.c index 194c86e0f340fb873965ce05f543f09b4c314482..8f6dccd5a58792fc143cb462e176c9a2fdd4c69b 100644 --- a/drivers/net/can/cc770/cc770_isa.c +++ b/drivers/net/can/cc770/cc770_isa.c @@ -264,22 +264,24 @@ static int cc770_isa_probe(struct platform_device *pdev) if (err) { dev_err(&pdev->dev, "couldn't register device (err=%d)\n", err); - goto exit_unmap; + goto exit_free; } dev_info(&pdev->dev, "device registered (reg_base=0x%p, irq=%d)\n", priv->reg_base, dev->irq); return 0; - exit_unmap: +exit_free: + free_cc770dev(dev); +exit_unmap: if (mem[idx]) iounmap(base); - exit_release: +exit_release: if (mem[idx]) release_mem_region(mem[idx], iosize); else release_region(port[idx], iosize); - exit: +exit: return err; } diff --git a/drivers/net/can/ctucanfd/ctucanfd_base.c b/drivers/net/can/ctucanfd/ctucanfd_base.c index b8da15ea6ad9a1b050b71cb52ebfe00c2890fbd6..64c349fd46007fe915f3ce51b4931cf61734260b 100644 --- a/drivers/net/can/ctucanfd/ctucanfd_base.c +++ b/drivers/net/can/ctucanfd/ctucanfd_base.c @@ -600,7 +600,7 @@ static netdev_tx_t ctucan_start_xmit(struct sk_buff *skb, struct net_device *nde bool ok; unsigned long flags; - if (can_dropped_invalid_skb(ndev, skb)) + if (can_dev_dropped_skb(ndev, skb)) return NETDEV_TX_OK; if (unlikely(!CTU_CAN_FD_TXTNF(priv))) { diff --git a/drivers/net/can/dev/skb.c b/drivers/net/can/dev/skb.c index 791a51e2f5d6414678076f2c204d4b4e903c00b5..241ec636e91fd09f5006b694a3f32fec46662af6 100644 --- a/drivers/net/can/dev/skb.c +++ b/drivers/net/can/dev/skb.c @@ -5,7 +5,6 @@ */ #include -#include #include #define MOD_DESC "CAN device driver interface" @@ -337,8 +336,6 @@ static bool can_skb_headroom_valid(struct net_device *dev, struct sk_buff *skb) /* Drop a given socketbuffer if it does not contain a valid CAN frame. */ bool can_dropped_invalid_skb(struct net_device *dev, struct sk_buff *skb) { - struct can_priv *priv = netdev_priv(dev); - switch (ntohs(skb->protocol)) { case ETH_P_CAN: if (!can_is_can_skb(skb)) @@ -359,13 +356,8 @@ bool can_dropped_invalid_skb(struct net_device *dev, struct sk_buff *skb) goto inval_skb; } - if (!can_skb_headroom_valid(dev, skb)) { + if (!can_skb_headroom_valid(dev, skb)) goto inval_skb; - } else if (priv->ctrlmode & CAN_CTRLMODE_LISTENONLY) { - netdev_info_once(dev, - "interface in listen only mode, dropping skb\n"); - goto inval_skb; - } return false; diff --git a/drivers/net/can/flexcan/flexcan-core.c b/drivers/net/can/flexcan/flexcan-core.c index 5ee38e586fd8026d88257a8a24005e85b5ef285f..9bdadd716f4e0514942545e3a90a2b6b381fdbaa 100644 --- a/drivers/net/can/flexcan/flexcan-core.c +++ b/drivers/net/can/flexcan/flexcan-core.c @@ -742,7 +742,7 @@ static netdev_tx_t flexcan_start_xmit(struct sk_buff *skb, struct net_device *de u32 ctrl = FLEXCAN_MB_CODE_TX_DATA | ((can_fd_len2dlc(cfd->len)) << 16); int i; - if (can_dropped_invalid_skb(dev, skb)) + if (can_dev_dropped_skb(dev, skb)) return NETDEV_TX_OK; netif_stop_queue(dev); diff --git a/drivers/net/can/grcan.c b/drivers/net/can/grcan.c index 6c37aab93eb3ae0dfa9d38be0bc3067af1020a27..4bedcc3eea0d6726a821e2772ad45424a3be2872 100644 --- a/drivers/net/can/grcan.c +++ b/drivers/net/can/grcan.c @@ -1345,7 +1345,7 @@ static netdev_tx_t grcan_start_xmit(struct sk_buff *skb, unsigned long flags; u32 oneshotmode = priv->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT; - if (can_dropped_invalid_skb(dev, skb)) + if (can_dev_dropped_skb(dev, skb)) return NETDEV_TX_OK; /* Trying to transmit in silent mode will generate error interrupts, but diff --git a/drivers/net/can/ifi_canfd/ifi_canfd.c b/drivers/net/can/ifi_canfd/ifi_canfd.c index 8d42b7e6661f2d37bd1f9414236bf4e0dc6d0ffa..07eaf724a57273c78f230442d865e7ab0b2d8046 100644 --- a/drivers/net/can/ifi_canfd/ifi_canfd.c +++ b/drivers/net/can/ifi_canfd/ifi_canfd.c @@ -860,7 +860,7 @@ static netdev_tx_t ifi_canfd_start_xmit(struct sk_buff *skb, u32 txst, txid, txdlc; int i; - if (can_dropped_invalid_skb(ndev, skb)) + if (can_dev_dropped_skb(ndev, skb)) return NETDEV_TX_OK; /* Check if the TX buffer is full */ diff --git a/drivers/net/can/janz-ican3.c b/drivers/net/can/janz-ican3.c index 71a2caae075792e230c768e212d265b654309f9a..0732a509214182943972ec6cbf8241d7404ea067 100644 --- a/drivers/net/can/janz-ican3.c +++ b/drivers/net/can/janz-ican3.c @@ -1693,7 +1693,7 @@ static netdev_tx_t ican3_xmit(struct sk_buff *skb, struct net_device *ndev) void __iomem *desc_addr; unsigned long flags; - if (can_dropped_invalid_skb(ndev, skb)) + if (can_dev_dropped_skb(ndev, skb)) return NETDEV_TX_OK; spin_lock_irqsave(&mod->lock, flags); diff --git a/drivers/net/can/kvaser_pciefd.c b/drivers/net/can/kvaser_pciefd.c index 4e9680c8eb3447ae18d3fa07530ed6f8bad47802..bcad11709bc98c989a9ea06ba5b3878704a04d48 100644 --- a/drivers/net/can/kvaser_pciefd.c +++ b/drivers/net/can/kvaser_pciefd.c @@ -772,7 +772,7 @@ static netdev_tx_t kvaser_pciefd_start_xmit(struct sk_buff *skb, int nwords; u8 count; - if (can_dropped_invalid_skb(netdev, skb)) + if (can_dev_dropped_skb(netdev, skb)) return NETDEV_TX_OK; nwords = kvaser_pciefd_prepare_tx_packet(&packet, can, skb); diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index dcb582563d5e43c82b8421bdae2f127159ab2576..e5575d2755e4b16f4365c60fdf21bf340a275806 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -1721,7 +1721,7 @@ static netdev_tx_t m_can_start_xmit(struct sk_buff *skb, { struct m_can_classdev *cdev = netdev_priv(dev); - if (can_dropped_invalid_skb(dev, skb)) + if (can_dev_dropped_skb(dev, skb)) return NETDEV_TX_OK; if (cdev->is_peripheral) { @@ -1909,7 +1909,7 @@ int m_can_class_get_clocks(struct m_can_classdev *cdev) cdev->hclk = devm_clk_get(cdev->dev, "hclk"); cdev->cclk = devm_clk_get(cdev->dev, "cclk"); - if (IS_ERR(cdev->cclk)) { + if (IS_ERR(cdev->hclk) || IS_ERR(cdev->cclk)) { dev_err(cdev->dev, "no clock found\n"); ret = -ENODEV; } diff --git a/drivers/net/can/m_can/m_can_pci.c b/drivers/net/can/m_can/m_can_pci.c index 8f184a852a0a7c7476eaa1cf231ab1e4d46a5dc0..f2219aa2824b3c581280fde6cf6decf003e50c06 100644 --- a/drivers/net/can/m_can/m_can_pci.c +++ b/drivers/net/can/m_can/m_can_pci.c @@ -120,7 +120,7 @@ static int m_can_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) ret = pci_alloc_irq_vectors(pci, 1, 1, PCI_IRQ_ALL_TYPES); if (ret < 0) - return ret; + goto err_free_dev; mcan_class->dev = &pci->dev; mcan_class->net->irq = pci_irq_vector(pci, 0); @@ -132,7 +132,7 @@ static int m_can_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) ret = m_can_class_register(mcan_class); if (ret) - goto err; + goto err_free_irq; /* Enable interrupt control at CAN wrapper IP */ writel(0x1, base + CTL_CSR_INT_CTL_OFFSET); @@ -144,8 +144,10 @@ static int m_can_pci_probe(struct pci_dev *pci, const struct pci_device_id *id) return 0; -err: +err_free_irq: pci_free_irq_vectors(pci); +err_free_dev: + m_can_class_free_dev(mcan_class->net); return ret; } @@ -161,6 +163,7 @@ static void m_can_pci_remove(struct pci_dev *pci) writel(0x0, priv->base + CTL_CSR_INT_CTL_OFFSET); m_can_class_unregister(mcan_class); + m_can_class_free_dev(mcan_class->net); pci_free_irq_vectors(pci); } diff --git a/drivers/net/can/mscan/mscan.c b/drivers/net/can/mscan/mscan.c index 2119fbb287efc93281eece23236364cf4256f4e2..a6829cdc0e81f82cc88534a579c720e88209b76e 100644 --- a/drivers/net/can/mscan/mscan.c +++ b/drivers/net/can/mscan/mscan.c @@ -191,7 +191,7 @@ static netdev_tx_t mscan_start_xmit(struct sk_buff *skb, struct net_device *dev) int i, rtr, buf_id; u32 can_id; - if (can_dropped_invalid_skb(dev, skb)) + if (can_dev_dropped_skb(dev, skb)) return NETDEV_TX_OK; out_8(®s->cantier, 0); diff --git a/drivers/net/can/pch_can.c b/drivers/net/can/pch_can.c index 0558ff67ec6abf4841effc0270dc2bbf3ba71e92..2a44b2803e55543ae2107e2818158943b2f86f4f 100644 --- a/drivers/net/can/pch_can.c +++ b/drivers/net/can/pch_can.c @@ -882,7 +882,7 @@ static netdev_tx_t pch_xmit(struct sk_buff *skb, struct net_device *ndev) int i; u32 id2; - if (can_dropped_invalid_skb(ndev, skb)) + if (can_dev_dropped_skb(ndev, skb)) return NETDEV_TX_OK; tx_obj_no = priv->tx_obj; diff --git a/drivers/net/can/peak_canfd/peak_canfd.c b/drivers/net/can/peak_canfd/peak_canfd.c index f8420cc1d9075adca813b9d31e32d33b98e81dfe..31c9c127e24bbac05da8b5ec6552c2a05ba77ace 100644 --- a/drivers/net/can/peak_canfd/peak_canfd.c +++ b/drivers/net/can/peak_canfd/peak_canfd.c @@ -651,7 +651,7 @@ static netdev_tx_t peak_canfd_start_xmit(struct sk_buff *skb, int room_left; u8 len; - if (can_dropped_invalid_skb(ndev, skb)) + if (can_dev_dropped_skb(ndev, skb)) return NETDEV_TX_OK; msg_size = ALIGN(sizeof(*msg) + cf->len, 4); diff --git a/drivers/net/can/rcar/rcar_can.c b/drivers/net/can/rcar/rcar_can.c index 6ee968c59ac90930272576c66a31be7b662cc5e4..cc43c9c5e38c58ac69a9826075cf578177ac5ede 100644 --- a/drivers/net/can/rcar/rcar_can.c +++ b/drivers/net/can/rcar/rcar_can.c @@ -590,7 +590,7 @@ static netdev_tx_t rcar_can_start_xmit(struct sk_buff *skb, struct can_frame *cf = (struct can_frame *)skb->data; u32 data, i; - if (can_dropped_invalid_skb(ndev, skb)) + if (can_dev_dropped_skb(ndev, skb)) return NETDEV_TX_OK; if (cf->can_id & CAN_EFF_FLAG) /* Extended frame format */ diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c index 198da643ee6dd72ace5192f197db59eff8d7b34d..b306cf554634f81fd8b249d8006250f6ffa732f0 100644 --- a/drivers/net/can/rcar/rcar_canfd.c +++ b/drivers/net/can/rcar/rcar_canfd.c @@ -81,8 +81,7 @@ enum rcanfd_chip_id { /* RSCFDnCFDGERFL / RSCFDnGERFL */ #define RCANFD_GERFL_EEF0_7 GENMASK(23, 16) -#define RCANFD_GERFL_EEF1 BIT(17) -#define RCANFD_GERFL_EEF0 BIT(16) +#define RCANFD_GERFL_EEF(ch) BIT(16 + (ch)) #define RCANFD_GERFL_CMPOF BIT(3) /* CAN FD only */ #define RCANFD_GERFL_THLES BIT(2) #define RCANFD_GERFL_MES BIT(1) @@ -90,7 +89,7 @@ enum rcanfd_chip_id { #define RCANFD_GERFL_ERR(gpriv, x) \ ((x) & (reg_v3u(gpriv, RCANFD_GERFL_EEF0_7, \ - RCANFD_GERFL_EEF0 | RCANFD_GERFL_EEF1) | \ + RCANFD_GERFL_EEF(0) | RCANFD_GERFL_EEF(1)) | \ RCANFD_GERFL_MES | \ ((gpriv)->fdmode ? RCANFD_GERFL_CMPOF : 0))) @@ -936,12 +935,8 @@ static void rcar_canfd_global_error(struct net_device *ndev) u32 ridx = ch + RCANFD_RFFIFO_IDX; gerfl = rcar_canfd_read(priv->base, RCANFD_GERFL); - if ((gerfl & RCANFD_GERFL_EEF0) && (ch == 0)) { - netdev_dbg(ndev, "Ch0: ECC Error flag\n"); - stats->tx_dropped++; - } - if ((gerfl & RCANFD_GERFL_EEF1) && (ch == 1)) { - netdev_dbg(ndev, "Ch1: ECC Error flag\n"); + if (gerfl & RCANFD_GERFL_EEF(ch)) { + netdev_dbg(ndev, "Ch%u: ECC Error flag\n", ch); stats->tx_dropped++; } if (gerfl & RCANFD_GERFL_MES) { @@ -1481,7 +1476,7 @@ static netdev_tx_t rcar_canfd_start_xmit(struct sk_buff *skb, unsigned long flags; u32 ch = priv->channel; - if (can_dropped_invalid_skb(ndev, skb)) + if (can_dev_dropped_skb(ndev, skb)) return NETDEV_TX_OK; if (cf->can_id & CAN_EFF_FLAG) { diff --git a/drivers/net/can/sja1000/sja1000.c b/drivers/net/can/sja1000/sja1000.c index 1bb1129b04503364b403160d8612bfc4ad18ad15..aac5956e4a532092a0e67a0b57937ac10c8b4597 100644 --- a/drivers/net/can/sja1000/sja1000.c +++ b/drivers/net/can/sja1000/sja1000.c @@ -291,7 +291,7 @@ static netdev_tx_t sja1000_start_xmit(struct sk_buff *skb, u8 cmd_reg_val = 0x00; int i; - if (can_dropped_invalid_skb(dev, skb)) + if (can_dev_dropped_skb(dev, skb)) return NETDEV_TX_OK; netif_stop_queue(dev); diff --git a/drivers/net/can/sja1000/sja1000_isa.c b/drivers/net/can/sja1000/sja1000_isa.c index d513fac50718542061f786a75191fe1f25e711bd..db3e767d5320fd1a309d4323246c32c41abcabe2 100644 --- a/drivers/net/can/sja1000/sja1000_isa.c +++ b/drivers/net/can/sja1000/sja1000_isa.c @@ -202,22 +202,24 @@ static int sja1000_isa_probe(struct platform_device *pdev) if (err) { dev_err(&pdev->dev, "registering %s failed (err=%d)\n", DRV_NAME, err); - goto exit_unmap; + goto exit_free; } dev_info(&pdev->dev, "%s device registered (reg_base=0x%p, irq=%d)\n", DRV_NAME, priv->reg_base, dev->irq); return 0; - exit_unmap: +exit_free: + free_sja1000dev(dev); +exit_unmap: if (mem[idx]) iounmap(base); - exit_release: +exit_release: if (mem[idx]) release_mem_region(mem[idx], iosize); else release_region(port[idx], iosize); - exit: +exit: return err; } diff --git a/drivers/net/can/slcan/slcan-core.c b/drivers/net/can/slcan/slcan-core.c index 8d13fdf8c28a4a599de96003b1e2559fee8afc0f..fbb34139daa1a24c6e723f71512ca0981289bb5b 100644 --- a/drivers/net/can/slcan/slcan-core.c +++ b/drivers/net/can/slcan/slcan-core.c @@ -594,7 +594,7 @@ static netdev_tx_t slcan_netdev_xmit(struct sk_buff *skb, { struct slcan *sl = netdev_priv(dev); - if (can_dropped_invalid_skb(dev, skb)) + if (can_dev_dropped_skb(dev, skb)) return NETDEV_TX_OK; spin_lock(&sl->lock); diff --git a/drivers/net/can/softing/softing_main.c b/drivers/net/can/softing/softing_main.c index a5ef57f415f732320f93256c1383b57ec67a2f6f..c72f505d29feec565f0fff43d3a7f51240800405 100644 --- a/drivers/net/can/softing/softing_main.c +++ b/drivers/net/can/softing/softing_main.c @@ -60,7 +60,7 @@ static netdev_tx_t softing_netdev_start_xmit(struct sk_buff *skb, struct can_frame *cf = (struct can_frame *)skb->data; uint8_t buf[DPRAM_TX_SIZE]; - if (can_dropped_invalid_skb(dev, skb)) + if (can_dev_dropped_skb(dev, skb)) return NETDEV_TX_OK; spin_lock(&card->spin); diff --git a/drivers/net/can/spi/hi311x.c b/drivers/net/can/spi/hi311x.c index b87dc420428d99b51189412d6613d1d67388e861..e1b8533a602e28a69f6401dc5561ab7827b0f1ba 100644 --- a/drivers/net/can/spi/hi311x.c +++ b/drivers/net/can/spi/hi311x.c @@ -373,7 +373,7 @@ static netdev_tx_t hi3110_hard_start_xmit(struct sk_buff *skb, return NETDEV_TX_BUSY; } - if (can_dropped_invalid_skb(net, skb)) + if (can_dev_dropped_skb(net, skb)) return NETDEV_TX_OK; netif_stop_queue(net); diff --git a/drivers/net/can/spi/mcp251x.c b/drivers/net/can/spi/mcp251x.c index 24883a65ca66a3702c43b8661107f53d19fcabb0..79c4bab5f7246e1faa4411acb536c0254c9881ce 100644 --- a/drivers/net/can/spi/mcp251x.c +++ b/drivers/net/can/spi/mcp251x.c @@ -789,7 +789,7 @@ static netdev_tx_t mcp251x_hard_start_xmit(struct sk_buff *skb, return NETDEV_TX_BUSY; } - if (can_dropped_invalid_skb(net, skb)) + if (can_dev_dropped_skb(net, skb)) return NETDEV_TX_OK; netif_stop_queue(net); diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd-tx.c b/drivers/net/can/spi/mcp251xfd/mcp251xfd-tx.c index ffb6c36b7d9bdea33cb60155ac58922eef3b49e1..160528d3cc26b1be4cd253df3ffb6837577bede9 100644 --- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-tx.c +++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-tx.c @@ -172,7 +172,7 @@ netdev_tx_t mcp251xfd_start_xmit(struct sk_buff *skb, u8 tx_head; int err; - if (can_dropped_invalid_skb(ndev, skb)) + if (can_dev_dropped_skb(ndev, skb)) return NETDEV_TX_OK; if (mcp251xfd_tx_busy(priv, tx_ring)) diff --git a/drivers/net/can/sun4i_can.c b/drivers/net/can/sun4i_can.c index 525309da1320a6bd98876d827f90b177efe88968..2b78f9197681b739d6b09693e714bc6bdd203b05 100644 --- a/drivers/net/can/sun4i_can.c +++ b/drivers/net/can/sun4i_can.c @@ -429,7 +429,7 @@ static netdev_tx_t sun4ican_start_xmit(struct sk_buff *skb, struct net_device *d canid_t id; int i; - if (can_dropped_invalid_skb(dev, skb)) + if (can_dev_dropped_skb(dev, skb)) return NETDEV_TX_OK; netif_stop_queue(dev); diff --git a/drivers/net/can/ti_hecc.c b/drivers/net/can/ti_hecc.c index b218fb3c6b760d46c28564dcee919313d1e4a34e..27700f72eac259458deaf23542dac43ab358f472 100644 --- a/drivers/net/can/ti_hecc.c +++ b/drivers/net/can/ti_hecc.c @@ -470,7 +470,7 @@ static netdev_tx_t ti_hecc_xmit(struct sk_buff *skb, struct net_device *ndev) u32 mbxno, mbx_mask, data; unsigned long flags; - if (can_dropped_invalid_skb(ndev, skb)) + if (can_dev_dropped_skb(ndev, skb)) return NETDEV_TX_OK; mbxno = get_tx_head_mb(priv); diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c index d31191686a549d3196aeac126c21ea51fb164dcc..050c0b49938a42a1cd84024ab98ad33cbe8bccca 100644 --- a/drivers/net/can/usb/ems_usb.c +++ b/drivers/net/can/usb/ems_usb.c @@ -747,7 +747,7 @@ static netdev_tx_t ems_usb_start_xmit(struct sk_buff *skb, struct net_device *ne size_t size = CPC_HEADER_SIZE + CPC_MSG_HEADER_LEN + sizeof(struct cpc_can_msg); - if (can_dropped_invalid_skb(netdev, skb)) + if (can_dev_dropped_skb(netdev, skb)) return NETDEV_TX_OK; /* create a URB, and a buffer for it, and copy the data to the URB */ diff --git a/drivers/net/can/usb/esd_usb.c b/drivers/net/can/usb/esd_usb.c index 1bcfad11b1e4448e75d56c26eeec5114b48ecc08..81b88e9e5bdc09f0305d85d132cd5d502afd324c 100644 --- a/drivers/net/can/usb/esd_usb.c +++ b/drivers/net/can/usb/esd_usb.c @@ -725,7 +725,7 @@ static netdev_tx_t esd_usb_start_xmit(struct sk_buff *skb, int ret = NETDEV_TX_OK; size_t size = sizeof(struct esd_usb_msg); - if (can_dropped_invalid_skb(netdev, skb)) + if (can_dev_dropped_skb(netdev, skb)) return NETDEV_TX_OK; /* create a URB, and a buffer for it, and copy the data to the URB */ diff --git a/drivers/net/can/usb/etas_es58x/es58x_core.c b/drivers/net/can/usb/etas_es58x/es58x_core.c index 51294b717040522e6de9accfbfc50ac33a5c5520..ddb7c5735c9ac28ecf46160ed0c1ece844df1839 100644 --- a/drivers/net/can/usb/etas_es58x/es58x_core.c +++ b/drivers/net/can/usb/etas_es58x/es58x_core.c @@ -1913,7 +1913,7 @@ static netdev_tx_t es58x_start_xmit(struct sk_buff *skb, unsigned int frame_len; int ret; - if (can_dropped_invalid_skb(netdev, skb)) { + if (can_dev_dropped_skb(netdev, skb)) { if (priv->tx_urb) goto xmit_commit; return NETDEV_TX_OK; @@ -2091,8 +2091,11 @@ static int es58x_init_netdev(struct es58x_device *es58x_dev, int channel_idx) netdev->dev_port = channel_idx; ret = register_candev(netdev); - if (ret) + if (ret) { + es58x_dev->netdev[channel_idx] = NULL; + free_candev(netdev); return ret; + } netdev_queue_set_dql_min_limit(netdev_get_tx_queue(netdev, 0), es58x_dev->param->dql_min_limit); diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c index f0065d40eb2410933a47492fd5c0defe91672947..9c2c25fde3d146375ab691a7192d57845654ac79 100644 --- a/drivers/net/can/usb/gs_usb.c +++ b/drivers/net/can/usb/gs_usb.c @@ -723,7 +723,7 @@ static netdev_tx_t gs_can_start_xmit(struct sk_buff *skb, unsigned int idx; struct gs_tx_context *txc; - if (can_dropped_invalid_skb(netdev, skb)) + if (can_dev_dropped_skb(netdev, skb)) return NETDEV_TX_OK; /* find an empty context to keep track of transmission */ diff --git a/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c b/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c index e91648ed73862fe2ac114b391c9c5e233d79c03e..802e27c0ecedb2a7bb558534c9c4aadb9f473d4c 100644 --- a/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c +++ b/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c @@ -570,7 +570,7 @@ static netdev_tx_t kvaser_usb_start_xmit(struct sk_buff *skb, unsigned int i; unsigned long flags; - if (can_dropped_invalid_skb(netdev, skb)) + if (can_dev_dropped_skb(netdev, skb)) return NETDEV_TX_OK; urb = usb_alloc_urb(0, GFP_ATOMIC); diff --git a/drivers/net/can/usb/mcba_usb.c b/drivers/net/can/usb/mcba_usb.c index 69346c63021fee69a6bd9256d022ba9feb0cd56b..47619e9cb0055b8abcddcc5bc07758cda3266aa9 100644 --- a/drivers/net/can/usb/mcba_usb.c +++ b/drivers/net/can/usb/mcba_usb.c @@ -47,6 +47,10 @@ #define MCBA_VER_REQ_USB 1 #define MCBA_VER_REQ_CAN 2 +/* Drive the CAN_RES signal LOW "0" to activate R24 and R25 */ +#define MCBA_VER_TERMINATION_ON 0 +#define MCBA_VER_TERMINATION_OFF 1 + #define MCBA_SIDL_EXID_MASK 0x8 #define MCBA_DLC_MASK 0xf #define MCBA_DLC_RTR_MASK 0x40 @@ -311,7 +315,7 @@ static netdev_tx_t mcba_usb_start_xmit(struct sk_buff *skb, .cmd_id = MBCA_CMD_TRANSMIT_MESSAGE_EV }; - if (can_dropped_invalid_skb(netdev, skb)) + if (can_dev_dropped_skb(netdev, skb)) return NETDEV_TX_OK; ctx = mcba_usb_get_free_ctx(priv, cf); @@ -463,7 +467,7 @@ static void mcba_usb_process_ka_usb(struct mcba_priv *priv, priv->usb_ka_first_pass = false; } - if (msg->termination_state) + if (msg->termination_state == MCBA_VER_TERMINATION_ON) priv->can.termination = MCBA_TERMINATION_ENABLED; else priv->can.termination = MCBA_TERMINATION_DISABLED; @@ -785,9 +789,9 @@ static int mcba_set_termination(struct net_device *netdev, u16 term) }; if (term == MCBA_TERMINATION_ENABLED) - usb_msg.termination = 1; + usb_msg.termination = MCBA_VER_TERMINATION_ON; else - usb_msg.termination = 0; + usb_msg.termination = MCBA_VER_TERMINATION_OFF; mcba_usb_xmit_cmd(priv, (struct mcba_usb_msg *)&usb_msg); diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c index 225697d70a9aa3a7c9bb21b1617eecc9228d14b1..1d996d3320fef8e27fc8085f4bef6a4387e445aa 100644 --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c @@ -351,7 +351,7 @@ static netdev_tx_t peak_usb_ndo_start_xmit(struct sk_buff *skb, int i, err; size_t size = dev->adapter->tx_buffer_size; - if (can_dropped_invalid_skb(netdev, skb)) + if (can_dev_dropped_skb(netdev, skb)) return NETDEV_TX_OK; for (i = 0; i < PCAN_USB_MAX_TX_URBS; i++) diff --git a/drivers/net/can/usb/ucan.c b/drivers/net/can/usb/ucan.c index 7c35f50fda4eea3ddc3db4afef9019967e2bd225..67c2ff407d06610c5036a9442b6f28e3079e9998 100644 --- a/drivers/net/can/usb/ucan.c +++ b/drivers/net/can/usb/ucan.c @@ -1120,7 +1120,7 @@ static netdev_tx_t ucan_start_xmit(struct sk_buff *skb, struct can_frame *cf = (struct can_frame *)skb->data; /* check skb */ - if (can_dropped_invalid_skb(netdev, skb)) + if (can_dev_dropped_skb(netdev, skb)) return NETDEV_TX_OK; /* allocate a context and slow down tx path, if fifo state is low */ diff --git a/drivers/net/can/usb/usb_8dev.c b/drivers/net/can/usb/usb_8dev.c index 64c00abe91cf01d5e446a06251f0ebaffe171516..8a5596ce4e46312e6080a424e0107e0c22595267 100644 --- a/drivers/net/can/usb/usb_8dev.c +++ b/drivers/net/can/usb/usb_8dev.c @@ -602,7 +602,7 @@ static netdev_tx_t usb_8dev_start_xmit(struct sk_buff *skb, int i, err; size_t size = sizeof(struct usb_8dev_tx_msg); - if (can_dropped_invalid_skb(netdev, skb)) + if (can_dev_dropped_skb(netdev, skb)) return NETDEV_TX_OK; /* create a URB, and a buffer for it, and copy the data to the URB */ diff --git a/drivers/net/can/xilinx_can.c b/drivers/net/can/xilinx_can.c index 5d3172795ad01d4402a5d0164c74596af1f208f8..43c812ea1de02320c7e8da79fdd194864d8a45d8 100644 --- a/drivers/net/can/xilinx_can.c +++ b/drivers/net/can/xilinx_can.c @@ -743,7 +743,7 @@ static netdev_tx_t xcan_start_xmit(struct sk_buff *skb, struct net_device *ndev) struct xcan_priv *priv = netdev_priv(ndev); int ret; - if (can_dropped_invalid_skb(ndev, skb)) + if (can_dev_dropped_skb(ndev, skb)) return NETDEV_TX_OK; if (priv->devtype.flags & XCAN_FLAG_TX_MAILBOXES) diff --git a/drivers/net/dsa/dsa_loop.c b/drivers/net/dsa/dsa_loop.c index b9107fe4002313ae0771dacc244d34be2a88526e..5b139f2206b6ef17053141b05951f5c9acfa008d 100644 --- a/drivers/net/dsa/dsa_loop.c +++ b/drivers/net/dsa/dsa_loop.c @@ -376,6 +376,17 @@ static struct mdio_driver dsa_loop_drv = { #define NUM_FIXED_PHYS (DSA_LOOP_NUM_PORTS - 2) +static void dsa_loop_phydevs_unregister(void) +{ + unsigned int i; + + for (i = 0; i < NUM_FIXED_PHYS; i++) + if (!IS_ERR(phydevs[i])) { + fixed_phy_unregister(phydevs[i]); + phy_device_free(phydevs[i]); + } +} + static int __init dsa_loop_init(void) { struct fixed_phy_status status = { @@ -383,23 +394,23 @@ static int __init dsa_loop_init(void) .speed = SPEED_100, .duplex = DUPLEX_FULL, }; - unsigned int i; + unsigned int i, ret; for (i = 0; i < NUM_FIXED_PHYS; i++) phydevs[i] = fixed_phy_register(PHY_POLL, &status, NULL); - return mdio_driver_register(&dsa_loop_drv); + ret = mdio_driver_register(&dsa_loop_drv); + if (ret) + dsa_loop_phydevs_unregister(); + + return ret; } module_init(dsa_loop_init); static void __exit dsa_loop_exit(void) { - unsigned int i; - mdio_driver_unregister(&dsa_loop_drv); - for (i = 0; i < NUM_FIXED_PHYS; i++) - if (!IS_ERR(phydevs[i])) - fixed_phy_unregister(phydevs[i]); + dsa_loop_phydevs_unregister(); } module_exit(dsa_loop_exit); diff --git a/drivers/net/dsa/lan9303-core.c b/drivers/net/dsa/lan9303-core.c index 438e46af03e9b5a8ae5404f64ccadee305cee45a..80f07bd20593434387e5d65a86cd52a292d8e04f 100644 --- a/drivers/net/dsa/lan9303-core.c +++ b/drivers/net/dsa/lan9303-core.c @@ -961,7 +961,7 @@ static const struct lan9303_mib_desc lan9303_mib[] = { { .offset = LAN9303_MAC_TX_BRDCST_CNT_0, .name = "TxBroad", }, { .offset = LAN9303_MAC_TX_PAUSE_CNT_0, .name = "TxPause", }, { .offset = LAN9303_MAC_TX_MULCST_CNT_0, .name = "TxMulti", }, - { .offset = LAN9303_MAC_RX_UNDSZE_CNT_0, .name = "TxUnderRun", }, + { .offset = LAN9303_MAC_RX_UNDSZE_CNT_0, .name = "RxShort", }, { .offset = LAN9303_MAC_TX_64_CNT_0, .name = "Tx64Byte", }, { .offset = LAN9303_MAC_TX_127_CNT_0, .name = "Tx128Byte", }, { .offset = LAN9303_MAC_TX_255_CNT_0, .name = "Tx256Byte", }, diff --git a/drivers/net/dsa/sja1105/sja1105_mdio.c b/drivers/net/dsa/sja1105/sja1105_mdio.c index 215dd17ca7906c4e358fc0c4b4105521c77d481b..4059fcc8c8326f26d28a9df1815d444a66dc88c0 100644 --- a/drivers/net/dsa/sja1105/sja1105_mdio.c +++ b/drivers/net/dsa/sja1105/sja1105_mdio.c @@ -256,6 +256,9 @@ static int sja1105_base_tx_mdio_read(struct mii_bus *bus, int phy, int reg) u32 tmp; int rc; + if (reg & MII_ADDR_C45) + return -EOPNOTSUPP; + rc = sja1105_xfer_u32(priv, SPI_READ, regs->mdio_100base_tx + reg, &tmp, NULL); if (rc < 0) @@ -272,6 +275,9 @@ static int sja1105_base_tx_mdio_write(struct mii_bus *bus, int phy, int reg, const struct sja1105_regs *regs = priv->info->regs; u32 tmp = val; + if (reg & MII_ADDR_C45) + return -EOPNOTSUPP; + return sja1105_xfer_u32(priv, SPI_WRITE, regs->mdio_100base_tx + reg, &tmp, NULL); } diff --git a/drivers/net/ethernet/adi/adin1110.c b/drivers/net/ethernet/adi/adin1110.c index 1744d623999d09b33dfbb643b7a0ff9a95610afe..606c97610808568140400f87db14cfe2b8372030 100644 --- a/drivers/net/ethernet/adi/adin1110.c +++ b/drivers/net/ethernet/adi/adin1110.c @@ -1512,16 +1512,15 @@ static struct notifier_block adin1110_switchdev_notifier = { .notifier_call = adin1110_switchdev_event, }; -static void adin1110_unregister_notifiers(void *data) +static void adin1110_unregister_notifiers(void) { unregister_switchdev_blocking_notifier(&adin1110_switchdev_blocking_notifier); unregister_switchdev_notifier(&adin1110_switchdev_notifier); unregister_netdevice_notifier(&adin1110_netdevice_nb); } -static int adin1110_setup_notifiers(struct adin1110_priv *priv) +static int adin1110_setup_notifiers(void) { - struct device *dev = &priv->spidev->dev; int ret; ret = register_netdevice_notifier(&adin1110_netdevice_nb); @@ -1536,13 +1535,14 @@ static int adin1110_setup_notifiers(struct adin1110_priv *priv) if (ret < 0) goto err_sdev; - return devm_add_action_or_reset(dev, adin1110_unregister_notifiers, NULL); + return 0; err_sdev: unregister_switchdev_notifier(&adin1110_switchdev_notifier); err_netdev: unregister_netdevice_notifier(&adin1110_netdevice_nb); + return ret; } @@ -1613,10 +1613,6 @@ static int adin1110_probe_netdevs(struct adin1110_priv *priv) if (ret < 0) return ret; - ret = adin1110_setup_notifiers(priv); - if (ret < 0) - return ret; - for (i = 0; i < priv->cfg->ports_nr; i++) { ret = devm_register_netdev(dev, priv->ports[i]->netdev); if (ret < 0) { @@ -1693,7 +1689,31 @@ static struct spi_driver adin1110_driver = { .probe = adin1110_probe, .id_table = adin1110_spi_id, }; -module_spi_driver(adin1110_driver); + +static int __init adin1110_driver_init(void) +{ + int ret; + + ret = adin1110_setup_notifiers(); + if (ret < 0) + return ret; + + ret = spi_register_driver(&adin1110_driver); + if (ret < 0) { + adin1110_unregister_notifiers(); + return ret; + } + + return 0; +} + +static void __exit adin1110_exit(void) +{ + adin1110_unregister_notifiers(); + spi_unregister_driver(&adin1110_driver); +} +module_init(adin1110_driver_init); +module_exit(adin1110_exit); MODULE_DESCRIPTION("ADIN1110 Network driver"); MODULE_AUTHOR("Alexandru Tachici "); diff --git a/drivers/net/ethernet/altera/altera_tse_main.c b/drivers/net/ethernet/altera/altera_tse_main.c index 7633b227b2ca40ab17167c43ea205b2e11fbead2..711d5b5a4c49cfc9e4cdf6b4397f1e5dee2bc46a 100644 --- a/drivers/net/ethernet/altera/altera_tse_main.c +++ b/drivers/net/ethernet/altera/altera_tse_main.c @@ -990,6 +990,7 @@ static int tse_shutdown(struct net_device *dev) int ret; phylink_stop(priv->phylink); + phylink_disconnect_phy(priv->phylink); netif_stop_queue(dev); napi_disable(&priv->napi); diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c index d350eeec8bad4c23cc6c2ec482bd0dd11677e292..5a454b58498fdfed02a7902db324302617df4f7b 100644 --- a/drivers/net/ethernet/amazon/ena/ena_netdev.c +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c @@ -4543,13 +4543,19 @@ static struct pci_driver ena_pci_driver = { static int __init ena_init(void) { + int ret; + ena_wq = create_singlethread_workqueue(DRV_MODULE_NAME); if (!ena_wq) { pr_err("Failed to create workqueue\n"); return -ENOMEM; } - return pci_register_driver(&ena_pci_driver); + ret = pci_register_driver(&ena_pci_driver); + if (ret) + destroy_workqueue(ena_wq); + + return ret; } static void __exit ena_cleanup(void) diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c index d6cfea65a714030d3662915f9103c3ac36724b18..390671640388bd5d1b7f26d14f50499de5f98190 100644 --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c @@ -1004,8 +1004,10 @@ static int xgene_enet_open(struct net_device *ndev) xgene_enet_napi_enable(pdata); ret = xgene_enet_register_irq(ndev); - if (ret) + if (ret) { + xgene_enet_napi_disable(pdata); return ret; + } if (ndev->phydev) { phy_start(ndev->phydev); diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c b/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c index a08f221e30d41f85bf4505b250c6d8bd7a281d1c..ac4ea93bd8ddad18f03544f762444c809d953369 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c @@ -13,6 +13,7 @@ #include "aq_ptp.h" #include "aq_filters.h" #include "aq_macsec.h" +#include "aq_main.h" #include @@ -858,7 +859,7 @@ static int aq_set_ringparam(struct net_device *ndev, if (netif_running(ndev)) { ndev_running = true; - dev_close(ndev); + aq_ndev_close(ndev); } cfg->rxds = max(ring->rx_pending, hw_caps->rxds_min); @@ -874,7 +875,7 @@ static int aq_set_ringparam(struct net_device *ndev, goto err_exit; if (ndev_running) - err = dev_open(ndev, NULL); + err = aq_ndev_open(ndev); err_exit: return err; diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_macsec.c b/drivers/net/ethernet/aquantia/atlantic/aq_macsec.c index a0180811305dc8bc3a793342a7328913d12a126b..7eb5851eb95dc3f8a948dc2783489aca6dd45530 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_macsec.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_macsec.c @@ -570,6 +570,7 @@ static int aq_update_txsa(struct aq_nic_s *nic, const unsigned int sc_idx, ret = aq_mss_set_egress_sakey_record(hw, &key_rec, sa_idx); + memzero_explicit(&key_rec, sizeof(key_rec)); return ret; } @@ -899,6 +900,7 @@ static int aq_update_rxsa(struct aq_nic_s *nic, const unsigned int sc_idx, ret = aq_mss_set_ingress_sakey_record(hw, &sa_key_record, sa_idx); + memzero_explicit(&sa_key_record, sizeof(sa_key_record)); return ret; } diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_main.c b/drivers/net/ethernet/aquantia/atlantic/aq_main.c index 8a0af371e7dc7a0c865ac0f145b2fe02f114b177..77609dc0a08d6021c55645becd73732dd815dcd9 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_main.c +++ b/drivers/net/ethernet/aquantia/atlantic/aq_main.c @@ -58,7 +58,7 @@ struct net_device *aq_ndev_alloc(void) return ndev; } -static int aq_ndev_open(struct net_device *ndev) +int aq_ndev_open(struct net_device *ndev) { struct aq_nic_s *aq_nic = netdev_priv(ndev); int err = 0; @@ -88,7 +88,7 @@ static int aq_ndev_open(struct net_device *ndev) return err; } -static int aq_ndev_close(struct net_device *ndev) +int aq_ndev_close(struct net_device *ndev) { struct aq_nic_s *aq_nic = netdev_priv(ndev); int err = 0; diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_main.h b/drivers/net/ethernet/aquantia/atlantic/aq_main.h index 99870865f66dbc7caedadac00818f077363e2b24..a78c1a168d8efbb358ecedfff1a4c2d63a287eaf 100644 --- a/drivers/net/ethernet/aquantia/atlantic/aq_main.h +++ b/drivers/net/ethernet/aquantia/atlantic/aq_main.h @@ -16,5 +16,7 @@ DECLARE_STATIC_KEY_FALSE(aq_xdp_locking_key); void aq_ndev_schedule_work(struct work_struct *work); struct net_device *aq_ndev_alloc(void); +int aq_ndev_open(struct net_device *ndev); +int aq_ndev_close(struct net_device *ndev); #endif /* AQ_MAIN_H */ diff --git a/drivers/net/ethernet/aquantia/atlantic/macsec/macsec_api.c b/drivers/net/ethernet/aquantia/atlantic/macsec/macsec_api.c index 36c7cf05630a1ea4711cde2d1a88d7a0050ed0d0..4319249595207c0a7cca9c479a9465bc7f2548a2 100644 --- a/drivers/net/ethernet/aquantia/atlantic/macsec/macsec_api.c +++ b/drivers/net/ethernet/aquantia/atlantic/macsec/macsec_api.c @@ -757,6 +757,7 @@ set_ingress_sakey_record(struct aq_hw_s *hw, u16 table_index) { u16 packed_record[18]; + int ret; if (table_index >= NUMROWS_INGRESSSAKEYRECORD) return -EINVAL; @@ -789,9 +790,12 @@ set_ingress_sakey_record(struct aq_hw_s *hw, packed_record[16] = rec->key_len & 0x3; - return set_raw_ingress_record(hw, packed_record, 18, 2, - ROWOFFSET_INGRESSSAKEYRECORD + - table_index); + ret = set_raw_ingress_record(hw, packed_record, 18, 2, + ROWOFFSET_INGRESSSAKEYRECORD + + table_index); + + memzero_explicit(packed_record, sizeof(packed_record)); + return ret; } int aq_mss_set_ingress_sakey_record(struct aq_hw_s *hw, @@ -1739,14 +1743,14 @@ static int set_egress_sakey_record(struct aq_hw_s *hw, ret = set_raw_egress_record(hw, packed_record, 8, 2, ROWOFFSET_EGRESSSAKEYRECORD + table_index); if (unlikely(ret)) - return ret; + goto clear_key; ret = set_raw_egress_record(hw, packed_record + 8, 8, 2, ROWOFFSET_EGRESSSAKEYRECORD + table_index - 32); - if (unlikely(ret)) - return ret; - return 0; +clear_key: + memzero_explicit(packed_record, sizeof(packed_record)); + return ret; } int aq_mss_set_egress_sakey_record(struct aq_hw_s *hw, diff --git a/drivers/net/ethernet/atheros/ag71xx.c b/drivers/net/ethernet/atheros/ag71xx.c index cc932b3cf873acbd51f7d36e13b03a021b6d6ea9..4a1efe9b37d02af7d1b1baccf09cbf319febf099 100644 --- a/drivers/net/ethernet/atheros/ag71xx.c +++ b/drivers/net/ethernet/atheros/ag71xx.c @@ -1427,7 +1427,7 @@ static int ag71xx_open(struct net_device *ndev) if (ret) { netif_err(ag, link, ndev, "phylink_of_phy_connect filed with err: %i\n", ret); - goto err; + return ret; } max_frame_len = ag71xx_max_frame_len(ndev->mtu); @@ -1448,6 +1448,7 @@ static int ag71xx_open(struct net_device *ndev) err: ag71xx_rings_cleanup(ag); + phylink_disconnect_phy(ag->phylink); return ret; } diff --git a/drivers/net/ethernet/broadcom/Kconfig b/drivers/net/ethernet/broadcom/Kconfig index f4e1ca68d831002a250192e5839eb1f657e1b032..55dfdb34e37b80ac7caa3d874dc7b69717d8b6bd 100644 --- a/drivers/net/ethernet/broadcom/Kconfig +++ b/drivers/net/ethernet/broadcom/Kconfig @@ -77,7 +77,7 @@ config BCMGENET select BCM7XXX_PHY select MDIO_BCM_UNIMAC select DIMLIB - select BROADCOM_PHY if ARCH_BCM2835 + select BROADCOM_PHY if (ARCH_BCM2835 && PTP_1588_CLOCK_OPTIONAL) help This driver supports the built-in Ethernet MACs found in the Broadcom BCM7xxx Set Top Box family chipset. diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c index 5fb3af5670ecbbc80b5045866a70780e653ec7d4..3038386a5afd8c4297c801fb9c1642eb6a25f7c5 100644 --- a/drivers/net/ethernet/broadcom/bgmac.c +++ b/drivers/net/ethernet/broadcom/bgmac.c @@ -1568,7 +1568,6 @@ void bgmac_enet_remove(struct bgmac *bgmac) phy_disconnect(bgmac->net_dev->phydev); netif_napi_del(&bgmac->napi); bgmac_dma_free(bgmac); - free_netdev(bgmac->net_dev); } EXPORT_SYMBOL_GPL(bgmac_enet_remove); diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c index 11d15cd036005a7ba2d0b4e6d8ee24a03faf4c47..77d4cb4ad78236c2c447888cf9cbb7612fbcf208 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c @@ -795,16 +795,20 @@ static void bnx2x_vf_enable_traffic(struct bnx2x *bp, struct bnx2x_virtf *vf) static u8 bnx2x_vf_is_pcie_pending(struct bnx2x *bp, u8 abs_vfid) { - struct pci_dev *dev; struct bnx2x_virtf *vf = bnx2x_vf_by_abs_fid(bp, abs_vfid); + struct pci_dev *dev; + bool pending; if (!vf) return false; dev = pci_get_domain_bus_and_slot(vf->domain, vf->bus, vf->devfn); - if (dev) - return bnx2x_is_pcie_pending(dev); - return false; + if (!dev) + return false; + pending = bnx2x_is_pcie_pending(dev); + pci_dev_put(dev); + + return pending; } int bnx2x_vf_flr_clnup_epilog(struct bnx2x *bp, u8 abs_vfid) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 04cf7684f1b0c2630c5984b1f7e9f4d78110aa8e..9f8a6ce4b356f41acf9d55feee4358a134469478 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -9983,17 +9983,12 @@ static int bnxt_try_recover_fw(struct bnxt *bp) return -ENODEV; } -int bnxt_cancel_reservations(struct bnxt *bp, bool fw_reset) +static void bnxt_clear_reservations(struct bnxt *bp, bool fw_reset) { struct bnxt_hw_resc *hw_resc = &bp->hw_resc; - int rc; if (!BNXT_NEW_RM(bp)) - return 0; /* no resource reservations required */ - - rc = bnxt_hwrm_func_resc_qcaps(bp, true); - if (rc) - netdev_err(bp->dev, "resc_qcaps failed\n"); + return; /* no resource reservations required */ hw_resc->resv_cp_rings = 0; hw_resc->resv_stat_ctxs = 0; @@ -10006,6 +10001,20 @@ int bnxt_cancel_reservations(struct bnxt *bp, bool fw_reset) bp->tx_nr_rings = 0; bp->rx_nr_rings = 0; } +} + +int bnxt_cancel_reservations(struct bnxt *bp, bool fw_reset) +{ + int rc; + + if (!BNXT_NEW_RM(bp)) + return 0; /* no resource reservations required */ + + rc = bnxt_hwrm_func_resc_qcaps(bp, true); + if (rc) + netdev_err(bp->dev, "resc_qcaps failed\n"); + + bnxt_clear_reservations(bp, fw_reset); return rc; } @@ -12894,8 +12903,8 @@ static int bnxt_rx_flow_steer(struct net_device *dev, const struct sk_buff *skb, rcu_read_lock(); hlist_for_each_entry_rcu(fltr, head, hash) { if (bnxt_fltr_match(fltr, new_fltr)) { + rc = fltr->sw_id; rcu_read_unlock(); - rc = 0; goto err_free; } } @@ -13913,7 +13922,9 @@ static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev) pci_ers_result_t result = PCI_ERS_RESULT_DISCONNECT; struct net_device *netdev = pci_get_drvdata(pdev); struct bnxt *bp = netdev_priv(netdev); - int err = 0, off; + int retry = 0; + int err = 0; + int off; netdev_info(bp->dev, "PCI Slot Reset\n"); @@ -13941,11 +13952,36 @@ static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev) pci_restore_state(pdev); pci_save_state(pdev); + bnxt_inv_fw_health_reg(bp); + bnxt_try_map_fw_health_reg(bp); + + /* In some PCIe AER scenarios, firmware may take up to + * 10 seconds to become ready in the worst case. + */ + do { + err = bnxt_try_recover_fw(bp); + if (!err) + break; + retry++; + } while (retry < BNXT_FW_SLOT_RESET_RETRY); + + if (err) { + dev_err(&pdev->dev, "Firmware not ready\n"); + goto reset_exit; + } + err = bnxt_hwrm_func_reset(bp); if (!err) result = PCI_ERS_RESULT_RECOVERED; + + bnxt_ulp_irq_stop(bp); + bnxt_clear_int_mode(bp); + err = bnxt_init_int_mode(bp); + bnxt_ulp_irq_restart(bp, err); } +reset_exit: + bnxt_clear_reservations(bp, true); rtnl_unlock(); return result; @@ -14001,8 +14037,16 @@ static struct pci_driver bnxt_pci_driver = { static int __init bnxt_init(void) { + int err; + bnxt_debug_init(); - return pci_register_driver(&bnxt_pci_driver); + err = pci_register_driver(&bnxt_pci_driver); + if (err) { + bnxt_debug_exit(); + return err; + } + + return 0; } static void __exit bnxt_exit(void) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h index b1b17f911300636983455eb11c6f50116c3c583b..d5fa43cfe5248e860d49207d352fad8ea9afa2b4 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h @@ -1621,6 +1621,7 @@ struct bnxt_fw_health { #define BNXT_FW_RETRY 5 #define BNXT_FW_IF_RETRY 10 +#define BNXT_FW_SLOT_RESET_RETRY 4 enum board_idx { BCM57301, diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c index f57e524c7e30b981a17697c875bb73e70038efd5..8cad15c458b396f711276fdaf7ea86be7b8262fa 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c @@ -162,7 +162,7 @@ static int bnxt_set_coalesce(struct net_device *dev, } reset_coalesce: - if (netif_running(dev)) { + if (test_bit(BNXT_STATE_OPEN, &bp->state)) { if (update_stats) { rc = bnxt_close_nic(bp, true, false); if (!rc) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.c index b01d42928a53c5594f5d92cc09cbbb2a050ad6f6..132442f16fe676916a5b55119f17512eb37c0bbc 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_hwrm.c @@ -476,7 +476,8 @@ static int __hwrm_send(struct bnxt *bp, struct bnxt_hwrm_ctx *ctx) memset(ctx->resp, 0, PAGE_SIZE); req_type = le16_to_cpu(ctx->req->req_type); - if (BNXT_NO_FW_ACCESS(bp) && req_type != HWRM_FUNC_RESET) { + if (BNXT_NO_FW_ACCESS(bp) && + (req_type != HWRM_FUNC_RESET && req_type != HWRM_VER_GET)) { netdev_dbg(bp->dev, "hwrm req_type 0x%x skipped, FW channel down\n", req_type); goto exit; diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c index d312bd5949353c6b9fa1a0318a30c2dbcfbd04bb..98793b2ac2c7224634551e8ee41fefb881c9db7b 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c @@ -1794,13 +1794,10 @@ static int liquidio_open(struct net_device *netdev) ifstate_set(lio, LIO_IFSTATE_RUNNING); - if (OCTEON_CN23XX_PF(oct)) { - if (!oct->msix_on) - if (setup_tx_poll_fn(netdev)) - return -1; - } else { - if (setup_tx_poll_fn(netdev)) - return -1; + if (!OCTEON_CN23XX_PF(oct) || !oct->msix_on) { + ret = setup_tx_poll_fn(netdev); + if (ret) + goto err_poll; } netif_tx_start_all_queues(netdev); @@ -1813,7 +1810,7 @@ static int liquidio_open(struct net_device *netdev) /* tell Octeon to start forwarding packets to host */ ret = send_rx_ctrl_cmd(lio, 1); if (ret) - return ret; + goto err_rx_ctrl; /* start periodical statistics fetch */ INIT_DELAYED_WORK(&lio->stats_wk.work, lio_fetch_stats); @@ -1824,6 +1821,27 @@ static int liquidio_open(struct net_device *netdev) dev_info(&oct->pci_dev->dev, "%s interface is opened\n", netdev->name); + return 0; + +err_rx_ctrl: + if (!OCTEON_CN23XX_PF(oct) || !oct->msix_on) + cleanup_tx_poll_fn(netdev); +err_poll: + if (lio->ptp_clock) { + ptp_clock_unregister(lio->ptp_clock); + lio->ptp_clock = NULL; + } + + if (oct->props[lio->ifidx].napi_enabled == 1) { + list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list) + napi_disable(napi); + + oct->props[lio->ifidx].napi_enabled = 0; + + if (OCTEON_CN23XX_PF(oct)) + oct->droq[0]->ops.poll_mode = 0; + } + return ret; } diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c index 2f6484dc186ab14fe0b47e0bd6d01b03e6b56dbf..7eb2ddbe9bad6b3f5586704be0a0ff8474346c20 100644 --- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c +++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c @@ -1436,8 +1436,10 @@ static acpi_status bgx_acpi_match_id(acpi_handle handle, u32 lvl, return AE_OK; } - if (strncmp(string.pointer, bgx_sel, 4)) + if (strncmp(string.pointer, bgx_sel, 4)) { + kfree(string.pointer); return AE_OK; + } acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, 1, bgx_acpi_register_phy, NULL, bgx, NULL); diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c index a52e6b6e2876728431aa752dbe612e605bafcd96..9b84c8d8d30973598972b06929c829fe7fb1e64d 100644 --- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c +++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c @@ -1301,6 +1301,7 @@ static int cxgb_up(struct adapter *adap) if (ret < 0) { CH_ERR(adap, "failed to bind qsets, err %d\n", ret); t3_intr_disable(adap); + quiesce_rx(adap); free_irq_resources(adap); err = ret; goto out; diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c index 54db79f4dcfe0909871784facf7ebebd3f6ebaa6..63b2bd0841305f90870c9f721fea9172a4826e84 100644 --- a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c +++ b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c @@ -858,7 +858,7 @@ static int cxgb4vf_open(struct net_device *dev) */ err = t4vf_update_port_info(pi); if (err < 0) - return err; + goto err_unwind; /* * Note that this interface is up and start everything up ... diff --git a/drivers/net/ethernet/davicom/dm9051.c b/drivers/net/ethernet/davicom/dm9051.c index a523ddda760933af50e5d04beaef816bf9b53d9c..de7105a847479af067c50ba830c74d3fcbf14390 100644 --- a/drivers/net/ethernet/davicom/dm9051.c +++ b/drivers/net/ethernet/davicom/dm9051.c @@ -798,8 +798,10 @@ static int dm9051_loop_rx(struct board_info *db) } ret = dm9051_stop_mrcmd(db); - if (ret) + if (ret) { + dev_kfree_skb(skb); return ret; + } skb->protocol = eth_type_trans(skb, db->ndev); if (db->ndev->features & NETIF_F_RXCSUM) diff --git a/drivers/net/ethernet/engleder/tsnep_main.c b/drivers/net/ethernet/engleder/tsnep_main.c index 48fb391951ddebae381d7efc7b6db9b35eb7449b..13d5ff4e0e0200dba853182bd8dd89be30efcda2 100644 --- a/drivers/net/ethernet/engleder/tsnep_main.c +++ b/drivers/net/ethernet/engleder/tsnep_main.c @@ -542,6 +542,27 @@ static bool tsnep_tx_poll(struct tsnep_tx *tx, int napi_budget) return (budget != 0); } +static bool tsnep_tx_pending(struct tsnep_tx *tx) +{ + unsigned long flags; + struct tsnep_tx_entry *entry; + bool pending = false; + + spin_lock_irqsave(&tx->lock, flags); + + if (tx->read != tx->write) { + entry = &tx->entry[tx->read]; + if ((__le32_to_cpu(entry->desc_wb->properties) & + TSNEP_TX_DESC_OWNER_MASK) == + (entry->properties & TSNEP_TX_DESC_OWNER_MASK)) + pending = true; + } + + spin_unlock_irqrestore(&tx->lock, flags); + + return pending; +} + static int tsnep_tx_open(struct tsnep_adapter *adapter, void __iomem *addr, int queue_index, struct tsnep_tx *tx) { @@ -821,6 +842,19 @@ static int tsnep_rx_poll(struct tsnep_rx *rx, struct napi_struct *napi, return done; } +static bool tsnep_rx_pending(struct tsnep_rx *rx) +{ + struct tsnep_rx_entry *entry; + + entry = &rx->entry[rx->read]; + if ((__le32_to_cpu(entry->desc_wb->properties) & + TSNEP_DESC_OWNER_COUNTER_MASK) == + (entry->properties & TSNEP_DESC_OWNER_COUNTER_MASK)) + return true; + + return false; +} + static int tsnep_rx_open(struct tsnep_adapter *adapter, void __iomem *addr, int queue_index, struct tsnep_rx *rx) { @@ -866,6 +900,17 @@ static void tsnep_rx_close(struct tsnep_rx *rx) tsnep_rx_ring_cleanup(rx); } +static bool tsnep_pending(struct tsnep_queue *queue) +{ + if (queue->tx && tsnep_tx_pending(queue->tx)) + return true; + + if (queue->rx && tsnep_rx_pending(queue->rx)) + return true; + + return false; +} + static int tsnep_poll(struct napi_struct *napi, int budget) { struct tsnep_queue *queue = container_of(napi, struct tsnep_queue, @@ -886,9 +931,19 @@ static int tsnep_poll(struct napi_struct *napi, int budget) if (!complete) return budget; - if (likely(napi_complete_done(napi, done))) + if (likely(napi_complete_done(napi, done))) { tsnep_enable_irq(queue->adapter, queue->irq_mask); + /* reschedule if work is already pending, prevent rotten packets + * which are transmitted or received after polling but before + * interrupt enable + */ + if (tsnep_pending(queue)) { + tsnep_disable_irq(queue->adapter, queue->irq_mask); + napi_schedule(napi); + } + } + return min(done, budget - 1); } diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c index f8c06c3f9464631ee457eb39b3b834c90039bf3b..8671591cb750148adcd1e6284c72a9e00a4796ab 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.c +++ b/drivers/net/ethernet/freescale/enetc/enetc.c @@ -2058,7 +2058,7 @@ static void enetc_setup_txbdr(struct enetc_hw *hw, struct enetc_bdr *tx_ring) /* enable Tx ints by setting pkt thr to 1 */ enetc_txbdr_wr(hw, idx, ENETC_TBICR0, ENETC_TBICR0_ICEN | 0x1); - tbmr = ENETC_TBMR_EN; + tbmr = ENETC_TBMR_EN | ENETC_TBMR_SET_PRIO(tx_ring->prio); if (tx_ring->ndev->features & NETIF_F_HW_VLAN_CTAG_TX) tbmr |= ENETC_TBMR_VIH; @@ -2461,7 +2461,8 @@ int enetc_setup_tc_mqprio(struct net_device *ndev, void *type_data) /* Reset all ring priorities to 0 */ for (i = 0; i < priv->num_tx_rings; i++) { tx_ring = priv->tx_ring[i]; - enetc_set_bdr_prio(hw, tx_ring->index, 0); + tx_ring->prio = 0; + enetc_set_bdr_prio(hw, tx_ring->index, tx_ring->prio); } return 0; @@ -2480,7 +2481,8 @@ int enetc_setup_tc_mqprio(struct net_device *ndev, void *type_data) */ for (i = 0; i < num_tc; i++) { tx_ring = priv->tx_ring[i]; - enetc_set_bdr_prio(hw, tx_ring->index, i); + tx_ring->prio = i; + enetc_set_bdr_prio(hw, tx_ring->index, tx_ring->prio); } /* Reset the number of netdev queues based on the TC count */ diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/ethernet/freescale/enetc/enetc.h index 161930a65f61441f7407ae987ac0b5aaa8daa5d0..c6d8cc15c27010c207892fd7e51bbb1e5f0c3524 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -95,6 +95,7 @@ struct enetc_bdr { void __iomem *rcir; }; u16 index; + u16 prio; int bd_count; /* # of BDs */ int next_to_use; int next_to_clean; diff --git a/drivers/net/ethernet/freescale/enetc/enetc_qos.c b/drivers/net/ethernet/freescale/enetc/enetc_qos.c index a842e1999122ca2f4e34e2a71ce2fbe126b87b3d..fcebb54224c092a9af2012f01af3f27b818fae5a 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc_qos.c +++ b/drivers/net/ethernet/freescale/enetc/enetc_qos.c @@ -137,6 +137,7 @@ int enetc_setup_tc_taprio(struct net_device *ndev, void *type_data) struct tc_taprio_qopt_offload *taprio = type_data; struct enetc_ndev_priv *priv = netdev_priv(ndev); struct enetc_hw *hw = &priv->si->hw; + struct enetc_bdr *tx_ring; int err; int i; @@ -145,16 +146,20 @@ int enetc_setup_tc_taprio(struct net_device *ndev, void *type_data) if (priv->tx_ring[i]->tsd_enable) return -EBUSY; - for (i = 0; i < priv->num_tx_rings; i++) - enetc_set_bdr_prio(hw, priv->tx_ring[i]->index, - taprio->enable ? i : 0); + for (i = 0; i < priv->num_tx_rings; i++) { + tx_ring = priv->tx_ring[i]; + tx_ring->prio = taprio->enable ? i : 0; + enetc_set_bdr_prio(hw, tx_ring->index, tx_ring->prio); + } err = enetc_setup_taprio(ndev, taprio); - - if (err) - for (i = 0; i < priv->num_tx_rings; i++) - enetc_set_bdr_prio(hw, priv->tx_ring[i]->index, - taprio->enable ? 0 : i); + if (err) { + for (i = 0; i < priv->num_tx_rings; i++) { + tx_ring = priv->tx_ring[i]; + tx_ring->prio = taprio->enable ? 0 : i; + enetc_set_bdr_prio(hw, tx_ring->index, tx_ring->prio); + } + } return err; } diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 28ef4d3c1878905d723dac66307a474ad82d67e8..2ca2b61b451f134bd8470a68d3b4989e01fc66bf 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -74,7 +74,7 @@ #include "fec.h" static void set_multicast_list(struct net_device *ndev); -static void fec_enet_itr_coal_init(struct net_device *ndev); +static void fec_enet_itr_coal_set(struct net_device *ndev); #define DRIVER_NAME "fec" @@ -713,7 +713,7 @@ fec_enet_txq_put_data_tso(struct fec_enet_priv_tx_q *txq, struct sk_buff *skb, dev_kfree_skb_any(skb); if (net_ratelimit()) netdev_err(ndev, "Tx DMA memory map failed\n"); - return NETDEV_TX_BUSY; + return NETDEV_TX_OK; } bdp->cbd_datlen = cpu_to_fec16(size); @@ -775,7 +775,7 @@ fec_enet_txq_put_hdr_tso(struct fec_enet_priv_tx_q *txq, dev_kfree_skb_any(skb); if (net_ratelimit()) netdev_err(ndev, "Tx DMA memory map failed\n"); - return NETDEV_TX_BUSY; + return NETDEV_TX_OK; } } @@ -1220,8 +1220,7 @@ fec_restart(struct net_device *ndev) writel(0, fep->hwp + FEC_IMASK); /* Init the interrupt coalescing */ - fec_enet_itr_coal_init(ndev); - + fec_enet_itr_coal_set(ndev); } static int fec_enet_ipc_handle_init(struct fec_enet_private *fep) @@ -2856,19 +2855,6 @@ static int fec_enet_set_coalesce(struct net_device *ndev, return 0; } -static void fec_enet_itr_coal_init(struct net_device *ndev) -{ - struct ethtool_coalesce ec; - - ec.rx_coalesce_usecs = FEC_ITR_ICTT_DEFAULT; - ec.rx_max_coalesced_frames = FEC_ITR_ICFT_DEFAULT; - - ec.tx_coalesce_usecs = FEC_ITR_ICTT_DEFAULT; - ec.tx_max_coalesced_frames = FEC_ITR_ICFT_DEFAULT; - - fec_enet_set_coalesce(ndev, &ec, NULL, NULL); -} - static int fec_enet_get_tunable(struct net_device *netdev, const struct ethtool_tunable *tuna, void *data) @@ -3623,6 +3609,10 @@ static int fec_enet_init(struct net_device *ndev) fep->rx_align = 0x3; fep->tx_align = 0x3; #endif + fep->rx_pkts_itr = FEC_ITR_ICFT_DEFAULT; + fep->tx_pkts_itr = FEC_ITR_ICFT_DEFAULT; + fep->rx_time_itr = FEC_ITR_ICTT_DEFAULT; + fep->tx_time_itr = FEC_ITR_ICTT_DEFAULT; /* Check mask of the streaming and coherent API */ ret = dma_set_mask_and_coherent(&fep->pdev->dev, DMA_BIT_MASK(32)); diff --git a/drivers/net/ethernet/freescale/fman/mac.c b/drivers/net/ethernet/freescale/fman/mac.c index 65df308bad97e71edfcff63691684d0f62fdeae4..13e67f2864be6f2b4c08eafd0e637dbfc283b5bb 100644 --- a/drivers/net/ethernet/freescale/fman/mac.c +++ b/drivers/net/ethernet/freescale/fman/mac.c @@ -487,12 +487,21 @@ static int mac_probe(struct platform_device *_of_dev) return err; } +static int mac_remove(struct platform_device *pdev) +{ + struct mac_device *mac_dev = platform_get_drvdata(pdev); + + platform_device_unregister(mac_dev->priv->eth_dev); + return 0; +} + static struct platform_driver mac_driver = { .driver = { .name = KBUILD_MODNAME, .of_match_table = mac_match, }, .probe = mac_probe, + .remove = mac_remove, }; builtin_platform_driver(mac_driver); diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h index 0179fc288f5fd72118f5e536d76c98e44f380061..17137de9338cf7aacf7fbb480765b91c2b27cd2f 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h +++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h @@ -819,7 +819,6 @@ struct hnae3_knic_private_info { const struct hnae3_dcb_ops *dcb_ops; u16 int_rl_setting; - enum pkt_hash_types rss_type; void __iomem *io_base; }; diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.c b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.c index e23729ac3bb855d60aa7029cef44637b651daa9d..ae2736549526b1511d9ad73aa6a5376274a025f3 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.c @@ -191,23 +191,6 @@ u32 hclge_comm_get_rss_key_size(struct hnae3_handle *handle) return HCLGE_COMM_RSS_KEY_SIZE; } -void hclge_comm_get_rss_type(struct hnae3_handle *nic, - struct hclge_comm_rss_tuple_cfg *rss_tuple_sets) -{ - if (rss_tuple_sets->ipv4_tcp_en || - rss_tuple_sets->ipv4_udp_en || - rss_tuple_sets->ipv4_sctp_en || - rss_tuple_sets->ipv6_tcp_en || - rss_tuple_sets->ipv6_udp_en || - rss_tuple_sets->ipv6_sctp_en) - nic->kinfo.rss_type = PKT_HASH_TYPE_L4; - else if (rss_tuple_sets->ipv4_fragment_en || - rss_tuple_sets->ipv6_fragment_en) - nic->kinfo.rss_type = PKT_HASH_TYPE_L3; - else - nic->kinfo.rss_type = PKT_HASH_TYPE_NONE; -} - int hclge_comm_parse_rss_hfunc(struct hclge_comm_rss_cfg *rss_cfg, const u8 hfunc, u8 *hash_algo) { @@ -344,9 +327,6 @@ int hclge_comm_set_rss_input_tuple(struct hnae3_handle *nic, req->ipv6_sctp_en = rss_cfg->rss_tuple_sets.ipv6_sctp_en; req->ipv6_fragment_en = rss_cfg->rss_tuple_sets.ipv6_fragment_en; - if (is_pf) - hclge_comm_get_rss_type(nic, &rss_cfg->rss_tuple_sets); - ret = hclge_comm_cmd_send(hw, &desc, 1); if (ret) dev_err(&hw->cmq.csq.pdev->dev, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.h b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.h index 946d166a452db20bde87d504dadbc407296b1475..92af3d2980d3cb7145bc44a6d517c435b3d2ff93 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.h @@ -95,8 +95,6 @@ struct hclge_comm_rss_tc_mode_cmd { }; u32 hclge_comm_get_rss_key_size(struct hnae3_handle *handle); -void hclge_comm_get_rss_type(struct hnae3_handle *nic, - struct hclge_comm_rss_tuple_cfg *rss_tuple_sets); void hclge_comm_rss_indir_init_cfg(struct hnae3_ae_dev *ae_dev, struct hclge_comm_rss_cfg *rss_cfg); int hclge_comm_get_rss_tuple(struct hclge_comm_rss_cfg *rss_cfg, int flow_type, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c index 4cb2421e71a755026a45d3ec01743f673a4adce9..028577943ec577ea026223837674aec8a0a9c816 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c @@ -105,26 +105,28 @@ static const struct pci_device_id hns3_pci_tbl[] = { }; MODULE_DEVICE_TABLE(pci, hns3_pci_tbl); -#define HNS3_RX_PTYPE_ENTRY(ptype, l, s, t) \ +#define HNS3_RX_PTYPE_ENTRY(ptype, l, s, t, h) \ { ptype, \ l, \ CHECKSUM_##s, \ HNS3_L3_TYPE_##t, \ - 1 } + 1, \ + h} #define HNS3_RX_PTYPE_UNUSED_ENTRY(ptype) \ - { ptype, 0, CHECKSUM_NONE, HNS3_L3_TYPE_PARSE_FAIL, 0 } + { ptype, 0, CHECKSUM_NONE, HNS3_L3_TYPE_PARSE_FAIL, 0, \ + PKT_HASH_TYPE_NONE } static const struct hns3_rx_ptype hns3_rx_ptype_tbl[] = { HNS3_RX_PTYPE_UNUSED_ENTRY(0), - HNS3_RX_PTYPE_ENTRY(1, 0, COMPLETE, ARP), - HNS3_RX_PTYPE_ENTRY(2, 0, COMPLETE, RARP), - HNS3_RX_PTYPE_ENTRY(3, 0, COMPLETE, LLDP), - HNS3_RX_PTYPE_ENTRY(4, 0, COMPLETE, PARSE_FAIL), - HNS3_RX_PTYPE_ENTRY(5, 0, COMPLETE, PARSE_FAIL), - HNS3_RX_PTYPE_ENTRY(6, 0, COMPLETE, PARSE_FAIL), - HNS3_RX_PTYPE_ENTRY(7, 0, COMPLETE, CNM), - HNS3_RX_PTYPE_ENTRY(8, 0, NONE, PARSE_FAIL), + HNS3_RX_PTYPE_ENTRY(1, 0, COMPLETE, ARP, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(2, 0, COMPLETE, RARP, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(3, 0, COMPLETE, LLDP, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(4, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(5, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(6, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(7, 0, COMPLETE, CNM, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(8, 0, NONE, PARSE_FAIL, PKT_HASH_TYPE_NONE), HNS3_RX_PTYPE_UNUSED_ENTRY(9), HNS3_RX_PTYPE_UNUSED_ENTRY(10), HNS3_RX_PTYPE_UNUSED_ENTRY(11), @@ -132,36 +134,36 @@ static const struct hns3_rx_ptype hns3_rx_ptype_tbl[] = { HNS3_RX_PTYPE_UNUSED_ENTRY(13), HNS3_RX_PTYPE_UNUSED_ENTRY(14), HNS3_RX_PTYPE_UNUSED_ENTRY(15), - HNS3_RX_PTYPE_ENTRY(16, 0, COMPLETE, PARSE_FAIL), - HNS3_RX_PTYPE_ENTRY(17, 0, COMPLETE, IPV4), - HNS3_RX_PTYPE_ENTRY(18, 0, COMPLETE, IPV4), - HNS3_RX_PTYPE_ENTRY(19, 0, UNNECESSARY, IPV4), - HNS3_RX_PTYPE_ENTRY(20, 0, UNNECESSARY, IPV4), - HNS3_RX_PTYPE_ENTRY(21, 0, NONE, IPV4), - HNS3_RX_PTYPE_ENTRY(22, 0, UNNECESSARY, IPV4), - HNS3_RX_PTYPE_ENTRY(23, 0, NONE, IPV4), - HNS3_RX_PTYPE_ENTRY(24, 0, NONE, IPV4), - HNS3_RX_PTYPE_ENTRY(25, 0, UNNECESSARY, IPV4), + HNS3_RX_PTYPE_ENTRY(16, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(17, 0, COMPLETE, IPV4, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(18, 0, COMPLETE, IPV4, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(19, 0, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(20, 0, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(21, 0, NONE, IPV4, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(22, 0, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(23, 0, NONE, IPV4, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(24, 0, NONE, IPV4, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(25, 0, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4), HNS3_RX_PTYPE_UNUSED_ENTRY(26), HNS3_RX_PTYPE_UNUSED_ENTRY(27), HNS3_RX_PTYPE_UNUSED_ENTRY(28), - HNS3_RX_PTYPE_ENTRY(29, 0, COMPLETE, PARSE_FAIL), - HNS3_RX_PTYPE_ENTRY(30, 0, COMPLETE, PARSE_FAIL), - HNS3_RX_PTYPE_ENTRY(31, 0, COMPLETE, IPV4), - HNS3_RX_PTYPE_ENTRY(32, 0, COMPLETE, IPV4), - HNS3_RX_PTYPE_ENTRY(33, 1, UNNECESSARY, IPV4), - HNS3_RX_PTYPE_ENTRY(34, 1, UNNECESSARY, IPV4), - HNS3_RX_PTYPE_ENTRY(35, 1, UNNECESSARY, IPV4), - HNS3_RX_PTYPE_ENTRY(36, 0, COMPLETE, IPV4), - HNS3_RX_PTYPE_ENTRY(37, 0, COMPLETE, IPV4), + HNS3_RX_PTYPE_ENTRY(29, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(30, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(31, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(32, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(33, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(34, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(35, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(36, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(37, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3), HNS3_RX_PTYPE_UNUSED_ENTRY(38), - HNS3_RX_PTYPE_ENTRY(39, 0, COMPLETE, IPV6), - HNS3_RX_PTYPE_ENTRY(40, 0, COMPLETE, IPV6), - HNS3_RX_PTYPE_ENTRY(41, 1, UNNECESSARY, IPV6), - HNS3_RX_PTYPE_ENTRY(42, 1, UNNECESSARY, IPV6), - HNS3_RX_PTYPE_ENTRY(43, 1, UNNECESSARY, IPV6), - HNS3_RX_PTYPE_ENTRY(44, 0, COMPLETE, IPV6), - HNS3_RX_PTYPE_ENTRY(45, 0, COMPLETE, IPV6), + HNS3_RX_PTYPE_ENTRY(39, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(40, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(41, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(42, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(43, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(44, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(45, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3), HNS3_RX_PTYPE_UNUSED_ENTRY(46), HNS3_RX_PTYPE_UNUSED_ENTRY(47), HNS3_RX_PTYPE_UNUSED_ENTRY(48), @@ -227,35 +229,35 @@ static const struct hns3_rx_ptype hns3_rx_ptype_tbl[] = { HNS3_RX_PTYPE_UNUSED_ENTRY(108), HNS3_RX_PTYPE_UNUSED_ENTRY(109), HNS3_RX_PTYPE_UNUSED_ENTRY(110), - HNS3_RX_PTYPE_ENTRY(111, 0, COMPLETE, IPV6), - HNS3_RX_PTYPE_ENTRY(112, 0, COMPLETE, IPV6), - HNS3_RX_PTYPE_ENTRY(113, 0, UNNECESSARY, IPV6), - HNS3_RX_PTYPE_ENTRY(114, 0, UNNECESSARY, IPV6), - HNS3_RX_PTYPE_ENTRY(115, 0, NONE, IPV6), - HNS3_RX_PTYPE_ENTRY(116, 0, UNNECESSARY, IPV6), - HNS3_RX_PTYPE_ENTRY(117, 0, NONE, IPV6), - HNS3_RX_PTYPE_ENTRY(118, 0, NONE, IPV6), - HNS3_RX_PTYPE_ENTRY(119, 0, UNNECESSARY, IPV6), + HNS3_RX_PTYPE_ENTRY(111, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(112, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(113, 0, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(114, 0, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(115, 0, NONE, IPV6, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(116, 0, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(117, 0, NONE, IPV6, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(118, 0, NONE, IPV6, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(119, 0, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4), HNS3_RX_PTYPE_UNUSED_ENTRY(120), HNS3_RX_PTYPE_UNUSED_ENTRY(121), HNS3_RX_PTYPE_UNUSED_ENTRY(122), - HNS3_RX_PTYPE_ENTRY(123, 0, COMPLETE, PARSE_FAIL), - HNS3_RX_PTYPE_ENTRY(124, 0, COMPLETE, PARSE_FAIL), - HNS3_RX_PTYPE_ENTRY(125, 0, COMPLETE, IPV4), - HNS3_RX_PTYPE_ENTRY(126, 0, COMPLETE, IPV4), - HNS3_RX_PTYPE_ENTRY(127, 1, UNNECESSARY, IPV4), - HNS3_RX_PTYPE_ENTRY(128, 1, UNNECESSARY, IPV4), - HNS3_RX_PTYPE_ENTRY(129, 1, UNNECESSARY, IPV4), - HNS3_RX_PTYPE_ENTRY(130, 0, COMPLETE, IPV4), - HNS3_RX_PTYPE_ENTRY(131, 0, COMPLETE, IPV4), + HNS3_RX_PTYPE_ENTRY(123, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(124, 0, COMPLETE, PARSE_FAIL, PKT_HASH_TYPE_NONE), + HNS3_RX_PTYPE_ENTRY(125, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(126, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(127, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(128, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(129, 1, UNNECESSARY, IPV4, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(130, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(131, 0, COMPLETE, IPV4, PKT_HASH_TYPE_L3), HNS3_RX_PTYPE_UNUSED_ENTRY(132), - HNS3_RX_PTYPE_ENTRY(133, 0, COMPLETE, IPV6), - HNS3_RX_PTYPE_ENTRY(134, 0, COMPLETE, IPV6), - HNS3_RX_PTYPE_ENTRY(135, 1, UNNECESSARY, IPV6), - HNS3_RX_PTYPE_ENTRY(136, 1, UNNECESSARY, IPV6), - HNS3_RX_PTYPE_ENTRY(137, 1, UNNECESSARY, IPV6), - HNS3_RX_PTYPE_ENTRY(138, 0, COMPLETE, IPV6), - HNS3_RX_PTYPE_ENTRY(139, 0, COMPLETE, IPV6), + HNS3_RX_PTYPE_ENTRY(133, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(134, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(135, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(136, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(137, 1, UNNECESSARY, IPV6, PKT_HASH_TYPE_L4), + HNS3_RX_PTYPE_ENTRY(138, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3), + HNS3_RX_PTYPE_ENTRY(139, 0, COMPLETE, IPV6, PKT_HASH_TYPE_L3), HNS3_RX_PTYPE_UNUSED_ENTRY(140), HNS3_RX_PTYPE_UNUSED_ENTRY(141), HNS3_RX_PTYPE_UNUSED_ENTRY(142), @@ -3776,8 +3778,8 @@ static void hns3_nic_reuse_page(struct sk_buff *skb, int i, desc_cb->reuse_flag = 1; } else if (frag_size <= ring->rx_copybreak) { ret = hns3_handle_rx_copybreak(skb, i, ring, pull_len, desc_cb); - if (ret) - goto out; + if (!ret) + return; } out: @@ -4171,15 +4173,35 @@ static int hns3_set_gro_and_checksum(struct hns3_enet_ring *ring, } static void hns3_set_rx_skb_rss_type(struct hns3_enet_ring *ring, - struct sk_buff *skb, u32 rss_hash) + struct sk_buff *skb, u32 rss_hash, + u32 l234info, u32 ol_info) { - struct hnae3_handle *handle = ring->tqp->handle; - enum pkt_hash_types rss_type; + enum pkt_hash_types rss_type = PKT_HASH_TYPE_NONE; + struct net_device *netdev = ring_to_netdev(ring); + struct hns3_nic_priv *priv = netdev_priv(netdev); - if (rss_hash) - rss_type = handle->kinfo.rss_type; - else - rss_type = PKT_HASH_TYPE_NONE; + if (test_bit(HNS3_NIC_STATE_RXD_ADV_LAYOUT_ENABLE, &priv->state)) { + u32 ptype = hnae3_get_field(ol_info, HNS3_RXD_PTYPE_M, + HNS3_RXD_PTYPE_S); + + rss_type = hns3_rx_ptype_tbl[ptype].hash_type; + } else { + int l3_type = hnae3_get_field(l234info, HNS3_RXD_L3ID_M, + HNS3_RXD_L3ID_S); + int l4_type = hnae3_get_field(l234info, HNS3_RXD_L4ID_M, + HNS3_RXD_L4ID_S); + + if (l3_type == HNS3_L3_TYPE_IPV4 || + l3_type == HNS3_L3_TYPE_IPV6) { + if (l4_type == HNS3_L4_TYPE_UDP || + l4_type == HNS3_L4_TYPE_TCP || + l4_type == HNS3_L4_TYPE_SCTP) + rss_type = PKT_HASH_TYPE_L4; + else if (l4_type == HNS3_L4_TYPE_IGMP || + l4_type == HNS3_L4_TYPE_ICMP) + rss_type = PKT_HASH_TYPE_L3; + } + } skb_set_hash(skb, rss_hash, rss_type); } @@ -4282,7 +4304,8 @@ static int hns3_handle_bdinfo(struct hns3_enet_ring *ring, struct sk_buff *skb) ring->tqp_vector->rx_group.total_bytes += len; - hns3_set_rx_skb_rss_type(ring, skb, le32_to_cpu(desc->rx.rss_hash)); + hns3_set_rx_skb_rss_type(ring, skb, le32_to_cpu(desc->rx.rss_hash), + l234info, ol_info); return 0; } diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h index 133a054af6b7c73e6a312b9f66180503507b8d5b..294a14b4fdefb5e844bac2bdf30c9c3f5967188e 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.h @@ -404,6 +404,7 @@ struct hns3_rx_ptype { u32 ip_summed : 2; u32 l3_type : 4; u32 valid : 1; + u32 hash_type: 3; }; struct ring_stats { diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c index 6962a9d69cf8da937513b9460a4da07dd984760a..4e54f91f7a6c1575a5a518c2232dcf394ce8c6f8 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c @@ -3443,6 +3443,7 @@ static int hclge_update_tp_port_info(struct hclge_dev *hdev) hdev->hw.mac.autoneg = cmd.base.autoneg; hdev->hw.mac.speed = cmd.base.speed; hdev->hw.mac.duplex = cmd.base.duplex; + linkmode_copy(hdev->hw.mac.advertising, cmd.link_modes.advertising); return 0; } @@ -4859,7 +4860,6 @@ static int hclge_set_rss_tuple(struct hnae3_handle *handle, return ret; } - hclge_comm_get_rss_type(&vport->nic, &hdev->rss_cfg.rss_tuple_sets); return 0; } @@ -11587,9 +11587,12 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev) if (ret) goto err_msi_irq_uninit; - if (hdev->hw.mac.media_type == HNAE3_MEDIA_TYPE_COPPER && - !hnae3_dev_phy_imp_supported(hdev)) { - ret = hclge_mac_mdio_config(hdev); + if (hdev->hw.mac.media_type == HNAE3_MEDIA_TYPE_COPPER) { + if (hnae3_dev_phy_imp_supported(hdev)) + ret = hclge_update_tp_port_info(hdev); + else + ret = hclge_mac_mdio_config(hdev); + if (ret) goto err_msi_irq_uninit; } @@ -12984,14 +12987,16 @@ static void hclge_clean_vport_config(struct hnae3_ae_dev *ae_dev, int num_vfs) static int hclge_get_dscp_prio(struct hnae3_handle *h, u8 dscp, u8 *tc_mode, u8 *priority) { + struct hclge_vport *vport = hclge_get_vport(h); + if (dscp >= HNAE3_MAX_DSCP) return -EINVAL; if (tc_mode) - *tc_mode = h->kinfo.tc_map_mode; + *tc_mode = vport->nic.kinfo.tc_map_mode; if (priority) - *priority = h->kinfo.dscp_prio[dscp] == HNAE3_PRIO_ID_INVALID ? 0 : - h->kinfo.dscp_prio[dscp]; + *priority = vport->nic.kinfo.dscp_prio[dscp] == HNAE3_PRIO_ID_INVALID ? 0 : + vport->nic.kinfo.dscp_prio[dscp]; return 0; } diff --git a/drivers/net/ethernet/huawei/hinic/hinic_main.c b/drivers/net/ethernet/huawei/hinic/hinic_main.c index e1f54a2f28b2214a56627fff67030a791b20a250..2d6906aba2a250064150108756243fa9669d7b76 100644 --- a/drivers/net/ethernet/huawei/hinic/hinic_main.c +++ b/drivers/net/ethernet/huawei/hinic/hinic_main.c @@ -1474,8 +1474,15 @@ static struct pci_driver hinic_driver = { static int __init hinic_module_init(void) { + int ret; + hinic_dbg_register_debugfs(HINIC_DRV_NAME); - return pci_register_driver(&hinic_driver); + + ret = pci_register_driver(&hinic_driver); + if (ret) + hinic_dbg_unregister_debugfs(); + + return ret; } static void __exit hinic_module_exit(void) diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c index 3b14dc93f59dd06a5e24240d0434bd6bd18733fe..5b96cd94dcd24770916a49c5078f2146dda314dc 100644 --- a/drivers/net/ethernet/ibm/ibmveth.c +++ b/drivers/net/ethernet/ibm/ibmveth.c @@ -1757,7 +1757,8 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id) kobject_uevent(kobj, KOBJ_ADD); } - rc = netif_set_real_num_tx_queues(netdev, ibmveth_real_max_tx_queues()); + rc = netif_set_real_num_tx_queues(netdev, min(num_online_cpus(), + IBMVETH_DEFAULT_QUEUES)); if (rc) { netdev_dbg(netdev, "failed to set number of tx queues rc=%d\n", rc); diff --git a/drivers/net/ethernet/ibm/ibmveth.h b/drivers/net/ethernet/ibm/ibmveth.h index daf6f615c03f80d92fbcdeb5d3b01b9fabe981c3..115d4c45aa77dc1b49e7c9b47b316a2fb051dedb 100644 --- a/drivers/net/ethernet/ibm/ibmveth.h +++ b/drivers/net/ethernet/ibm/ibmveth.h @@ -100,6 +100,7 @@ static inline long h_illan_attributes(unsigned long unit_address, #define IBMVETH_MAX_BUF_SIZE (1024 * 128) #define IBMVETH_MAX_TX_BUF_SIZE (1024 * 64) #define IBMVETH_MAX_QUEUES 16U +#define IBMVETH_DEFAULT_QUEUES 8U static int pool_size[] = { 512, 1024 * 2, 1024 * 16, 1024 * 32, 1024 * 64 }; static int pool_count[] = { 256, 512, 256, 256, 256 }; diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 65dbfbec487a34b6af65538434c0d429e9fade46..9282381a438fe97594c3025be7fa618205f401b6 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c @@ -3007,19 +3007,19 @@ static void __ibmvnic_reset(struct work_struct *work) rwi = get_next_rwi(adapter); /* - * If there is another reset queued, free the previous rwi - * and process the new reset even if previous reset failed - * (the previous reset could have failed because of a fail - * over for instance, so process the fail over). - * * If there are no resets queued and the previous reset failed, * the adapter would be in an undefined state. So retry the * previous reset as a hard reset. + * + * Else, free the previous rwi and, if there is another reset + * queued, process the new reset even if previous reset failed + * (the previous reset could have failed because of a fail + * over for instance, so process the fail over). */ - if (rwi) - kfree(tmprwi); - else if (rc) + if (!rwi && rc) rwi = tmprwi; + else + kfree(tmprwi); if (rwi && (rwi->reset_reason == VNIC_RESET_FAILOVER || rwi->reset_reason == VNIC_RESET_MOBILITY || rc)) diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c index 560d1d442232660d585d6c6d34e9d6dc307e162a..d3fdc290937fe836acaa4abdca2a1ecf377e7476 100644 --- a/drivers/net/ethernet/intel/e100.c +++ b/drivers/net/ethernet/intel/e100.c @@ -1741,11 +1741,8 @@ static int e100_xmit_prepare(struct nic *nic, struct cb *cb, dma_addr = dma_map_single(&nic->pdev->dev, skb->data, skb->len, DMA_TO_DEVICE); /* If we can't map the skb, have the upper layer try later */ - if (dma_mapping_error(&nic->pdev->dev, dma_addr)) { - dev_kfree_skb_any(skb); - skb = NULL; + if (dma_mapping_error(&nic->pdev->dev, dma_addr)) return -ENOMEM; - } /* * Use the last 4 bytes of the SKB payload packet as the CRC, used for diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_main.c b/drivers/net/ethernet/intel/fm10k/fm10k_main.c index 4a6630586ec98aa51d7b8870cc861ea1d0a97d65..fc373472e4e1820ac7eee03de9dd323d774221a0 100644 --- a/drivers/net/ethernet/intel/fm10k/fm10k_main.c +++ b/drivers/net/ethernet/intel/fm10k/fm10k_main.c @@ -32,6 +32,8 @@ struct workqueue_struct *fm10k_workqueue; **/ static int __init fm10k_init_module(void) { + int ret; + pr_info("%s\n", fm10k_driver_string); pr_info("%s\n", fm10k_copyright); @@ -43,7 +45,13 @@ static int __init fm10k_init_module(void) fm10k_dbg_init(); - return fm10k_register_pci_driver(); + ret = fm10k_register_pci_driver(); + if (ret) { + fm10k_dbg_exit(); + destroy_workqueue(fm10k_workqueue); + } + + return ret; } module_init(fm10k_init_module); diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index b5dcd15ced3644a5441299bfd30b4f9a66ef7f71..b3cb587a20326bb4bba6b182112684ec764122e2 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c @@ -16644,6 +16644,8 @@ static struct pci_driver i40e_driver = { **/ static int __init i40e_init_module(void) { + int err; + pr_info("%s: %s\n", i40e_driver_name, i40e_driver_string); pr_info("%s: %s\n", i40e_driver_name, i40e_copyright); @@ -16661,7 +16663,14 @@ static int __init i40e_init_module(void) } i40e_dbg_init(); - return pci_register_driver(&i40e_driver); + err = pci_register_driver(&i40e_driver); + if (err) { + destroy_workqueue(i40e_wq); + i40e_dbg_exit(); + return err; + } + + return 0; } module_init(i40e_init_module); diff --git a/drivers/net/ethernet/intel/iavf/iavf.h b/drivers/net/ethernet/intel/iavf/iavf.h index 3f6187c164240f3b046f4329b2c8866c7af996e1..0d1bab4ac1b075858cd5fc3f4a06b966766284a7 100644 --- a/drivers/net/ethernet/intel/iavf/iavf.h +++ b/drivers/net/ethernet/intel/iavf/iavf.h @@ -298,7 +298,6 @@ struct iavf_adapter { #define IAVF_FLAG_QUEUES_DISABLED BIT(17) #define IAVF_FLAG_SETUP_NETDEV_FEATURES BIT(18) #define IAVF_FLAG_REINIT_MSIX_NEEDED BIT(20) -#define IAVF_FLAG_INITIAL_MAC_SET BIT(23) /* duplicates for common code */ #define IAVF_FLAG_DCB_ENABLED 0 /* flags for admin queue service task */ diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c index 3fc572341781b0331649ebea83e11c70890bddf9..f71e132ede094fe335dab89789bfd3ce4d83d2dd 100644 --- a/drivers/net/ethernet/intel/iavf/iavf_main.c +++ b/drivers/net/ethernet/intel/iavf/iavf_main.c @@ -1087,12 +1087,6 @@ static int iavf_set_mac(struct net_device *netdev, void *p) if (ret) return ret; - /* If this is an initial set MAC during VF spawn do not wait */ - if (adapter->flags & IAVF_FLAG_INITIAL_MAC_SET) { - adapter->flags &= ~IAVF_FLAG_INITIAL_MAC_SET; - return 0; - } - ret = wait_event_interruptible_timeout(adapter->vc_waitqueue, iavf_is_mac_set_handled(netdev, addr->sa_data), msecs_to_jiffies(2500)); @@ -2605,8 +2599,6 @@ static void iavf_init_config_adapter(struct iavf_adapter *adapter) ether_addr_copy(netdev->perm_addr, adapter->hw.mac.addr); } - adapter->flags |= IAVF_FLAG_INITIAL_MAC_SET; - adapter->tx_desc_count = IAVF_DEFAULT_TXD; adapter->rx_desc_count = IAVF_DEFAULT_RXD; err = iavf_init_interrupt_scheme(adapter); @@ -2921,7 +2913,6 @@ static void iavf_disable_vf(struct iavf_adapter *adapter) iavf_free_queues(adapter); memset(adapter->vf_res, 0, IAVF_VIRTCHNL_VF_RESOURCE_SIZE); iavf_shutdown_adminq(&adapter->hw); - adapter->netdev->flags &= ~IFF_UP; adapter->flags &= ~IAVF_FLAG_RESET_PENDING; iavf_change_state(adapter, __IAVF_DOWN); wake_up(&adapter->down_waitqueue); @@ -3021,6 +3012,11 @@ static void iavf_reset_task(struct work_struct *work) iavf_disable_vf(adapter); mutex_unlock(&adapter->client_lock); mutex_unlock(&adapter->crit_lock); + if (netif_running(netdev)) { + rtnl_lock(); + dev_close(netdev); + rtnl_unlock(); + } return; /* Do not attempt to reinit. It's dead, Jim. */ } @@ -3033,6 +3029,7 @@ static void iavf_reset_task(struct work_struct *work) if (running) { netif_carrier_off(netdev); + netif_tx_stop_all_queues(netdev); adapter->link_up = false; iavf_napi_disable_all(adapter); } @@ -3172,6 +3169,16 @@ static void iavf_reset_task(struct work_struct *work) mutex_unlock(&adapter->client_lock); mutex_unlock(&adapter->crit_lock); + + if (netif_running(netdev)) { + /* Close device to ensure that Tx queues will not be started + * during netif_device_attach() at the end of the reset task. + */ + rtnl_lock(); + dev_close(netdev); + rtnl_unlock(); + } + dev_err(&adapter->pdev->dev, "failed to allocate resources during reinit\n"); reset_finish: rtnl_lock(); @@ -5035,23 +5042,21 @@ static int __maybe_unused iavf_resume(struct device *dev_d) static void iavf_remove(struct pci_dev *pdev) { struct iavf_adapter *adapter = iavf_pdev_to_adapter(pdev); - struct net_device *netdev = adapter->netdev; struct iavf_fdir_fltr *fdir, *fdirtmp; struct iavf_vlan_filter *vlf, *vlftmp; + struct iavf_cloud_filter *cf, *cftmp; struct iavf_adv_rss *rss, *rsstmp; struct iavf_mac_filter *f, *ftmp; - struct iavf_cloud_filter *cf, *cftmp; - struct iavf_hw *hw = &adapter->hw; + struct net_device *netdev; + struct iavf_hw *hw; int err; - /* When reboot/shutdown is in progress no need to do anything - * as the adapter is already REMOVE state that was set during - * iavf_shutdown() callback. - */ - if (adapter->state == __IAVF_REMOVE) + netdev = adapter->netdev; + hw = &adapter->hw; + + if (test_and_set_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section)) return; - set_bit(__IAVF_IN_REMOVE_TASK, &adapter->crit_section); /* Wait until port initialization is complete. * There are flows where register/unregister netdev may race. */ @@ -5191,6 +5196,8 @@ static struct pci_driver iavf_driver = { **/ static int __init iavf_init_module(void) { + int ret; + pr_info("iavf: %s\n", iavf_driver_string); pr_info("%s\n", iavf_copyright); @@ -5201,7 +5208,12 @@ static int __init iavf_init_module(void) pr_err("%s: Failed to create workqueue\n", iavf_driver_name); return -ENOMEM; } - return pci_register_driver(&iavf_driver); + + ret = pci_register_driver(&iavf_driver); + if (ret) + destroy_workqueue(iavf_wq); + + return ret; } module_init(iavf_init_module); diff --git a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c index 5a9e6563923ebd7de870e20faf58df474a961deb..24a701fd140e9dff7d50c85536cac832b51c36a0 100644 --- a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c +++ b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c @@ -2438,6 +2438,8 @@ void iavf_virtchnl_completion(struct iavf_adapter *adapter, list_for_each_entry(f, &adapter->vlan_filter_list, list) { if (f->is_new_vlan) { f->is_new_vlan = false; + if (!f->vlan.vid) + continue; if (f->vlan.tpid == ETH_P_8021Q) set_bit(f->vlan.vid, adapter->vsi.active_cvlans); diff --git a/drivers/net/ethernet/intel/ice/ice_base.c b/drivers/net/ethernet/intel/ice/ice_base.c index 9e36f01dfa4fb70c2d3ec7e3e0876b2bf3deadeb..e864634d66bc6c2862430ef150b14b4ae9601673 100644 --- a/drivers/net/ethernet/intel/ice/ice_base.c +++ b/drivers/net/ethernet/intel/ice/ice_base.c @@ -958,7 +958,7 @@ ice_vsi_stop_tx_ring(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src, * associated to the queue to schedule NAPI handler */ q_vector = ring->q_vector; - if (q_vector) + if (q_vector && !(vsi->vf && ice_is_vf_disabled(vsi->vf))) ice_trigger_sw_intr(hw, q_vector); status = ice_dis_vsi_txq(vsi->port_info, txq_meta->vsi_idx, diff --git a/drivers/net/ethernet/intel/ice/ice_lib.c b/drivers/net/ethernet/intel/ice/ice_lib.c index 938ba8c215cb07f85cb5bc840e3950128ab91983..7276badfa19ea5d88d9e0ff02f5dc6348cde0927 100644 --- a/drivers/net/ethernet/intel/ice/ice_lib.c +++ b/drivers/net/ethernet/intel/ice/ice_lib.c @@ -2239,6 +2239,31 @@ int ice_vsi_stop_xdp_tx_rings(struct ice_vsi *vsi) return ice_vsi_stop_tx_rings(vsi, ICE_NO_RESET, 0, vsi->xdp_rings, vsi->num_xdp_txq); } +/** + * ice_vsi_is_rx_queue_active + * @vsi: the VSI being configured + * + * Return true if at least one queue is active. + */ +bool ice_vsi_is_rx_queue_active(struct ice_vsi *vsi) +{ + struct ice_pf *pf = vsi->back; + struct ice_hw *hw = &pf->hw; + int i; + + ice_for_each_rxq(vsi, i) { + u32 rx_reg; + int pf_q; + + pf_q = vsi->rxq_map[i]; + rx_reg = rd32(hw, QRX_CTRL(pf_q)); + if (rx_reg & QRX_CTRL_QENA_STAT_M) + return true; + } + + return false; +} + /** * ice_vsi_is_vlan_pruning_ena - check if VLAN pruning is enabled or not * @vsi: VSI to check whether or not VLAN pruning is enabled. diff --git a/drivers/net/ethernet/intel/ice/ice_lib.h b/drivers/net/ethernet/intel/ice/ice_lib.h index ec4bf0c89857c6c1ea7c5a81c135d53b2f065b6b..dcdf69a693e9172688f3a38ffa40263a1b2ea23e 100644 --- a/drivers/net/ethernet/intel/ice/ice_lib.h +++ b/drivers/net/ethernet/intel/ice/ice_lib.h @@ -129,4 +129,5 @@ u16 ice_vsi_num_non_zero_vlans(struct ice_vsi *vsi); bool ice_is_feature_supported(struct ice_pf *pf, enum ice_feature f); void ice_clear_feature_support(struct ice_pf *pf, enum ice_feature f); void ice_init_feature_support(struct ice_pf *pf); +bool ice_vsi_is_rx_queue_active(struct ice_vsi *vsi); #endif /* !_ICE_LIB_H_ */ diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c index 0f6718719453dd4d00e31db51b4762cbf991da39..ca2898467dcb5e58ecff57202a0eebd013e9fdd8 100644 --- a/drivers/net/ethernet/intel/ice/ice_main.c +++ b/drivers/net/ethernet/intel/ice/ice_main.c @@ -3145,15 +3145,15 @@ static irqreturn_t ice_misc_intr(int __always_unused irq, void *data) */ static irqreturn_t ice_misc_intr_thread_fn(int __always_unused irq, void *data) { - irqreturn_t ret = IRQ_HANDLED; struct ice_pf *pf = data; - bool irq_handled; - irq_handled = ice_ptp_process_ts(pf); - if (!irq_handled) - ret = IRQ_WAKE_THREAD; + if (ice_is_reset_in_progress(pf->state)) + return IRQ_HANDLED; - return ret; + while (!ice_ptp_process_ts(pf)) + usleep_range(50, 100); + + return IRQ_HANDLED; } /** diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c index 011b727ab1903f5b183aaa9fd0daeb5eaa86a4f1..0f668468d1414aeb22ab5cc5f7893bb4163ba0ef 100644 --- a/drivers/net/ethernet/intel/ice/ice_ptp.c +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c @@ -614,11 +614,14 @@ static u64 ice_ptp_extend_40b_ts(struct ice_pf *pf, u64 in_tstamp) * 2) extend the 40b timestamp value to get a 64bit timestamp * 3) send that timestamp to the stack * - * After looping, if we still have waiting SKBs, return true. This may cause us - * effectively poll even when not strictly necessary. We do this because it's - * possible a new timestamp was requested around the same time as the interrupt. - * In some cases hardware might not interrupt us again when the timestamp is - * captured. + * Returns true if all timestamps were handled, and false if any slots remain + * without a timestamp. + * + * After looping, if we still have waiting SKBs, return false. This may cause + * us effectively poll even when not strictly necessary. We do this because + * it's possible a new timestamp was requested around the same time as the + * interrupt. In some cases hardware might not interrupt us again when the + * timestamp is captured. * * Note that we only take the tracking lock when clearing the bit and when * checking if we need to re-queue this task. The only place where bits can be @@ -641,7 +644,7 @@ static bool ice_ptp_tx_tstamp(struct ice_ptp_tx *tx) u8 idx; if (!tx->init) - return false; + return true; ptp_port = container_of(tx, struct ice_ptp_port, tx); pf = ptp_port_to_pf(ptp_port); @@ -2381,10 +2384,7 @@ s8 ice_ptp_request_ts(struct ice_ptp_tx *tx, struct sk_buff *skb) */ bool ice_ptp_process_ts(struct ice_pf *pf) { - if (pf->ptp.port.tx.init) - return ice_ptp_tx_tstamp(&pf->ptp.port.tx); - - return false; + return ice_ptp_tx_tstamp(&pf->ptp.port.tx); } static void ice_ptp_periodic_work(struct kthread_work *work) diff --git a/drivers/net/ethernet/intel/ice/ice_vf_lib.c b/drivers/net/ethernet/intel/ice/ice_vf_lib.c index 0abeed092de1d21d86432a02b8b9da2cf3a6ccda..1c51778db951ba8516db4b98acf4840da70a6b7c 100644 --- a/drivers/net/ethernet/intel/ice/ice_vf_lib.c +++ b/drivers/net/ethernet/intel/ice/ice_vf_lib.c @@ -576,7 +576,10 @@ int ice_reset_vf(struct ice_vf *vf, u32 flags) return -EINVAL; } ice_vsi_stop_lan_tx_rings(vsi, ICE_NO_RESET, vf->vf_id); - ice_vsi_stop_all_rx_rings(vsi); + + if (ice_vsi_is_rx_queue_active(vsi)) + ice_vsi_stop_all_rx_rings(vsi); + dev_dbg(dev, "VF is already disabled, there is no need for resetting it, telling VM, all is fine %d\n", vf->vf_id); return 0; diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c index 99933e89717ad9a936bd742e22a8493bcf33fb1f..e338fa57279337995d35c1e4322ef8489e416d60 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c @@ -4869,6 +4869,8 @@ static struct pci_driver ixgbevf_driver = { **/ static int __init ixgbevf_init_module(void) { + int err; + pr_info("%s\n", ixgbevf_driver_string); pr_info("%s\n", ixgbevf_copyright); ixgbevf_wq = create_singlethread_workqueue(ixgbevf_driver_name); @@ -4877,7 +4879,13 @@ static int __init ixgbevf_init_module(void) return -ENOMEM; } - return pci_register_driver(&ixgbevf_driver); + err = pci_register_driver(&ixgbevf_driver); + if (err) { + destroy_workqueue(ixgbevf_wq); + return err; + } + + return 0; } module_init(ixgbevf_init_module); diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c index 707993b445d1e2ff0baea4d7943949364a56fbc0..8941f69d93e9c3454dfb055a08b560aa318223c4 100644 --- a/drivers/net/ethernet/marvell/mv643xx_eth.c +++ b/drivers/net/ethernet/marvell/mv643xx_eth.c @@ -2481,6 +2481,7 @@ static int mv643xx_eth_open(struct net_device *dev) for (i = 0; i < mp->rxq_count; i++) rxq_deinit(mp->rxq + i); out: + napi_disable(&mp->napi); free_irq(dev->irq, dev); return err; diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c index eb0fb812809680015575a19c8bd265f6224d7a15..b399bdb1ca3620b9a2321cff14d0bf211d03d7a1 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c @@ -7350,6 +7350,7 @@ static int mvpp2_get_sram(struct platform_device *pdev, struct mvpp2 *priv) { struct resource *res; + void __iomem *base; res = platform_get_resource(pdev, IORESOURCE_MEM, 2); if (!res) { @@ -7360,9 +7361,12 @@ static int mvpp2_get_sram(struct platform_device *pdev, return 0; } - priv->cm3_base = devm_ioremap_resource(&pdev->dev, res); + base = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(base)) + return PTR_ERR(base); - return PTR_ERR_OR_ZERO(priv->cm3_base); + priv->cm3_base = base; + return 0; } static int mvpp2_probe(struct platform_device *pdev) diff --git a/drivers/net/ethernet/marvell/octeon_ep/octep_main.c b/drivers/net/ethernet/marvell/octeon_ep/octep_main.c index 9089adcb75f92be857fae13006437d7c27035312..b45dd7f04e2131cdd1098686dc06c0f4e44e4508 100644 --- a/drivers/net/ethernet/marvell/octeon_ep/octep_main.c +++ b/drivers/net/ethernet/marvell/octeon_ep/octep_main.c @@ -521,14 +521,12 @@ static int octep_open(struct net_device *netdev) octep_oq_dbell_init(oct); ret = octep_get_link_status(oct); - if (ret) + if (ret > 0) octep_link_up(netdev); return 0; set_queues_err: - octep_napi_disable(oct); - octep_napi_delete(oct); octep_clean_irqs(oct); setup_irq_err: octep_free_oqs(oct); @@ -958,7 +956,7 @@ int octep_device_setup(struct octep_device *oct) ret = octep_ctrl_mbox_init(ctrl_mbox); if (ret) { dev_err(&pdev->dev, "Failed to initialize control mbox\n"); - return -1; + goto unsupported_dev; } oct->ctrl_mbox_ifstats_offset = OCTEP_CTRL_MBOX_SZ(ctrl_mbox->h2fq.elem_sz, ctrl_mbox->h2fq.elem_cnt, @@ -968,6 +966,10 @@ int octep_device_setup(struct octep_device *oct) return 0; unsupported_dev: + for (i = 0; i < OCTEP_MMIO_REGIONS; i++) + iounmap(oct->mmio[i].hw_addr); + + kfree(oct->conf); return -1; } @@ -1070,7 +1072,11 @@ static int octep_probe(struct pci_dev *pdev, const struct pci_device_id *ent) netdev->max_mtu = OCTEP_MAX_MTU; netdev->mtu = OCTEP_DEFAULT_MTU; - octep_get_mac_addr(octep_dev, octep_dev->mac_addr); + err = octep_get_mac_addr(octep_dev, octep_dev->mac_addr); + if (err) { + dev_err(&pdev->dev, "Failed to get mac address\n"); + goto register_dev_err; + } eth_hw_addr_set(netdev, octep_dev->mac_addr); err = register_netdev(netdev); diff --git a/drivers/net/ethernet/marvell/octeontx2/Kconfig b/drivers/net/ethernet/marvell/octeontx2/Kconfig index e1036b0eb6b15da2c9a19322b72cbdc6d5c9f4da..993ac180a5db832a8b988acf8533d98d88339723 100644 --- a/drivers/net/ethernet/marvell/octeontx2/Kconfig +++ b/drivers/net/ethernet/marvell/octeontx2/Kconfig @@ -36,6 +36,7 @@ config OCTEONTX2_PF select DIMLIB depends on PCI depends on PTP_1588_CLOCK_OPTIONAL + depends on MACSEC || !MACSEC help This driver supports Marvell's OcteonTX2 NIC physical function. diff --git a/drivers/net/ethernet/marvell/octeontx2/af/mcs.c b/drivers/net/ethernet/marvell/octeontx2/af/mcs.c index 4a343f853b28bd51a3a0937bc8c94b9c2f139309..c0bedf402da936d68d603046adb9211926889500 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/mcs.c +++ b/drivers/net/ethernet/marvell/octeontx2/af/mcs.c @@ -951,7 +951,7 @@ static void mcs_bbe_intr_handler(struct mcs *mcs, u64 intr, enum mcs_direction d else event.intr_mask = (dir == MCS_RX) ? MCS_BBE_RX_PLFIFO_OVERFLOW_INT : - MCS_BBE_RX_PLFIFO_OVERFLOW_INT; + MCS_BBE_TX_PLFIFO_OVERFLOW_INT; /* Notify the lmac_id info which ran into BBE fatal error */ event.lmac_id = i & 0x3ULL; diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c index a1970ebedf950cf6e69262abb42ab26ff25764df..f66dde2b0f926df7dd7a70fbf23155457f6c44e8 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c @@ -880,6 +880,8 @@ static int rvu_dbg_rvu_pf_cgx_map_display(struct seq_file *filp, void *unused) sprintf(lmac, "LMAC%d", lmac_id); seq_printf(filp, "%s\t0x%x\t\tNIX%d\t\t%s\t%s\n", dev_name(&pdev->dev), pcifunc, blkid, cgx, lmac); + + pci_dev_put(pdev); } return 0; } @@ -2566,6 +2568,7 @@ static int cgx_print_dmac_flt(struct seq_file *s, int lmac_id) } } + pci_dev_put(pdev); return 0; } diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c index 7646bb2ec89b9e5bfa6e658506cf9796e5b59c34..a62c1b3220120c299c938ff638d93eba826e0adc 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c @@ -4985,6 +4985,8 @@ static int nix_setup_ipolicers(struct rvu *rvu, ipolicer->ref_count = devm_kcalloc(rvu->dev, ipolicer->band_prof.max, sizeof(u16), GFP_KERNEL); + if (!ipolicer->ref_count) + return -ENOMEM; } /* Set policer timeunit to 2us ie (19 + 1) * 100 nsec = 2us */ diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_sdp.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_sdp.c index b04fb226f708ae647884ec0ac239c22e91c7e55c..ae50d56258ec6c4fd95f863c8f078a0fef351de9 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_sdp.c +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_sdp.c @@ -62,15 +62,18 @@ int rvu_sdp_init(struct rvu *rvu) pfvf->sdp_info = devm_kzalloc(rvu->dev, sizeof(struct sdp_node_info), GFP_KERNEL); - if (!pfvf->sdp_info) + if (!pfvf->sdp_info) { + pci_dev_put(pdev); return -ENOMEM; + } dev_info(rvu->dev, "SDP PF number:%d\n", sdp_pf_num[i]); - put_device(&pdev->dev); i++; } + pci_dev_put(pdev); + return 0; } diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c index 9ac9e6615ae7172310d553814d5a697bda9331a5..9e10e7471b8874582749d4dfd2bb6d2347eada80 100644 --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.c @@ -898,6 +898,7 @@ static int otx2_sq_init(struct otx2_nic *pfvf, u16 qidx, u16 sqb_aura) } sq->head = 0; + sq->cons_head = 0; sq->sqe_per_sqb = (pfvf->hw.sqb_size / sq->sqe_size) - 1; sq->num_sqbs = (qset->sqe_cnt + sq->sqe_per_sqb) / sq->sqe_per_sqb; /* Set SQE threshold to 10% of total SQEs */ diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h index 282db6fe3b08a91d85fc5a0ef23165e05b16af6c..67aa02bb2b85ca0967422c3e98a765c4e4bd67dd 100644 --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h @@ -884,7 +884,7 @@ static inline void otx2_dma_unmap_page(struct otx2_nic *pfvf, static inline u16 otx2_get_smq_idx(struct otx2_nic *pfvf, u16 qidx) { #ifdef CONFIG_DCB - if (pfvf->pfc_alloc_status[qidx]) + if (qidx < NIX_PF_PFC_PRIO_MAX && pfvf->pfc_alloc_status[qidx]) return pfvf->pfc_schq_list[NIX_TXSCH_LVL_SMQ][qidx]; #endif diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c index 892ca88e0cf43be6cb590b1925a8f5b065ce9575..303930499a4c00372803f7c7b304082285dcfa91 100644 --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c @@ -15,6 +15,7 @@ #include #include #include +#include #include "otx2_reg.h" #include "otx2_common.h" @@ -1171,6 +1172,59 @@ int otx2_set_real_num_queues(struct net_device *netdev, } EXPORT_SYMBOL(otx2_set_real_num_queues); +static char *nix_sqoperr_e_str[NIX_SQOPERR_MAX] = { + "NIX_SQOPERR_OOR", + "NIX_SQOPERR_CTX_FAULT", + "NIX_SQOPERR_CTX_POISON", + "NIX_SQOPERR_DISABLED", + "NIX_SQOPERR_SIZE_ERR", + "NIX_SQOPERR_OFLOW", + "NIX_SQOPERR_SQB_NULL", + "NIX_SQOPERR_SQB_FAULT", + "NIX_SQOPERR_SQE_SZ_ZERO", +}; + +static char *nix_mnqerr_e_str[NIX_MNQERR_MAX] = { + "NIX_MNQERR_SQ_CTX_FAULT", + "NIX_MNQERR_SQ_CTX_POISON", + "NIX_MNQERR_SQB_FAULT", + "NIX_MNQERR_SQB_POISON", + "NIX_MNQERR_TOTAL_ERR", + "NIX_MNQERR_LSO_ERR", + "NIX_MNQERR_CQ_QUERY_ERR", + "NIX_MNQERR_MAX_SQE_SIZE_ERR", + "NIX_MNQERR_MAXLEN_ERR", + "NIX_MNQERR_SQE_SIZEM1_ZERO", +}; + +static char *nix_snd_status_e_str[NIX_SND_STATUS_MAX] = { + "NIX_SND_STATUS_GOOD", + "NIX_SND_STATUS_SQ_CTX_FAULT", + "NIX_SND_STATUS_SQ_CTX_POISON", + "NIX_SND_STATUS_SQB_FAULT", + "NIX_SND_STATUS_SQB_POISON", + "NIX_SND_STATUS_HDR_ERR", + "NIX_SND_STATUS_EXT_ERR", + "NIX_SND_STATUS_JUMP_FAULT", + "NIX_SND_STATUS_JUMP_POISON", + "NIX_SND_STATUS_CRC_ERR", + "NIX_SND_STATUS_IMM_ERR", + "NIX_SND_STATUS_SG_ERR", + "NIX_SND_STATUS_MEM_ERR", + "NIX_SND_STATUS_INVALID_SUBDC", + "NIX_SND_STATUS_SUBDC_ORDER_ERR", + "NIX_SND_STATUS_DATA_FAULT", + "NIX_SND_STATUS_DATA_POISON", + "NIX_SND_STATUS_NPC_DROP_ACTION", + "NIX_SND_STATUS_LOCK_VIOL", + "NIX_SND_STATUS_NPC_UCAST_CHAN_ERR", + "NIX_SND_STATUS_NPC_MCAST_CHAN_ERR", + "NIX_SND_STATUS_NPC_MCAST_ABORT", + "NIX_SND_STATUS_NPC_VTAG_PTR_ERR", + "NIX_SND_STATUS_NPC_VTAG_SIZE_ERR", + "NIX_SND_STATUS_SEND_STATS_ERR", +}; + static irqreturn_t otx2_q_intr_handler(int irq, void *data) { struct otx2_nic *pf = data; @@ -1204,46 +1258,67 @@ static irqreturn_t otx2_q_intr_handler(int irq, void *data) /* SQ */ for (qidx = 0; qidx < pf->hw.tot_tx_queues; qidx++) { + u64 sq_op_err_dbg, mnq_err_dbg, snd_err_dbg; + u8 sq_op_err_code, mnq_err_code, snd_err_code; + + /* Below debug registers captures first errors corresponding to + * those registers. We don't have to check against SQ qid as + * these are fatal errors. + */ + ptr = otx2_get_regaddr(pf, NIX_LF_SQ_OP_INT); val = otx2_atomic64_add((qidx << 44), ptr); otx2_write64(pf, NIX_LF_SQ_OP_INT, (qidx << 44) | (val & NIX_SQINT_BITS)); - if (!(val & (NIX_SQINT_BITS | BIT_ULL(42)))) - continue; - if (val & BIT_ULL(42)) { netdev_err(pf->netdev, "SQ%lld: error reading NIX_LF_SQ_OP_INT, NIX_LF_ERR_INT 0x%llx\n", qidx, otx2_read64(pf, NIX_LF_ERR_INT)); - } else { - if (val & BIT_ULL(NIX_SQINT_LMT_ERR)) { - netdev_err(pf->netdev, "SQ%lld: LMT store error NIX_LF_SQ_OP_ERR_DBG:0x%llx", - qidx, - otx2_read64(pf, - NIX_LF_SQ_OP_ERR_DBG)); - otx2_write64(pf, NIX_LF_SQ_OP_ERR_DBG, - BIT_ULL(44)); - } - if (val & BIT_ULL(NIX_SQINT_MNQ_ERR)) { - netdev_err(pf->netdev, "SQ%lld: Meta-descriptor enqueue error NIX_LF_MNQ_ERR_DGB:0x%llx\n", - qidx, - otx2_read64(pf, NIX_LF_MNQ_ERR_DBG)); - otx2_write64(pf, NIX_LF_MNQ_ERR_DBG, - BIT_ULL(44)); - } - if (val & BIT_ULL(NIX_SQINT_SEND_ERR)) { - netdev_err(pf->netdev, "SQ%lld: Send error, NIX_LF_SEND_ERR_DBG 0x%llx", - qidx, - otx2_read64(pf, - NIX_LF_SEND_ERR_DBG)); - otx2_write64(pf, NIX_LF_SEND_ERR_DBG, - BIT_ULL(44)); - } - if (val & BIT_ULL(NIX_SQINT_SQB_ALLOC_FAIL)) - netdev_err(pf->netdev, "SQ%lld: SQB allocation failed", - qidx); + goto done; } + sq_op_err_dbg = otx2_read64(pf, NIX_LF_SQ_OP_ERR_DBG); + if (!(sq_op_err_dbg & BIT(44))) + goto chk_mnq_err_dbg; + + sq_op_err_code = FIELD_GET(GENMASK(7, 0), sq_op_err_dbg); + netdev_err(pf->netdev, "SQ%lld: NIX_LF_SQ_OP_ERR_DBG(%llx) err=%s\n", + qidx, sq_op_err_dbg, nix_sqoperr_e_str[sq_op_err_code]); + + otx2_write64(pf, NIX_LF_SQ_OP_ERR_DBG, BIT_ULL(44)); + + if (sq_op_err_code == NIX_SQOPERR_SQB_NULL) + goto chk_mnq_err_dbg; + + /* Err is not NIX_SQOPERR_SQB_NULL, call aq function to read SQ structure. + * TODO: But we are in irq context. How to call mbox functions which does sleep + */ + +chk_mnq_err_dbg: + mnq_err_dbg = otx2_read64(pf, NIX_LF_MNQ_ERR_DBG); + if (!(mnq_err_dbg & BIT(44))) + goto chk_snd_err_dbg; + + mnq_err_code = FIELD_GET(GENMASK(7, 0), mnq_err_dbg); + netdev_err(pf->netdev, "SQ%lld: NIX_LF_MNQ_ERR_DBG(%llx) err=%s\n", + qidx, mnq_err_dbg, nix_mnqerr_e_str[mnq_err_code]); + otx2_write64(pf, NIX_LF_MNQ_ERR_DBG, BIT_ULL(44)); + +chk_snd_err_dbg: + snd_err_dbg = otx2_read64(pf, NIX_LF_SEND_ERR_DBG); + if (snd_err_dbg & BIT(44)) { + snd_err_code = FIELD_GET(GENMASK(7, 0), snd_err_dbg); + netdev_err(pf->netdev, "SQ%lld: NIX_LF_SND_ERR_DBG:0x%llx err=%s\n", + qidx, snd_err_dbg, nix_snd_status_e_str[snd_err_code]); + otx2_write64(pf, NIX_LF_SEND_ERR_DBG, BIT_ULL(44)); + } + +done: + /* Print values and reset */ + if (val & BIT_ULL(NIX_SQINT_SQB_ALLOC_FAIL)) + netdev_err(pf->netdev, "SQ%lld: SQB allocation failed", + qidx); + schedule_work(&pf->reset_task); } diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_struct.h b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_struct.h index aa205a0d158f6495f279665a36b7c017f646401a..fa37b9f312cae4450c565c11e348071114f2225b 100644 --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_struct.h +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_struct.h @@ -281,4 +281,61 @@ enum nix_sqint_e { BIT_ULL(NIX_SQINT_SEND_ERR) | \ BIT_ULL(NIX_SQINT_SQB_ALLOC_FAIL)) +enum nix_sqoperr_e { + NIX_SQOPERR_OOR = 0, + NIX_SQOPERR_CTX_FAULT = 1, + NIX_SQOPERR_CTX_POISON = 2, + NIX_SQOPERR_DISABLED = 3, + NIX_SQOPERR_SIZE_ERR = 4, + NIX_SQOPERR_OFLOW = 5, + NIX_SQOPERR_SQB_NULL = 6, + NIX_SQOPERR_SQB_FAULT = 7, + NIX_SQOPERR_SQE_SZ_ZERO = 8, + NIX_SQOPERR_MAX, +}; + +enum nix_mnqerr_e { + NIX_MNQERR_SQ_CTX_FAULT = 0, + NIX_MNQERR_SQ_CTX_POISON = 1, + NIX_MNQERR_SQB_FAULT = 2, + NIX_MNQERR_SQB_POISON = 3, + NIX_MNQERR_TOTAL_ERR = 4, + NIX_MNQERR_LSO_ERR = 5, + NIX_MNQERR_CQ_QUERY_ERR = 6, + NIX_MNQERR_MAX_SQE_SIZE_ERR = 7, + NIX_MNQERR_MAXLEN_ERR = 8, + NIX_MNQERR_SQE_SIZEM1_ZERO = 9, + NIX_MNQERR_MAX, +}; + +enum nix_snd_status_e { + NIX_SND_STATUS_GOOD = 0x0, + NIX_SND_STATUS_SQ_CTX_FAULT = 0x1, + NIX_SND_STATUS_SQ_CTX_POISON = 0x2, + NIX_SND_STATUS_SQB_FAULT = 0x3, + NIX_SND_STATUS_SQB_POISON = 0x4, + NIX_SND_STATUS_HDR_ERR = 0x5, + NIX_SND_STATUS_EXT_ERR = 0x6, + NIX_SND_STATUS_JUMP_FAULT = 0x7, + NIX_SND_STATUS_JUMP_POISON = 0x8, + NIX_SND_STATUS_CRC_ERR = 0x9, + NIX_SND_STATUS_IMM_ERR = 0x10, + NIX_SND_STATUS_SG_ERR = 0x11, + NIX_SND_STATUS_MEM_ERR = 0x12, + NIX_SND_STATUS_INVALID_SUBDC = 0x13, + NIX_SND_STATUS_SUBDC_ORDER_ERR = 0x14, + NIX_SND_STATUS_DATA_FAULT = 0x15, + NIX_SND_STATUS_DATA_POISON = 0x16, + NIX_SND_STATUS_NPC_DROP_ACTION = 0x17, + NIX_SND_STATUS_LOCK_VIOL = 0x18, + NIX_SND_STATUS_NPC_UCAST_CHAN_ERR = 0x19, + NIX_SND_STATUS_NPC_MCAST_CHAN_ERR = 0x20, + NIX_SND_STATUS_NPC_MCAST_ABORT = 0x21, + NIX_SND_STATUS_NPC_VTAG_PTR_ERR = 0x22, + NIX_SND_STATUS_NPC_VTAG_SIZE_ERR = 0x23, + NIX_SND_STATUS_SEND_MEM_FAULT = 0x24, + NIX_SND_STATUS_SEND_STATS_ERR = 0x25, + NIX_SND_STATUS_MAX, +}; + #endif /* OTX2_STRUCT_H */ diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c index 5ec11d71bf606686ae66adc746e02ea20f1f59ab..ef10aef3cda02d4c11ad0d83431a569643b23745 100644 --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.c @@ -441,6 +441,7 @@ static int otx2_tx_napi_handler(struct otx2_nic *pfvf, struct otx2_cq_queue *cq, int budget) { int tx_pkts = 0, tx_bytes = 0, qidx; + struct otx2_snd_queue *sq; struct nix_cqe_tx_s *cqe; int processed_cqe = 0; @@ -451,6 +452,9 @@ static int otx2_tx_napi_handler(struct otx2_nic *pfvf, return 0; process_cqe: + qidx = cq->cq_idx - pfvf->hw.rx_queues; + sq = &pfvf->qset.sq[qidx]; + while (likely(processed_cqe < budget) && cq->pend_cqe) { cqe = (struct nix_cqe_tx_s *)otx2_get_next_cqe(cq); if (unlikely(!cqe)) { @@ -458,18 +462,20 @@ static int otx2_tx_napi_handler(struct otx2_nic *pfvf, return 0; break; } + if (cq->cq_type == CQ_XDP) { - qidx = cq->cq_idx - pfvf->hw.rx_queues; - otx2_xdp_snd_pkt_handler(pfvf, &pfvf->qset.sq[qidx], - cqe); + otx2_xdp_snd_pkt_handler(pfvf, sq, cqe); } else { - otx2_snd_pkt_handler(pfvf, cq, - &pfvf->qset.sq[cq->cint_idx], - cqe, budget, &tx_pkts, &tx_bytes); + otx2_snd_pkt_handler(pfvf, cq, sq, cqe, budget, + &tx_pkts, &tx_bytes); } + cqe->hdr.cqe_type = NIX_XQE_TYPE_INVALID; processed_cqe++; cq->pend_cqe--; + + sq->cons_head++; + sq->cons_head &= (sq->sqe_cnt - 1); } /* Free CQEs to HW */ @@ -1072,17 +1078,17 @@ bool otx2_sq_append_skb(struct net_device *netdev, struct otx2_snd_queue *sq, { struct netdev_queue *txq = netdev_get_tx_queue(netdev, qidx); struct otx2_nic *pfvf = netdev_priv(netdev); - int offset, num_segs, free_sqe; + int offset, num_segs, free_desc; struct nix_sqe_hdr_s *sqe_hdr; - /* Check if there is room for new SQE. - * 'Num of SQBs freed to SQ's pool - SQ's Aura count' - * will give free SQE count. + /* Check if there is enough room between producer + * and consumer index. */ - free_sqe = (sq->num_sqbs - *sq->aura_fc_addr) * sq->sqe_per_sqb; + free_desc = (sq->cons_head - sq->head - 1 + sq->sqe_cnt) & (sq->sqe_cnt - 1); + if (free_desc < sq->sqe_thresh) + return false; - if (free_sqe < sq->sqe_thresh || - free_sqe < otx2_get_sqe_count(pfvf, skb)) + if (free_desc < otx2_get_sqe_count(pfvf, skb)) return false; num_segs = skb_shinfo(skb)->nr_frags + 1; diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h index fbe62bbfb789afbf875c177ef4835bb42f9efabc..93cac2c2664c204d72f428c2661f89ab61a124c4 100644 --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_txrx.h @@ -79,6 +79,7 @@ struct sg_list { struct otx2_snd_queue { u8 aura_id; u16 head; + u16 cons_head; u16 sqe_size; u32 sqe_cnt; u16 num_sqbs; diff --git a/drivers/net/ethernet/marvell/prestera/prestera_main.c b/drivers/net/ethernet/marvell/prestera/prestera_main.c index 24f9d60247453107f79f425e1918928d27a92568..47796e4d900c631b3affd605ad7411eaeabf184c 100644 --- a/drivers/net/ethernet/marvell/prestera/prestera_main.c +++ b/drivers/net/ethernet/marvell/prestera/prestera_main.c @@ -746,6 +746,7 @@ static int prestera_port_create(struct prestera_switch *sw, u32 id) return 0; err_sfp_bind: + unregister_netdev(dev); err_register_netdev: prestera_port_list_del(port); err_port_init: diff --git a/drivers/net/ethernet/marvell/prestera/prestera_router.c b/drivers/net/ethernet/marvell/prestera/prestera_router.c index 4046be0e86ff4a60aeb793cd59746446c477fb65..a9a1028cb17bbb736c0b0725acbf9ef2d3f7a166 100644 --- a/drivers/net/ethernet/marvell/prestera/prestera_router.c +++ b/drivers/net/ethernet/marvell/prestera/prestera_router.c @@ -457,7 +457,7 @@ prestera_kern_neigh_cache_find(struct prestera_switch *sw, n_cache = rhashtable_lookup_fast(&sw->router->kern_neigh_cache_ht, key, __prestera_kern_neigh_cache_ht_params); - return IS_ERR(n_cache) ? NULL : n_cache; + return n_cache; } static void diff --git a/drivers/net/ethernet/marvell/prestera/prestera_router_hw.c b/drivers/net/ethernet/marvell/prestera/prestera_router_hw.c index aa080dc57ff0050a216c096eb9b585fdf56aaf8f..02faaea2aefaa600329838c60e0ac0890f39ec8c 100644 --- a/drivers/net/ethernet/marvell/prestera/prestera_router_hw.c +++ b/drivers/net/ethernet/marvell/prestera/prestera_router_hw.c @@ -330,7 +330,7 @@ prestera_nh_neigh_find(struct prestera_switch *sw, nh_neigh = rhashtable_lookup_fast(&sw->router->nh_neigh_ht, key, __prestera_nh_neigh_ht_params); - return IS_ERR(nh_neigh) ? NULL : nh_neigh; + return nh_neigh; } struct prestera_nh_neigh * @@ -484,7 +484,7 @@ __prestera_nexthop_group_find(struct prestera_switch *sw, nh_grp = rhashtable_lookup_fast(&sw->router->nexthop_group_ht, key, __prestera_nexthop_group_ht_params); - return IS_ERR(nh_grp) ? NULL : nh_grp; + return nh_grp; } static struct prestera_nexthop_group * diff --git a/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c b/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c index 42ee963e9f75967a2392defa36f60baef4a2de3d..9277a8fd1339dc60049c437b933ed3a0b3042c69 100644 --- a/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c +++ b/drivers/net/ethernet/marvell/prestera/prestera_rxtx.c @@ -776,6 +776,7 @@ static netdev_tx_t prestera_sdma_xmit(struct prestera_sdma *sdma, int prestera_rxtx_switch_init(struct prestera_switch *sw) { struct prestera_rxtx *rxtx; + int err; rxtx = kzalloc(sizeof(*rxtx), GFP_KERNEL); if (!rxtx) @@ -783,7 +784,11 @@ int prestera_rxtx_switch_init(struct prestera_switch *sw) sw->rxtx = rxtx; - return prestera_sdma_switch_init(sw); + err = prestera_sdma_switch_init(sw); + if (err) + kfree(rxtx); + + return err; } void prestera_rxtx_switch_fini(struct prestera_switch *sw) diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c index 7cd381530aa4aa5393dd6d9ffbd738245641c86d..1d36619c5ec91c46db03f6a695f5b66d2325cf42 100644 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c @@ -2378,8 +2378,10 @@ static int mtk_rx_alloc(struct mtk_eth *eth, int ring_no, int rx_flag) data + NET_SKB_PAD + eth->ip_align, ring->buf_size, DMA_FROM_DEVICE); if (unlikely(dma_mapping_error(eth->dma_dev, - dma_addr))) + dma_addr))) { + skb_free_frag(data); return -ENOMEM; + } } rxd->rxd1 = (unsigned int)dma_addr; ring->data[i] = data; @@ -2996,8 +2998,10 @@ static int mtk_open(struct net_device *dev) int i; err = mtk_start_dma(eth); - if (err) + if (err) { + phylink_disconnect_phy(mac->phylink); return err; + } for (i = 0; i < ARRAY_SIZE(eth->ppe); i++) mtk_ppe_start(eth->ppe[i]); @@ -4143,13 +4147,13 @@ static int mtk_probe(struct platform_device *pdev) eth->soc->offload_version, i); if (!eth->ppe[i]) { err = -ENOMEM; - goto err_free_dev; + goto err_deinit_ppe; } } err = mtk_eth_offload_init(eth); if (err) - goto err_free_dev; + goto err_deinit_ppe; } for (i = 0; i < MTK_MAX_DEVS; i++) { @@ -4159,7 +4163,7 @@ static int mtk_probe(struct platform_device *pdev) err = register_netdev(eth->netdev[i]); if (err) { dev_err(eth->dev, "error bringing up device\n"); - goto err_deinit_mdio; + goto err_deinit_ppe; } else netif_info(eth, probe, eth->netdev[i], "mediatek frame engine at 0x%08lx, irq %d\n", @@ -4177,7 +4181,8 @@ static int mtk_probe(struct platform_device *pdev) return 0; -err_deinit_mdio: +err_deinit_ppe: + mtk_ppe_deinit(eth); mtk_mdio_cleanup(eth); err_free_dev: mtk_free_dev(eth); diff --git a/drivers/net/ethernet/mediatek/mtk_ppe.c b/drivers/net/ethernet/mediatek/mtk_ppe.c index 2d8ca99f2467ff9f859b3e2294a024d19d840820..784ecb2dc9fbd8a1c3702886d0239af3d5f4a452 100644 --- a/drivers/net/ethernet/mediatek/mtk_ppe.c +++ b/drivers/net/ethernet/mediatek/mtk_ppe.c @@ -737,7 +737,7 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base, MTK_PPE_ENTRIES * soc->foe_entry_size, &ppe->foe_phys, GFP_KERNEL); if (!foe) - return NULL; + goto err_free_l2_flows; ppe->foe_table = foe; @@ -745,11 +745,26 @@ struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base, sizeof(*ppe->foe_flow); ppe->foe_flow = devm_kzalloc(dev, foe_flow_size, GFP_KERNEL); if (!ppe->foe_flow) - return NULL; + goto err_free_l2_flows; mtk_ppe_debugfs_init(ppe, index); return ppe; + +err_free_l2_flows: + rhashtable_destroy(&ppe->l2_flows); + return NULL; +} + +void mtk_ppe_deinit(struct mtk_eth *eth) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(eth->ppe); i++) { + if (!eth->ppe[i]) + return; + rhashtable_destroy(ð->ppe[i]->l2_flows); + } } static void mtk_ppe_init_foe_table(struct mtk_ppe *ppe) diff --git a/drivers/net/ethernet/mediatek/mtk_ppe.h b/drivers/net/ethernet/mediatek/mtk_ppe.h index 0b7a67a958e4ca9d218ebf33b3e8a48503ff61ff..a09c32539bcc90ce5b9c1b6ac1ef13a5e20bc4d3 100644 --- a/drivers/net/ethernet/mediatek/mtk_ppe.h +++ b/drivers/net/ethernet/mediatek/mtk_ppe.h @@ -304,6 +304,7 @@ struct mtk_ppe { struct mtk_ppe *mtk_ppe_init(struct mtk_eth *eth, void __iomem *base, int version, int index); +void mtk_ppe_deinit(struct mtk_eth *eth); void mtk_ppe_start(struct mtk_ppe *ppe); int mtk_ppe_stop(struct mtk_ppe *ppe); diff --git a/drivers/net/ethernet/mediatek/mtk_star_emac.c b/drivers/net/ethernet/mediatek/mtk_star_emac.c index 7e890f81148e6a8f7c625b4399d9fa44f8e81c0f..7050351250b7a38679aa901348976c9d2eb5b99b 100644 --- a/drivers/net/ethernet/mediatek/mtk_star_emac.c +++ b/drivers/net/ethernet/mediatek/mtk_star_emac.c @@ -1026,6 +1026,8 @@ static int mtk_star_enable(struct net_device *ndev) return 0; err_free_irq: + napi_disable(&priv->rx_napi); + napi_disable(&priv->tx_napi); free_irq(ndev->irq, ndev); err_free_skbs: mtk_star_free_rx_skbs(priv); diff --git a/drivers/net/ethernet/mellanox/mlx4/qp.c b/drivers/net/ethernet/mellanox/mlx4/qp.c index b149e601f6737eea40a1dd35b852185da16ed6de..48cfaa7eaf50cb20b7e531727abcce5ef4e8376a 100644 --- a/drivers/net/ethernet/mellanox/mlx4/qp.c +++ b/drivers/net/ethernet/mellanox/mlx4/qp.c @@ -697,7 +697,8 @@ static int mlx4_create_zones(struct mlx4_dev *dev, err = mlx4_bitmap_init(*bitmap + k, 1, MLX4_QP_TABLE_RAW_ETH_SIZE - 1, 0, 0); - mlx4_bitmap_alloc_range(*bitmap + k, 1, 1, 0); + if (!err) + mlx4_bitmap_alloc_range(*bitmap + k, 1, 1, 0); } if (err) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c index 46ba4c2faad21aafc82381467e62c85aa8a06478..e7a894ba5c3eae9584673149ba8febd0e9e9ba90 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c @@ -45,6 +45,8 @@ #include "mlx5_core.h" #include "lib/eq.h" #include "lib/tout.h" +#define CREATE_TRACE_POINTS +#include "diag/cmd_tracepoint.h" enum { CMD_IF_REV = 5, @@ -785,27 +787,14 @@ EXPORT_SYMBOL(mlx5_cmd_out_err); static void cmd_status_print(struct mlx5_core_dev *dev, void *in, void *out) { u16 opcode, op_mod; - u32 syndrome; - u8 status; u16 uid; - int err; - - syndrome = MLX5_GET(mbox_out, out, syndrome); - status = MLX5_GET(mbox_out, out, status); opcode = MLX5_GET(mbox_in, in, opcode); op_mod = MLX5_GET(mbox_in, in, op_mod); uid = MLX5_GET(mbox_in, in, uid); - err = cmd_status_to_err(status); - if (!uid && opcode != MLX5_CMD_OP_DESTROY_MKEY) mlx5_cmd_out_err(dev, opcode, op_mod, out); - else - mlx5_core_dbg(dev, - "%s(0x%x) op_mod(0x%x) uid(%d) failed, status %s(0x%x), syndrome (0x%x), err(%d)\n", - mlx5_command_str(opcode), opcode, op_mod, uid, - cmd_status_str(status), status, syndrome, err); } int mlx5_cmd_check(struct mlx5_core_dev *dev, int err, void *in, void *out) @@ -1016,6 +1005,7 @@ static void cmd_work_handler(struct work_struct *work) cmd_ent_get(ent); set_bit(MLX5_CMD_ENT_STATE_PENDING_COMP, &ent->state); + cmd_ent_get(ent); /* for the _real_ FW event on completion */ /* Skip sending command to fw if internal error */ if (mlx5_cmd_is_down(dev) || !opcode_allowed(&dev->cmd, ent->op)) { ent->ret = -ENXIO; @@ -1023,7 +1013,6 @@ static void cmd_work_handler(struct work_struct *work) return; } - cmd_ent_get(ent); /* for the _real_ FW event on completion */ /* ring doorbell after the descriptor is valid */ mlx5_core_dbg(dev, "writing 0x%x to command doorbell\n", 1 << ent->idx); wmb(); @@ -1508,8 +1497,8 @@ static ssize_t outlen_write(struct file *filp, const char __user *buf, return -EFAULT; err = sscanf(outlen_str, "%d", &outlen); - if (err < 0) - return err; + if (err != 1) + return -EINVAL; ptr = kzalloc(outlen, GFP_KERNEL); if (!ptr) @@ -1672,8 +1661,8 @@ static void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, u64 vec, bool force cmd_ent_put(ent); /* timeout work was canceled */ if (!forced || /* Real FW completion */ - pci_channel_offline(dev->pdev) || /* FW is inaccessible */ - dev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR) + mlx5_cmd_is_down(dev) || /* No real FW completion is expected */ + !opcode_allowed(cmd, ent->op)) cmd_ent_put(ent); ent->ts2 = ktime_get_ns(); @@ -1770,12 +1759,17 @@ void mlx5_cmd_flush(struct mlx5_core_dev *dev) struct mlx5_cmd *cmd = &dev->cmd; int i; - for (i = 0; i < cmd->max_reg_cmds; i++) - while (down_trylock(&cmd->sem)) + for (i = 0; i < cmd->max_reg_cmds; i++) { + while (down_trylock(&cmd->sem)) { mlx5_cmd_trigger_completions(dev); + cond_resched(); + } + } - while (down_trylock(&cmd->pages_sem)) + while (down_trylock(&cmd->pages_sem)) { mlx5_cmd_trigger_completions(dev); + cond_resched(); + } /* Unlock cmdif */ up(&cmd->pages_sem); @@ -1887,6 +1881,16 @@ static int cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out, return err; } +static void mlx5_cmd_err_trace(struct mlx5_core_dev *dev, u16 opcode, u16 op_mod, void *out) +{ + u32 syndrome = MLX5_GET(mbox_out, out, syndrome); + u8 status = MLX5_GET(mbox_out, out, status); + + trace_mlx5_cmd(mlx5_command_str(opcode), opcode, op_mod, + cmd_status_str(status), status, syndrome, + cmd_status_to_err(status)); +} + static void cmd_status_log(struct mlx5_core_dev *dev, u16 opcode, u8 status, u32 syndrome, int err) { @@ -1909,7 +1913,7 @@ static void cmd_status_log(struct mlx5_core_dev *dev, u16 opcode, u8 status, } /* preserve -EREMOTEIO for outbox.status != OK, otherwise return err as is */ -static int cmd_status_err(struct mlx5_core_dev *dev, int err, u16 opcode, void *out) +static int cmd_status_err(struct mlx5_core_dev *dev, int err, u16 opcode, u16 op_mod, void *out) { u32 syndrome = MLX5_GET(mbox_out, out, syndrome); u8 status = MLX5_GET(mbox_out, out, status); @@ -1917,8 +1921,10 @@ static int cmd_status_err(struct mlx5_core_dev *dev, int err, u16 opcode, void * if (err == -EREMOTEIO) /* -EREMOTEIO is preserved */ err = -EIO; - if (!err && status != MLX5_CMD_STAT_OK) + if (!err && status != MLX5_CMD_STAT_OK) { err = -EREMOTEIO; + mlx5_cmd_err_trace(dev, opcode, op_mod, out); + } cmd_status_log(dev, opcode, status, syndrome, err); return err; @@ -1946,9 +1952,9 @@ int mlx5_cmd_do(struct mlx5_core_dev *dev, void *in, int in_size, void *out, int { int err = cmd_exec(dev, in, in_size, out, out_size, NULL, NULL, false); u16 opcode = MLX5_GET(mbox_in, in, opcode); + u16 op_mod = MLX5_GET(mbox_in, in, op_mod); - err = cmd_status_err(dev, err, opcode, out); - return err; + return cmd_status_err(dev, err, opcode, op_mod, out); } EXPORT_SYMBOL(mlx5_cmd_do); @@ -1992,8 +1998,9 @@ int mlx5_cmd_exec_polling(struct mlx5_core_dev *dev, void *in, int in_size, { int err = cmd_exec(dev, in, in_size, out, out_size, NULL, NULL, true); u16 opcode = MLX5_GET(mbox_in, in, opcode); + u16 op_mod = MLX5_GET(mbox_in, in, op_mod); - err = cmd_status_err(dev, err, opcode, out); + err = cmd_status_err(dev, err, opcode, op_mod, out); return mlx5_cmd_check(dev, err, in, out); } EXPORT_SYMBOL(mlx5_cmd_exec_polling); @@ -2029,7 +2036,7 @@ static void mlx5_cmd_exec_cb_handler(int status, void *_work) struct mlx5_async_ctx *ctx; ctx = work->ctx; - status = cmd_status_err(ctx->dev, status, work->opcode, work->out); + status = cmd_status_err(ctx->dev, status, work->opcode, work->op_mod, work->out); work->user_callback(status, work); if (atomic_dec_and_test(&ctx->num_inflight)) complete(&ctx->inflight_done); @@ -2044,6 +2051,7 @@ int mlx5_cmd_exec_cb(struct mlx5_async_ctx *ctx, void *in, int in_size, work->ctx = ctx; work->user_callback = callback; work->opcode = MLX5_GET(mbox_in, in, opcode); + work->op_mod = MLX5_GET(mbox_in, in, op_mod); work->out = out; if (WARN_ON(!atomic_inc_not_zero(&ctx->num_inflight))) return -EIO; diff --git a/drivers/net/ethernet/mellanox/mlx5/core/diag/cmd_tracepoint.h b/drivers/net/ethernet/mellanox/mlx5/core/diag/cmd_tracepoint.h new file mode 100644 index 0000000000000000000000000000000000000000..406ebe17405f941af4e0e78f2edf361989ff9edb --- /dev/null +++ b/drivers/net/ethernet/mellanox/mlx5/core/diag/cmd_tracepoint.h @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ +/* Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM mlx5 + +#if !defined(_MLX5_CMD_TP_H_) || defined(TRACE_HEADER_MULTI_READ) +#define _MLX5_CMD_TP_H_ + +#include +#include + +TRACE_EVENT(mlx5_cmd, + TP_PROTO(const char *command_str, u16 opcode, u16 op_mod, + const char *status_str, u8 status, u32 syndrome, int err), + TP_ARGS(command_str, opcode, op_mod, status_str, status, syndrome, err), + TP_STRUCT__entry(__string(command_str, command_str) + __field(u16, opcode) + __field(u16, op_mod) + __string(status_str, status_str) + __field(u8, status) + __field(u32, syndrome) + __field(int, err) + ), + TP_fast_assign(__assign_str(command_str, command_str); + __entry->opcode = opcode; + __entry->op_mod = op_mod; + __assign_str(status_str, status_str); + __entry->status = status; + __entry->syndrome = syndrome; + __entry->err = err; + ), + TP_printk("%s(0x%x) op_mod(0x%x) failed, status %s(0x%x), syndrome (0x%x), err(%d)", + __get_str(command_str), __entry->opcode, __entry->op_mod, + __get_str(status_str), __entry->status, __entry->syndrome, + __entry->err) +); + +#endif /* _MLX5_CMD_TP_H_ */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH ./diag +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE cmd_tracepoint +#include diff --git a/drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c b/drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c index 978a2bb8e12205f9f5e5db0593953b1cf422ae5d..21831386b26e848449cd3040e8b0662f84231cd8 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/diag/fw_tracer.c @@ -638,7 +638,7 @@ static void mlx5_tracer_handle_timestamp_trace(struct mlx5_fw_tracer *tracer, trace_timestamp = (timestamp_event.timestamp & MASK_52_7) | (str_frmt->timestamp & MASK_6_0); else - trace_timestamp = ((timestamp_event.timestamp & MASK_52_7) - 1) | + trace_timestamp = ((timestamp_event.timestamp - 1) & MASK_52_7) | (str_frmt->timestamp & MASK_6_0); mlx5_tracer_print_trace(str_frmt, dev, trace_timestamp); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c b/drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c index 39ef2a2561a3004c538795f10ec5ba421de124bb..8099a21e674c96bfae3a90510f048cc66bc4de27 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c @@ -164,6 +164,36 @@ static int mlx5_esw_bridge_port_changeupper(struct notifier_block *nb, void *ptr return err; } +static int +mlx5_esw_bridge_changeupper_validate_netdev(void *ptr) +{ + struct net_device *dev = netdev_notifier_info_to_dev(ptr); + struct netdev_notifier_changeupper_info *info = ptr; + struct net_device *upper = info->upper_dev; + struct net_device *lower; + struct list_head *iter; + + if (!netif_is_bridge_master(upper) || !netif_is_lag_master(dev)) + return 0; + + netdev_for_each_lower_dev(dev, lower, iter) { + struct mlx5_core_dev *mdev; + struct mlx5e_priv *priv; + + if (!mlx5e_eswitch_rep(lower)) + continue; + + priv = netdev_priv(lower); + mdev = priv->mdev; + if (!mlx5_lag_is_active(mdev)) + return -EAGAIN; + if (!mlx5_lag_is_shared_fdb(mdev)) + return -EOPNOTSUPP; + } + + return 0; +} + static int mlx5_esw_bridge_switchdev_port_event(struct notifier_block *nb, unsigned long event, void *ptr) { @@ -171,6 +201,7 @@ static int mlx5_esw_bridge_switchdev_port_event(struct notifier_block *nb, switch (event) { case NETDEV_PRECHANGEUPPER: + err = mlx5_esw_bridge_changeupper_validate_netdev(ptr); break; case NETDEV_CHANGEUPPER: diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.c index 305fde62a78debf926c2de7c9dbc2eb8272ac73b..3337241cfd84c270bed5f6ad2bb826e9e7bac958 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.c @@ -6,70 +6,42 @@ #include "en/tc_priv.h" #include "mlx5_core.h" -/* Must be aligned with enum flow_action_id. */ static struct mlx5e_tc_act *tc_acts_fdb[NUM_FLOW_ACTIONS] = { - &mlx5e_tc_act_accept, - &mlx5e_tc_act_drop, - &mlx5e_tc_act_trap, - &mlx5e_tc_act_goto, - &mlx5e_tc_act_mirred, - &mlx5e_tc_act_mirred, - &mlx5e_tc_act_redirect_ingress, - NULL, /* FLOW_ACTION_MIRRED_INGRESS, */ - &mlx5e_tc_act_vlan, - &mlx5e_tc_act_vlan, - &mlx5e_tc_act_vlan_mangle, - &mlx5e_tc_act_tun_encap, - &mlx5e_tc_act_tun_decap, - &mlx5e_tc_act_pedit, - &mlx5e_tc_act_pedit, - &mlx5e_tc_act_csum, - NULL, /* FLOW_ACTION_MARK, */ - &mlx5e_tc_act_ptype, - NULL, /* FLOW_ACTION_PRIORITY, */ - NULL, /* FLOW_ACTION_WAKE, */ - NULL, /* FLOW_ACTION_QUEUE, */ - &mlx5e_tc_act_sample, - &mlx5e_tc_act_police, - &mlx5e_tc_act_ct, - NULL, /* FLOW_ACTION_CT_METADATA, */ - &mlx5e_tc_act_mpls_push, - &mlx5e_tc_act_mpls_pop, - NULL, /* FLOW_ACTION_MPLS_MANGLE, */ - NULL, /* FLOW_ACTION_GATE, */ - NULL, /* FLOW_ACTION_PPPOE_PUSH, */ - NULL, /* FLOW_ACTION_JUMP, */ - NULL, /* FLOW_ACTION_PIPE, */ - &mlx5e_tc_act_vlan, - &mlx5e_tc_act_vlan, + [FLOW_ACTION_ACCEPT] = &mlx5e_tc_act_accept, + [FLOW_ACTION_DROP] = &mlx5e_tc_act_drop, + [FLOW_ACTION_TRAP] = &mlx5e_tc_act_trap, + [FLOW_ACTION_GOTO] = &mlx5e_tc_act_goto, + [FLOW_ACTION_REDIRECT] = &mlx5e_tc_act_mirred, + [FLOW_ACTION_MIRRED] = &mlx5e_tc_act_mirred, + [FLOW_ACTION_REDIRECT_INGRESS] = &mlx5e_tc_act_redirect_ingress, + [FLOW_ACTION_VLAN_PUSH] = &mlx5e_tc_act_vlan, + [FLOW_ACTION_VLAN_POP] = &mlx5e_tc_act_vlan, + [FLOW_ACTION_VLAN_MANGLE] = &mlx5e_tc_act_vlan_mangle, + [FLOW_ACTION_TUNNEL_ENCAP] = &mlx5e_tc_act_tun_encap, + [FLOW_ACTION_TUNNEL_DECAP] = &mlx5e_tc_act_tun_decap, + [FLOW_ACTION_MANGLE] = &mlx5e_tc_act_pedit, + [FLOW_ACTION_ADD] = &mlx5e_tc_act_pedit, + [FLOW_ACTION_CSUM] = &mlx5e_tc_act_csum, + [FLOW_ACTION_PTYPE] = &mlx5e_tc_act_ptype, + [FLOW_ACTION_SAMPLE] = &mlx5e_tc_act_sample, + [FLOW_ACTION_POLICE] = &mlx5e_tc_act_police, + [FLOW_ACTION_CT] = &mlx5e_tc_act_ct, + [FLOW_ACTION_MPLS_PUSH] = &mlx5e_tc_act_mpls_push, + [FLOW_ACTION_MPLS_POP] = &mlx5e_tc_act_mpls_pop, + [FLOW_ACTION_VLAN_PUSH_ETH] = &mlx5e_tc_act_vlan, + [FLOW_ACTION_VLAN_POP_ETH] = &mlx5e_tc_act_vlan, }; -/* Must be aligned with enum flow_action_id. */ static struct mlx5e_tc_act *tc_acts_nic[NUM_FLOW_ACTIONS] = { - &mlx5e_tc_act_accept, - &mlx5e_tc_act_drop, - NULL, /* FLOW_ACTION_TRAP, */ - &mlx5e_tc_act_goto, - &mlx5e_tc_act_mirred_nic, - NULL, /* FLOW_ACTION_MIRRED, */ - NULL, /* FLOW_ACTION_REDIRECT_INGRESS, */ - NULL, /* FLOW_ACTION_MIRRED_INGRESS, */ - NULL, /* FLOW_ACTION_VLAN_PUSH, */ - NULL, /* FLOW_ACTION_VLAN_POP, */ - NULL, /* FLOW_ACTION_VLAN_MANGLE, */ - NULL, /* FLOW_ACTION_TUNNEL_ENCAP, */ - NULL, /* FLOW_ACTION_TUNNEL_DECAP, */ - &mlx5e_tc_act_pedit, - &mlx5e_tc_act_pedit, - &mlx5e_tc_act_csum, - &mlx5e_tc_act_mark, - NULL, /* FLOW_ACTION_PTYPE, */ - NULL, /* FLOW_ACTION_PRIORITY, */ - NULL, /* FLOW_ACTION_WAKE, */ - NULL, /* FLOW_ACTION_QUEUE, */ - NULL, /* FLOW_ACTION_SAMPLE, */ - NULL, /* FLOW_ACTION_POLICE, */ - &mlx5e_tc_act_ct, + [FLOW_ACTION_ACCEPT] = &mlx5e_tc_act_accept, + [FLOW_ACTION_DROP] = &mlx5e_tc_act_drop, + [FLOW_ACTION_GOTO] = &mlx5e_tc_act_goto, + [FLOW_ACTION_REDIRECT] = &mlx5e_tc_act_mirred_nic, + [FLOW_ACTION_MANGLE] = &mlx5e_tc_act_pedit, + [FLOW_ACTION_ADD] = &mlx5e_tc_act_pedit, + [FLOW_ACTION_CSUM] = &mlx5e_tc_act_csum, + [FLOW_ACTION_MARK] = &mlx5e_tc_act_mark, + [FLOW_ACTION_CT] = &mlx5e_tc_act_ct, }; /** diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c index 5aff979143678fd2b01134665e76384484069a31..ff73d25bc6eb8b1108e1e4a81ce87b8c8e7f6222 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c @@ -224,15 +224,16 @@ void mlx5e_tc_encap_flows_del(struct mlx5e_priv *priv, list_for_each_entry(flow, flow_list, tmp_list) { if (!mlx5e_is_offloaded_flow(flow) || flow_flag_test(flow, SLOW)) continue; - spec = &flow->attr->parse_attr->spec; - - /* update from encap rule to slow path rule */ - rule = mlx5e_tc_offload_to_slow_path(esw, flow, spec); attr = mlx5e_tc_get_encap_attr(flow); esw_attr = attr->esw_attr; /* mark the flow's encap dest as non-valid */ esw_attr->dests[flow->tmp_entry_index].flags &= ~MLX5_ESW_DEST_ENCAP_VALID; + esw_attr->dests[flow->tmp_entry_index].pkt_reformat = NULL; + + /* update from encap rule to slow path rule */ + spec = &flow->attr->parse_attr->spec; + rule = mlx5e_tc_offload_to_slow_path(esw, flow, spec); if (IS_ERR(rule)) { err = PTR_ERR(rule); @@ -251,6 +252,7 @@ void mlx5e_tc_encap_flows_del(struct mlx5e_priv *priv, /* we know that the encap is valid */ e->flags &= ~MLX5_ENCAP_ENTRY_VALID; mlx5_packet_reformat_dealloc(priv->mdev, e->pkt_reformat); + e->pkt_reformat = NULL; } static void mlx5e_take_tmp_flow(struct mlx5e_tc_flow *flow, @@ -762,8 +764,7 @@ int mlx5e_attach_encap(struct mlx5e_priv *priv, struct net_device *mirred_dev, int out_index, struct netlink_ext_ack *extack, - struct net_device **encap_dev, - bool *encap_valid) + struct net_device **encap_dev) { struct mlx5_eswitch *esw = priv->mdev->priv.eswitch; struct mlx5e_tc_flow_parse_attr *parse_attr; @@ -878,9 +879,8 @@ int mlx5e_attach_encap(struct mlx5e_priv *priv, if (e->flags & MLX5_ENCAP_ENTRY_VALID) { attr->esw_attr->dests[out_index].pkt_reformat = e->pkt_reformat; attr->esw_attr->dests[out_index].flags |= MLX5_ESW_DEST_ENCAP_VALID; - *encap_valid = true; } else { - *encap_valid = false; + flow_flag_set(flow, SLOW); } mutex_unlock(&esw->offloads.encap_tbl_lock); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.h b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.h index d542b8476491e081c1f70cecaca5798a42f20f28..8ad273dde40ee5b41ad1cdc4963ce8ad9d10fccb 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.h @@ -17,8 +17,7 @@ int mlx5e_attach_encap(struct mlx5e_priv *priv, struct net_device *mirred_dev, int out_index, struct netlink_ext_ack *extack, - struct net_device **encap_dev, - bool *encap_valid); + struct net_device **encap_dev); int mlx5e_attach_decap(struct mlx5e_priv *priv, struct mlx5e_tc_flow *flow, diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h b/drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h index cb164b62f54365664ac52d541a5cb6f19fd0d0ff..853f312cd757257a84f297ce1ef1a91dc5c7d4c8 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h @@ -11,6 +11,27 @@ #define INL_HDR_START_SZ (sizeof(((struct mlx5_wqe_eth_seg *)NULL)->inline_hdr.start)) +/* IPSEC inline data includes: + * 1. ESP trailer: up to 255 bytes of padding, 1 byte for pad length, 1 byte for + * next header. + * 2. ESP authentication data: 16 bytes for ICV. + */ +#define MLX5E_MAX_TX_IPSEC_DS DIV_ROUND_UP(sizeof(struct mlx5_wqe_inline_seg) + \ + 255 + 1 + 1 + 16, MLX5_SEND_WQE_DS) + +/* 366 should be big enough to cover all L2, L3 and L4 headers with possible + * encapsulations. + */ +#define MLX5E_MAX_TX_INLINE_DS DIV_ROUND_UP(366 - INL_HDR_START_SZ + VLAN_HLEN, \ + MLX5_SEND_WQE_DS) + +/* Sync the calculation with mlx5e_sq_calc_wqe_attr. */ +#define MLX5E_MAX_TX_WQEBBS DIV_ROUND_UP(MLX5E_TX_WQE_EMPTY_DS_COUNT + \ + MLX5E_MAX_TX_INLINE_DS + \ + MLX5E_MAX_TX_IPSEC_DS + \ + MAX_SKB_FRAGS + 1, \ + MLX5_SEND_WQEBB_NUM_DS) + #define MLX5E_RX_ERR_CQE(cqe) (get_cqe_opcode(cqe) != MLX5_CQE_RESP_SEND) static inline @@ -424,6 +445,8 @@ mlx5e_set_eseg_swp(struct sk_buff *skb, struct mlx5_wqe_eth_seg *eseg, static inline u16 mlx5e_stop_room_for_wqe(struct mlx5_core_dev *mdev, u16 wqe_size) { + WARN_ON_ONCE(PAGE_SIZE / MLX5_SEND_WQE_BB < mlx5e_get_max_sq_wqebbs(mdev)); + /* A WQE must not cross the page boundary, hence two conditions: * 1. Its size must not exceed the page size. * 2. If the WQE size is X, and the space remaining in a page is less @@ -436,7 +459,6 @@ static inline u16 mlx5e_stop_room_for_wqe(struct mlx5_core_dev *mdev, u16 wqe_si "wqe_size %u is greater than max SQ WQEBBs %u", wqe_size, mlx5e_get_max_sq_wqebbs(mdev)); - return MLX5E_STOP_ROOM(wqe_size); } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c b/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c index 4685c652c97e10635a211ada7b844bfc1203fa42..20507ef2f95695042a405d226a3621e3da13f744 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c @@ -117,7 +117,7 @@ mlx5e_xmit_xdp_buff(struct mlx5e_xdpsq *sq, struct mlx5e_rq *rq, xdpi.page.rq = rq; dma_addr = page_pool_get_dma_addr(page) + (xdpf->data - (void *)xdpf); - dma_sync_single_for_device(sq->pdev, dma_addr, xdptxd.len, DMA_TO_DEVICE); + dma_sync_single_for_device(sq->pdev, dma_addr, xdptxd.len, DMA_BIDIRECTIONAL); if (unlikely(xdp_frame_has_frags(xdpf))) { sinfo = xdp_get_shared_info_from_frame(xdpf); @@ -131,7 +131,7 @@ mlx5e_xmit_xdp_buff(struct mlx5e_xdpsq *sq, struct mlx5e_rq *rq, skb_frag_off(frag); len = skb_frag_size(frag); dma_sync_single_for_device(sq->pdev, addr, len, - DMA_TO_DEVICE); + DMA_BIDIRECTIONAL); } } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/fs_tcp.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/fs_tcp.c index 285d32d2fd08ab1518dd9cdcfad6042fa28e60da..d7c020f724013f41c86b8f29d3cc9a936fded4dc 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/fs_tcp.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/fs_tcp.c @@ -365,7 +365,7 @@ void mlx5e_accel_fs_tcp_destroy(struct mlx5e_flow_steering *fs) for (i = 0; i < ACCEL_FS_TCP_NUM_TYPES; i++) accel_fs_tcp_destroy_table(fs, i); - kfree(accel_tcp); + kvfree(accel_tcp); mlx5e_fs_set_accel_tcp(fs, NULL); } @@ -397,7 +397,7 @@ int mlx5e_accel_fs_tcp_create(struct mlx5e_flow_steering *fs) err_destroy_tables: while (--i >= 0) accel_fs_tcp_destroy_table(fs, i); - kfree(accel_tcp); + kvfree(accel_tcp); mlx5e_fs_set_accel_tcp(fs, NULL); return err; } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c index 2ef36cb9555ab491b2bd318022ebbfde8b849ad0..f900709639f6e6af866f6bd46fa153aff910333c 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c @@ -368,15 +368,15 @@ static int mlx5e_macsec_init_sa(struct macsec_context *ctx, obj_attrs.aso_pdn = macsec->aso.pdn; obj_attrs.epn_state = sa->epn_state; - if (is_tx) { - obj_attrs.ssci = cpu_to_be32((__force u32)ctx->sa.tx_sa->ssci); - key = &ctx->sa.tx_sa->key; - } else { - obj_attrs.ssci = cpu_to_be32((__force u32)ctx->sa.rx_sa->ssci); - key = &ctx->sa.rx_sa->key; + key = (is_tx) ? &ctx->sa.tx_sa->key : &ctx->sa.rx_sa->key; + + if (sa->epn_state.epn_enabled) { + obj_attrs.ssci = (is_tx) ? cpu_to_be32((__force u32)ctx->sa.tx_sa->ssci) : + cpu_to_be32((__force u32)ctx->sa.rx_sa->ssci); + + memcpy(&obj_attrs.salt, &key->salt, sizeof(key->salt)); } - memcpy(&obj_attrs.salt, &key->salt, sizeof(key->salt)); obj_attrs.replay_window = ctx->secy->replay_window; obj_attrs.replay_protect = ctx->secy->replay_protect; @@ -427,15 +427,15 @@ mlx5e_macsec_get_rx_sc_from_sc_list(const struct list_head *list, sci_t sci) return NULL; } -static int mlx5e_macsec_update_rx_sa(struct mlx5e_macsec *macsec, - struct mlx5e_macsec_sa *rx_sa, - bool active) +static int macsec_rx_sa_active_update(struct macsec_context *ctx, + struct mlx5e_macsec_sa *rx_sa, + bool active) { - struct mlx5_core_dev *mdev = macsec->mdev; - struct mlx5_macsec_obj_attrs attrs = {}; + struct mlx5e_priv *priv = netdev_priv(ctx->netdev); + struct mlx5e_macsec *macsec = priv->macsec; int err = 0; - if (rx_sa->active != active) + if (rx_sa->active == active) return 0; rx_sa->active = active; @@ -444,13 +444,11 @@ static int mlx5e_macsec_update_rx_sa(struct mlx5e_macsec *macsec, return 0; } - attrs.sci = cpu_to_be64((__force u64)rx_sa->sci); - attrs.enc_key_id = rx_sa->enc_key_id; - err = mlx5e_macsec_create_object(mdev, &attrs, false, &rx_sa->macsec_obj_id); + err = mlx5e_macsec_init_sa(ctx, rx_sa, true, false); if (err) - return err; + rx_sa->active = false; - return 0; + return err; } static bool mlx5e_macsec_secy_features_validate(struct macsec_context *ctx) @@ -476,6 +474,11 @@ static bool mlx5e_macsec_secy_features_validate(struct macsec_context *ctx) return false; } + if (!ctx->secy->tx_sc.encrypt) { + netdev_err(netdev, "MACsec offload: encrypt off isn't supported\n"); + return false; + } + return true; } @@ -620,6 +623,7 @@ static int mlx5e_macsec_upd_txsa(struct macsec_context *ctx) if (tx_sa->active == ctx_tx_sa->active) goto out; + tx_sa->active = ctx_tx_sa->active; if (tx_sa->assoc_num != tx_sc->encoding_sa) goto out; @@ -635,8 +639,6 @@ static int mlx5e_macsec_upd_txsa(struct macsec_context *ctx) mlx5e_macsec_cleanup_sa(macsec, tx_sa, true); } - - tx_sa->active = ctx_tx_sa->active; out: mutex_unlock(&macsec->lock); @@ -736,9 +738,14 @@ static int mlx5e_macsec_add_rxsc(struct macsec_context *ctx) sc_xarray_element->rx_sc = rx_sc; err = xa_alloc(&macsec->sc_xarray, &sc_xarray_element->fs_id, sc_xarray_element, - XA_LIMIT(1, USHRT_MAX), GFP_KERNEL); - if (err) + XA_LIMIT(1, MLX5_MACEC_RX_FS_ID_MAX), GFP_KERNEL); + if (err) { + if (err == -EBUSY) + netdev_err(ctx->netdev, + "MACsec offload: unable to create entry for RX SC (%d Rx SCs already allocated)\n", + MLX5_MACEC_RX_FS_ID_MAX); goto destroy_sc_xarray_elemenet; + } rx_sc->md_dst = metadata_dst_alloc(0, METADATA_MACSEC, GFP_KERNEL); if (!rx_sc->md_dst) { @@ -798,16 +805,16 @@ static int mlx5e_macsec_upd_rxsc(struct macsec_context *ctx) goto out; } - rx_sc->active = ctx_rx_sc->active; if (rx_sc->active == ctx_rx_sc->active) goto out; + rx_sc->active = ctx_rx_sc->active; for (i = 0; i < MACSEC_NUM_AN; ++i) { rx_sa = rx_sc->rx_sa[i]; if (!rx_sa) continue; - err = mlx5e_macsec_update_rx_sa(macsec, rx_sa, rx_sa->active && ctx_rx_sc->active); + err = macsec_rx_sa_active_update(ctx, rx_sa, rx_sa->active && ctx_rx_sc->active); if (err) goto out; } @@ -818,16 +825,43 @@ static int mlx5e_macsec_upd_rxsc(struct macsec_context *ctx) return err; } +static void macsec_del_rxsc_ctx(struct mlx5e_macsec *macsec, struct mlx5e_macsec_rx_sc *rx_sc) +{ + struct mlx5e_macsec_sa *rx_sa; + int i; + + for (i = 0; i < MACSEC_NUM_AN; ++i) { + rx_sa = rx_sc->rx_sa[i]; + if (!rx_sa) + continue; + + mlx5e_macsec_cleanup_sa(macsec, rx_sa, false); + mlx5_destroy_encryption_key(macsec->mdev, rx_sa->enc_key_id); + + kfree(rx_sa); + rx_sc->rx_sa[i] = NULL; + } + + /* At this point the relevant MACsec offload Rx rule already removed at + * mlx5e_macsec_cleanup_sa need to wait for datapath to finish current + * Rx related data propagating using xa_erase which uses rcu to sync, + * once fs_id is erased then this rx_sc is hidden from datapath. + */ + list_del_rcu(&rx_sc->rx_sc_list_element); + xa_erase(&macsec->sc_xarray, rx_sc->sc_xarray_element->fs_id); + metadata_dst_free(rx_sc->md_dst); + kfree(rx_sc->sc_xarray_element); + kfree_rcu(rx_sc); +} + static int mlx5e_macsec_del_rxsc(struct macsec_context *ctx) { struct mlx5e_priv *priv = netdev_priv(ctx->netdev); struct mlx5e_macsec_device *macsec_device; struct mlx5e_macsec_rx_sc *rx_sc; - struct mlx5e_macsec_sa *rx_sa; struct mlx5e_macsec *macsec; struct list_head *list; int err = 0; - int i; mutex_lock(&priv->macsec->lock); @@ -849,31 +883,7 @@ static int mlx5e_macsec_del_rxsc(struct macsec_context *ctx) goto out; } - for (i = 0; i < MACSEC_NUM_AN; ++i) { - rx_sa = rx_sc->rx_sa[i]; - if (!rx_sa) - continue; - - mlx5e_macsec_cleanup_sa(macsec, rx_sa, false); - mlx5_destroy_encryption_key(macsec->mdev, rx_sa->enc_key_id); - - kfree(rx_sa); - rx_sc->rx_sa[i] = NULL; - } - -/* - * At this point the relevant MACsec offload Rx rule already removed at - * mlx5e_macsec_cleanup_sa need to wait for datapath to finish current - * Rx related data propagating using xa_erase which uses rcu to sync, - * once fs_id is erased then this rx_sc is hidden from datapath. - */ - list_del_rcu(&rx_sc->rx_sc_list_element); - xa_erase(&macsec->sc_xarray, rx_sc->sc_xarray_element->fs_id); - metadata_dst_free(rx_sc->md_dst); - kfree(rx_sc->sc_xarray_element); - - kfree_rcu(rx_sc); - + macsec_del_rxsc_ctx(macsec, rx_sc); out: mutex_unlock(&macsec->lock); @@ -1015,7 +1025,7 @@ static int mlx5e_macsec_upd_rxsa(struct macsec_context *ctx) goto out; } - err = mlx5e_macsec_update_rx_sa(macsec, rx_sa, ctx_rx_sa->active); + err = macsec_rx_sa_active_update(ctx, rx_sa, ctx_rx_sa->active); out: mutex_unlock(&macsec->lock); @@ -1155,7 +1165,7 @@ static int macsec_upd_secy_hw_address(struct macsec_context *ctx, continue; if (rx_sa->active) { - err = mlx5e_macsec_init_sa(ctx, rx_sa, false, false); + err = mlx5e_macsec_init_sa(ctx, rx_sa, true, false); if (err) goto out; } @@ -1234,7 +1244,6 @@ static int mlx5e_macsec_del_secy(struct macsec_context *ctx) struct mlx5e_priv *priv = netdev_priv(ctx->netdev); struct mlx5e_macsec_device *macsec_device; struct mlx5e_macsec_rx_sc *rx_sc, *tmp; - struct mlx5e_macsec_sa *rx_sa; struct mlx5e_macsec_sa *tx_sa; struct mlx5e_macsec *macsec; struct list_head *list; @@ -1263,28 +1272,15 @@ static int mlx5e_macsec_del_secy(struct macsec_context *ctx) } list = &macsec_device->macsec_rx_sc_list_head; - list_for_each_entry_safe(rx_sc, tmp, list, rx_sc_list_element) { - for (i = 0; i < MACSEC_NUM_AN; ++i) { - rx_sa = rx_sc->rx_sa[i]; - if (!rx_sa) - continue; - - mlx5e_macsec_cleanup_sa(macsec, rx_sa, false); - mlx5_destroy_encryption_key(macsec->mdev, rx_sa->enc_key_id); - kfree(rx_sa); - rx_sc->rx_sa[i] = NULL; - } - - list_del_rcu(&rx_sc->rx_sc_list_element); - - kfree_rcu(rx_sc); - } + list_for_each_entry_safe(rx_sc, tmp, list, rx_sc_list_element) + macsec_del_rxsc_ctx(macsec, rx_sc); kfree(macsec_device->dev_addr); macsec_device->dev_addr = NULL; list_del_rcu(&macsec_device->macsec_device_list_element); --macsec->num_of_devices; + kfree(macsec_device); out: mutex_unlock(&macsec->lock); @@ -1536,6 +1532,8 @@ static void macsec_async_event(struct work_struct *work) async_work = container_of(work, struct mlx5e_macsec_async_work, work); macsec = async_work->macsec; + mutex_lock(&macsec->lock); + mdev = async_work->mdev; obj_id = async_work->obj_id; macsec_sa = get_macsec_tx_sa_from_obj_id(macsec, obj_id); @@ -1557,6 +1555,7 @@ static void macsec_async_event(struct work_struct *work) out_async_work: kfree(async_work); + mutex_unlock(&macsec->lock); } static int macsec_obj_change_event(struct notifier_block *nb, unsigned long event, void *data) @@ -1745,7 +1744,7 @@ void mlx5e_macsec_offload_handle_rx_skb(struct net_device *netdev, if (!macsec) return; - fs_id = MLX5_MACSEC_METADATA_HANDLE(macsec_meta_data); + fs_id = MLX5_MACSEC_RX_METADAT_HANDLE(macsec_meta_data); rcu_read_lock(); sc_xarray_element = xa_load(&macsec->sc_xarray, fs_id); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.h b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.h index d580b4a91253c80c612b5093d68cfc4487743044..347380a2cd9c7fca2b903eec872f8c1978b512fb 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.h @@ -10,9 +10,11 @@ #include #include -/* Bit31 - 30: MACsec marker, Bit3-0: MACsec id */ +/* Bit31 - 30: MACsec marker, Bit15-0: MACsec id */ +#define MLX5_MACEC_RX_FS_ID_MAX USHRT_MAX /* Must be power of two */ +#define MLX5_MACSEC_RX_FS_ID_MASK MLX5_MACEC_RX_FS_ID_MAX #define MLX5_MACSEC_METADATA_MARKER(metadata) ((((metadata) >> 30) & 0x3) == 0x1) -#define MLX5_MACSEC_METADATA_HANDLE(metadata) ((metadata) & GENMASK(3, 0)) +#define MLX5_MACSEC_RX_METADAT_HANDLE(metadata) ((metadata) & MLX5_MACSEC_RX_FS_ID_MASK) struct mlx5e_priv; struct mlx5e_macsec; diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c index 1ac0cf04e8113bcf9726230dead891248c54f402..5b658a5588c640f368258fe7abffd333be36aa78 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c @@ -250,7 +250,7 @@ static int macsec_fs_tx_create(struct mlx5e_macsec_fs *macsec_fs) struct mlx5_flow_handle *rule; struct mlx5_flow_spec *spec; u32 *flow_group_in; - int err = 0; + int err; ns = mlx5_get_flow_namespace(macsec_fs->mdev, MLX5_FLOW_NAMESPACE_EGRESS_MACSEC); if (!ns) @@ -261,8 +261,10 @@ static int macsec_fs_tx_create(struct mlx5e_macsec_fs *macsec_fs) return -ENOMEM; flow_group_in = kvzalloc(inlen, GFP_KERNEL); - if (!flow_group_in) + if (!flow_group_in) { + err = -ENOMEM; goto out_spec; + } tx_tables = &tx_fs->tables; ft_crypto = &tx_tables->ft_crypto; @@ -898,7 +900,7 @@ static int macsec_fs_rx_create(struct mlx5e_macsec_fs *macsec_fs) struct mlx5_flow_handle *rule; struct mlx5_flow_spec *spec; u32 *flow_group_in; - int err = 0; + int err; ns = mlx5_get_flow_namespace(macsec_fs->mdev, MLX5_FLOW_NAMESPACE_KERNEL_RX_MACSEC); if (!ns) @@ -909,8 +911,10 @@ static int macsec_fs_rx_create(struct mlx5e_macsec_fs *macsec_fs) return -ENOMEM; flow_group_in = kvzalloc(inlen, GFP_KERNEL); - if (!flow_group_in) + if (!flow_group_in) { + err = -ENOMEM; goto free_spec; + } rx_tables = &rx_fs->tables; ft_crypto = &rx_tables->ft_crypto; @@ -1142,10 +1146,10 @@ macsec_fs_rx_add_rule(struct mlx5e_macsec_fs *macsec_fs, ft_crypto = &rx_tables->ft_crypto; /* Set bit[31 - 30] macsec marker - 0x01 */ - /* Set bit[3-0] fs id */ + /* Set bit[15-0] fs id */ MLX5_SET(set_action_in, action, action_type, MLX5_ACTION_TYPE_SET); MLX5_SET(set_action_in, action, field, MLX5_ACTION_IN_FIELD_METADATA_REG_B); - MLX5_SET(set_action_in, action, data, fs_id | BIT(30)); + MLX5_SET(set_action_in, action, data, MLX5_MACSEC_RX_METADAT_HANDLE(fs_id) | BIT(30)); MLX5_SET(set_action_in, action, offset, 0); MLX5_SET(set_action_in, action, length, 32); @@ -1205,6 +1209,7 @@ macsec_fs_rx_add_rule(struct mlx5e_macsec_fs *macsec_fs, rx_rule->rule[1] = rule; } + kvfree(spec); return macsec_rule; err: diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c index 24aa25da482b5a788bf3d76e1c51fb7925dbd7f4..1728e197558d0e711c777518232c8c4f1aefd715 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c @@ -35,7 +35,6 @@ #include "en.h" #include "en/port.h" #include "en/params.h" -#include "en/xsk/pool.h" #include "en/ptp.h" #include "lib/clock.h" #include "en/fs_ethtool.h" @@ -412,15 +411,8 @@ void mlx5e_ethtool_get_channels(struct mlx5e_priv *priv, struct ethtool_channels *ch) { mutex_lock(&priv->state_lock); - ch->max_combined = priv->max_nch; ch->combined_count = priv->channels.params.num_channels; - if (priv->xsk.refcnt) { - /* The upper half are XSK queues. */ - ch->max_combined *= 2; - ch->combined_count *= 2; - } - mutex_unlock(&priv->state_lock); } @@ -454,16 +446,6 @@ int mlx5e_ethtool_set_channels(struct mlx5e_priv *priv, mutex_lock(&priv->state_lock); - /* Don't allow changing the number of channels if there is an active - * XSK, because the numeration of the XSK and regular RQs will change. - */ - if (priv->xsk.refcnt) { - err = -EINVAL; - netdev_err(priv->netdev, "%s: AF_XDP is active, cannot change the number of channels\n", - __func__); - goto out; - } - /* Don't allow changing the number of channels if HTB offload is active, * because the numeration of the QoS SQs will change, while per-queue * qdiscs are attached. diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c index 364f04309149225b3a8795d315cd619fb838b62b..5e41dfdf79c807debf0bbb2ebc55043ed867154b 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -206,10 +206,11 @@ static void mlx5e_disable_blocking_events(struct mlx5e_priv *priv) static u16 mlx5e_mpwrq_umr_octowords(u32 entries, enum mlx5e_mpwrq_umr_mode umr_mode) { u8 umr_entry_size = mlx5e_mpwrq_umr_entry_size(umr_mode); + u32 sz; - WARN_ON_ONCE(entries * umr_entry_size % MLX5_OCTWORD); + sz = ALIGN(entries * umr_entry_size, MLX5_UMR_MTT_ALIGNMENT); - return entries * umr_entry_size / MLX5_OCTWORD; + return sz / MLX5_OCTWORD; } static inline void mlx5e_build_umr_wqe(struct mlx5e_rq *rq, @@ -5694,6 +5695,13 @@ int mlx5e_attach_netdev(struct mlx5e_priv *priv) mlx5e_fs_set_state_destroy(priv->fs, !test_bit(MLX5E_STATE_DESTROYING, &priv->state)); + /* Validate the max_wqe_size_sq capability. */ + if (WARN_ON_ONCE(mlx5e_get_max_sq_wqebbs(priv->mdev) < MLX5E_MAX_TX_WQEBBS)) { + mlx5_core_warn(priv->mdev, "MLX5E: Max SQ WQEBBs firmware capability: %u, needed %lu\n", + mlx5e_get_max_sq_wqebbs(priv->mdev), MLX5E_MAX_TX_WQEBBS); + return -EIO; + } + /* max number of channels may have changed */ max_nch = mlx5e_calc_max_nch(priv->mdev, priv->netdev, profile); if (priv->channels.params.num_channels > max_nch) { diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c index 58084650151f836102b0b09518a0525016aed3b7..a61a43fc8d5c5c0a8ff967b0fe1546f45555bd8e 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c @@ -266,7 +266,7 @@ static inline bool mlx5e_rx_cache_get(struct mlx5e_rq *rq, union mlx5e_alloc_uni addr = page_pool_get_dma_addr(au->page); /* Non-XSK always uses PAGE_SIZE. */ - dma_sync_single_for_device(rq->pdev, addr, PAGE_SIZE, DMA_FROM_DEVICE); + dma_sync_single_for_device(rq->pdev, addr, PAGE_SIZE, rq->buff.map_dir); return true; } @@ -282,8 +282,7 @@ static inline int mlx5e_page_alloc_pool(struct mlx5e_rq *rq, union mlx5e_alloc_u return -ENOMEM; /* Non-XSK always uses PAGE_SIZE. */ - addr = dma_map_page_attrs(rq->pdev, au->page, 0, PAGE_SIZE, - rq->buff.map_dir, DMA_ATTR_SKIP_CPU_SYNC); + addr = dma_map_page(rq->pdev, au->page, 0, PAGE_SIZE, rq->buff.map_dir); if (unlikely(dma_mapping_error(rq->pdev, addr))) { page_pool_recycle_direct(rq->page_pool, au->page); au->page = NULL; @@ -427,14 +426,15 @@ mlx5e_add_skb_frag(struct mlx5e_rq *rq, struct sk_buff *skb, { dma_addr_t addr = page_pool_get_dma_addr(au->page); - dma_sync_single_for_cpu(rq->pdev, addr + frag_offset, len, DMA_FROM_DEVICE); + dma_sync_single_for_cpu(rq->pdev, addr + frag_offset, len, + rq->buff.map_dir); page_ref_inc(au->page); skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, au->page, frag_offset, len, truesize); } static inline void -mlx5e_copy_skb_header(struct device *pdev, struct sk_buff *skb, +mlx5e_copy_skb_header(struct mlx5e_rq *rq, struct sk_buff *skb, struct page *page, dma_addr_t addr, int offset_from, int dma_offset, u32 headlen) { @@ -442,7 +442,8 @@ mlx5e_copy_skb_header(struct device *pdev, struct sk_buff *skb, /* Aligning len to sizeof(long) optimizes memcpy performance */ unsigned int len = ALIGN(headlen, sizeof(long)); - dma_sync_single_for_cpu(pdev, addr + dma_offset, len, DMA_FROM_DEVICE); + dma_sync_single_for_cpu(rq->pdev, addr + dma_offset, len, + rq->buff.map_dir); skb_copy_to_linear_data(skb, from, len); } @@ -1538,7 +1539,7 @@ mlx5e_skb_from_cqe_linear(struct mlx5e_rq *rq, struct mlx5e_wqe_frag_info *wi, addr = page_pool_get_dma_addr(au->page); dma_sync_single_range_for_cpu(rq->pdev, addr, wi->offset, - frag_size, DMA_FROM_DEVICE); + frag_size, rq->buff.map_dir); net_prefetch(data); prog = rcu_dereference(rq->xdp_prog); @@ -1587,7 +1588,7 @@ mlx5e_skb_from_cqe_nonlinear(struct mlx5e_rq *rq, struct mlx5e_wqe_frag_info *wi addr = page_pool_get_dma_addr(au->page); dma_sync_single_range_for_cpu(rq->pdev, addr, wi->offset, - rq->buff.frame0_sz, DMA_FROM_DEVICE); + rq->buff.frame0_sz, rq->buff.map_dir); net_prefetchw(va); /* xdp_frame data area */ net_prefetch(va + rx_headroom); @@ -1608,7 +1609,7 @@ mlx5e_skb_from_cqe_nonlinear(struct mlx5e_rq *rq, struct mlx5e_wqe_frag_info *wi addr = page_pool_get_dma_addr(au->page); dma_sync_single_for_cpu(rq->pdev, addr + wi->offset, - frag_consumed_bytes, DMA_FROM_DEVICE); + frag_consumed_bytes, rq->buff.map_dir); if (!xdp_buff_has_frags(&xdp)) { /* Init on the first fragment to avoid cold cache access @@ -1905,7 +1906,7 @@ mlx5e_skb_from_cqe_mpwrq_nonlinear(struct mlx5e_rq *rq, struct mlx5e_mpw_info *w mlx5e_fill_skb_data(skb, rq, au, byte_cnt, frag_offset); /* copy header */ addr = page_pool_get_dma_addr(head_au->page); - mlx5e_copy_skb_header(rq->pdev, skb, head_au->page, addr, + mlx5e_copy_skb_header(rq, skb, head_au->page, addr, head_offset, head_offset, headlen); /* skb linear part was allocated with headlen and aligned to long */ skb->tail += headlen; @@ -1939,7 +1940,7 @@ mlx5e_skb_from_cqe_mpwrq_linear(struct mlx5e_rq *rq, struct mlx5e_mpw_info *wi, addr = page_pool_get_dma_addr(au->page); dma_sync_single_range_for_cpu(rq->pdev, addr, head_offset, - frag_size, DMA_FROM_DEVICE); + frag_size, rq->buff.map_dir); net_prefetch(data); prog = rcu_dereference(rq->xdp_prog); @@ -1987,7 +1988,7 @@ mlx5e_skb_from_cqe_shampo(struct mlx5e_rq *rq, struct mlx5e_mpw_info *wi, if (likely(frag_size <= BIT(MLX5E_SHAMPO_LOG_MAX_HEADER_ENTRY_SIZE))) { /* build SKB around header */ - dma_sync_single_range_for_cpu(rq->pdev, head->addr, 0, frag_size, DMA_FROM_DEVICE); + dma_sync_single_range_for_cpu(rq->pdev, head->addr, 0, frag_size, rq->buff.map_dir); prefetchw(hdr); prefetch(data); skb = mlx5e_build_linear_skb(rq, hdr, frag_size, rx_headroom, head_size, 0); @@ -2009,7 +2010,7 @@ mlx5e_skb_from_cqe_shampo(struct mlx5e_rq *rq, struct mlx5e_mpw_info *wi, } prefetchw(skb->data); - mlx5e_copy_skb_header(rq->pdev, skb, head->page, head->addr, + mlx5e_copy_skb_header(rq, skb, head->page, head->addr, head_offset + rx_headroom, rx_headroom, head_size); /* skb linear part was allocated with headlen and aligned to long */ diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c index dd6fea9e9a5b7e1c48d5ba6058e01c347cfddcb8..bd9936af458270e3b0b12eab0a0b1c033631493d 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c @@ -1634,7 +1634,6 @@ set_encap_dests(struct mlx5e_priv *priv, struct mlx5e_tc_flow *flow, struct mlx5_flow_attr *attr, struct netlink_ext_ack *extack, - bool *encap_valid, bool *vf_tun) { struct mlx5e_tc_flow_parse_attr *parse_attr; @@ -1651,7 +1650,6 @@ set_encap_dests(struct mlx5e_priv *priv, parse_attr = attr->parse_attr; esw_attr = attr->esw_attr; *vf_tun = false; - *encap_valid = true; for (out_index = 0; out_index < MLX5_MAX_FLOW_FWD_VPORTS; out_index++) { struct net_device *out_dev; @@ -1668,7 +1666,7 @@ set_encap_dests(struct mlx5e_priv *priv, goto out; } err = mlx5e_attach_encap(priv, flow, attr, out_dev, out_index, - extack, &encap_dev, encap_valid); + extack, &encap_dev); dev_put(out_dev); if (err) goto out; @@ -1732,8 +1730,8 @@ mlx5e_tc_add_fdb_flow(struct mlx5e_priv *priv, struct mlx5e_tc_flow_parse_attr *parse_attr; struct mlx5_flow_attr *attr = flow->attr; struct mlx5_esw_flow_attr *esw_attr; - bool vf_tun, encap_valid; u32 max_prio, max_chain; + bool vf_tun; int err = 0; parse_attr = attr->parse_attr; @@ -1823,7 +1821,7 @@ mlx5e_tc_add_fdb_flow(struct mlx5e_priv *priv, esw_attr->int_port = int_port; } - err = set_encap_dests(priv, flow, attr, extack, &encap_valid, &vf_tun); + err = set_encap_dests(priv, flow, attr, extack, &vf_tun); if (err) goto err_out; @@ -1853,7 +1851,7 @@ mlx5e_tc_add_fdb_flow(struct mlx5e_priv *priv, * (1) there's no error * (2) there's an encap action and we don't have valid neigh */ - if (!encap_valid || flow_flag_test(flow, SLOW)) + if (flow_flag_test(flow, SLOW)) flow->rule[0] = mlx5e_tc_offload_to_slow_path(esw, flow, &parse_attr->spec); else flow->rule[0] = mlx5e_tc_offload_fdb_rules(esw, flow, &parse_attr->spec, attr); @@ -3633,10 +3631,14 @@ mlx5e_clone_flow_attr_for_post_act(struct mlx5_flow_attr *attr, attr2->action = 0; attr2->flags = 0; attr2->parse_attr = parse_attr; - attr2->esw_attr->out_count = 0; - attr2->esw_attr->split_count = 0; attr2->dest_chain = 0; attr2->dest_ft = NULL; + + if (ns_type == MLX5_FLOW_NAMESPACE_FDB) { + attr2->esw_attr->out_count = 0; + attr2->esw_attr->split_count = 0; + } + return attr2; } @@ -3755,7 +3757,7 @@ alloc_flow_post_acts(struct mlx5e_tc_flow *flow, struct netlink_ext_ack *extack) struct mlx5e_post_act *post_act = get_post_action(flow->priv); struct mlx5_flow_attr *attr, *next_attr = NULL; struct mlx5e_post_act_handle *handle; - bool vf_tun, encap_valid = true; + bool vf_tun; int err; /* This is going in reverse order as needed. @@ -3777,13 +3779,10 @@ alloc_flow_post_acts(struct mlx5e_tc_flow *flow, struct netlink_ext_ack *extack) if (list_is_last(&attr->list, &flow->attrs)) break; - err = set_encap_dests(flow->priv, flow, attr, extack, &encap_valid, &vf_tun); + err = set_encap_dests(flow->priv, flow, attr, extack, &vf_tun); if (err) goto out_free; - if (!encap_valid) - flow_flag_set(flow, SLOW); - err = actions_prepare_mod_hdr_actions(flow->priv, flow, attr, extack); if (err) goto out_free; @@ -4758,12 +4757,6 @@ int mlx5e_policer_validate(const struct flow_action *action, return -EOPNOTSUPP; } - if (act->police.rate_pkt_ps) { - NL_SET_ERR_MSG_MOD(extack, - "QoS offload not support packets per second"); - return -EOPNOTSUPP; - } - return 0; } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c index 6adca01fbdc9dda097591722244e5f1555026351..f7897ddb29c52667c52eafcee83314a765ad1f6e 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c @@ -305,6 +305,8 @@ static void mlx5e_sq_calc_wqe_attr(struct sk_buff *skb, const struct mlx5e_tx_at u16 ds_cnt_inl = 0; u16 ds_cnt_ids = 0; + /* Sync the calculation with MLX5E_MAX_TX_WQEBBS. */ + if (attr->insz) ds_cnt_ids = DIV_ROUND_UP(sizeof(struct mlx5_wqe_inline_seg) + attr->insz, MLX5_SEND_WQE_DS); @@ -317,6 +319,9 @@ static void mlx5e_sq_calc_wqe_attr(struct sk_buff *skb, const struct mlx5e_tx_at inl += VLAN_HLEN; ds_cnt_inl = DIV_ROUND_UP(inl, MLX5_SEND_WQE_DS); + if (WARN_ON_ONCE(ds_cnt_inl > MLX5E_MAX_TX_INLINE_DS)) + netdev_warn(skb->dev, "ds_cnt_inl = %u > max %u\n", ds_cnt_inl, + (u16)MLX5E_MAX_TX_INLINE_DS); ds_cnt += ds_cnt_inl; } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c index c59107fa9e6d2d8f87031ea12ef2d345461c2d7d..374e3fbdc2cf243d8ee7b1e87fe6aa65b764d976 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c @@ -1362,6 +1362,9 @@ void mlx5_eswitch_disable_sriov(struct mlx5_eswitch *esw, bool clear_vf) devl_rate_nodes_destroy(devlink); } + /* Destroy legacy fdb when disabling sriov in legacy mode. */ + if (esw->mode == MLX5_ESWITCH_LEGACY) + mlx5_eswitch_disable_locked(esw); esw->esw_funcs.num_vfs = 0; @@ -1387,12 +1390,14 @@ void mlx5_eswitch_disable_locked(struct mlx5_eswitch *esw) esw->mode == MLX5_ESWITCH_LEGACY ? "LEGACY" : "OFFLOADS", esw->esw_funcs.num_vfs, esw->enabled_vports); - esw->fdb_table.flags &= ~MLX5_ESW_FDB_CREATED; - if (esw->mode == MLX5_ESWITCH_OFFLOADS) - esw_offloads_disable(esw); - else if (esw->mode == MLX5_ESWITCH_LEGACY) - esw_legacy_disable(esw); - mlx5_esw_acls_ns_cleanup(esw); + if (esw->fdb_table.flags & MLX5_ESW_FDB_CREATED) { + esw->fdb_table.flags &= ~MLX5_ESW_FDB_CREATED; + if (esw->mode == MLX5_ESWITCH_OFFLOADS) + esw_offloads_disable(esw); + else if (esw->mode == MLX5_ESWITCH_LEGACY) + esw_legacy_disable(esw); + mlx5_esw_acls_ns_cleanup(esw); + } if (esw->mode == MLX5_ESWITCH_OFFLOADS) devl_rate_nodes_destroy(devlink); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h index f68dc2d0dbe6598d923c564be7234b1e5724f79a..3029bc1c0dd04c073f48e13bcbcc5590a7ca8209 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h @@ -736,6 +736,14 @@ void mlx5_eswitch_offloads_destroy_single_fdb(struct mlx5_eswitch *master_esw, struct mlx5_eswitch *slave_esw); int mlx5_eswitch_reload_reps(struct mlx5_eswitch *esw); +static inline int mlx5_eswitch_num_vfs(struct mlx5_eswitch *esw) +{ + if (mlx5_esw_allowed(esw)) + return esw->esw_funcs.num_vfs; + + return 0; +} + #else /* CONFIG_MLX5_ESWITCH */ /* eswitch API stubs */ static inline int mlx5_eswitch_init(struct mlx5_core_dev *dev) { return 0; } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c index 4e50df3139c68e7b02f5dc88f2b5506d4b022745..8c6c9bcb3dc3ff61befdb12d2007055e34a5115c 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c @@ -433,7 +433,7 @@ esw_setup_vport_dest(struct mlx5_flow_destination *dest, struct mlx5_flow_act *f mlx5_lag_mpesw_is_activated(esw->dev)) dest[dest_idx].type = MLX5_FLOW_DESTINATION_TYPE_UPLINK; } - if (esw_attr->dests[attr_idx].flags & MLX5_ESW_DEST_ENCAP) { + if (esw_attr->dests[attr_idx].flags & MLX5_ESW_DEST_ENCAP_VALID) { if (pkt_reformat) { flow_act->action |= MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT; flow_act->pkt_reformat = esw_attr->dests[attr_idx].pkt_reformat; @@ -2310,7 +2310,7 @@ static int esw_create_restore_table(struct mlx5_eswitch *esw) static int esw_offloads_start(struct mlx5_eswitch *esw, struct netlink_ext_ack *extack) { - int err, err1; + int err; esw->mode = MLX5_ESWITCH_OFFLOADS; err = mlx5_eswitch_enable_locked(esw, esw->dev->priv.sriov.num_vfs); @@ -2318,11 +2318,6 @@ static int esw_offloads_start(struct mlx5_eswitch *esw, NL_SET_ERR_MSG_MOD(extack, "Failed setting eswitch to offloads"); esw->mode = MLX5_ESWITCH_LEGACY; - err1 = mlx5_eswitch_enable_locked(esw, MLX5_ESWITCH_IGNORE_NUM_VFS); - if (err1) { - NL_SET_ERR_MSG_MOD(extack, - "Failed setting eswitch back to legacy"); - } mlx5_rescan_drivers(esw->dev); } if (esw->offloads.inline_mode == MLX5_INLINE_MODE_NONE) { @@ -3389,19 +3384,19 @@ int esw_offloads_enable(struct mlx5_eswitch *esw) static int esw_offloads_stop(struct mlx5_eswitch *esw, struct netlink_ext_ack *extack) { - int err, err1; + int err; esw->mode = MLX5_ESWITCH_LEGACY; + + /* If changing from switchdev to legacy mode without sriov enabled, + * no need to create legacy fdb. + */ + if (!mlx5_sriov_is_enabled(esw->dev)) + return 0; + err = mlx5_eswitch_enable_locked(esw, MLX5_ESWITCH_IGNORE_NUM_VFS); - if (err) { + if (err) NL_SET_ERR_MSG_MOD(extack, "Failed setting eswitch to legacy"); - esw->mode = MLX5_ESWITCH_OFFLOADS; - err1 = mlx5_eswitch_enable_locked(esw, MLX5_ESWITCH_IGNORE_NUM_VFS); - if (err1) { - NL_SET_ERR_MSG_MOD(extack, - "Failed setting eswitch back to offloads"); - } - } return err; } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c index ee568bf34ae25d73e675405e113c7ac5b4415ce7..edd9102583144192c91e6d5103534be02dc02469 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads_termtbl.c @@ -30,9 +30,9 @@ mlx5_eswitch_termtbl_hash(struct mlx5_flow_act *flow_act, sizeof(dest->vport.num), hash); hash = jhash((const void *)&dest->vport.vhca_id, sizeof(dest->vport.num), hash); - if (dest->vport.pkt_reformat) - hash = jhash(dest->vport.pkt_reformat, - sizeof(*dest->vport.pkt_reformat), + if (flow_act->pkt_reformat) + hash = jhash(flow_act->pkt_reformat, + sizeof(*flow_act->pkt_reformat), hash); return hash; } @@ -53,9 +53,11 @@ mlx5_eswitch_termtbl_cmp(struct mlx5_flow_act *flow_act1, if (ret) return ret; - return dest1->vport.pkt_reformat && dest2->vport.pkt_reformat ? - memcmp(dest1->vport.pkt_reformat, dest2->vport.pkt_reformat, - sizeof(*dest1->vport.pkt_reformat)) : 0; + if (flow_act1->pkt_reformat && flow_act2->pkt_reformat) + return memcmp(flow_act1->pkt_reformat, flow_act2->pkt_reformat, + sizeof(*flow_act1->pkt_reformat)); + + return !(flow_act1->pkt_reformat == flow_act2->pkt_reformat); } static int @@ -310,6 +312,8 @@ mlx5_eswitch_add_termtbl_rule(struct mlx5_eswitch *esw, for (curr_dest = 0; curr_dest < num_vport_dests; curr_dest++) { struct mlx5_termtbl_handle *tt = attr->dests[curr_dest].termtbl; + attr->dests[curr_dest].termtbl = NULL; + /* search for the destination associated with the * current term table */ diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c b/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c index 07c583996c2975b2ba1aaee7be21d13a6d060f55..1e46f9afa40e0fd2370a700ae3b73dc45d28660b 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c @@ -9,7 +9,8 @@ enum { MLX5_FW_RESET_FLAGS_RESET_REQUESTED, MLX5_FW_RESET_FLAGS_NACK_RESET_REQUEST, MLX5_FW_RESET_FLAGS_PENDING_COMP, - MLX5_FW_RESET_FLAGS_DROP_NEW_REQUESTS + MLX5_FW_RESET_FLAGS_DROP_NEW_REQUESTS, + MLX5_FW_RESET_FLAGS_RELOAD_REQUIRED }; struct mlx5_fw_reset { @@ -152,7 +153,8 @@ static void mlx5_fw_reset_complete_reload(struct mlx5_core_dev *dev) mlx5_unload_one(dev); if (mlx5_health_wait_pci_up(dev)) mlx5_core_err(dev, "reset reload flow aborted, PCI reads still not working\n"); - mlx5_load_one(dev, false); + else + mlx5_load_one(dev, false); devlink_remote_reload_actions_performed(priv_to_devlink(dev), 0, BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT) | BIT(DEVLINK_RELOAD_ACTION_FW_ACTIVATE)); @@ -405,7 +407,7 @@ static void mlx5_sync_reset_now_event(struct work_struct *work) err = mlx5_pci_link_toggle(dev); if (err) { mlx5_core_warn(dev, "mlx5_pci_link_toggle failed, no reset done, err %d\n", err); - goto done; + set_bit(MLX5_FW_RESET_FLAGS_RELOAD_REQUIRED, &fw_reset->reset_flags); } mlx5_enter_error_state(dev, true); @@ -481,6 +483,10 @@ int mlx5_fw_reset_wait_reset_done(struct mlx5_core_dev *dev) goto out; } err = fw_reset->ret; + if (test_and_clear_bit(MLX5_FW_RESET_FLAGS_RELOAD_REQUIRED, &fw_reset->reset_flags)) { + mlx5_unload_one_devl_locked(dev); + mlx5_load_one_devl_locked(dev, false); + } out: clear_bit(MLX5_FW_RESET_FLAGS_PENDING_COMP, &fw_reset->reset_flags); return err; diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c b/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c index a9f4ede4a9bf8d610a07fd89cb129a4e06b7ba6c..32c3e0a649a753fabc8508634a52323c158bfedb 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c @@ -228,9 +228,8 @@ static void mlx5_ldev_free(struct kref *ref) if (ldev->nb.notifier_call) unregister_netdevice_notifier_net(&init_net, &ldev->nb); mlx5_lag_mp_cleanup(ldev); - mlx5_lag_mpesw_cleanup(ldev); - cancel_work_sync(&ldev->mpesw_work); destroy_workqueue(ldev->wq); + mlx5_lag_mpesw_cleanup(ldev); mutex_destroy(&ldev->lock); kfree(ldev); } @@ -701,10 +700,13 @@ static bool mlx5_lag_check_prereq(struct mlx5_lag *ldev) return false; #ifdef CONFIG_MLX5_ESWITCH - dev = ldev->pf[MLX5_LAG_P1].dev; - if ((mlx5_sriov_is_enabled(dev)) && !is_mdev_switchdev_mode(dev)) - return false; + for (i = 0; i < ldev->ports; i++) { + dev = ldev->pf[i].dev; + if (mlx5_eswitch_num_vfs(dev->priv.eswitch) && !is_mdev_switchdev_mode(dev)) + return false; + } + dev = ldev->pf[MLX5_LAG_P1].dev; mode = mlx5_eswitch_mode(dev); for (i = 0; i < ldev->ports; i++) if (mlx5_eswitch_mode(ldev->pf[i].dev) != mode) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.h b/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.h index ce2ce8ccbd70eff22c9307d4bf9366bb28b00548..f30ac2de639f96cc649828ffe4d6554ad171f199 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/lag/lag.h @@ -50,6 +50,19 @@ struct lag_tracker { enum netdev_lag_hash hash_type; }; +enum mpesw_op { + MLX5_MPESW_OP_ENABLE, + MLX5_MPESW_OP_DISABLE, +}; + +struct mlx5_mpesw_work_st { + struct work_struct work; + struct mlx5_lag *lag; + enum mpesw_op op; + struct completion comp; + int result; +}; + /* LAG data of a ConnectX card. * It serves both its phys functions. */ @@ -66,7 +79,6 @@ struct mlx5_lag { struct lag_tracker tracker; struct workqueue_struct *wq; struct delayed_work bond_work; - struct work_struct mpesw_work; struct notifier_block nb; struct lag_mp lag_mp; struct mlx5_lag_port_sel port_sel; diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c b/drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c index f643202b29c6c97a6bff1a161e2214d284d46b66..c17e8f1ec91467b23e7c9576a394969394b38d65 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.c @@ -7,63 +7,95 @@ #include "eswitch.h" #include "lib/mlx5.h" -void mlx5_mpesw_work(struct work_struct *work) +static int add_mpesw_rule(struct mlx5_lag *ldev) { - struct mlx5_lag *ldev = container_of(work, struct mlx5_lag, mpesw_work); + struct mlx5_core_dev *dev = ldev->pf[MLX5_LAG_P1].dev; + int err; - mutex_lock(&ldev->lock); - mlx5_disable_lag(ldev); - mutex_unlock(&ldev->lock); -} + if (atomic_add_return(1, &ldev->lag_mpesw.mpesw_rule_count) != 1) + return 0; -static void mlx5_lag_disable_mpesw(struct mlx5_core_dev *dev) -{ - struct mlx5_lag *ldev = dev->priv.lag; + if (ldev->mode != MLX5_LAG_MODE_NONE) { + err = -EINVAL; + goto out_err; + } - if (!queue_work(ldev->wq, &ldev->mpesw_work)) - mlx5_core_warn(dev, "failed to queue work\n"); + err = mlx5_activate_lag(ldev, NULL, MLX5_LAG_MODE_MPESW, false); + if (err) { + mlx5_core_warn(dev, "Failed to create LAG in MPESW mode (%d)\n", err); + goto out_err; + } + + return 0; + +out_err: + atomic_dec(&ldev->lag_mpesw.mpesw_rule_count); + return err; } -void mlx5_lag_del_mpesw_rule(struct mlx5_core_dev *dev) +static void del_mpesw_rule(struct mlx5_lag *ldev) { - struct mlx5_lag *ldev = dev->priv.lag; + if (!atomic_dec_return(&ldev->lag_mpesw.mpesw_rule_count) && + ldev->mode == MLX5_LAG_MODE_MPESW) + mlx5_disable_lag(ldev); +} - if (!ldev) - return; +static void mlx5_mpesw_work(struct work_struct *work) +{ + struct mlx5_mpesw_work_st *mpesww = container_of(work, struct mlx5_mpesw_work_st, work); + struct mlx5_lag *ldev = mpesww->lag; mutex_lock(&ldev->lock); - if (!atomic_dec_return(&ldev->lag_mpesw.mpesw_rule_count) && - ldev->mode == MLX5_LAG_MODE_MPESW) - mlx5_lag_disable_mpesw(dev); + if (mpesww->op == MLX5_MPESW_OP_ENABLE) + mpesww->result = add_mpesw_rule(ldev); + else if (mpesww->op == MLX5_MPESW_OP_DISABLE) + del_mpesw_rule(ldev); mutex_unlock(&ldev->lock); + + complete(&mpesww->comp); } -int mlx5_lag_add_mpesw_rule(struct mlx5_core_dev *dev) +static int mlx5_lag_mpesw_queue_work(struct mlx5_core_dev *dev, + enum mpesw_op op) { struct mlx5_lag *ldev = dev->priv.lag; + struct mlx5_mpesw_work_st *work; int err = 0; if (!ldev) return 0; - mutex_lock(&ldev->lock); - if (atomic_add_return(1, &ldev->lag_mpesw.mpesw_rule_count) != 1) - goto out; + work = kzalloc(sizeof(*work), GFP_KERNEL); + if (!work) + return -ENOMEM; - if (ldev->mode != MLX5_LAG_MODE_NONE) { + INIT_WORK(&work->work, mlx5_mpesw_work); + init_completion(&work->comp); + work->op = op; + work->lag = ldev; + + if (!queue_work(ldev->wq, &work->work)) { + mlx5_core_warn(dev, "failed to queue mpesw work\n"); err = -EINVAL; goto out; } - - err = mlx5_activate_lag(ldev, NULL, MLX5_LAG_MODE_MPESW, false); - if (err) - mlx5_core_warn(dev, "Failed to create LAG in MPESW mode (%d)\n", err); - + wait_for_completion(&work->comp); + err = work->result; out: - mutex_unlock(&ldev->lock); + kfree(work); return err; } +void mlx5_lag_del_mpesw_rule(struct mlx5_core_dev *dev) +{ + mlx5_lag_mpesw_queue_work(dev, MLX5_MPESW_OP_DISABLE); +} + +int mlx5_lag_add_mpesw_rule(struct mlx5_core_dev *dev) +{ + return mlx5_lag_mpesw_queue_work(dev, MLX5_MPESW_OP_ENABLE); +} + int mlx5_lag_do_mirred(struct mlx5_core_dev *mdev, struct net_device *out_dev) { struct mlx5_lag *ldev = mdev->priv.lag; @@ -71,12 +103,9 @@ int mlx5_lag_do_mirred(struct mlx5_core_dev *mdev, struct net_device *out_dev) if (!netif_is_bond_master(out_dev) || !ldev) return 0; - mutex_lock(&ldev->lock); - if (ldev->mode == MLX5_LAG_MODE_MPESW) { - mutex_unlock(&ldev->lock); + if (ldev->mode == MLX5_LAG_MODE_MPESW) return -EOPNOTSUPP; - } - mutex_unlock(&ldev->lock); + return 0; } @@ -90,11 +119,10 @@ bool mlx5_lag_mpesw_is_activated(struct mlx5_core_dev *dev) void mlx5_lag_mpesw_init(struct mlx5_lag *ldev) { - INIT_WORK(&ldev->mpesw_work, mlx5_mpesw_work); atomic_set(&ldev->lag_mpesw.mpesw_rule_count, 0); } void mlx5_lag_mpesw_cleanup(struct mlx5_lag *ldev) { - cancel_delayed_work_sync(&ldev->bond_work); + WARN_ON(atomic_read(&ldev->lag_mpesw.mpesw_rule_count)); } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.h b/drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.h index be4abcb8fcd5bc1aca3cd4c18c8830aae6c89671..88e8daffcf92ef59a1befa47a43c3fa82fbc12d1 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/lag/mpesw.h @@ -12,7 +12,6 @@ struct lag_mpesw { atomic_t mpesw_rule_count; }; -void mlx5_mpesw_work(struct work_struct *work); int mlx5_lag_do_mirred(struct mlx5_core_dev *mdev, struct net_device *out_dev); bool mlx5_lag_mpesw_is_activated(struct mlx5_core_dev *dev); #if IS_ENABLED(CONFIG_MLX5_ESWITCH) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c index 283c4cc28944d795e05b67e187d39a465bc18ad5..e58775a7d955ae3afc39692d0751801cbba70c1a 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c @@ -1798,7 +1798,8 @@ static pci_ers_result_t mlx5_pci_err_detected(struct pci_dev *pdev, res = state == pci_channel_io_perm_failure ? PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_NEED_RESET; - mlx5_pci_trace(dev, "Exit, result = %d, %s\n", res, result2str(res)); + mlx5_core_info(dev, "%s Device state = %d pci_status: %d. Exit, result = %d, %s\n", + __func__, dev->state, dev->pci_status, res, result2str(res)); return res; } @@ -1837,7 +1838,8 @@ static pci_ers_result_t mlx5_pci_slot_reset(struct pci_dev *pdev) struct mlx5_core_dev *dev = pci_get_drvdata(pdev); int err; - mlx5_pci_trace(dev, "Enter\n"); + mlx5_core_info(dev, "%s Device state = %d pci_status: %d. Enter\n", + __func__, dev->state, dev->pci_status); err = mlx5_pci_enable_device(dev); if (err) { @@ -1859,7 +1861,8 @@ static pci_ers_result_t mlx5_pci_slot_reset(struct pci_dev *pdev) res = PCI_ERS_RESULT_RECOVERED; out: - mlx5_pci_trace(dev, "Exit, err = %d, result = %d, %s\n", err, res, result2str(res)); + mlx5_core_info(dev, "%s Device state = %d pci_status: %d. Exit, err = %d, result = %d, %s\n", + __func__, dev->state, dev->pci_status, err, res, result2str(res)); return res; } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/sf/dev/dev.c b/drivers/net/ethernet/mellanox/mlx5/core/sf/dev/dev.c index 7da012ff0d4192847b3b8e4bcd16d49d1916479b..8e2abbab05f04aa6df64b9ef0a5fbdf864faaea1 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/sf/dev/dev.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/sf/dev/dev.c @@ -18,6 +18,10 @@ struct mlx5_sf_dev_table { phys_addr_t base_address; u64 sf_bar_length; struct notifier_block nb; + struct mutex table_lock; /* Serializes sf life cycle and vhca state change handler */ + struct workqueue_struct *active_wq; + struct work_struct work; + u8 stop_active_wq:1; struct mlx5_core_dev *dev; }; @@ -168,6 +172,7 @@ mlx5_sf_dev_state_change_handler(struct notifier_block *nb, unsigned long event_ return 0; sf_index = event->function_id - base_id; + mutex_lock(&table->table_lock); sf_dev = xa_load(&table->devices, sf_index); switch (event->new_vhca_state) { case MLX5_VHCA_STATE_INVALID: @@ -191,6 +196,7 @@ mlx5_sf_dev_state_change_handler(struct notifier_block *nb, unsigned long event_ default: break; } + mutex_unlock(&table->table_lock); return 0; } @@ -215,6 +221,78 @@ static int mlx5_sf_dev_vhca_arm_all(struct mlx5_sf_dev_table *table) return 0; } +static void mlx5_sf_dev_add_active_work(struct work_struct *work) +{ + struct mlx5_sf_dev_table *table = container_of(work, struct mlx5_sf_dev_table, work); + u32 out[MLX5_ST_SZ_DW(query_vhca_state_out)] = {}; + struct mlx5_core_dev *dev = table->dev; + u16 max_functions; + u16 function_id; + u16 sw_func_id; + int err = 0; + u8 state; + int i; + + max_functions = mlx5_sf_max_functions(dev); + function_id = MLX5_CAP_GEN(dev, sf_base_id); + for (i = 0; i < max_functions; i++, function_id++) { + if (table->stop_active_wq) + return; + err = mlx5_cmd_query_vhca_state(dev, function_id, out, sizeof(out)); + if (err) + /* A failure of specific vhca doesn't mean others will + * fail as well. + */ + continue; + state = MLX5_GET(query_vhca_state_out, out, vhca_state_context.vhca_state); + if (state != MLX5_VHCA_STATE_ACTIVE) + continue; + + sw_func_id = MLX5_GET(query_vhca_state_out, out, vhca_state_context.sw_function_id); + mutex_lock(&table->table_lock); + /* Don't probe device which is already probe */ + if (!xa_load(&table->devices, i)) + mlx5_sf_dev_add(dev, i, function_id, sw_func_id); + /* There is a race where SF got inactive after the query + * above. e.g.: the query returns that the state of the + * SF is active, and after that the eswitch manager set it to + * inactive. + * This case cannot be managed in SW, since the probing of the + * SF is on one system, and the inactivation is on a different + * system. + * If the inactive is done after the SF perform init_hca(), + * the SF will fully probe and then removed. If it was + * done before init_hca(), the SF probe will fail. + */ + mutex_unlock(&table->table_lock); + } +} + +/* In case SFs are generated externally, probe active SFs */ +static int mlx5_sf_dev_queue_active_work(struct mlx5_sf_dev_table *table) +{ + if (MLX5_CAP_GEN(table->dev, eswitch_manager)) + return 0; /* the table is local */ + + /* Use a workqueue to probe active SFs, which are in large + * quantity and may take up to minutes to probe. + */ + table->active_wq = create_singlethread_workqueue("mlx5_active_sf"); + if (!table->active_wq) + return -ENOMEM; + INIT_WORK(&table->work, &mlx5_sf_dev_add_active_work); + queue_work(table->active_wq, &table->work); + return 0; +} + +static void mlx5_sf_dev_destroy_active_work(struct mlx5_sf_dev_table *table) +{ + if (table->active_wq) { + table->stop_active_wq = true; + destroy_workqueue(table->active_wq); + } +} + void mlx5_sf_dev_table_create(struct mlx5_core_dev *dev) { struct mlx5_sf_dev_table *table; @@ -240,11 +318,17 @@ void mlx5_sf_dev_table_create(struct mlx5_core_dev *dev) table->base_address = pci_resource_start(dev->pdev, 2); table->max_sfs = max_sfs; xa_init(&table->devices); + mutex_init(&table->table_lock); dev->priv.sf_dev_table = table; err = mlx5_vhca_event_notifier_register(dev, &table->nb); if (err) goto vhca_err; + + err = mlx5_sf_dev_queue_active_work(table); + if (err) + goto add_active_err; + err = mlx5_sf_dev_vhca_arm_all(table); if (err) goto arm_err; @@ -252,6 +336,8 @@ void mlx5_sf_dev_table_create(struct mlx5_core_dev *dev) return; arm_err: + mlx5_sf_dev_destroy_active_work(table); +add_active_err: mlx5_vhca_event_notifier_unregister(dev, &table->nb); vhca_err: table->max_sfs = 0; @@ -279,7 +365,9 @@ void mlx5_sf_dev_table_destroy(struct mlx5_core_dev *dev) if (!table) return; + mlx5_sf_dev_destroy_active_work(table); mlx5_vhca_event_notifier_unregister(dev, &table->nb); + mutex_destroy(&table->table_lock); /* Now that event handler is not running, it is safe to destroy * the sf device without race. diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_table.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_table.c index 31d443dd838622fc9d7dd5ea56483d1bd018ea7b..f68461b1339120e43d5d07a4ef6468aa14135d37 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_table.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/dr_table.c @@ -46,7 +46,7 @@ static int dr_table_set_miss_action_nic(struct mlx5dr_domain *dmn, int mlx5dr_table_set_miss_action(struct mlx5dr_table *tbl, struct mlx5dr_action *action) { - int ret; + int ret = -EOPNOTSUPP; if (action && action->action_type != DR_ACTION_TYP_FT) return -EOPNOTSUPP; @@ -67,6 +67,9 @@ int mlx5dr_table_set_miss_action(struct mlx5dr_table *tbl, goto out; } + if (ret) + goto out; + /* Release old action */ if (tbl->miss_action) refcount_dec(&tbl->miss_action->refcount); diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c index 4efccd942fb89bebb25298b40b85f52e124bb76c..1290b2d3eae6b9bc3cf704063bbf68919fdf674b 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c @@ -3470,6 +3470,8 @@ mlxsw_sp_switchdev_vxlan_fdb_del(struct mlxsw_sp *mlxsw_sp, u16 vid; vxlan_fdb_info = &switchdev_work->vxlan_fdb_info; + if (!vxlan_fdb_info->offloaded) + return; bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev); if (!bridge_device) diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_ethtool.c b/drivers/net/ethernet/microchip/lan966x/lan966x_ethtool.c index fea42542be2806853cc5d7d845ad5d8b41f7f052..06811c60d598e16a6d8bd8a739ead87c757d7b65 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_ethtool.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_ethtool.c @@ -716,6 +716,9 @@ int lan966x_stats_init(struct lan966x *lan966x) snprintf(queue_name, sizeof(queue_name), "%s-stats", dev_name(lan966x->dev)); lan966x->stats_queue = create_singlethread_workqueue(queue_name); + if (!lan966x->stats_queue) + return -ENOMEM; + INIT_DELAYED_WORK(&lan966x->stats_work, lan966x_check_stats_work); queue_delayed_work(lan966x->stats_queue, &lan966x->stats_work, LAN966X_STATS_CHECK_DELAY); diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c index a42035cec611c3b141585103735a171472bd09c8..e6948939ccc2b4064a049c678aebf5d4e09189c2 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c @@ -414,13 +414,15 @@ static struct sk_buff *lan966x_fdma_rx_get_frame(struct lan966x_rx *rx) /* Get the received frame and unmap it */ db = &rx->dcbs[rx->dcb_index].db[rx->db_index]; page = rx->page[rx->dcb_index][rx->db_index]; + + dma_sync_single_for_cpu(lan966x->dev, (dma_addr_t)db->dataptr, + FDMA_DCB_STATUS_BLOCKL(db->status), + DMA_FROM_DEVICE); + skb = build_skb(page_address(page), PAGE_SIZE << rx->page_order); if (unlikely(!skb)) goto unmap_page; - dma_unmap_single(lan966x->dev, (dma_addr_t)db->dataptr, - FDMA_DCB_STATUS_BLOCKL(db->status), - DMA_FROM_DEVICE); skb_put(skb, FDMA_DCB_STATUS_BLOCKL(db->status)); lan966x_ifh_get_src_port(skb->data, &src_port); @@ -429,6 +431,10 @@ static struct sk_buff *lan966x_fdma_rx_get_frame(struct lan966x_rx *rx) if (WARN_ON(src_port >= lan966x->num_phys_ports)) goto free_skb; + dma_unmap_single_attrs(lan966x->dev, (dma_addr_t)db->dataptr, + PAGE_SIZE << rx->page_order, DMA_FROM_DEVICE, + DMA_ATTR_SKIP_CPU_SYNC); + skb->dev = lan966x->ports[src_port]->dev; skb_pull(skb, IFH_LEN * sizeof(u32)); @@ -454,9 +460,9 @@ static struct sk_buff *lan966x_fdma_rx_get_frame(struct lan966x_rx *rx) free_skb: kfree_skb(skb); unmap_page: - dma_unmap_page(lan966x->dev, (dma_addr_t)db->dataptr, - FDMA_DCB_STATUS_BLOCKL(db->status), - DMA_FROM_DEVICE); + dma_unmap_single_attrs(lan966x->dev, (dma_addr_t)db->dataptr, + PAGE_SIZE << rx->page_order, DMA_FROM_DEVICE, + DMA_ATTR_SKIP_CPU_SYNC); __free_pages(page, rx->page_order); return NULL; @@ -668,12 +674,14 @@ static int lan966x_fdma_get_max_mtu(struct lan966x *lan966x) int i; for (i = 0; i < lan966x->num_phys_ports; ++i) { + struct lan966x_port *port; int mtu; - if (!lan966x->ports[i]) + port = lan966x->ports[i]; + if (!port) continue; - mtu = lan966x->ports[i]->dev->mtu; + mtu = lan_rd(lan966x, DEV_MAC_MAXLEN_CFG(port->chip_port)); if (mtu > max_mtu) max_mtu = mtu; } @@ -733,6 +741,8 @@ int lan966x_fdma_change_mtu(struct lan966x *lan966x) max_mtu = lan966x_fdma_get_max_mtu(lan966x); max_mtu += IFH_LEN * sizeof(u32); + max_mtu += SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); + max_mtu += VLAN_HLEN * 2; if (round_up(max_mtu, PAGE_SIZE) / PAGE_SIZE - 1 == lan966x->rx.page_order) diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_main.c b/drivers/net/ethernet/microchip/lan966x/lan966x_main.c index be2fd030cccbe0427cabd136f30f42904ebb709f..20ee5b28f70a5c59f1024d5ec53409d13588315a 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_main.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_main.c @@ -386,7 +386,7 @@ static int lan966x_port_change_mtu(struct net_device *dev, int new_mtu) int old_mtu = dev->mtu; int err; - lan_wr(DEV_MAC_MAXLEN_CFG_MAX_LEN_SET(new_mtu), + lan_wr(DEV_MAC_MAXLEN_CFG_MAX_LEN_SET(LAN966X_HW_MTU(new_mtu)), lan966x, DEV_MAC_MAXLEN_CFG(port->chip_port)); dev->mtu = new_mtu; @@ -395,7 +395,7 @@ static int lan966x_port_change_mtu(struct net_device *dev, int new_mtu) err = lan966x_fdma_change_mtu(lan966x); if (err) { - lan_wr(DEV_MAC_MAXLEN_CFG_MAX_LEN_SET(old_mtu), + lan_wr(DEV_MAC_MAXLEN_CFG_MAX_LEN_SET(LAN966X_HW_MTU(old_mtu)), lan966x, DEV_MAC_MAXLEN_CFG(port->chip_port)); dev->mtu = old_mtu; } diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_main.h b/drivers/net/ethernet/microchip/lan966x/lan966x_main.h index 9656071b8289e076be984a5b5ebd77181e39042a..4ec33999e4df60e7ac6afda2717c5ac62e48af5c 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_main.h +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_main.h @@ -26,6 +26,8 @@ #define LAN966X_BUFFER_MEMORY (160 * 1024) #define LAN966X_BUFFER_MIN_SZ 60 +#define LAN966X_HW_MTU(mtu) ((mtu) + ETH_HLEN + ETH_FCS_LEN) + #define PGID_AGGR 64 #define PGID_SRC 80 #define PGID_ENTRIES 89 diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_regs.h b/drivers/net/ethernet/microchip/lan966x/lan966x_regs.h index 1d90b93dd417a15c2b86dbfd79de2be0693b30a6..fb5087fef22e10e290c62cf3be4510609636df5b 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_regs.h +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_regs.h @@ -585,6 +585,21 @@ enum lan966x_target { #define DEV_MAC_MAXLEN_CFG_MAX_LEN_GET(x)\ FIELD_GET(DEV_MAC_MAXLEN_CFG_MAX_LEN, x) +/* DEV:MAC_CFG_STATUS:MAC_TAGS_CFG */ +#define DEV_MAC_TAGS_CFG(t) __REG(TARGET_DEV, t, 8, 28, 0, 1, 44, 12, 0, 1, 4) + +#define DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA BIT(1) +#define DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA_SET(x)\ + FIELD_PREP(DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA, x) +#define DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA_GET(x)\ + FIELD_GET(DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA, x) + +#define DEV_MAC_TAGS_CFG_VLAN_AWR_ENA BIT(0) +#define DEV_MAC_TAGS_CFG_VLAN_AWR_ENA_SET(x)\ + FIELD_PREP(DEV_MAC_TAGS_CFG_VLAN_AWR_ENA, x) +#define DEV_MAC_TAGS_CFG_VLAN_AWR_ENA_GET(x)\ + FIELD_GET(DEV_MAC_TAGS_CFG_VLAN_AWR_ENA, x) + /* DEV:MAC_CFG_STATUS:MAC_IFG_CFG */ #define DEV_MAC_IFG_CFG(t) __REG(TARGET_DEV, t, 8, 28, 0, 1, 44, 20, 0, 1, 4) diff --git a/drivers/net/ethernet/microchip/lan966x/lan966x_vlan.c b/drivers/net/ethernet/microchip/lan966x/lan966x_vlan.c index 8d7260cd7da9c19965d9844e3c90af647dadbb72..3c44660128daedada078e565419542dce2f5bd8e 100644 --- a/drivers/net/ethernet/microchip/lan966x/lan966x_vlan.c +++ b/drivers/net/ethernet/microchip/lan966x/lan966x_vlan.c @@ -169,6 +169,12 @@ void lan966x_vlan_port_apply(struct lan966x_port *port) ANA_VLAN_CFG_VLAN_POP_CNT, lan966x, ANA_VLAN_CFG(port->chip_port)); + lan_rmw(DEV_MAC_TAGS_CFG_VLAN_AWR_ENA_SET(port->vlan_aware) | + DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA_SET(port->vlan_aware), + DEV_MAC_TAGS_CFG_VLAN_AWR_ENA | + DEV_MAC_TAGS_CFG_VLAN_DBL_AWR_ENA, + lan966x, DEV_MAC_TAGS_CFG(port->chip_port)); + /* Drop frames with multicast source address */ val = ANA_DROP_CFG_DROP_MC_SMAC_ENA_SET(1); if (port->vlan_aware && !pvid) diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c b/drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c index 6b0febcb7fa9938946d7552f8bdaad0fbcfe62b1..01f3a3a41cdb32ecc9e4c87b150852efec89e02e 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c @@ -1253,6 +1253,9 @@ int sparx_stats_init(struct sparx5 *sparx5) snprintf(queue_name, sizeof(queue_name), "%s-stats", dev_name(sparx5->dev)); sparx5->stats_queue = create_singlethread_workqueue(queue_name); + if (!sparx5->stats_queue) + return -ENOMEM; + INIT_DELAYED_WORK(&sparx5->stats_work, sparx5_check_stats_work); queue_delayed_work(sparx5->stats_queue, &sparx5->stats_work, SPX5_STATS_CHECK_DELAY); diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c index 62a325e963450b393e1003dcabed9a650a431aca..eeac04b846382a0a78418fa665e9507dc4f69e67 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_main.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main.c @@ -659,6 +659,9 @@ static int sparx5_start(struct sparx5 *sparx5) snprintf(queue_name, sizeof(queue_name), "%s-mact", dev_name(sparx5->dev)); sparx5->mact_queue = create_singlethread_workqueue(queue_name); + if (!sparx5->mact_queue) + return -ENOMEM; + INIT_DELAYED_WORK(&sparx5->mact_work, sparx5_mact_pull_work); queue_delayed_work(sparx5->mact_queue, &sparx5->mact_work, SPX5_MACT_PULL_DELAY); diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c b/drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c index 19516ccad5338c511c8e2ea132cb55681034a468..d078156581d547174255b267e41c4e005976f3c6 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c @@ -104,7 +104,7 @@ static int sparx5_port_open(struct net_device *ndev) err = phylink_of_phy_connect(port->phylink, port->of_node, 0); if (err) { netdev_err(ndev, "Could not attach to PHY\n"); - return err; + goto err_connect; } phylink_start(port->phylink); @@ -116,10 +116,20 @@ static int sparx5_port_open(struct net_device *ndev) err = sparx5_serdes_set(port->sparx5, port, &port->conf); else err = phy_power_on(port->serdes); - if (err) + if (err) { netdev_err(ndev, "%s failed\n", __func__); + goto out_power; + } } + return 0; + +out_power: + phylink_stop(port->phylink); + phylink_disconnect_phy(port->phylink); +err_connect: + sparx5_port_enable(port, false); + return err; } diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_tc.c b/drivers/net/ethernet/microchip/sparx5/sparx5_tc.c index e05429c751eefb150930d8f60a33f3573c392cad..dc2c3756e3a21f801ecad152fe094cb8a7736510 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_tc.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_tc.c @@ -90,13 +90,10 @@ static int sparx5_tc_setup_qdisc_ets(struct net_device *ndev, } } - sparx5_tc_ets_add(port, params); - break; + return sparx5_tc_ets_add(port, params); case TC_ETS_DESTROY: - sparx5_tc_ets_del(port); - - break; + return sparx5_tc_ets_del(port); case TC_ETS_GRAFT: return -EOPNOTSUPP; diff --git a/drivers/net/ethernet/neterion/s2io.c b/drivers/net/ethernet/neterion/s2io.c index dcf8212119f9cd8415a175c115018f0c6097b525..1d3c4474b7cb4dff187291f268f65ad44b2aba10 100644 --- a/drivers/net/ethernet/neterion/s2io.c +++ b/drivers/net/ethernet/neterion/s2io.c @@ -7128,9 +7128,8 @@ static int s2io_card_up(struct s2io_nic *sp) if (ret) { DBG_PRINT(ERR_DBG, "%s: Out of memory in Open\n", dev->name); - s2io_reset(sp); - free_rx_buffers(sp); - return -ENOMEM; + ret = -ENOMEM; + goto err_fill_buff; } DBG_PRINT(INFO_DBG, "Buf in ring:%d is %d:\n", i, ring->rx_bufs_left); @@ -7168,18 +7167,16 @@ static int s2io_card_up(struct s2io_nic *sp) /* Enable Rx Traffic and interrupts on the NIC */ if (start_nic(sp)) { DBG_PRINT(ERR_DBG, "%s: Starting NIC failed\n", dev->name); - s2io_reset(sp); - free_rx_buffers(sp); - return -ENODEV; + ret = -ENODEV; + goto err_out; } /* Add interrupt service routine */ if (s2io_add_isr(sp) != 0) { if (sp->config.intr_type == MSI_X) s2io_rem_isr(sp); - s2io_reset(sp); - free_rx_buffers(sp); - return -ENODEV; + ret = -ENODEV; + goto err_out; } timer_setup(&sp->alarm_timer, s2io_alarm_handle, 0); @@ -7199,6 +7196,20 @@ static int s2io_card_up(struct s2io_nic *sp) } return 0; + +err_out: + if (config->napi) { + if (config->intr_type == MSI_X) { + for (i = 0; i < sp->config.rx_ring_num; i++) + napi_disable(&sp->mac_control.rings[i].napi); + } else { + napi_disable(&sp->napi); + } + } +err_fill_buff: + s2io_reset(sp); + free_rx_buffers(sp); + return ret; } /** diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c index 405786c003347b954d891604219c6eeba962eb1d..cb08d7bf9524166aef97913b1b03fbf8ea0eb0b8 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c @@ -341,7 +341,7 @@ int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port) return ret; attrs.split = eth_port.is_split; - attrs.splittable = !attrs.split; + attrs.splittable = eth_port.port_lanes > 1 && !attrs.split; attrs.lanes = eth_port.port_lanes; attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL; attrs.phys.port_number = eth_port.label_port; diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c index 22a5d241908404d94a4c26e25ff614dea11fabca..991059d6cb32eb457e501e2af5c0b10e9c25bb56 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c @@ -1432,6 +1432,9 @@ nfp_port_get_module_info(struct net_device *netdev, u8 data; port = nfp_port_from_netdev(netdev); + if (!port) + return -EOPNOTSUPP; + /* update port state to get latest interface */ set_bit(NFP_PORT_CHANGED, &port->flags); eth_port = nfp_port_get_eth_port(port); @@ -1477,15 +1480,15 @@ nfp_port_get_module_info(struct net_device *netdev, if (data < 0x3) { modinfo->type = ETH_MODULE_SFF_8436; - modinfo->eeprom_len = ETH_MODULE_SFF_8436_LEN; + modinfo->eeprom_len = ETH_MODULE_SFF_8436_MAX_LEN; } else { modinfo->type = ETH_MODULE_SFF_8636; - modinfo->eeprom_len = ETH_MODULE_SFF_8636_LEN; + modinfo->eeprom_len = ETH_MODULE_SFF_8636_MAX_LEN; } break; case NFP_INTERFACE_QSFP28: modinfo->type = ETH_MODULE_SFF_8636; - modinfo->eeprom_len = ETH_MODULE_SFF_8636_LEN; + modinfo->eeprom_len = ETH_MODULE_SFF_8636_MAX_LEN; break; default: netdev_err(netdev, "Unsupported module 0x%x detected\n", diff --git a/drivers/net/ethernet/ni/nixge.c b/drivers/net/ethernet/ni/nixge.c index 3db4a243174194bdc25f880f4cd6a4f6c939aac5..62320be4de5ae86464327803e01943e81a8c694a 100644 --- a/drivers/net/ethernet/ni/nixge.c +++ b/drivers/net/ethernet/ni/nixge.c @@ -249,25 +249,26 @@ static void nixge_hw_dma_bd_release(struct net_device *ndev) struct sk_buff *skb; int i; - for (i = 0; i < RX_BD_NUM; i++) { - phys_addr = nixge_hw_dma_bd_get_addr(&priv->rx_bd_v[i], - phys); - - dma_unmap_single(ndev->dev.parent, phys_addr, - NIXGE_MAX_JUMBO_FRAME_SIZE, - DMA_FROM_DEVICE); - - skb = (struct sk_buff *)(uintptr_t) - nixge_hw_dma_bd_get_addr(&priv->rx_bd_v[i], - sw_id_offset); - dev_kfree_skb(skb); - } + if (priv->rx_bd_v) { + for (i = 0; i < RX_BD_NUM; i++) { + phys_addr = nixge_hw_dma_bd_get_addr(&priv->rx_bd_v[i], + phys); + + dma_unmap_single(ndev->dev.parent, phys_addr, + NIXGE_MAX_JUMBO_FRAME_SIZE, + DMA_FROM_DEVICE); + + skb = (struct sk_buff *)(uintptr_t) + nixge_hw_dma_bd_get_addr(&priv->rx_bd_v[i], + sw_id_offset); + dev_kfree_skb(skb); + } - if (priv->rx_bd_v) dma_free_coherent(ndev->dev.parent, sizeof(*priv->rx_bd_v) * RX_BD_NUM, priv->rx_bd_v, priv->rx_bd_p); + } if (priv->tx_skb) devm_kfree(ndev->dev.parent, priv->tx_skb); @@ -900,6 +901,7 @@ static int nixge_open(struct net_device *ndev) err_rx_irq: free_irq(priv->tx_irq, ndev); err_tx_irq: + napi_disable(&priv->napi); phy_stop(phy); phy_disconnect(phy); tasklet_kill(&priv->dma_err_tasklet); diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c index 3f2c30184752d88fa170c0a71cf083ba75b84312..28b7cec485ef0ee9ce23e972ac91e122bbdfae34 100644 --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c @@ -1143,6 +1143,7 @@ static void pch_gbe_tx_queue(struct pch_gbe_adapter *adapter, buffer_info->dma = 0; buffer_info->time_stamp = 0; tx_ring->next_to_use = ring_num; + dev_kfree_skb_any(skb); return; } buffer_info->mapped = true; @@ -2459,6 +2460,7 @@ static void pch_gbe_remove(struct pci_dev *pdev) unregister_netdev(netdev); pch_gbe_phy_hw_reset(&adapter->hw); + pci_dev_put(adapter->ptp_pdev); free_netdev(netdev); } @@ -2533,7 +2535,7 @@ static int pch_gbe_probe(struct pci_dev *pdev, /* setup the private structure */ ret = pch_gbe_sw_init(adapter); if (ret) - goto err_free_netdev; + goto err_put_dev; /* Initialize PHY */ ret = pch_gbe_init_phy(adapter); @@ -2591,6 +2593,8 @@ static int pch_gbe_probe(struct pci_dev *pdev, err_free_adapter: pch_gbe_phy_hw_reset(&adapter->hw); +err_put_dev: + pci_dev_put(adapter->ptp_pdev); err_free_netdev: free_netdev(netdev); return ret; diff --git a/drivers/net/ethernet/pensando/ionic/ionic_main.c b/drivers/net/ethernet/pensando/ionic/ionic_main.c index 56f93b030551909339e6027153326d67e9104199..5456c2b15d9bde90b2f52d54b1eb9898fbeb0098 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_main.c +++ b/drivers/net/ethernet/pensando/ionic/ionic_main.c @@ -687,8 +687,14 @@ int ionic_port_reset(struct ionic *ionic) static int __init ionic_init_module(void) { + int ret; + ionic_debugfs_create(); - return ionic_bus_register_driver(); + ret = ionic_bus_register_driver(); + if (ret) + ionic_debugfs_destroy(); + + return ret; } static void __exit ionic_cleanup_module(void) diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethernet/qlogic/qed/qed_mcp.c index 9fb1fa479d4b392a37450c4509f2dbd6f18a5c13..16e6bd4661433f9b6d4c216eed055605df4bfe3c 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c @@ -767,34 +767,34 @@ static int qed_mcp_cancel_load_req(struct qed_hwfn *p_hwfn, return rc; } -#define CONFIG_QEDE_BITMAP_IDX BIT(0) -#define CONFIG_QED_SRIOV_BITMAP_IDX BIT(1) -#define CONFIG_QEDR_BITMAP_IDX BIT(2) -#define CONFIG_QEDF_BITMAP_IDX BIT(4) -#define CONFIG_QEDI_BITMAP_IDX BIT(5) -#define CONFIG_QED_LL2_BITMAP_IDX BIT(6) +#define BITMAP_IDX_FOR_CONFIG_QEDE BIT(0) +#define BITMAP_IDX_FOR_CONFIG_QED_SRIOV BIT(1) +#define BITMAP_IDX_FOR_CONFIG_QEDR BIT(2) +#define BITMAP_IDX_FOR_CONFIG_QEDF BIT(4) +#define BITMAP_IDX_FOR_CONFIG_QEDI BIT(5) +#define BITMAP_IDX_FOR_CONFIG_QED_LL2 BIT(6) static u32 qed_get_config_bitmap(void) { u32 config_bitmap = 0x0; if (IS_ENABLED(CONFIG_QEDE)) - config_bitmap |= CONFIG_QEDE_BITMAP_IDX; + config_bitmap |= BITMAP_IDX_FOR_CONFIG_QEDE; if (IS_ENABLED(CONFIG_QED_SRIOV)) - config_bitmap |= CONFIG_QED_SRIOV_BITMAP_IDX; + config_bitmap |= BITMAP_IDX_FOR_CONFIG_QED_SRIOV; if (IS_ENABLED(CONFIG_QED_RDMA)) - config_bitmap |= CONFIG_QEDR_BITMAP_IDX; + config_bitmap |= BITMAP_IDX_FOR_CONFIG_QEDR; if (IS_ENABLED(CONFIG_QED_FCOE)) - config_bitmap |= CONFIG_QEDF_BITMAP_IDX; + config_bitmap |= BITMAP_IDX_FOR_CONFIG_QEDF; if (IS_ENABLED(CONFIG_QED_ISCSI)) - config_bitmap |= CONFIG_QEDI_BITMAP_IDX; + config_bitmap |= BITMAP_IDX_FOR_CONFIG_QEDI; if (IS_ENABLED(CONFIG_QED_LL2)) - config_bitmap |= CONFIG_QED_LL2_BITMAP_IDX; + config_bitmap |= BITMAP_IDX_FOR_CONFIG_QED_LL2; return config_bitmap; } diff --git a/drivers/net/ethernet/qlogic/qla3xxx.c b/drivers/net/ethernet/qlogic/qla3xxx.c index 76072f8c3d2fbcdbecd3a35aee734cc2cc9b26ff..0d57ffcedf0c6b59f566185625e8d07c28992618 100644 --- a/drivers/net/ethernet/qlogic/qla3xxx.c +++ b/drivers/net/ethernet/qlogic/qla3xxx.c @@ -2471,6 +2471,7 @@ static netdev_tx_t ql3xxx_send(struct sk_buff *skb, skb_shinfo(skb)->nr_frags); if (tx_cb->seg_count == -1) { netdev_err(ndev, "%s: invalid segment count!\n", __func__); + dev_kfree_skb_any(skb); return NETDEV_TX_OK; } diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c index bd06076803295fb5a6a0946db8be6bf4ad901076..2fd5c6fdb5003be3250d569ab4cad9c946a8ca9d 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c @@ -2991,7 +2991,7 @@ static void qlcnic_83xx_recover_driver_lock(struct qlcnic_adapter *adapter) QLCWRX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK, val); dev_info(&adapter->pdev->dev, "%s: lock recovery initiated\n", __func__); - msleep(QLC_83XX_DRV_LOCK_RECOVERY_DELAY); + mdelay(QLC_83XX_DRV_LOCK_RECOVERY_DELAY); val = QLCRDX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK); id = ((val >> 2) & 0xF); if (id == adapter->portnum) { @@ -3027,7 +3027,7 @@ int qlcnic_83xx_lock_driver(struct qlcnic_adapter *adapter) if (status) break; - msleep(QLC_83XX_DRV_LOCK_WAIT_DELAY); + mdelay(QLC_83XX_DRV_LOCK_WAIT_DELAY); i++; if (i == 1) diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c index 36324126db6db5998846031bf2ca0d2da6217ae1..6bc9233262682b821c309158148f74ebfb390971 100644 --- a/drivers/net/ethernet/renesas/ravb_main.c +++ b/drivers/net/ethernet/renesas/ravb_main.c @@ -3020,6 +3020,7 @@ static int __maybe_unused ravb_resume(struct device *dev) ret = ravb_open(ndev); if (ret < 0) return ret; + ravb_set_rx_mode(ndev); netif_device_attach(ndev); } diff --git a/drivers/net/ethernet/sfc/ef100_netdev.c b/drivers/net/ethernet/sfc/ef100_netdev.c index 88fa29572e230ec0691a7ca61f30c406b21d72cd..ddcc325ed57018ccd828b58260742faf1d03c106 100644 --- a/drivers/net/ethernet/sfc/ef100_netdev.c +++ b/drivers/net/ethernet/sfc/ef100_netdev.c @@ -218,6 +218,7 @@ netdev_tx_t __ef100_hard_start_xmit(struct sk_buff *skb, skb->len, skb->data_len, channel->channel); if (!efx->n_channels || !efx->n_tx_channels || !channel) { netif_stop_queue(net_dev); + dev_kfree_skb_any(skb); goto err; } diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c index 054d5ce6029e413df454106c464e331bf4d5ba94..0556542d7a6b6446e0d38c8fcd09123b1cd9f23e 100644 --- a/drivers/net/ethernet/sfc/efx.c +++ b/drivers/net/ethernet/sfc/efx.c @@ -1059,8 +1059,10 @@ static int efx_pci_probe(struct pci_dev *pci_dev, /* Allocate and initialise a struct net_device */ net_dev = alloc_etherdev_mq(sizeof(probe_data), EFX_MAX_CORE_TX_QUEUES); - if (!net_dev) - return -ENOMEM; + if (!net_dev) { + rc = -ENOMEM; + goto fail0; + } probe_ptr = netdev_priv(net_dev); *probe_ptr = probe_data; efx->net_dev = net_dev; @@ -1132,6 +1134,8 @@ static int efx_pci_probe(struct pci_dev *pci_dev, WARN_ON(rc > 0); netif_dbg(efx, drv, efx->net_dev, "initialisation failed. rc=%d\n", rc); free_netdev(net_dev); + fail0: + kfree(probe_data); return rc; } diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c index 0a2afc1a3124e9d1b1fa53f143daa448ebd09d37..7deb1f817dacc564fb9c4453a4fba3a6fb6c51bd 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c @@ -629,7 +629,6 @@ static int ehl_common_data(struct pci_dev *pdev, { plat->rx_queues_to_use = 8; plat->tx_queues_to_use = 8; - plat->clk_ptp_rate = 200000000; plat->use_phy_wol = 1; plat->safety_feat_cfg->tsoee = 1; @@ -654,6 +653,8 @@ static int ehl_sgmii_data(struct pci_dev *pdev, plat->serdes_powerup = intel_serdes_powerup; plat->serdes_powerdown = intel_serdes_powerdown; + plat->clk_ptp_rate = 204800000; + return ehl_common_data(pdev, plat); } @@ -667,6 +668,8 @@ static int ehl_rgmii_data(struct pci_dev *pdev, plat->bus_id = 1; plat->phy_interface = PHY_INTERFACE_MODE_RGMII; + plat->clk_ptp_rate = 204800000; + return ehl_common_data(pdev, plat); } @@ -683,6 +686,8 @@ static int ehl_pse0_common_data(struct pci_dev *pdev, plat->bus_id = 2; plat->addr64 = 32; + plat->clk_ptp_rate = 200000000; + intel_mgbe_pse_crossts_adj(intel_priv, EHL_PSE_ART_MHZ); return ehl_common_data(pdev, plat); @@ -722,6 +727,8 @@ static int ehl_pse1_common_data(struct pci_dev *pdev, plat->bus_id = 3; plat->addr64 = 32; + plat->clk_ptp_rate = 200000000; + intel_mgbe_pse_crossts_adj(intel_priv, EHL_PSE_ART_MHZ); return ehl_common_data(pdev, plat); @@ -757,7 +764,7 @@ static int tgl_common_data(struct pci_dev *pdev, { plat->rx_queues_to_use = 6; plat->tx_queues_to_use = 4; - plat->clk_ptp_rate = 200000000; + plat->clk_ptp_rate = 204800000; plat->speed_mode_2500 = intel_speed_mode_2500; plat->safety_feat_cfg->tsoee = 1; diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c index 017dbbda0c1c45a9b19e01214dda57beb60a3de0..a25c187d318534b30156f47c3aeb447141634362 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c @@ -51,7 +51,6 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id struct stmmac_resources res; struct device_node *np; int ret, i, phy_mode; - bool mdio = false; np = dev_of_node(&pdev->dev); @@ -69,29 +68,31 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id if (!plat) return -ENOMEM; + plat->mdio_node = of_get_child_by_name(np, "mdio"); if (plat->mdio_node) { - dev_err(&pdev->dev, "Found MDIO subnode\n"); - mdio = true; - } + dev_info(&pdev->dev, "Found MDIO subnode\n"); - if (mdio) { plat->mdio_bus_data = devm_kzalloc(&pdev->dev, sizeof(*plat->mdio_bus_data), GFP_KERNEL); - if (!plat->mdio_bus_data) - return -ENOMEM; + if (!plat->mdio_bus_data) { + ret = -ENOMEM; + goto err_put_node; + } plat->mdio_bus_data->needs_reset = true; } plat->dma_cfg = devm_kzalloc(&pdev->dev, sizeof(*plat->dma_cfg), GFP_KERNEL); - if (!plat->dma_cfg) - return -ENOMEM; + if (!plat->dma_cfg) { + ret = -ENOMEM; + goto err_put_node; + } /* Enable pci device */ ret = pci_enable_device(pdev); if (ret) { dev_err(&pdev->dev, "%s: ERROR: failed to enable device\n", __func__); - return ret; + goto err_put_node; } /* Get the base address of device */ @@ -100,7 +101,7 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id continue; ret = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev)); if (ret) - return ret; + goto err_disable_device; break; } @@ -111,7 +112,8 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id phy_mode = device_get_phy_mode(&pdev->dev); if (phy_mode < 0) { dev_err(&pdev->dev, "phy_mode not found\n"); - return phy_mode; + ret = phy_mode; + goto err_disable_device; } plat->phy_interface = phy_mode; @@ -128,6 +130,7 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id if (res.irq < 0) { dev_err(&pdev->dev, "IRQ macirq not found\n"); ret = -ENODEV; + goto err_disable_msi; } res.wol_irq = of_irq_get_byname(np, "eth_wake_irq"); @@ -140,15 +143,31 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id if (res.lpi_irq < 0) { dev_err(&pdev->dev, "IRQ eth_lpi not found\n"); ret = -ENODEV; + goto err_disable_msi; } - return stmmac_dvr_probe(&pdev->dev, plat, &res); + ret = stmmac_dvr_probe(&pdev->dev, plat, &res); + if (ret) + goto err_disable_msi; + + return ret; + +err_disable_msi: + pci_disable_msi(pdev); +err_disable_device: + pci_disable_device(pdev); +err_put_node: + of_node_put(plat->mdio_node); + return ret; } static void loongson_dwmac_remove(struct pci_dev *pdev) { + struct net_device *ndev = dev_get_drvdata(&pdev->dev); + struct stmmac_priv *priv = netdev_priv(ndev); int i; + of_node_put(priv->plat->mdio_node); stmmac_dvr_remove(&pdev->dev); for (i = 0; i < PCI_STD_NUM_BARS; i++) { @@ -158,6 +177,7 @@ static void loongson_dwmac_remove(struct pci_dev *pdev) break; } + pci_disable_msi(pdev); pci_disable_device(pdev); } diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c index c7a6588d9398be3a4a0bc7511d39f6772c4b248a..e8b507f88fbce0b70e2892e41ea3c04fa011f718 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c @@ -272,11 +272,9 @@ static int meson8b_devm_clk_prepare_enable(struct meson8b_dwmac *dwmac, if (ret) return ret; - devm_add_action_or_reset(dwmac->dev, - (void(*)(void *))clk_disable_unprepare, - dwmac->rgmii_tx_clk); - - return 0; + return devm_add_action_or_reset(dwmac->dev, + (void(*)(void *))clk_disable_unprepare, + clk); } static int meson8b_init_rgmii_delays(struct meson8b_dwmac *dwmac) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c index c25bfecb4a2dfeff441293e75fda4e22ea0b1147..e5cfde1cbd5ce4ac7c5ed24a43b92b4444848df3 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c @@ -748,6 +748,8 @@ static void dwmac4_flow_ctrl(struct mac_device_info *hw, unsigned int duplex, if (fc & FLOW_RX) { pr_debug("\tReceive Flow-Control ON\n"); flow |= GMAC_RX_FLOW_CTRL_RFE; + } else { + pr_debug("\tReceive Flow-Control OFF\n"); } writel(flow, ioaddr + GMAC_RX_FLOW_CTRL); diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 8273e6a175c8472632f6965ccfb510fabc23435f..23ec0a9e396c6f84051de1966cced6cb75cc7dbd 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -1061,8 +1061,16 @@ static void stmmac_mac_link_up(struct phylink_config *config, ctrl |= priv->hw->link.duplex; /* Flow Control operation */ - if (tx_pause && rx_pause) - stmmac_mac_flow_ctrl(priv, duplex); + if (rx_pause && tx_pause) + priv->flow_ctrl = FLOW_AUTO; + else if (rx_pause && !tx_pause) + priv->flow_ctrl = FLOW_RX; + else if (!rx_pause && tx_pause) + priv->flow_ctrl = FLOW_TX; + else + priv->flow_ctrl = FLOW_OFF; + + stmmac_mac_flow_ctrl(priv, duplex); if (ctrl != old_ctrl) writel(ctrl, priv->ioaddr + MAC_CTRL_REG); @@ -6548,6 +6556,9 @@ void stmmac_xdp_release(struct net_device *dev) struct stmmac_priv *priv = netdev_priv(dev); u32 chan; + /* Ensure tx function is not running */ + netif_tx_disable(dev); + /* Disable NAPI process */ stmmac_disable_all_queues(priv); diff --git a/drivers/net/ethernet/sunplus/spl2sw_driver.c b/drivers/net/ethernet/sunplus/spl2sw_driver.c index 9be5852372773f13c3facc868e0f7e014492e519..c499a14314f13d03fe339b4423b1cb318889151d 100644 --- a/drivers/net/ethernet/sunplus/spl2sw_driver.c +++ b/drivers/net/ethernet/sunplus/spl2sw_driver.c @@ -287,7 +287,6 @@ static u32 spl2sw_init_netdev(struct platform_device *pdev, u8 *mac_addr, if (ret) { dev_err(&pdev->dev, "Failed to register net device \"%s\"!\n", ndev->name); - free_netdev(ndev); *r_ndev = NULL; return ret; } diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c index 7f86068f3ff6319cdfcc333c067b4e70e815d45b..d04a239c658efb2ee443526fd3726d134f941cb7 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -2082,7 +2082,7 @@ static void am65_cpsw_nuss_cleanup_ndev(struct am65_cpsw_common *common) for (i = 0; i < common->port_num; i++) { port = &common->ports[i]; - if (port->ndev) + if (port->ndev && port->ndev->reg_state == NETREG_REGISTERED) unregister_netdev(port->ndev); } } @@ -2823,7 +2823,6 @@ static int am65_cpsw_nuss_remove(struct platform_device *pdev) if (ret < 0) return ret; - am65_cpsw_nuss_phylink_cleanup(common); am65_cpsw_unregister_devlink(common); am65_cpsw_unregister_notifiers(common); @@ -2831,6 +2830,7 @@ static int am65_cpsw_nuss_remove(struct platform_device *pdev) * dma_deconfigure(dev) before devres_release_all(dev) */ am65_cpsw_nuss_cleanup_ndev(common); + am65_cpsw_nuss_phylink_cleanup(common); of_platform_device_destroy(common->mdio_dev, NULL); diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index 709ca6dd6ecb82255f691ad2eda8a6a160cc8b1c..13c9c2d6b79bbada479af66db547a71464ecb325 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c @@ -854,6 +854,8 @@ static int cpsw_ndo_open(struct net_device *ndev) err_cleanup: if (!cpsw->usage_count) { + napi_disable(&cpsw->napi_rx); + napi_disable(&cpsw->napi_tx); cpdma_ctlr_stop(cpsw->dma); cpsw_destroy_xdp_rxqs(cpsw); } diff --git a/drivers/net/ethernet/tundra/tsi108_eth.c b/drivers/net/ethernet/tundra/tsi108_eth.c index 2cd2afc3fff0370543ebe0e82ee4c14e94e6185d..d09d352e1c0af32f184b1a808b94fd377bef4b72 100644 --- a/drivers/net/ethernet/tundra/tsi108_eth.c +++ b/drivers/net/ethernet/tundra/tsi108_eth.c @@ -1290,12 +1290,15 @@ static int tsi108_open(struct net_device *dev) data->rxring = dma_alloc_coherent(&data->pdev->dev, rxring_size, &data->rxdma, GFP_KERNEL); - if (!data->rxring) + if (!data->rxring) { + free_irq(data->irq_num, dev); return -ENOMEM; + } data->txring = dma_alloc_coherent(&data->pdev->dev, txring_size, &data->txdma, GFP_KERNEL); if (!data->txring) { + free_irq(data->irq_num, dev); dma_free_coherent(&data->pdev->dev, rxring_size, data->rxring, data->rxdma); return -ENOMEM; diff --git a/drivers/net/ethernet/xilinx/xilinx_emaclite.c b/drivers/net/ethernet/xilinx/xilinx_emaclite.c index 05848ff15fb51a7b64d777517b5d4855dd56cf38..a3967f8de417d2dd7fe9ef65c9843431a25130d5 100644 --- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c +++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c @@ -108,7 +108,7 @@ * @next_tx_buf_to_use: next Tx buffer to write to * @next_rx_buf_to_use: next Rx buffer to read from * @base_addr: base address of the Emaclite device - * @reset_lock: lock used for synchronization + * @reset_lock: lock to serialize xmit and tx_timeout execution * @deferred_skb: holds an skb (for transmission at a later time) when the * Tx buffer is not free * @phy_dev: pointer to the PHY device diff --git a/drivers/net/hamradio/bpqether.c b/drivers/net/hamradio/bpqether.c index 30af0081e2bef5745d9a21320c2b95bcd218081a..83a16d10eedbc74b9d29bf83d9d17661987698c9 100644 --- a/drivers/net/hamradio/bpqether.c +++ b/drivers/net/hamradio/bpqether.c @@ -533,7 +533,7 @@ static int bpq_device_event(struct notifier_block *this, if (!net_eq(dev_net(dev), &init_net)) return NOTIFY_DONE; - if (!dev_is_ethdev(dev)) + if (!dev_is_ethdev(dev) && !bpq_get_ax25_dev(dev)) return NOTIFY_DONE; switch (event) { diff --git a/drivers/net/ipvlan/ipvlan.h b/drivers/net/ipvlan/ipvlan.h index de94921cbef9f2beb2b7e4f5ecde06eb4e5cff9c..025e0c19ec255295fb904d1bbba9b15e0ad8924e 100644 --- a/drivers/net/ipvlan/ipvlan.h +++ b/drivers/net/ipvlan/ipvlan.h @@ -98,6 +98,7 @@ struct ipvl_port { struct sk_buff_head backlog; int count; struct ida ida; + netdevice_tracker dev_tracker; }; struct ipvl_skb_cb { diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c index 54c94a69c2bb8df851f03bb0effe950fd72a93bb..796a38f9d7b24b87d4bc9b40f823c5c06880ad8c 100644 --- a/drivers/net/ipvlan/ipvlan_main.c +++ b/drivers/net/ipvlan/ipvlan_main.c @@ -83,6 +83,7 @@ static int ipvlan_port_create(struct net_device *dev) if (err) goto err; + netdev_hold(dev, &port->dev_tracker, GFP_KERNEL); return 0; err: @@ -95,6 +96,7 @@ static void ipvlan_port_destroy(struct net_device *dev) struct ipvl_port *port = ipvlan_port_get_rtnl(dev); struct sk_buff *skb; + netdev_put(dev, &port->dev_tracker); if (port->mode == IPVLAN_MODE_L3S) ipvlan_l3s_unregister(port); netdev_rx_handler_unregister(dev); diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c index 14e8d04cb4347cb7b9171d576156fb8e8ecebbe3..2e9742952c4e9b367c93db9ce589af1115bdb6e0 100644 --- a/drivers/net/loopback.c +++ b/drivers/net/loopback.c @@ -211,7 +211,7 @@ static __net_init int loopback_net_init(struct net *net) int err; err = -ENOMEM; - dev = alloc_netdev(0, "lo", NET_NAME_UNKNOWN, loopback_setup); + dev = alloc_netdev(0, "lo", NET_NAME_PREDICTABLE, loopback_setup); if (!dev) goto out; diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index c891b60937a7f0118147fc6b1e27f78f0df6ab0d..f41f67b583db27e29960ece7f2451969f06c8f82 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c @@ -1413,7 +1413,8 @@ static struct macsec_rx_sc *del_rx_sc(struct macsec_secy *secy, sci_t sci) return NULL; } -static struct macsec_rx_sc *create_rx_sc(struct net_device *dev, sci_t sci) +static struct macsec_rx_sc *create_rx_sc(struct net_device *dev, sci_t sci, + bool active) { struct macsec_rx_sc *rx_sc; struct macsec_dev *macsec; @@ -1437,7 +1438,7 @@ static struct macsec_rx_sc *create_rx_sc(struct net_device *dev, sci_t sci) } rx_sc->sci = sci; - rx_sc->active = true; + rx_sc->active = active; refcount_set(&rx_sc->refcnt, 1); secy = &macsec_priv(dev)->secy; @@ -1838,6 +1839,7 @@ static int macsec_add_rxsa(struct sk_buff *skb, struct genl_info *info) secy->key_len); err = macsec_offload(ops->mdo_add_rxsa, &ctx); + memzero_explicit(ctx.sa.key, secy->key_len); if (err) goto cleanup; } @@ -1876,7 +1878,7 @@ static int macsec_add_rxsc(struct sk_buff *skb, struct genl_info *info) struct macsec_rx_sc *rx_sc; struct nlattr *tb_rxsc[MACSEC_RXSC_ATTR_MAX + 1]; struct macsec_secy *secy; - bool was_active; + bool active = true; int ret; if (!attrs[MACSEC_ATTR_IFINDEX]) @@ -1898,16 +1900,15 @@ static int macsec_add_rxsc(struct sk_buff *skb, struct genl_info *info) secy = &macsec_priv(dev)->secy; sci = nla_get_sci(tb_rxsc[MACSEC_RXSC_ATTR_SCI]); - rx_sc = create_rx_sc(dev, sci); + if (tb_rxsc[MACSEC_RXSC_ATTR_ACTIVE]) + active = nla_get_u8(tb_rxsc[MACSEC_RXSC_ATTR_ACTIVE]); + + rx_sc = create_rx_sc(dev, sci, active); if (IS_ERR(rx_sc)) { rtnl_unlock(); return PTR_ERR(rx_sc); } - was_active = rx_sc->active; - if (tb_rxsc[MACSEC_RXSC_ATTR_ACTIVE]) - rx_sc->active = !!nla_get_u8(tb_rxsc[MACSEC_RXSC_ATTR_ACTIVE]); - if (macsec_is_offloaded(netdev_priv(dev))) { const struct macsec_ops *ops; struct macsec_context ctx; @@ -1931,7 +1932,8 @@ static int macsec_add_rxsc(struct sk_buff *skb, struct genl_info *info) return 0; cleanup: - rx_sc->active = was_active; + del_rx_sc(secy, sci); + free_rx_sc(rx_sc); rtnl_unlock(); return ret; } @@ -2080,6 +2082,7 @@ static int macsec_add_txsa(struct sk_buff *skb, struct genl_info *info) secy->key_len); err = macsec_offload(ops->mdo_add_txsa, &ctx); + memzero_explicit(ctx.sa.key, secy->key_len); if (err) goto cleanup; } @@ -2570,7 +2573,7 @@ static bool macsec_is_configured(struct macsec_dev *macsec) struct macsec_tx_sc *tx_sc = &secy->tx_sc; int i; - if (secy->n_rx_sc > 0) + if (secy->rx_sc) return true; for (i = 0; i < MACSEC_NUM_AN; i++) @@ -2654,11 +2657,6 @@ static int macsec_upd_offload(struct sk_buff *skb, struct genl_info *info) if (ret) goto rollback; - /* Force features update, since they are different for SW MACSec and - * HW offloading cases. - */ - netdev_update_features(dev); - rtnl_unlock(); return 0; @@ -3432,16 +3430,9 @@ static netdev_tx_t macsec_start_xmit(struct sk_buff *skb, return ret; } -#define SW_MACSEC_FEATURES \ +#define MACSEC_FEATURES \ (NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST) -/* If h/w offloading is enabled, use real device features save for - * VLAN_FEATURES - they require additional ops - * HW_MACSEC - no reason to report it - */ -#define REAL_DEV_FEATURES(dev) \ - ((dev)->features & ~(NETIF_F_VLAN_FEATURES | NETIF_F_HW_MACSEC)) - static int macsec_dev_init(struct net_device *dev) { struct macsec_dev *macsec = macsec_priv(dev); @@ -3458,12 +3449,8 @@ static int macsec_dev_init(struct net_device *dev) return err; } - if (macsec_is_offloaded(macsec)) { - dev->features = REAL_DEV_FEATURES(real_dev); - } else { - dev->features = real_dev->features & SW_MACSEC_FEATURES; - dev->features |= NETIF_F_LLTX | NETIF_F_GSO_SOFTWARE; - } + dev->features = real_dev->features & MACSEC_FEATURES; + dev->features |= NETIF_F_LLTX | NETIF_F_GSO_SOFTWARE; dev->needed_headroom = real_dev->needed_headroom + MACSEC_NEEDED_HEADROOM; @@ -3495,10 +3482,7 @@ static netdev_features_t macsec_fix_features(struct net_device *dev, struct macsec_dev *macsec = macsec_priv(dev); struct net_device *real_dev = macsec->real_dev; - if (macsec_is_offloaded(macsec)) - return REAL_DEV_FEATURES(real_dev); - - features &= (real_dev->features & SW_MACSEC_FEATURES) | + features &= (real_dev->features & MACSEC_FEATURES) | NETIF_F_GSO_SOFTWARE | NETIF_F_SOFT_FEATURES; features |= NETIF_F_LLTX; @@ -3851,7 +3835,6 @@ static int macsec_changelink(struct net_device *dev, struct nlattr *tb[], if (macsec_is_offloaded(macsec)) { const struct macsec_ops *ops; struct macsec_context ctx; - int ret; ops = macsec_get_ops(netdev_priv(dev), &ctx); if (!ops) { diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index c5cfe85551992a07f8c6d9878eff4f292d30763a..b8cc55b2d721cd91b8187744f6bd8fe88a22f8cd 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -141,7 +141,7 @@ static struct macvlan_source_entry *macvlan_hash_lookup_source( u32 idx = macvlan_eth_hash(addr); struct hlist_head *h = &vlan->port->vlan_source_hash[idx]; - hlist_for_each_entry_rcu(entry, h, hlist) { + hlist_for_each_entry_rcu(entry, h, hlist, lockdep_rtnl_is_held()) { if (ether_addr_equal_64bits(entry->addr, addr) && entry->vlan == vlan) return entry; @@ -1533,8 +1533,10 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev, /* the macvlan port may be freed by macvlan_uninit when fail to register. * so we destroy the macvlan port only when it's valid. */ - if (create && macvlan_port_get_rtnl(lowerdev)) + if (create && macvlan_port_get_rtnl(lowerdev)) { + macvlan_flush_sources(port, vlan); macvlan_port_destroy(port->dev); + } return err; } EXPORT_SYMBOL_GPL(macvlan_common_newlink); @@ -1645,7 +1647,7 @@ static int macvlan_fill_info_macaddr(struct sk_buff *skb, struct hlist_head *h = &vlan->port->vlan_source_hash[i]; struct macvlan_source_entry *entry; - hlist_for_each_entry_rcu(entry, h, hlist) { + hlist_for_each_entry_rcu(entry, h, hlist, lockdep_rtnl_is_held()) { if (entry->vlan != vlan) continue; if (nla_put(skb, IFLA_MACVLAN_MACADDR, ETH_ALEN, entry->addr)) diff --git a/drivers/net/mctp/mctp-i2c.c b/drivers/net/mctp/mctp-i2c.c index 0762c735dd8ae3c49db9a2dc45450ee84c25de7f..1d67a3ca1fd1168979c1912eb48c52751a6b7380 100644 --- a/drivers/net/mctp/mctp-i2c.c +++ b/drivers/net/mctp/mctp-i2c.c @@ -43,6 +43,7 @@ enum { MCTP_I2C_FLOW_STATE_NEW = 0, MCTP_I2C_FLOW_STATE_ACTIVE, + MCTP_I2C_FLOW_STATE_INVALID, }; /* List of all struct mctp_i2c_client @@ -374,12 +375,18 @@ mctp_i2c_get_tx_flow_state(struct mctp_i2c_dev *midev, struct sk_buff *skb) */ if (!key->valid) { state = MCTP_I2C_TX_FLOW_INVALID; - - } else if (key->dev_flow_state == MCTP_I2C_FLOW_STATE_NEW) { - key->dev_flow_state = MCTP_I2C_FLOW_STATE_ACTIVE; - state = MCTP_I2C_TX_FLOW_NEW; } else { - state = MCTP_I2C_TX_FLOW_EXISTING; + switch (key->dev_flow_state) { + case MCTP_I2C_FLOW_STATE_NEW: + key->dev_flow_state = MCTP_I2C_FLOW_STATE_ACTIVE; + state = MCTP_I2C_TX_FLOW_NEW; + break; + case MCTP_I2C_FLOW_STATE_ACTIVE: + state = MCTP_I2C_TX_FLOW_EXISTING; + break; + default: + state = MCTP_I2C_TX_FLOW_INVALID; + } } spin_unlock_irqrestore(&key->lock, flags); @@ -617,21 +624,31 @@ static void mctp_i2c_release_flow(struct mctp_dev *mdev, { struct mctp_i2c_dev *midev = netdev_priv(mdev->dev); + bool queue_release = false; unsigned long flags; spin_lock_irqsave(&midev->lock, flags); - midev->release_count++; - spin_unlock_irqrestore(&midev->lock, flags); - - /* Ensure we have a release operation queued, through the fake - * marker skb + /* if we have seen the flow/key previously, we need to pair the + * original lock with a release */ - spin_lock(&midev->tx_queue.lock); - if (!midev->unlock_marker.next) - __skb_queue_tail(&midev->tx_queue, &midev->unlock_marker); - spin_unlock(&midev->tx_queue.lock); + if (key->dev_flow_state == MCTP_I2C_FLOW_STATE_ACTIVE) { + midev->release_count++; + queue_release = true; + } + key->dev_flow_state = MCTP_I2C_FLOW_STATE_INVALID; + spin_unlock_irqrestore(&midev->lock, flags); - wake_up(&midev->tx_wq); + if (queue_release) { + /* Ensure we have a release operation queued, through the fake + * marker skb + */ + spin_lock(&midev->tx_queue.lock); + if (!midev->unlock_marker.next) + __skb_queue_tail(&midev->tx_queue, + &midev->unlock_marker); + spin_unlock(&midev->tx_queue.lock); + wake_up(&midev->tx_wq); + } } static const struct net_device_ops mctp_i2c_ops = { diff --git a/drivers/net/mdio/fwnode_mdio.c b/drivers/net/mdio/fwnode_mdio.c index 689e728345ce38b317d2071afcc003c041c5a098..eb344f6d4a7b2bdbc7902d8b1d0a893edc12cba9 100644 --- a/drivers/net/mdio/fwnode_mdio.c +++ b/drivers/net/mdio/fwnode_mdio.c @@ -148,7 +148,7 @@ int fwnode_mdiobus_register_phy(struct mii_bus *bus, /* Associate the fwnode with the device structure so it * can be looked up later. */ - phy->mdio.dev.fwnode = child; + phy->mdio.dev.fwnode = fwnode_handle_get(child); /* All data is now stored in the phy struct, so register it */ rc = phy_device_register(phy); diff --git a/drivers/net/mhi_net.c b/drivers/net/mhi_net.c index 0b1b6f650104b564a1368a35de3fb44e00d06bb8..0b9d3797913329ad425ae3381ab4fd3beb39d115 100644 --- a/drivers/net/mhi_net.c +++ b/drivers/net/mhi_net.c @@ -343,6 +343,8 @@ static void mhi_net_dellink(struct mhi_device *mhi_dev, struct net_device *ndev) kfree_skb(mhi_netdev->skbagg_head); + free_netdev(ndev); + dev_set_drvdata(&mhi_dev->dev, NULL); } diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c index a7880c7ce94cab73e9991716aae3055fc41c7a6a..68e56e451b2be30da8af86bb8d0a93d7c9605ea3 100644 --- a/drivers/net/netdevsim/dev.c +++ b/drivers/net/netdevsim/dev.c @@ -1683,6 +1683,7 @@ void nsim_drv_remove(struct nsim_bus_dev *nsim_bus_dev) ARRAY_SIZE(nsim_devlink_params)); devl_resources_unregister(devlink); kfree(nsim_dev->vfconfigs); + kfree(nsim_dev->fa_cookie); devl_unlock(devlink); devlink_free(devlink); dev_set_drvdata(&nsim_bus_dev->dev, NULL); diff --git a/drivers/net/ntb_netdev.c b/drivers/net/ntb_netdev.c index 464d88ca8ab0af9e5625a6d640629a80a037e09b..a4abea921046b7f86a03eccdc60df7ad7d4f7e47 100644 --- a/drivers/net/ntb_netdev.c +++ b/drivers/net/ntb_netdev.c @@ -484,7 +484,14 @@ static int __init ntb_netdev_init_module(void) rc = ntb_transport_register_client_dev(KBUILD_MODNAME); if (rc) return rc; - return ntb_transport_register_client(&ntb_netdev_client); + + rc = ntb_transport_register_client(&ntb_netdev_client); + if (rc) { + ntb_transport_unregister_client_dev(KBUILD_MODNAME); + return rc; + } + + return 0; } module_init(ntb_netdev_init_module); diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c index 349b7b1dbbf292fccee52f355d0a194b334f5a07..d499659075614c8027e6794c6e074f499903f071 100644 --- a/drivers/net/phy/at803x.c +++ b/drivers/net/phy/at803x.c @@ -870,8 +870,10 @@ static int at803x_probe(struct phy_device *phydev) .wolopts = 0, }; - if (ccr < 0) + if (ccr < 0) { + ret = ccr; goto err; + } mode_cfg = ccr & AT803X_MODE_CFG_MASK; switch (mode_cfg) { diff --git a/drivers/net/phy/dp83867.c b/drivers/net/phy/dp83867.c index 417527f8bbf55b7f9ab34226b564988ccd525568..7446d5c6c71464afeaa251c9bcbf1703993518e5 100644 --- a/drivers/net/phy/dp83867.c +++ b/drivers/net/phy/dp83867.c @@ -682,6 +682,13 @@ static int dp83867_of_init(struct phy_device *phydev) */ dp83867->io_impedance = DP83867_IO_MUX_CFG_IO_IMPEDANCE_MIN / 2; + /* For non-OF device, the RX and TX FIFO depths are taken from + * default value. So, we init RX & TX FIFO depths here + * so that it is configured correctly later in dp83867_config_init(); + */ + dp83867->tx_fifo_depth = DP83867_PHYCR_FIFO_DEPTH_4_B_NIB; + dp83867->rx_fifo_depth = DP83867_PHYCR_FIFO_DEPTH_4_B_NIB; + return 0; } #endif /* CONFIG_OF_MDIO */ diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c index 2810f4f9da0ccc8f5c3aa183f06edc336b64c5c1..0d706ee266afd2580afbeb2112ef4d1d5c3fc790 100644 --- a/drivers/net/phy/marvell.c +++ b/drivers/net/phy/marvell.c @@ -2015,14 +2015,16 @@ static int m88e1510_loopback(struct phy_device *phydev, bool enable) if (err < 0) return err; - /* FIXME: Based on trial and error test, it seem 1G need to have - * delay between soft reset and loopback enablement. - */ - if (phydev->speed == SPEED_1000) - msleep(1000); + err = phy_modify(phydev, MII_BMCR, BMCR_LOOPBACK, + BMCR_LOOPBACK); - return phy_modify(phydev, MII_BMCR, BMCR_LOOPBACK, - BMCR_LOOPBACK); + if (!err) { + /* It takes some time for PHY device to switch + * into/out-of loopback mode. + */ + msleep(1000); + } + return err; } else { err = phy_modify(phydev, MII_BMCR, BMCR_LOOPBACK, 0); if (err < 0) diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index f82090bdf7ab81633d51693caccf132596ee8903..1cd604cd1fa1b15f2a8be344dcf7ba0443bd78c3 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c @@ -583,7 +583,7 @@ int __mdiobus_register(struct mii_bus *bus, struct module *owner) } for (i = 0; i < PHY_MAX_ADDR; i++) { - if ((bus->phy_mask & (1 << i)) == 0) { + if ((bus->phy_mask & BIT(i)) == 0) { struct phy_device *phydev; phydev = mdiobus_scan(bus, i); diff --git a/drivers/net/phy/mscc/mscc_macsec.c b/drivers/net/phy/mscc/mscc_macsec.c index ee5b17edca39e518e74081f9c0abe4b63e47cddd..f81b077618f4004babbac06676756262f5b647a6 100644 --- a/drivers/net/phy/mscc/mscc_macsec.c +++ b/drivers/net/phy/mscc/mscc_macsec.c @@ -632,6 +632,7 @@ static void vsc8584_macsec_free_flow(struct vsc8531_private *priv, list_del(&flow->list); clear_bit(flow->index, bitmap); + memzero_explicit(flow->key, sizeof(flow->key)); kfree(flow); } diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 57849ac0384eff810c034855f1dbba5c0554a88e..8cff61dbc4b573d43ffb386d49c3ea90a6afbb6a 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -217,6 +217,7 @@ static void phy_mdio_device_free(struct mdio_device *mdiodev) static void phy_device_release(struct device *dev) { + fwnode_handle_put(dev->fwnode); kfree(to_phy_device(dev)); } @@ -1520,6 +1521,7 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, error_module_put: module_put(d->driver->owner); + d->driver = NULL; error_put_device: put_device(d); if (ndev_owner != bus->owner) diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index 6547b6cc6cbe7065ae3a0d435d6842f7ac96126b..2805b04d640283b2645990845620b5552e7c4605 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -1603,19 +1603,29 @@ static int phylink_bringup_phy(struct phylink *pl, struct phy_device *phy, linkmode_copy(supported, phy->supported); linkmode_copy(config.advertising, phy->advertising); - /* Clause 45 PHYs switch their Serdes lane between several different - * modes, normally 10GBASE-R, SGMII. Some use 2500BASE-X for 2.5G - * speeds. We really need to know which interface modes the PHY and - * MAC supports to properly work out which linkmodes can be supported. + /* Check whether we would use rate matching for the proposed interface + * mode. */ - if (phy->is_c45 && + config.rate_matching = phy_get_rate_matching(phy, interface); + + /* Clause 45 PHYs may switch their Serdes lane between, e.g. 10GBASE-R, + * 5GBASE-R, 2500BASE-X and SGMII if they are not using rate matching. + * For some interface modes (e.g. RXAUI, XAUI and USXGMII) switching + * their Serdes is either unnecessary or not reasonable. + * + * For these which switch interface modes, we really need to know which + * interface modes the PHY supports to properly work out which ethtool + * linkmodes can be supported. For now, as a work-around, we validate + * against all interface modes, which may lead to more ethtool link + * modes being advertised than are actually supported. + */ + if (phy->is_c45 && config.rate_matching == RATE_MATCH_NONE && interface != PHY_INTERFACE_MODE_RXAUI && interface != PHY_INTERFACE_MODE_XAUI && interface != PHY_INTERFACE_MODE_USXGMII) config.interface = PHY_INTERFACE_MODE_NA; else config.interface = interface; - config.rate_matching = phy_get_rate_matching(phy, config.interface); ret = phylink_validate(pl, supported, &config); if (ret) { diff --git a/drivers/net/thunderbolt.c b/drivers/net/thunderbolt.c index 83fcaeb2ac5e81d0e9b1e80b3667e355b1ec7bf9..a52ee2bf55750a7dc294e733f6500bc84125f6c8 100644 --- a/drivers/net/thunderbolt.c +++ b/drivers/net/thunderbolt.c @@ -1391,12 +1391,21 @@ static int __init tbnet_init(void) tb_property_add_immediate(tbnet_dir, "prtcstns", flags); ret = tb_register_property_dir("network", tbnet_dir); - if (ret) { - tb_property_free_dir(tbnet_dir); - return ret; - } + if (ret) + goto err_free_dir; + + ret = tb_register_service_driver(&tbnet_driver); + if (ret) + goto err_unregister; - return tb_register_service_driver(&tbnet_driver); + return 0; + +err_unregister: + tb_unregister_property_dir("network", tbnet_dir); +err_free_dir: + tb_property_free_dir(tbnet_dir); + + return ret; } module_init(tbnet_init); diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 27c6d235cbda32f61a00d6879d0b611bd3ff384b..24001112c32365d6331fe9f79dcf89e514fdf48e 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -686,7 +686,6 @@ static void __tun_detach(struct tun_file *tfile, bool clean) if (tun) xdp_rxq_info_unreg(&tfile->xdp_rxq); ptr_ring_cleanup(&tfile->tx_ring, tun_ptr_free); - sock_put(&tfile->sk); } } @@ -702,6 +701,9 @@ static void tun_detach(struct tun_file *tfile, bool clean) if (dev) netdev_state_change(dev); rtnl_unlock(); + + if (clean) + sock_put(&tfile->sk); } static void tun_detach_all(struct net_device *dev) @@ -1459,7 +1461,8 @@ static struct sk_buff *tun_napi_alloc_frags(struct tun_file *tfile, int err; int i; - if (it->nr_segs > MAX_SKB_FRAGS + 1) + if (it->nr_segs > MAX_SKB_FRAGS + 1 || + len > (ETH_MAX_MTU - NET_SKB_PAD - NET_IP_ALIGN)) return ERR_PTR(-EMSGSIZE); local_bh_disable(); @@ -1966,17 +1969,25 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile, skb_headlen(skb)); if (unlikely(headlen > skb_headlen(skb))) { + WARN_ON_ONCE(1); + err = -ENOMEM; dev_core_stats_rx_dropped_inc(tun->dev); +napi_busy: napi_free_frags(&tfile->napi); rcu_read_unlock(); mutex_unlock(&tfile->napi_mutex); - WARN_ON(1); - return -ENOMEM; + return err; } - local_bh_disable(); - napi_gro_frags(&tfile->napi); - local_bh_enable(); + if (likely(napi_schedule_prep(&tfile->napi))) { + local_bh_disable(); + napi_gro_frags(&tfile->napi); + napi_complete(&tfile->napi); + local_bh_enable(); + } else { + err = -EBUSY; + goto napi_busy; + } mutex_unlock(&tfile->napi_mutex); } else if (tfile->napi_enabled) { struct sk_buff_head *queue = &tfile->sk.sk_write_queue; diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c index 8d5cbda33f66f26114d35a3c1dafba9fefe05588..0897fdb6254b813a07d680c0254c53eb051552c0 100644 --- a/drivers/net/usb/cdc_ncm.c +++ b/drivers/net/usb/cdc_ncm.c @@ -1915,6 +1915,7 @@ static const struct driver_info cdc_ncm_zlp_info = { .status = cdc_ncm_status, .rx_fixup = cdc_ncm_rx_fixup, .tx_fixup = cdc_ncm_tx_fixup, + .set_rx_mode = usbnet_cdc_update_filter, }; /* Same as cdc_ncm_info, but with FLAG_WWAN */ diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c index 26c34a7c21bdd1fc56819c00cdc1ad050799e221..554d4e2a84a4ee81f9cdb64e5a9f08b424367514 100644 --- a/drivers/net/usb/qmi_wwan.c +++ b/drivers/net/usb/qmi_wwan.c @@ -1357,6 +1357,7 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x2357, 0x0201, 4)}, /* TP-LINK HSUPA Modem MA180 */ {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1031, 3)}, /* Telit LE910C1-EUX */ + {QMI_QUIRK_SET_DTR(0x1bc7, 0x103a, 0)}, /* Telit LE910C4-WWX */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1040, 2)}, /* Telit LE922A */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1050, 2)}, /* Telit FN980 */ {QMI_QUIRK_SET_DTR(0x1bc7, 0x1057, 2)}, /* Telit FN980 */ @@ -1422,6 +1423,7 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x0489, 0xe0b4, 0)}, /* Foxconn T77W968 LTE */ {QMI_FIXED_INTF(0x0489, 0xe0b5, 0)}, /* Foxconn T77W968 LTE with eSIM support*/ {QMI_FIXED_INTF(0x2692, 0x9025, 4)}, /* Cellient MPL200 (rebranded Qualcomm 05c6:9025) */ + {QMI_QUIRK_SET_DTR(0x1546, 0x1342, 4)}, /* u-blox LARA-L6 */ /* 4. Gobi 1000 devices */ {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */ diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index bfb58c91db047e92afc52e50a74f1521b8320c3b..32d2c60d334dc75abb495cca3b752b2aa64aad9a 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -66,6 +66,7 @@ struct smsc95xx_priv { spinlock_t mac_cr_lock; u8 features; u8 suspend_flags; + bool is_internal_phy; struct irq_chip irqchip; struct irq_domain *irqdomain; struct fwnode_handle *irqfwnode; @@ -252,6 +253,43 @@ static void smsc95xx_mdio_write(struct usbnet *dev, int phy_id, int idx, mutex_unlock(&dev->phy_mutex); } +static int smsc95xx_mdiobus_reset(struct mii_bus *bus) +{ + struct smsc95xx_priv *pdata; + struct usbnet *dev; + u32 val; + int ret; + + dev = bus->priv; + pdata = dev->driver_priv; + + if (pdata->is_internal_phy) + return 0; + + mutex_lock(&dev->phy_mutex); + + ret = smsc95xx_read_reg(dev, PM_CTRL, &val); + if (ret < 0) + goto reset_out; + + val |= PM_CTL_PHY_RST_; + + ret = smsc95xx_write_reg(dev, PM_CTRL, val); + if (ret < 0) + goto reset_out; + + /* Driver has no knowledge at this point about the external PHY. + * The 802.3 specifies that the reset process shall + * be completed within 0.5 s. + */ + fsleep(500000); + +reset_out: + mutex_unlock(&dev->phy_mutex); + + return 0; +} + static int smsc95xx_mdiobus_read(struct mii_bus *bus, int phy_id, int idx) { struct usbnet *dev = bus->priv; @@ -1052,7 +1090,6 @@ static void smsc95xx_handle_link_change(struct net_device *net) static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) { struct smsc95xx_priv *pdata; - bool is_internal_phy; char usb_path[64]; int ret, phy_irq; u32 val; @@ -1133,13 +1170,14 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) if (ret < 0) goto free_mdio; - is_internal_phy = !(val & HW_CFG_PSEL_); - if (is_internal_phy) + pdata->is_internal_phy = !(val & HW_CFG_PSEL_); + if (pdata->is_internal_phy) pdata->mdiobus->phy_mask = ~(1u << SMSC95XX_INTERNAL_PHY_ID); pdata->mdiobus->priv = dev; pdata->mdiobus->read = smsc95xx_mdiobus_read; pdata->mdiobus->write = smsc95xx_mdiobus_write; + pdata->mdiobus->reset = smsc95xx_mdiobus_reset; pdata->mdiobus->name = "smsc95xx-mdiobus"; pdata->mdiobus->parent = &dev->udev->dev; @@ -1160,7 +1198,7 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf) } pdata->phydev->irq = phy_irq; - pdata->phydev->is_internal = is_internal_phy; + pdata->phydev->is_internal = pdata->is_internal_phy; /* detect device revision as different features may be available */ ret = smsc95xx_read_reg(dev, ID_REV, &val); diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 7106932c6f8877f83f2ba6e5aee5ec1caa9857ea..86e52454b5b5c550c0ebdf7c1d65c8a9f087e515 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -3949,12 +3949,11 @@ static int virtnet_probe(struct virtio_device *vdev) return 0; free_unregister_netdev: - virtio_reset_device(vdev); - unregister_netdev(dev); free_failover: net_failover_destroy(vi->failover); free_vqs: + virtio_reset_device(vdev); cancel_delayed_work_sync(&vi->refill); free_receive_page_frags(vi); virtnet_del_vqs(vi); diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c index 960f1393595cc1926dabe1e04ea5c59e85335932..d62a904d2e422d7e48cf67cba829df0568e99b01 100644 --- a/drivers/net/wan/lapbether.c +++ b/drivers/net/wan/lapbether.c @@ -325,6 +325,7 @@ static int lapbeth_open(struct net_device *dev) err = lapb_register(dev, &lapbeth_callbacks); if (err != LAPB_OK) { + napi_disable(&lapbeth->napi); pr_err("lapb_register error: %d\n", err); return -ENODEV; } @@ -446,7 +447,7 @@ static int lapbeth_device_event(struct notifier_block *this, if (dev_net(dev) != &init_net) return NOTIFY_DONE; - if (!dev_is_ethdev(dev)) + if (!dev_is_ethdev(dev) && !lapbeth_get_x25_dev(dev)) return NOTIFY_DONE; switch (event) { diff --git a/drivers/net/wireless/ath/ath11k/qmi.h b/drivers/net/wireless/ath/ath11k/qmi.h index 2ec56a34fa810970469f299491ae39a32af9b747..0909d53cefebc633bc14dc47fa110769f66f9fb8 100644 --- a/drivers/net/wireless/ath/ath11k/qmi.h +++ b/drivers/net/wireless/ath/ath11k/qmi.h @@ -27,7 +27,7 @@ #define ATH11K_QMI_WLANFW_MAX_NUM_MEM_SEG_V01 52 #define ATH11K_QMI_CALDB_SIZE 0x480000 #define ATH11K_QMI_BDF_EXT_STR_LENGTH 0x20 -#define ATH11K_QMI_FW_MEM_REQ_SEGMENT_CNT 3 +#define ATH11K_QMI_FW_MEM_REQ_SEGMENT_CNT 5 #define QMI_WLFW_REQUEST_MEM_IND_V01 0x0035 #define QMI_WLFW_FW_MEM_READY_IND_V01 0x0037 diff --git a/drivers/net/wireless/ath/ath11k/reg.c b/drivers/net/wireless/ath/ath11k/reg.c index 7ee3ff69dfc85b62a6550b9c2342250be148479c..6fae4e61ede7f09d29411225e3f6e318f5cfa65f 100644 --- a/drivers/net/wireless/ath/ath11k/reg.c +++ b/drivers/net/wireless/ath/ath11k/reg.c @@ -287,11 +287,7 @@ int ath11k_regd_update(struct ath11k *ar) goto err; } - rtnl_lock(); - wiphy_lock(ar->hw->wiphy); - ret = regulatory_set_wiphy_regd_sync(ar->hw->wiphy, regd_copy); - wiphy_unlock(ar->hw->wiphy); - rtnl_unlock(); + ret = regulatory_set_wiphy_regd(ar->hw->wiphy, regd_copy); kfree(regd_copy); diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c index bc3f4e4edcdf9f1434d681059e9be8c87e8645c8..dac7eb77799bd158d8e4d6e487a236e3784a8cfa 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c @@ -228,6 +228,10 @@ static void brcmf_fweh_event_worker(struct work_struct *work) brcmf_fweh_event_name(event->code), event->code, event->emsg.ifidx, event->emsg.bsscfgidx, event->emsg.addr); + if (event->emsg.bsscfgidx >= BRCMF_MAX_IFS) { + bphy_err(drvr, "invalid bsscfg index: %u\n", event->emsg.bsscfgidx); + goto event_free; + } /* convert event message */ emsg_be = &event->emsg; diff --git a/drivers/net/wireless/cisco/airo.c b/drivers/net/wireless/cisco/airo.c index 10daef81c35533633a2f94c15f54d53153ff1605..fb2c35bd73bb142d973e6d5fada38beb6531218f 100644 --- a/drivers/net/wireless/cisco/airo.c +++ b/drivers/net/wireless/cisco/airo.c @@ -5232,7 +5232,7 @@ static int get_wep_tx_idx(struct airo_info *ai) return -1; } -static int set_wep_key(struct airo_info *ai, u16 index, const char *key, +static int set_wep_key(struct airo_info *ai, u16 index, const u8 *key, u16 keylen, int perm, int lock) { static const unsigned char macaddr[ETH_ALEN] = { 0x01, 0, 0, 0, 0, 0 }; @@ -5283,7 +5283,7 @@ static void proc_wepkey_on_close(struct inode *inode, struct file *file) struct net_device *dev = pde_data(inode); struct airo_info *ai = dev->ml_priv; int i, rc; - char key[16]; + u8 key[16]; u16 index = 0; int j = 0; @@ -5311,12 +5311,22 @@ static void proc_wepkey_on_close(struct inode *inode, struct file *file) } for (i = 0; i < 16*3 && data->wbuffer[i+j]; i++) { + int val; + + if (i % 3 == 2) + continue; + + val = hex_to_bin(data->wbuffer[i+j]); + if (val < 0) { + airo_print_err(ai->dev->name, "WebKey passed invalid key hex"); + return; + } switch(i%3) { case 0: - key[i/3] = hex_to_bin(data->wbuffer[i+j])<<4; + key[i/3] = (u8)val << 4; break; case 1: - key[i/3] |= hex_to_bin(data->wbuffer[i+j]); + key[i/3] |= (u8)val; break; } } diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c index a40636c90ec365975284bdc4ace553d97f22a857..0d81098c7b45c5875431a0a689b02e4ee3b81ee6 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c @@ -910,6 +910,7 @@ static void hwsim_send_nullfunc(struct mac80211_hwsim_data *data, u8 *mac, struct hwsim_vif_priv *vp = (void *)vif->drv_priv; struct sk_buff *skb; struct ieee80211_hdr *hdr; + struct ieee80211_tx_info *cb; if (!vp->assoc) return; @@ -931,6 +932,10 @@ static void hwsim_send_nullfunc(struct mac80211_hwsim_data *data, u8 *mac, memcpy(hdr->addr2, mac, ETH_ALEN); memcpy(hdr->addr3, vp->bssid, ETH_ALEN); + cb = IEEE80211_SKB_CB(skb); + cb->control.rates[0].count = 1; + cb->control.rates[1].idx = -1; + rcu_read_lock(); mac80211_hwsim_tx_frame(data->hw, skb, rcu_dereference(vif->bss_conf.chanctx_conf)->def.chan); diff --git a/drivers/net/wireless/microchip/wilc1000/cfg80211.c b/drivers/net/wireless/microchip/wilc1000/cfg80211.c index 9bbfff803357859de5004c797e4ef83e073c50fc..b545d93c6e374e6cf1b8f1837735440475870aac 100644 --- a/drivers/net/wireless/microchip/wilc1000/cfg80211.c +++ b/drivers/net/wireless/microchip/wilc1000/cfg80211.c @@ -959,30 +959,51 @@ static inline void wilc_wfi_cfg_parse_ch_attr(u8 *buf, u32 len, u8 sta_ch) return; while (index + sizeof(*e) <= len) { + u16 attr_size; + e = (struct wilc_attr_entry *)&buf[index]; - if (e->attr_type == IEEE80211_P2P_ATTR_CHANNEL_LIST) + attr_size = le16_to_cpu(e->attr_len); + + if (index + sizeof(*e) + attr_size > len) + return; + + if (e->attr_type == IEEE80211_P2P_ATTR_CHANNEL_LIST && + attr_size >= (sizeof(struct wilc_attr_ch_list) - sizeof(*e))) ch_list_idx = index; - else if (e->attr_type == IEEE80211_P2P_ATTR_OPER_CHANNEL) + else if (e->attr_type == IEEE80211_P2P_ATTR_OPER_CHANNEL && + attr_size == (sizeof(struct wilc_attr_oper_ch) - sizeof(*e))) op_ch_idx = index; + if (ch_list_idx && op_ch_idx) break; - index += le16_to_cpu(e->attr_len) + sizeof(*e); + + index += sizeof(*e) + attr_size; } if (ch_list_idx) { - u16 attr_size; - struct wilc_ch_list_elem *e; - int i; + u16 elem_size; ch_list = (struct wilc_attr_ch_list *)&buf[ch_list_idx]; - attr_size = le16_to_cpu(ch_list->attr_len); - for (i = 0; i < attr_size;) { + /* the number of bytes following the final 'elem' member */ + elem_size = le16_to_cpu(ch_list->attr_len) - + (sizeof(*ch_list) - sizeof(struct wilc_attr_entry)); + for (unsigned int i = 0; i < elem_size;) { + struct wilc_ch_list_elem *e; + e = (struct wilc_ch_list_elem *)(ch_list->elem + i); + + i += sizeof(*e); + if (i > elem_size) + break; + + i += e->no_of_channels; + if (i > elem_size) + break; + if (e->op_class == WILC_WLAN_OPERATING_CLASS_2_4GHZ) { memset(e->ch_list, sta_ch, e->no_of_channels); break; } - i += e->no_of_channels; } } diff --git a/drivers/net/wireless/microchip/wilc1000/hif.c b/drivers/net/wireless/microchip/wilc1000/hif.c index eb1d1ba3a443ada429f345ce76f3f4bea475c717..67df8221b5aeb2e027d571ac27c8d76ac91a1e00 100644 --- a/drivers/net/wireless/microchip/wilc1000/hif.c +++ b/drivers/net/wireless/microchip/wilc1000/hif.c @@ -482,14 +482,25 @@ void *wilc_parse_join_bss_param(struct cfg80211_bss *bss, rsn_ie = cfg80211_find_ie(WLAN_EID_RSN, ies->data, ies->len); if (rsn_ie) { + int rsn_ie_len = sizeof(struct element) + rsn_ie[1]; int offset = 8; - param->mode_802_11i = 2; - param->rsn_found = true; /* extract RSN capabilities */ - offset += (rsn_ie[offset] * 4) + 2; - offset += (rsn_ie[offset] * 4) + 2; - memcpy(param->rsn_cap, &rsn_ie[offset], 2); + if (offset < rsn_ie_len) { + /* skip over pairwise suites */ + offset += (rsn_ie[offset] * 4) + 2; + + if (offset < rsn_ie_len) { + /* skip over authentication suites */ + offset += (rsn_ie[offset] * 4) + 2; + + if (offset + 1 < rsn_ie_len) { + param->mode_802_11i = 2; + param->rsn_found = true; + memcpy(param->rsn_cap, &rsn_ie[offset], 2); + } + } + } } if (param->rsn_found) { diff --git a/drivers/net/wireless/ralink/rt2x00/rt2400pci.c b/drivers/net/wireless/ralink/rt2x00/rt2400pci.c index 273c5eac336203edccbf39cf1808f070d134716c..ddfc16de1b26f495d28beb08fbfc163459622aec 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2400pci.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2400pci.c @@ -1023,9 +1023,9 @@ static int rt2400pci_set_state(struct rt2x00_dev *rt2x00dev, { u32 reg, reg2; unsigned int i; - char put_to_sleep; - char bbp_state; - char rf_state; + bool put_to_sleep; + u8 bbp_state; + u8 rf_state; put_to_sleep = (state != STATE_AWAKE); @@ -1561,7 +1561,7 @@ static int rt2400pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev) { struct hw_mode_spec *spec = &rt2x00dev->spec; struct channel_info *info; - char *tx_power; + u8 *tx_power; unsigned int i; /* diff --git a/drivers/net/wireless/ralink/rt2x00/rt2400pci.h b/drivers/net/wireless/ralink/rt2x00/rt2400pci.h index b8187b6de1439afca211ecf62b567f1effb4798f..979d5fd8babf7ccb81089163d04948222ef64117 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2400pci.h +++ b/drivers/net/wireless/ralink/rt2x00/rt2400pci.h @@ -939,7 +939,7 @@ #define DEFAULT_TXPOWER 39 #define __CLAMP_TX(__txpower) \ - clamp_t(char, (__txpower), MIN_TXPOWER, MAX_TXPOWER) + clamp_t(u8, (__txpower), MIN_TXPOWER, MAX_TXPOWER) #define TXPOWER_FROM_DEV(__txpower) \ ((__CLAMP_TX(__txpower) - MAX_TXPOWER) + MIN_TXPOWER) diff --git a/drivers/net/wireless/ralink/rt2x00/rt2500pci.c b/drivers/net/wireless/ralink/rt2x00/rt2500pci.c index 8faa0a80e73a667603b805c73b24b8bb1fdb9567..cd6371e25062bead63dd3c56e63719146c782769 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2500pci.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2500pci.c @@ -1176,9 +1176,9 @@ static int rt2500pci_set_state(struct rt2x00_dev *rt2x00dev, { u32 reg, reg2; unsigned int i; - char put_to_sleep; - char bbp_state; - char rf_state; + bool put_to_sleep; + u8 bbp_state; + u8 rf_state; put_to_sleep = (state != STATE_AWAKE); @@ -1856,7 +1856,7 @@ static int rt2500pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev) { struct hw_mode_spec *spec = &rt2x00dev->spec; struct channel_info *info; - char *tx_power; + u8 *tx_power; unsigned int i; /* diff --git a/drivers/net/wireless/ralink/rt2x00/rt2500pci.h b/drivers/net/wireless/ralink/rt2x00/rt2500pci.h index 7e64aee2a172e237243f9df774a2490b6678f30a..ba362675c52c0e955226cb493c74a57452cbe76f 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2500pci.h +++ b/drivers/net/wireless/ralink/rt2x00/rt2500pci.h @@ -1219,6 +1219,6 @@ (((u8)(__txpower)) > MAX_TXPOWER) ? DEFAULT_TXPOWER : (__txpower) #define TXPOWER_TO_DEV(__txpower) \ - clamp_t(char, __txpower, MIN_TXPOWER, MAX_TXPOWER) + clamp_t(u8, __txpower, MIN_TXPOWER, MAX_TXPOWER) #endif /* RT2500PCI_H */ diff --git a/drivers/net/wireless/ralink/rt2x00/rt2500usb.c b/drivers/net/wireless/ralink/rt2x00/rt2500usb.c index bb5ed6630645823e5232c18545d4fd8a0848af9b..4f3b0e6c6256ca1f474852fce250f6e4cfdf00c0 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2500usb.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2500usb.c @@ -984,9 +984,9 @@ static int rt2500usb_set_state(struct rt2x00_dev *rt2x00dev, u16 reg; u16 reg2; unsigned int i; - char put_to_sleep; - char bbp_state; - char rf_state; + bool put_to_sleep; + u8 bbp_state; + u8 rf_state; put_to_sleep = (state != STATE_AWAKE); @@ -1663,7 +1663,7 @@ static int rt2500usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev) { struct hw_mode_spec *spec = &rt2x00dev->spec; struct channel_info *info; - char *tx_power; + u8 *tx_power; unsigned int i; /* diff --git a/drivers/net/wireless/ralink/rt2x00/rt2500usb.h b/drivers/net/wireless/ralink/rt2x00/rt2500usb.h index 0c070288a140f41ea8513362520e8dfcea1598f1..746f0e950b76e3e83e5c1d19f8e7b80e428bafa3 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2500usb.h +++ b/drivers/net/wireless/ralink/rt2x00/rt2500usb.h @@ -839,6 +839,6 @@ (((u8)(__txpower)) > MAX_TXPOWER) ? DEFAULT_TXPOWER : (__txpower) #define TXPOWER_TO_DEV(__txpower) \ - clamp_t(char, __txpower, MIN_TXPOWER, MAX_TXPOWER) + clamp_t(u8, __txpower, MIN_TXPOWER, MAX_TXPOWER) #endif /* RT2500USB_H */ diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c index cbbb1a4849cff046a767fa002d379718435cebf1..12b700c7b9c3b7e124e363554af2a96acbcc3ff3 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.c @@ -3372,10 +3372,10 @@ static void rt2800_config_channel_rf53xx(struct rt2x00_dev *rt2x00dev, if (rt2x00_has_cap_bt_coexist(rt2x00dev)) { if (rt2x00_rt_rev_gte(rt2x00dev, RT5390, REV_RT5390F)) { /* r55/r59 value array of channel 1~14 */ - static const char r55_bt_rev[] = {0x83, 0x83, + static const u8 r55_bt_rev[] = {0x83, 0x83, 0x83, 0x73, 0x73, 0x63, 0x53, 0x53, 0x53, 0x43, 0x43, 0x43, 0x43, 0x43}; - static const char r59_bt_rev[] = {0x0e, 0x0e, + static const u8 r59_bt_rev[] = {0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0b, 0x0a, 0x09, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07}; @@ -3384,7 +3384,7 @@ static void rt2800_config_channel_rf53xx(struct rt2x00_dev *rt2x00dev, rt2800_rfcsr_write(rt2x00dev, 59, r59_bt_rev[idx]); } else { - static const char r59_bt[] = {0x8b, 0x8b, 0x8b, + static const u8 r59_bt[] = {0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8a, 0x89, 0x88, 0x88, 0x86, 0x85, 0x84}; @@ -3392,10 +3392,10 @@ static void rt2800_config_channel_rf53xx(struct rt2x00_dev *rt2x00dev, } } else { if (rt2x00_rt_rev_gte(rt2x00dev, RT5390, REV_RT5390F)) { - static const char r55_nonbt_rev[] = {0x23, 0x23, + static const u8 r55_nonbt_rev[] = {0x23, 0x23, 0x23, 0x23, 0x13, 0x13, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}; - static const char r59_nonbt_rev[] = {0x07, 0x07, + static const u8 r59_nonbt_rev[] = {0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x05, 0x04, 0x04}; @@ -3406,14 +3406,14 @@ static void rt2800_config_channel_rf53xx(struct rt2x00_dev *rt2x00dev, } else if (rt2x00_rt(rt2x00dev, RT5390) || rt2x00_rt(rt2x00dev, RT5392) || rt2x00_rt(rt2x00dev, RT6352)) { - static const char r59_non_bt[] = {0x8f, 0x8f, + static const u8 r59_non_bt[] = {0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8d, 0x8a, 0x88, 0x88, 0x87, 0x87, 0x86}; rt2800_rfcsr_write(rt2x00dev, 59, r59_non_bt[idx]); } else if (rt2x00_rt(rt2x00dev, RT5350)) { - static const char r59_non_bt[] = {0x0b, 0x0b, + static const u8 r59_non_bt[] = {0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06}; @@ -4035,23 +4035,23 @@ static void rt2800_iq_calibrate(struct rt2x00_dev *rt2x00dev, int channel) rt2800_bbp_write(rt2x00dev, 159, cal != 0xff ? cal : 0); } -static char rt2800_txpower_to_dev(struct rt2x00_dev *rt2x00dev, +static s8 rt2800_txpower_to_dev(struct rt2x00_dev *rt2x00dev, unsigned int channel, - char txpower) + s8 txpower) { if (rt2x00_rt(rt2x00dev, RT3593) || rt2x00_rt(rt2x00dev, RT3883)) txpower = rt2x00_get_field8(txpower, EEPROM_TXPOWER_ALC); if (channel <= 14) - return clamp_t(char, txpower, MIN_G_TXPOWER, MAX_G_TXPOWER); + return clamp_t(s8, txpower, MIN_G_TXPOWER, MAX_G_TXPOWER); if (rt2x00_rt(rt2x00dev, RT3593) || rt2x00_rt(rt2x00dev, RT3883)) - return clamp_t(char, txpower, MIN_A_TXPOWER_3593, + return clamp_t(s8, txpower, MIN_A_TXPOWER_3593, MAX_A_TXPOWER_3593); else - return clamp_t(char, txpower, MIN_A_TXPOWER, MAX_A_TXPOWER); + return clamp_t(s8, txpower, MIN_A_TXPOWER, MAX_A_TXPOWER); } static void rt3883_bbp_adjust(struct rt2x00_dev *rt2x00dev, @@ -8530,7 +8530,7 @@ static void rt2800_r_calibration(struct rt2x00_dev *rt2x00dev) u8 bytevalue = 0; int rcalcode; u8 r_cal_code = 0; - char d1 = 0, d2 = 0; + s8 d1 = 0, d2 = 0; u8 rfvalue; u32 MAC_RF_BYPASS0, MAC_RF_CONTROL0, MAC_PWR_PIN_CFG; u32 maccfg; @@ -8591,7 +8591,7 @@ static void rt2800_r_calibration(struct rt2x00_dev *rt2x00dev) if (bytevalue > 128) d1 = bytevalue - 256; else - d1 = (char)bytevalue; + d1 = (s8)bytevalue; rt2800_bbp_write(rt2x00dev, 22, 0x0); rt2800_rfcsr_write_bank(rt2x00dev, 0, 35, 0x01); @@ -8601,7 +8601,7 @@ static void rt2800_r_calibration(struct rt2x00_dev *rt2x00dev) if (bytevalue > 128) d2 = bytevalue - 256; else - d2 = (char)bytevalue; + d2 = (s8)bytevalue; rt2800_bbp_write(rt2x00dev, 22, 0x0); rcalcode = rt2800_calcrcalibrationcode(rt2x00dev, d1, d2); @@ -8703,7 +8703,7 @@ static void rt2800_rxdcoc_calibration(struct rt2x00_dev *rt2x00dev) static u32 rt2800_do_sqrt_accumulation(u32 si) { u32 root, root_pre, bit; - char i; + s8 i; bit = 1 << 15; root = 0; @@ -9330,11 +9330,11 @@ static void rt2800_loft_search(struct rt2x00_dev *rt2x00dev, u8 ch_idx, u8 alc_idx, u8 dc_result[][RF_ALC_NUM][2]) { u32 p0 = 0, p1 = 0, pf = 0; - char idx0 = 0, idx1 = 0; + s8 idx0 = 0, idx1 = 0; u8 idxf[] = {0x00, 0x00}; u8 ibit = 0x20; u8 iorq; - char bidx; + s8 bidx; rt2800_bbp_write(rt2x00dev, 158, 0xb0); rt2800_bbp_write(rt2x00dev, 159, 0x80); @@ -9384,17 +9384,17 @@ static void rt2800_loft_search(struct rt2x00_dev *rt2x00dev, u8 ch_idx, static void rt2800_iq_search(struct rt2x00_dev *rt2x00dev, u8 ch_idx, u8 *ges, u8 *pes) { u32 p0 = 0, p1 = 0, pf = 0; - char perr = 0, gerr = 0, iq_err = 0; - char pef = 0, gef = 0; - char psta, pend; - char gsta, gend; + s8 perr = 0, gerr = 0, iq_err = 0; + s8 pef = 0, gef = 0; + s8 psta, pend; + s8 gsta, gend; u8 ibit = 0x20; u8 first_search = 0x00, touch_neg_max = 0x00; - char idx0 = 0, idx1 = 0; + s8 idx0 = 0, idx1 = 0; u8 gop; u8 bbp = 0; - char bidx; + s8 bidx; for (bidx = 5; bidx >= 1; bidx--) { for (gop = 0; gop < 2; gop++) { @@ -10043,11 +10043,11 @@ static int rt2800_rf_lp_config(struct rt2x00_dev *rt2x00dev, bool btxcal) return 0; } -static char rt2800_lp_tx_filter_bw_cal(struct rt2x00_dev *rt2x00dev) +static s8 rt2800_lp_tx_filter_bw_cal(struct rt2x00_dev *rt2x00dev) { unsigned int cnt; u8 bbp_val; - char cal_val; + s8 cal_val; rt2800_bbp_dcoc_write(rt2x00dev, 0, 0x82); @@ -10079,7 +10079,7 @@ static void rt2800_bw_filter_calibration(struct rt2x00_dev *rt2x00dev, u8 rx_filter_target_20m = 0x27, rx_filter_target_40m = 0x31; int loop = 0, is_ht40, cnt; u8 bbp_val, rf_val; - char cal_r32_init, cal_r32_val, cal_diff; + s8 cal_r32_init, cal_r32_val, cal_diff; u8 saverfb5r00, saverfb5r01, saverfb5r03, saverfb5r04, saverfb5r05; u8 saverfb5r06, saverfb5r07; u8 saverfb5r08, saverfb5r17, saverfb5r18, saverfb5r19, saverfb5r20; @@ -11550,9 +11550,9 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev) { struct hw_mode_spec *spec = &rt2x00dev->spec; struct channel_info *info; - char *default_power1; - char *default_power2; - char *default_power3; + s8 *default_power1; + s8 *default_power2; + s8 *default_power3; unsigned int i, tx_chains, rx_chains; u32 reg; diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h index 3cbef77b4bd3062e1d34c6ecfba58c11b2a2fd0d..194de676df8fd37c535bd6bfe74729179072b81d 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2800lib.h +++ b/drivers/net/wireless/ralink/rt2x00/rt2800lib.h @@ -32,10 +32,10 @@ struct rf_reg_pair { struct rt2800_drv_data { u8 calibration_bw20; u8 calibration_bw40; - char rx_calibration_bw20; - char rx_calibration_bw40; - char tx_calibration_bw20; - char tx_calibration_bw40; + s8 rx_calibration_bw20; + s8 rx_calibration_bw40; + s8 tx_calibration_bw20; + s8 tx_calibration_bw40; u8 bbp25; u8 bbp26; u8 txmixer_gain_24g; diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c index 0827bc860bf866803572a6a163254194cf2eda05..8fd22c69855fa463c1a794eb26368a5fc4aa5696 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c @@ -117,12 +117,12 @@ int rt2x00usb_vendor_request_buff(struct rt2x00_dev *rt2x00dev, const u16 buffer_length) { int status = 0; - unsigned char *tb; + u8 *tb; u16 off, len, bsize; mutex_lock(&rt2x00dev->csr_mutex); - tb = (char *)buffer; + tb = (u8 *)buffer; off = offset; len = buffer_length; while (len && !status) { @@ -215,7 +215,7 @@ void rt2x00usb_register_read_async(struct rt2x00_dev *rt2x00dev, rd->cr.wLength = cpu_to_le16(sizeof(u32)); usb_fill_control_urb(urb, usb_dev, usb_rcvctrlpipe(usb_dev, 0), - (unsigned char *)(&rd->cr), &rd->reg, sizeof(rd->reg), + (u8 *)(&rd->cr), &rd->reg, sizeof(rd->reg), rt2x00usb_register_read_async_cb, rd); usb_anchor_urb(urb, rt2x00dev->anchor); if (usb_submit_urb(urb, GFP_ATOMIC) < 0) { diff --git a/drivers/net/wireless/ralink/rt2x00/rt61pci.c b/drivers/net/wireless/ralink/rt2x00/rt61pci.c index d92f9eb07dc99b8aabcddb97f28bb54766930dfd..81db7f57c7e42019c3feb612a0c9748d28fd01f6 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt61pci.c +++ b/drivers/net/wireless/ralink/rt2x00/rt61pci.c @@ -1709,7 +1709,7 @@ static int rt61pci_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state) { u32 reg, reg2; unsigned int i; - char put_to_sleep; + bool put_to_sleep; put_to_sleep = (state != STATE_AWAKE); @@ -2656,7 +2656,7 @@ static int rt61pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev) { struct hw_mode_spec *spec = &rt2x00dev->spec; struct channel_info *info; - char *tx_power; + u8 *tx_power; unsigned int i; /* diff --git a/drivers/net/wireless/ralink/rt2x00/rt61pci.h b/drivers/net/wireless/ralink/rt2x00/rt61pci.h index 5f208ad509bd43a61019baee275bd091554b4bc8..d72d0ffd11275c8e6ed33f67e15759f21ff9650a 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt61pci.h +++ b/drivers/net/wireless/ralink/rt2x00/rt61pci.h @@ -1484,6 +1484,6 @@ struct hw_pairwise_ta_entry { (((u8)(__txpower)) > MAX_TXPOWER) ? DEFAULT_TXPOWER : (__txpower) #define TXPOWER_TO_DEV(__txpower) \ - clamp_t(char, __txpower, MIN_TXPOWER, MAX_TXPOWER) + clamp_t(u8, __txpower, MIN_TXPOWER, MAX_TXPOWER) #endif /* RT61PCI_H */ diff --git a/drivers/net/wireless/ralink/rt2x00/rt73usb.c b/drivers/net/wireless/ralink/rt2x00/rt73usb.c index e3269fd7c59e3ddd0faa96bf647044e4c2366271..8610354443740902069dee85bab22ac27895b5ae 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt73usb.c +++ b/drivers/net/wireless/ralink/rt2x00/rt73usb.c @@ -1378,7 +1378,7 @@ static int rt73usb_set_state(struct rt2x00_dev *rt2x00dev, enum dev_state state) { u32 reg, reg2; unsigned int i; - char put_to_sleep; + bool put_to_sleep; put_to_sleep = (state != STATE_AWAKE); @@ -2090,7 +2090,7 @@ static int rt73usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev) { struct hw_mode_spec *spec = &rt2x00dev->spec; struct channel_info *info; - char *tx_power; + u8 *tx_power; unsigned int i; /* diff --git a/drivers/net/wireless/ralink/rt2x00/rt73usb.h b/drivers/net/wireless/ralink/rt2x00/rt73usb.h index 1b56d285c34b45fa17d5fa86c21c6c884b916dde..bb0a68516c08b0f462dbe743f4f20f32d4d4bebb 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt73usb.h +++ b/drivers/net/wireless/ralink/rt2x00/rt73usb.h @@ -1063,6 +1063,6 @@ struct hw_pairwise_ta_entry { (((u8)(__txpower)) > MAX_TXPOWER) ? DEFAULT_TXPOWER : (__txpower) #define TXPOWER_TO_DEV(__txpower) \ - clamp_t(char, __txpower, MIN_TXPOWER, MAX_TXPOWER) + clamp_t(u8, __txpower, MIN_TXPOWER, MAX_TXPOWER) #endif /* RT73USB_H */ diff --git a/drivers/net/wwan/Kconfig b/drivers/net/wwan/Kconfig index 3486ffe94ac4604608a3dd6ccaf55c441ba04580..ac4d73b5626f438f6868736631b542c23b31368f 100644 --- a/drivers/net/wwan/Kconfig +++ b/drivers/net/wwan/Kconfig @@ -94,7 +94,7 @@ config RPMSG_WWAN_CTRL config IOSM tristate "IOSM Driver for Intel M.2 WWAN Device" - depends on INTEL_IOMMU + depends on PCI select NET_DEVLINK select RELAY if WWAN_DEBUGFS help diff --git a/drivers/net/wwan/iosm/iosm_ipc_coredump.c b/drivers/net/wwan/iosm/iosm_ipc_coredump.c index 9acd87724c9de4efff9029b46565e20f24be1865..26ca30476f4099f9c78165f1518e3fc39cab4e09 100644 --- a/drivers/net/wwan/iosm/iosm_ipc_coredump.c +++ b/drivers/net/wwan/iosm/iosm_ipc_coredump.c @@ -2,6 +2,7 @@ /* * Copyright (C) 2020-2021 Intel Corporation. */ +#include #include "iosm_ipc_coredump.h" diff --git a/drivers/net/wwan/iosm/iosm_ipc_devlink.c b/drivers/net/wwan/iosm/iosm_ipc_devlink.c index 17da85a8f33710e343c65dab3eb6dba52bef4ef3..2fe724d623c0614b824d279a391368ba11958782 100644 --- a/drivers/net/wwan/iosm/iosm_ipc_devlink.c +++ b/drivers/net/wwan/iosm/iosm_ipc_devlink.c @@ -2,6 +2,7 @@ /* * Copyright (C) 2020-2021 Intel Corporation. */ +#include #include "iosm_ipc_chnl_cfg.h" #include "iosm_ipc_coredump.h" diff --git a/drivers/net/wwan/iosm/iosm_ipc_imem_ops.c b/drivers/net/wwan/iosm/iosm_ipc_imem_ops.c index b7f9237dedf76835687a9bb45676b72df866453d..66b90cc4c3460f4d046037c6e51181322720f56e 100644 --- a/drivers/net/wwan/iosm/iosm_ipc_imem_ops.c +++ b/drivers/net/wwan/iosm/iosm_ipc_imem_ops.c @@ -91,6 +91,14 @@ void ipc_imem_wwan_channel_init(struct iosm_imem *ipc_imem, } ipc_chnl_cfg_get(&chnl_cfg, ipc_imem->nr_of_channels); + + if (ipc_imem->mmio->mux_protocol == MUX_AGGREGATION && + ipc_imem->nr_of_channels == IPC_MEM_IP_CHL_ID_0) { + chnl_cfg.ul_nr_of_entries = IPC_MEM_MAX_TDS_MUX_AGGR_UL; + chnl_cfg.dl_nr_of_entries = IPC_MEM_MAX_TDS_MUX_AGGR_DL; + chnl_cfg.dl_buf_size = IPC_MEM_MAX_ADB_BUF_SIZE; + } + ipc_imem_channel_init(ipc_imem, IPC_CTYPE_WWAN, chnl_cfg, IRQ_MOD_OFF); diff --git a/drivers/net/wwan/iosm/iosm_ipc_mux.h b/drivers/net/wwan/iosm/iosm_ipc_mux.h index cd9d74cc097f145b82a8065973a756440020cbaa..9968bb885c1f3d7333bb320de2013fa123dbce89 100644 --- a/drivers/net/wwan/iosm/iosm_ipc_mux.h +++ b/drivers/net/wwan/iosm/iosm_ipc_mux.h @@ -10,6 +10,7 @@ #define IPC_MEM_MAX_UL_DG_ENTRIES 100 #define IPC_MEM_MAX_TDS_MUX_AGGR_UL 60 +#define IPC_MEM_MAX_TDS_MUX_AGGR_DL 60 #define IPC_MEM_MAX_ADB_BUF_SIZE (16 * 1024) #define IPC_MEM_MAX_UL_ADB_BUF_SIZE IPC_MEM_MAX_ADB_BUF_SIZE diff --git a/drivers/net/wwan/iosm/iosm_ipc_mux_codec.c b/drivers/net/wwan/iosm/iosm_ipc_mux_codec.c index d41e373f9c0adb6362f90e5cac7f7636a736600c..d6b166fc5c0ef5ae86e04ee0f225b583aed0ac7a 100644 --- a/drivers/net/wwan/iosm/iosm_ipc_mux_codec.c +++ b/drivers/net/wwan/iosm/iosm_ipc_mux_codec.c @@ -365,7 +365,8 @@ static void ipc_mux_dl_cmd_decode(struct iosm_mux *ipc_mux, struct sk_buff *skb) /* Pass the DL packet to the netif layer. */ static int ipc_mux_net_receive(struct iosm_mux *ipc_mux, int if_id, struct iosm_wwan *wwan, u32 offset, - u8 service_class, struct sk_buff *skb) + u8 service_class, struct sk_buff *skb, + u32 pkt_len) { struct sk_buff *dest_skb = skb_clone(skb, GFP_ATOMIC); @@ -373,7 +374,7 @@ static int ipc_mux_net_receive(struct iosm_mux *ipc_mux, int if_id, return -ENOMEM; skb_pull(dest_skb, offset); - skb_set_tail_pointer(dest_skb, dest_skb->len); + skb_trim(dest_skb, pkt_len); /* Pass the packet to the netif layer. */ dest_skb->priority = service_class; @@ -429,7 +430,7 @@ static void ipc_mux_dl_fcth_decode(struct iosm_mux *ipc_mux, static void ipc_mux_dl_adgh_decode(struct iosm_mux *ipc_mux, struct sk_buff *skb) { - u32 pad_len, packet_offset; + u32 pad_len, packet_offset, adgh_len; struct iosm_wwan *wwan; struct mux_adgh *adgh; u8 *block = skb->data; @@ -470,10 +471,12 @@ static void ipc_mux_dl_adgh_decode(struct iosm_mux *ipc_mux, packet_offset = sizeof(*adgh) + pad_len; if_id += ipc_mux->wwan_q_offset; + adgh_len = le16_to_cpu(adgh->length); /* Pass the packet to the netif layer */ rc = ipc_mux_net_receive(ipc_mux, if_id, wwan, packet_offset, - adgh->service_class, skb); + adgh->service_class, skb, + adgh_len - packet_offset); if (rc) { dev_err(ipc_mux->dev, "mux adgh decoding error"); return; @@ -547,7 +550,7 @@ static int mux_dl_process_dg(struct iosm_mux *ipc_mux, struct mux_adbh *adbh, int if_id, int nr_of_dg) { u32 dl_head_pad_len = ipc_mux->session[if_id].dl_head_pad_len; - u32 packet_offset, i, rc; + u32 packet_offset, i, rc, dg_len; for (i = 0; i < nr_of_dg; i++, dg++) { if (le32_to_cpu(dg->datagram_index) @@ -562,11 +565,12 @@ static int mux_dl_process_dg(struct iosm_mux *ipc_mux, struct mux_adbh *adbh, packet_offset = le32_to_cpu(dg->datagram_index) + dl_head_pad_len; + dg_len = le16_to_cpu(dg->datagram_length); /* Pass the packet to the netif layer. */ rc = ipc_mux_net_receive(ipc_mux, if_id, ipc_mux->wwan, packet_offset, - dg->service_class, - skb); + dg->service_class, skb, + dg_len - dl_head_pad_len); if (rc) goto dg_error; } @@ -1207,10 +1211,9 @@ static int mux_ul_dg_update_tbl_index(struct iosm_mux *ipc_mux, qlth_n_ql_size, ul_list); ipc_mux_ul_adb_finish(ipc_mux); if (ipc_mux_ul_adb_allocate(ipc_mux, adb, &ipc_mux->size_needed, - IOSM_AGGR_MUX_SIG_ADBH)) { - dev_kfree_skb(src_skb); + IOSM_AGGR_MUX_SIG_ADBH)) return -ENOMEM; - } + ipc_mux->size_needed = le32_to_cpu(adb->adbh->block_length); ipc_mux->size_needed += offsetof(struct mux_adth, dg); @@ -1471,8 +1474,7 @@ void ipc_mux_ul_encoded_process(struct iosm_mux *ipc_mux, struct sk_buff *skb) ipc_mux->ul_data_pend_bytes); /* Reset the skb settings. */ - skb->tail = 0; - skb->len = 0; + skb_trim(skb, 0); /* Add the consumed ADB to the free list. */ skb_queue_tail((&ipc_mux->ul_adb.free_list), skb); diff --git a/drivers/net/wwan/iosm/iosm_ipc_pcie.c b/drivers/net/wwan/iosm/iosm_ipc_pcie.c index 31f57b986df2836fed0ac529a5d4c8b8cd51a8ab..5bf5a93937c9c4dd898d41407f26606742735a3a 100644 --- a/drivers/net/wwan/iosm/iosm_ipc_pcie.c +++ b/drivers/net/wwan/iosm/iosm_ipc_pcie.c @@ -232,6 +232,7 @@ static void ipc_pcie_config_init(struct iosm_pcie *ipc_pcie) */ static enum ipc_pcie_sleep_state ipc_pcie_read_bios_cfg(struct device *dev) { + enum ipc_pcie_sleep_state sleep_state = IPC_PCIE_D0L12; union acpi_object *object; acpi_handle handle_acpi; @@ -242,18 +243,23 @@ static enum ipc_pcie_sleep_state ipc_pcie_read_bios_cfg(struct device *dev) } object = acpi_evaluate_dsm(handle_acpi, &wwan_acpi_guid, 0, 3, NULL); + if (!object) + goto default_ret; + + if (object->integer.value == 3) + sleep_state = IPC_PCIE_D3L2; - if (object && object->integer.value == 3) - return IPC_PCIE_D3L2; + ACPI_FREE(object); default_ret: - return IPC_PCIE_D0L12; + return sleep_state; } static int ipc_pcie_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) { struct iosm_pcie *ipc_pcie = kzalloc(sizeof(*ipc_pcie), GFP_KERNEL); + int ret; pr_debug("Probing device 0x%X from the vendor 0x%X", pci_id->device, pci_id->vendor); @@ -286,6 +292,12 @@ static int ipc_pcie_probe(struct pci_dev *pci, goto pci_enable_fail; } + ret = dma_set_mask(ipc_pcie->dev, DMA_BIT_MASK(64)); + if (ret) { + dev_err(ipc_pcie->dev, "Could not set PCI DMA mask: %d", ret); + return ret; + } + ipc_pcie_config_aspm(ipc_pcie); dev_dbg(ipc_pcie->dev, "PCIe device enabled."); diff --git a/drivers/net/wwan/iosm/iosm_ipc_protocol.h b/drivers/net/wwan/iosm/iosm_ipc_protocol.h index 9b3a6d86ece7a53f9ef05c84771f26802970115e..289397c4ea6ce011a0b8207f68e13af7ae2f5632 100644 --- a/drivers/net/wwan/iosm/iosm_ipc_protocol.h +++ b/drivers/net/wwan/iosm/iosm_ipc_protocol.h @@ -122,7 +122,7 @@ struct iosm_protocol { struct iosm_imem *imem; struct ipc_rsp *rsp_ring[IPC_MEM_MSG_ENTRIES]; struct device *dev; - phys_addr_t phy_ap_shm; + dma_addr_t phy_ap_shm; u32 old_msg_tail; }; diff --git a/drivers/net/wwan/iosm/iosm_ipc_wwan.c b/drivers/net/wwan/iosm/iosm_ipc_wwan.c index 2f1f8b5d5b59532baa30b148a760635e89c2dc68..4c9022a93e01822eedebe18e00e317969c64d936 100644 --- a/drivers/net/wwan/iosm/iosm_ipc_wwan.c +++ b/drivers/net/wwan/iosm/iosm_ipc_wwan.c @@ -40,13 +40,11 @@ struct iosm_netdev_priv { * @ipc_imem: Pointer to imem data-struct * @sub_netlist: List of active netdevs * @dev: Pointer device structure - * @if_mutex: Mutex used for add and remove interface id */ struct iosm_wwan { struct iosm_imem *ipc_imem; struct iosm_netdev_priv __rcu *sub_netlist[IP_MUX_SESSION_END + 1]; struct device *dev; - struct mutex if_mutex; /* Mutex used for add and remove interface id */ }; /* Bring-up the wwan net link */ @@ -55,14 +53,11 @@ static int ipc_wwan_link_open(struct net_device *netdev) struct iosm_netdev_priv *priv = wwan_netdev_drvpriv(netdev); struct iosm_wwan *ipc_wwan = priv->ipc_wwan; int if_id = priv->if_id; - int ret; if (if_id < IP_MUX_SESSION_START || if_id >= ARRAY_SIZE(ipc_wwan->sub_netlist)) return -EINVAL; - mutex_lock(&ipc_wwan->if_mutex); - /* get channel id */ priv->ch_id = ipc_imem_sys_wwan_open(ipc_wwan->ipc_imem, if_id); @@ -70,8 +65,7 @@ static int ipc_wwan_link_open(struct net_device *netdev) dev_err(ipc_wwan->dev, "cannot connect wwan0 & id %d to the IPC mem layer", if_id); - ret = -ENODEV; - goto out; + return -ENODEV; } /* enable tx path, DL data may follow */ @@ -80,10 +74,7 @@ static int ipc_wwan_link_open(struct net_device *netdev) dev_dbg(ipc_wwan->dev, "Channel id %d allocated to if_id %d", priv->ch_id, priv->if_id); - ret = 0; -out: - mutex_unlock(&ipc_wwan->if_mutex); - return ret; + return 0; } /* Bring-down the wwan net link */ @@ -93,11 +84,9 @@ static int ipc_wwan_link_stop(struct net_device *netdev) netif_stop_queue(netdev); - mutex_lock(&priv->ipc_wwan->if_mutex); ipc_imem_sys_wwan_close(priv->ipc_wwan->ipc_imem, priv->if_id, priv->ch_id); priv->ch_id = -1; - mutex_unlock(&priv->ipc_wwan->if_mutex); return 0; } @@ -168,6 +157,7 @@ static void ipc_wwan_setup(struct net_device *iosm_dev) iosm_dev->max_mtu = ETH_MAX_MTU; iosm_dev->flags = IFF_POINTOPOINT | IFF_NOARP; + iosm_dev->needs_free_netdev = true; iosm_dev->netdev_ops = &ipc_inm_ops; } @@ -189,26 +179,17 @@ static int ipc_wwan_newlink(void *ctxt, struct net_device *dev, priv->netdev = dev; priv->ipc_wwan = ipc_wwan; - mutex_lock(&ipc_wwan->if_mutex); - if (rcu_access_pointer(ipc_wwan->sub_netlist[if_id])) { - err = -EBUSY; - goto out_unlock; - } + if (rcu_access_pointer(ipc_wwan->sub_netlist[if_id])) + return -EBUSY; err = register_netdevice(dev); if (err) - goto out_unlock; + return err; rcu_assign_pointer(ipc_wwan->sub_netlist[if_id], priv); - mutex_unlock(&ipc_wwan->if_mutex); - netif_device_attach(dev); return 0; - -out_unlock: - mutex_unlock(&ipc_wwan->if_mutex); - return err; } static void ipc_wwan_dellink(void *ctxt, struct net_device *dev, @@ -222,17 +203,12 @@ static void ipc_wwan_dellink(void *ctxt, struct net_device *dev, if_id >= ARRAY_SIZE(ipc_wwan->sub_netlist))) return; - mutex_lock(&ipc_wwan->if_mutex); - if (WARN_ON(rcu_access_pointer(ipc_wwan->sub_netlist[if_id]) != priv)) - goto unlock; + return; RCU_INIT_POINTER(ipc_wwan->sub_netlist[if_id], NULL); /* unregistering includes synchronize_net() */ unregister_netdevice_queue(dev, head); - -unlock: - mutex_unlock(&ipc_wwan->if_mutex); } static const struct wwan_ops iosm_wwan_ops = { @@ -323,12 +299,9 @@ struct iosm_wwan *ipc_wwan_init(struct iosm_imem *ipc_imem, struct device *dev) ipc_wwan->dev = dev; ipc_wwan->ipc_imem = ipc_imem; - mutex_init(&ipc_wwan->if_mutex); - /* WWAN core will create a netdev for the default IP MUX channel */ if (wwan_register_ops(ipc_wwan->dev, &iosm_wwan_ops, ipc_wwan, IP_MUX_SESSION_DEFAULT)) { - mutex_destroy(&ipc_wwan->if_mutex); kfree(ipc_wwan); return NULL; } @@ -341,7 +314,5 @@ void ipc_wwan_deinit(struct iosm_wwan *ipc_wwan) /* This call will remove all child netdev(s) */ wwan_unregister_ops(ipc_wwan->dev); - mutex_destroy(&ipc_wwan->if_mutex); - kfree(ipc_wwan); } diff --git a/drivers/net/wwan/mhi_wwan_mbim.c b/drivers/net/wwan/mhi_wwan_mbim.c index 6872782e8dd89a362b5ebf24b644bc0f935ce03b..ef70bb7c88ad61397d4cee697a0e9891a4cb3a2d 100644 --- a/drivers/net/wwan/mhi_wwan_mbim.c +++ b/drivers/net/wwan/mhi_wwan_mbim.c @@ -582,6 +582,7 @@ static void mhi_mbim_setup(struct net_device *ndev) ndev->min_mtu = ETH_MIN_MTU; ndev->max_mtu = MHI_MAX_BUF_SZ - ndev->needed_headroom; ndev->tx_queue_len = 1000; + ndev->needs_free_netdev = true; } static const struct wwan_ops mhi_mbim_wwan_ops = { diff --git a/drivers/net/wwan/t7xx/t7xx_modem_ops.c b/drivers/net/wwan/t7xx/t7xx_modem_ops.c index 3458af31e8647050e2308a7b34a36a66a8e03419..7d0f5e4f0a7815a2c486c4c7211864d1fa81497b 100644 --- a/drivers/net/wwan/t7xx/t7xx_modem_ops.c +++ b/drivers/net/wwan/t7xx/t7xx_modem_ops.c @@ -165,6 +165,8 @@ static int t7xx_acpi_reset(struct t7xx_pci_dev *t7xx_dev, char *fn_name) return -EFAULT; } + kfree(buffer.pointer); + #endif return 0; } diff --git a/drivers/nfc/fdp/fdp.c b/drivers/nfc/fdp/fdp.c index c6b3334f24c9ea3ba53a65274859ce7becabc095..f12f903a9dd134bf327744302205dc203ed92f7f 100644 --- a/drivers/nfc/fdp/fdp.c +++ b/drivers/nfc/fdp/fdp.c @@ -249,11 +249,19 @@ static int fdp_nci_close(struct nci_dev *ndev) static int fdp_nci_send(struct nci_dev *ndev, struct sk_buff *skb) { struct fdp_nci_info *info = nci_get_drvdata(ndev); + int ret; if (atomic_dec_and_test(&info->data_pkt_counter)) info->data_pkt_counter_cb(ndev); - return info->phy_ops->write(info->phy, skb); + ret = info->phy_ops->write(info->phy, skb); + if (ret < 0) { + kfree_skb(skb); + return ret; + } + + consume_skb(skb); + return 0; } static int fdp_nci_request_firmware(struct nci_dev *ndev) diff --git a/drivers/nfc/nfcmrvl/i2c.c b/drivers/nfc/nfcmrvl/i2c.c index acef0cfd76af35406f1b245924e94745e80a5623..97600826af692e6caa57cb5a0458467d27c2657d 100644 --- a/drivers/nfc/nfcmrvl/i2c.c +++ b/drivers/nfc/nfcmrvl/i2c.c @@ -112,8 +112,10 @@ static int nfcmrvl_i2c_nci_send(struct nfcmrvl_private *priv, struct nfcmrvl_i2c_drv_data *drv_data = priv->drv_data; int ret; - if (test_bit(NFCMRVL_PHY_ERROR, &priv->flags)) + if (test_bit(NFCMRVL_PHY_ERROR, &priv->flags)) { + kfree_skb(skb); return -EREMOTEIO; + } ret = i2c_master_send(drv_data->i2c, skb->data, skb->len); @@ -132,10 +134,15 @@ static int nfcmrvl_i2c_nci_send(struct nfcmrvl_private *priv, ret = -EREMOTEIO; } else ret = 0; + } + + if (ret) { kfree_skb(skb); + return ret; } - return ret; + consume_skb(skb); + return 0; } static void nfcmrvl_i2c_nci_update_config(struct nfcmrvl_private *priv, diff --git a/drivers/nfc/nxp-nci/core.c b/drivers/nfc/nxp-nci/core.c index 7c93d484dc1bc79596bb002b324a743d3efd25c4..66b198663387afb1c6ed8d8af176eeb80db6dbbf 100644 --- a/drivers/nfc/nxp-nci/core.c +++ b/drivers/nfc/nxp-nci/core.c @@ -73,17 +73,24 @@ static int nxp_nci_send(struct nci_dev *ndev, struct sk_buff *skb) struct nxp_nci_info *info = nci_get_drvdata(ndev); int r; - if (!info->phy_ops->write) + if (!info->phy_ops->write) { + kfree_skb(skb); return -EOPNOTSUPP; + } - if (info->mode != NXP_NCI_MODE_NCI) + if (info->mode != NXP_NCI_MODE_NCI) { + kfree_skb(skb); return -EINVAL; + } r = info->phy_ops->write(info->phy_id, skb); - if (r < 0) + if (r < 0) { kfree_skb(skb); + return r; + } - return r; + consume_skb(skb); + return 0; } static int nxp_nci_rf_pll_unlocked_ntf(struct nci_dev *ndev, diff --git a/drivers/nfc/s3fwrn5/core.c b/drivers/nfc/s3fwrn5/core.c index 1c412007fabb6fd64e1915b64a54d2243c3d0601..aec356880adff9d3937b9c9aceb1906695569d8f 100644 --- a/drivers/nfc/s3fwrn5/core.c +++ b/drivers/nfc/s3fwrn5/core.c @@ -105,16 +105,21 @@ static int s3fwrn5_nci_send(struct nci_dev *ndev, struct sk_buff *skb) mutex_lock(&info->mutex); if (s3fwrn5_get_mode(info) != S3FWRN5_MODE_NCI) { + kfree_skb(skb); mutex_unlock(&info->mutex); return -EINVAL; } ret = s3fwrn5_write(info, skb); - if (ret < 0) + if (ret < 0) { kfree_skb(skb); + mutex_unlock(&info->mutex); + return ret; + } + consume_skb(skb); mutex_unlock(&info->mutex); - return ret; + return 0; } static int s3fwrn5_nci_post_setup(struct nci_dev *ndev) diff --git a/drivers/nfc/st-nci/se.c b/drivers/nfc/st-nci/se.c index 7764b1a4c3cf886bbb96b8ee0242ed3f66ced227..ec87dd21e054ad934e443c086789972baf51c9e8 100644 --- a/drivers/nfc/st-nci/se.c +++ b/drivers/nfc/st-nci/se.c @@ -312,6 +312,8 @@ static int st_nci_hci_connectivity_event_received(struct nci_dev *ndev, int r = 0; struct device *dev = &ndev->nfc_dev->dev; struct nfc_evt_transaction *transaction; + u32 aid_len; + u8 params_len; pr_debug("connectivity gate event: %x\n", event); @@ -325,26 +327,47 @@ static int st_nci_hci_connectivity_event_received(struct nci_dev *ndev, * Description Tag Length * AID 81 5 to 16 * PARAMETERS 82 0 to 255 + * + * The key differences are aid storage length is variably sized + * in the packet, but fixed in nfc_evt_transaction, and that + * the aid_len is u8 in the packet, but u32 in the structure, + * and the tags in the packet are not included in + * nfc_evt_transaction. + * + * size(b): 1 1 5-16 1 1 0-255 + * offset: 0 1 2 aid_len + 2 aid_len + 3 aid_len + 4 + * mem name: aid_tag(M) aid_len aid params_tag(M) params_len params + * example: 0x81 5-16 X 0x82 0-255 X */ - if (skb->len < NFC_MIN_AID_LENGTH + 2 && - skb->data[0] != NFC_EVT_TRANSACTION_AID_TAG) + if (skb->len < 2 || skb->data[0] != NFC_EVT_TRANSACTION_AID_TAG) return -EPROTO; - transaction = devm_kzalloc(dev, skb->len - 2, GFP_KERNEL); - if (!transaction) - return -ENOMEM; + aid_len = skb->data[1]; - transaction->aid_len = skb->data[1]; - memcpy(transaction->aid, &skb->data[2], transaction->aid_len); + if (skb->len < aid_len + 4 || + aid_len > sizeof(transaction->aid)) + return -EPROTO; - /* Check next byte is PARAMETERS tag (82) */ - if (skb->data[transaction->aid_len + 2] != - NFC_EVT_TRANSACTION_PARAMS_TAG) + params_len = skb->data[aid_len + 3]; + + /* Verify PARAMETERS tag is (82), and final check that there is + * enough space in the packet to read everything. + */ + if (skb->data[aid_len + 2] != NFC_EVT_TRANSACTION_PARAMS_TAG || + skb->len < aid_len + 4 + params_len) return -EPROTO; - transaction->params_len = skb->data[transaction->aid_len + 3]; - memcpy(transaction->params, skb->data + - transaction->aid_len + 4, transaction->params_len); + transaction = devm_kzalloc(dev, sizeof(*transaction) + + params_len, GFP_KERNEL); + if (!transaction) + return -ENOMEM; + + transaction->aid_len = aid_len; + transaction->params_len = params_len; + + memcpy(transaction->aid, &skb->data[2], aid_len); + memcpy(transaction->params, &skb->data[aid_len + 4], + params_len); r = nfc_se_transaction(ndev->nfc_dev, host, transaction); break; diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c index dc42206005855dce9ce9cc2ec60429995f246573..69e333922beaaec8824c0432156c1f20eeaf81a5 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -675,6 +675,7 @@ void nvme_init_request(struct request *req, struct nvme_command *cmd) if (req->mq_hctx->type == HCTX_TYPE_POLL) req->cmd_flags |= REQ_POLLED; nvme_clear_nvme_request(req); + req->rq_flags |= RQF_QUIET; memcpy(nvme_req(req)->cmd, cmd, sizeof(*cmd)); } EXPORT_SYMBOL_GPL(nvme_init_request); @@ -1037,7 +1038,6 @@ int __nvme_submit_sync_cmd(struct request_queue *q, struct nvme_command *cmd, goto out; } - req->rq_flags |= RQF_QUIET; ret = nvme_execute_rq(req, at_head); if (result && ret >= 0) *result = nvme_req(req)->result; @@ -1227,7 +1227,6 @@ static void nvme_keep_alive_work(struct work_struct *work) rq->timeout = ctrl->kato * HZ; rq->end_io = nvme_keep_alive_end_io; rq->end_io_data = ctrl; - rq->rq_flags |= RQF_QUIET; blk_execute_rq_nowait(rq, false); } @@ -4305,7 +4304,7 @@ static void nvme_ns_remove(struct nvme_ns *ns) mutex_unlock(&ns->ctrl->subsys->lock); /* guarantee not available in head->list */ - synchronize_rcu(); + synchronize_srcu(&ns->head->srcu); if (!nvme_ns_head_multipath(ns->head)) nvme_cdev_del(&ns->cdev, &ns->cdev_device); diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c index 93e2138a8b42712fd0b7a701675926bf8acb532e..7e025b8948cbf7bffa667d67362207ddcd241f28 100644 --- a/drivers/nvme/host/multipath.c +++ b/drivers/nvme/host/multipath.c @@ -174,11 +174,14 @@ void nvme_mpath_revalidate_paths(struct nvme_ns *ns) struct nvme_ns_head *head = ns->head; sector_t capacity = get_capacity(head->disk); int node; + int srcu_idx; + srcu_idx = srcu_read_lock(&head->srcu); list_for_each_entry_rcu(ns, &head->list, siblings) { if (capacity != get_capacity(ns->disk)) clear_bit(NVME_NS_READY, &ns->flags); } + srcu_read_unlock(&head->srcu, srcu_idx); for_each_node(node) rcu_assign_pointer(head->current_path[node], NULL); diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index 31e577b01257d6196d71523b20575eea8d99e4a8..488ad7dabeb8ef077ee46502b6ded629997a8f12 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -797,6 +797,8 @@ static blk_status_t nvme_setup_prp_simple(struct nvme_dev *dev, cmnd->dptr.prp1 = cpu_to_le64(iod->first_dma); if (bv->bv_len > first_prp_len) cmnd->dptr.prp2 = cpu_to_le64(iod->first_dma + first_prp_len); + else + cmnd->dptr.prp2 = 0; return BLK_STS_OK; } @@ -1436,7 +1438,6 @@ static enum blk_eh_timer_return nvme_timeout(struct request *req) abort_req->end_io = abort_endio; abort_req->end_io_data = NULL; - abort_req->rq_flags |= RQF_QUIET; blk_execute_rq_nowait(abort_req, false); /* @@ -2490,7 +2491,6 @@ static int nvme_delete_queue(struct nvme_queue *nvmeq, u8 opcode) req->end_io_data = nvmeq; init_completion(&nvmeq->delete_done); - req->rq_flags |= RQF_QUIET; blk_execute_rq_nowait(req, false); return 0; } @@ -3491,6 +3491,8 @@ static const struct pci_device_id nvme_id_table[] = { NVME_QUIRK_IGNORE_DEV_SUBNQN, }, { PCI_DEVICE(0x1344, 0x5407), /* Micron Technology Inc NVMe SSD */ .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN }, + { PCI_DEVICE(0x1344, 0x6001), /* Micron Nitro NVMe */ + .driver_data = NVME_QUIRK_BOGUS_NID, }, { PCI_DEVICE(0x1c5c, 0x1504), /* SK Hynix PC400 */ .driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, }, { PCI_DEVICE(0x1c5c, 0x174a), /* SK Hynix P31 SSD */ @@ -3521,6 +3523,8 @@ static const struct pci_device_id nvme_id_table[] = { .driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, }, { PCI_DEVICE(0x2646, 0x501E), /* KINGSTON OM3PGP4xxxxQ OS21011 NVMe SSD */ .driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, }, + { PCI_DEVICE(0x1f40, 0x5236), /* Netac Technologies Co. NV7000 NVMe SSD */ + .driver_data = NVME_QUIRK_BOGUS_NID, }, { PCI_DEVICE(0x1e4B, 0x1001), /* MAXIO MAP1001 */ .driver_data = NVME_QUIRK_BOGUS_NID, }, { PCI_DEVICE(0x1e4B, 0x1002), /* MAXIO MAP1002 */ diff --git a/drivers/nvme/target/auth.c b/drivers/nvme/target/auth.c index c4113b43dbfeebabec926333d485954191e993c6..4dcddcf95279b3b56c7c04a542c29d0463287682 100644 --- a/drivers/nvme/target/auth.c +++ b/drivers/nvme/target/auth.c @@ -45,9 +45,11 @@ int nvmet_auth_set_key(struct nvmet_host *host, const char *secret, if (!dhchap_secret) return -ENOMEM; if (set_ctrl) { + kfree(host->dhchap_ctrl_secret); host->dhchap_ctrl_secret = strim(dhchap_secret); host->dhchap_ctrl_key_hash = key_hash; } else { + kfree(host->dhchap_secret); host->dhchap_secret = strim(dhchap_secret); host->dhchap_key_hash = key_hash; } diff --git a/drivers/nvme/target/configfs.c b/drivers/nvme/target/configfs.c index 9443ee1d4ae3dd6c367db6a3ca7b24a1b90da15f..6a2816f3b4e807813a51ddd2d73a1611a7f10ba1 100644 --- a/drivers/nvme/target/configfs.c +++ b/drivers/nvme/target/configfs.c @@ -1215,6 +1215,7 @@ static ssize_t nvmet_subsys_attr_model_store_locked(struct nvmet_subsys *subsys, const char *page, size_t count) { int pos = 0, len; + char *val; if (subsys->subsys_discovered) { pr_err("Can't set model number. %s is already assigned\n", @@ -1237,9 +1238,11 @@ static ssize_t nvmet_subsys_attr_model_store_locked(struct nvmet_subsys *subsys, return -EINVAL; } - subsys->model_number = kmemdup_nul(page, len, GFP_KERNEL); - if (!subsys->model_number) + val = kmemdup_nul(page, len, GFP_KERNEL); + if (!val) return -ENOMEM; + kfree(subsys->model_number); + subsys->model_number = val; return count; } @@ -1836,6 +1839,7 @@ static void nvmet_host_release(struct config_item *item) #ifdef CONFIG_NVME_TARGET_AUTH kfree(host->dhchap_secret); + kfree(host->dhchap_ctrl_secret); #endif kfree(host); } diff --git a/drivers/nvmem/lan9662-otpc.c b/drivers/nvmem/lan9662-otpc.c index f6732fd216d801400f15504989ebd18b078ce572..56fc19f092a7fde7341d71292f01edfcb63405ce 100644 --- a/drivers/nvmem/lan9662-otpc.c +++ b/drivers/nvmem/lan9662-otpc.c @@ -36,7 +36,7 @@ struct lan9662_otp { void __iomem *base; }; -static bool lan9662_otp_wait_flag_clear(void __iomem *reg, u32 flag) +static int lan9662_otp_wait_flag_clear(void __iomem *reg, u32 flag) { u32 val; @@ -203,7 +203,7 @@ static int lan9662_otp_probe(struct platform_device *pdev) } static const struct of_device_id lan9662_otp_match[] = { - { .compatible = "microchip,lan9662-otp", }, + { .compatible = "microchip,lan9662-otpc", }, { }, }; MODULE_DEVICE_TABLE(of, lan9662_otp_match); diff --git a/drivers/nvmem/rmem.c b/drivers/nvmem/rmem.c index b11c3c974b3d6f14bd637b47a818cf21fa94bc32..80cb187f14817b2961c6d1de885710387bcd33c4 100644 --- a/drivers/nvmem/rmem.c +++ b/drivers/nvmem/rmem.c @@ -37,9 +37,9 @@ static int rmem_read(void *context, unsigned int offset, * but as of Dec 2020 this isn't possible on arm64. */ addr = memremap(priv->mem->base, available, MEMREMAP_WB); - if (IS_ERR(addr)) { + if (!addr) { dev_err(priv->dev, "Failed to remap memory region\n"); - return PTR_ERR(addr); + return -ENOMEM; } count = memory_read_from_buffer(val, bytes, &off, addr, available); diff --git a/drivers/nvmem/u-boot-env.c b/drivers/nvmem/u-boot-env.c index 8e72d1bbd6490d003502ba94cf9a0124e4783956..4fdbdccebda16e8ab4069c5883d0b72349d6cc5c 100644 --- a/drivers/nvmem/u-boot-env.c +++ b/drivers/nvmem/u-boot-env.c @@ -135,7 +135,7 @@ static int u_boot_env_parse(struct u_boot_env *priv) break; case U_BOOT_FORMAT_REDUNDANT: crc32_offset = offsetof(struct u_boot_env_image_redundant, crc32); - crc32_data_offset = offsetof(struct u_boot_env_image_redundant, mark); + crc32_data_offset = offsetof(struct u_boot_env_image_redundant, data); data_offset = offsetof(struct u_boot_env_image_redundant, data); break; } diff --git a/drivers/of/property.c b/drivers/of/property.c index 967f79b59016514a584358f2c9262d819a1a9fb1..134cfc980b70b307aa820a056bbc58df6eb700df 100644 --- a/drivers/of/property.c +++ b/drivers/of/property.c @@ -993,8 +993,10 @@ of_fwnode_get_reference_args(const struct fwnode_handle *fwnode, nargs, index, &of_args); if (ret < 0) return ret; - if (!args) + if (!args) { + of_node_put(of_args.np); return 0; + } args->nargs = of_args.args_count; args->fwnode = of_fwnode_handle(of_args.np); diff --git a/drivers/parisc/iosapic.c b/drivers/parisc/iosapic.c index bdef7a8d6ab8e89ed60573c88581fcd14ff75d9c..bcc1dae0078033f605c7ba7f042a599487889260 100644 --- a/drivers/parisc/iosapic.c +++ b/drivers/parisc/iosapic.c @@ -866,6 +866,7 @@ int iosapic_serial_irq(struct parisc_device *dev) return vi->txn_irq; } +EXPORT_SYMBOL(iosapic_serial_irq); #endif diff --git a/drivers/parisc/pdc_stable.c b/drivers/parisc/pdc_stable.c index d9e51036a4facef004757d2951cc7e7ee23cc214..d6af5726ddf3548ffb70dec175537a2cfbb9b24e 100644 --- a/drivers/parisc/pdc_stable.c +++ b/drivers/parisc/pdc_stable.c @@ -14,7 +14,7 @@ * all) PA-RISC machines should have them. Anyway, for safety reasons, the * following code can deal with just 96 bytes of Stable Storage, and all * sizes between 96 and 192 bytes (provided they are multiple of struct - * device_path size, eg: 128, 160 and 192) to provide full information. + * pdc_module_path size, eg: 128, 160 and 192) to provide full information. * One last word: there's one path we can always count on: the primary path. * Anything above 224 bytes is used for 'osdep2' OS-dependent storage area. * @@ -88,7 +88,7 @@ struct pdcspath_entry { short ready; /* entry record is valid if != 0 */ unsigned long addr; /* entry address in stable storage */ char *name; /* entry name */ - struct device_path devpath; /* device path in parisc representation */ + struct pdc_module_path devpath; /* device path in parisc representation */ struct device *dev; /* corresponding device */ struct kobject kobj; }; @@ -138,7 +138,7 @@ struct pdcspath_attribute paths_attr_##_name = { \ static int pdcspath_fetch(struct pdcspath_entry *entry) { - struct device_path *devpath; + struct pdc_module_path *devpath; if (!entry) return -EINVAL; @@ -153,7 +153,7 @@ pdcspath_fetch(struct pdcspath_entry *entry) return -EIO; /* Find the matching device. - NOTE: hardware_path overlays with device_path, so the nice cast can + NOTE: hardware_path overlays with pdc_module_path, so the nice cast can be used */ entry->dev = hwpath_to_device((struct hardware_path *)devpath); @@ -179,7 +179,7 @@ pdcspath_fetch(struct pdcspath_entry *entry) static void pdcspath_store(struct pdcspath_entry *entry) { - struct device_path *devpath; + struct pdc_module_path *devpath; BUG_ON(!entry); @@ -221,7 +221,7 @@ static ssize_t pdcspath_hwpath_read(struct pdcspath_entry *entry, char *buf) { char *out = buf; - struct device_path *devpath; + struct pdc_module_path *devpath; short i; if (!entry || !buf) @@ -236,11 +236,11 @@ pdcspath_hwpath_read(struct pdcspath_entry *entry, char *buf) return -ENODATA; for (i = 0; i < 6; i++) { - if (devpath->bc[i] >= 128) + if (devpath->path.bc[i] < 0) continue; - out += sprintf(out, "%u/", (unsigned char)devpath->bc[i]); + out += sprintf(out, "%d/", devpath->path.bc[i]); } - out += sprintf(out, "%u\n", (unsigned char)devpath->mod); + out += sprintf(out, "%u\n", (unsigned char)devpath->path.mod); return out - buf; } @@ -296,12 +296,12 @@ pdcspath_hwpath_write(struct pdcspath_entry *entry, const char *buf, size_t coun for (i=5; ((temp = strrchr(in, '/'))) && (temp-in > 0) && (likely(i)); i--) { hwpath.bc[i] = simple_strtoul(temp+1, NULL, 10); in[temp-in] = '\0'; - DPRINTK("%s: bc[%d]: %d\n", __func__, i, hwpath.bc[i]); + DPRINTK("%s: bc[%d]: %d\n", __func__, i, hwpath.path.bc[i]); } /* Store the final field */ hwpath.bc[i] = simple_strtoul(in, NULL, 10); - DPRINTK("%s: bc[%d]: %d\n", __func__, i, hwpath.bc[i]); + DPRINTK("%s: bc[%d]: %d\n", __func__, i, hwpath.path.bc[i]); /* Now we check that the user isn't trying to lure us */ if (!(dev = hwpath_to_device((struct hardware_path *)&hwpath))) { @@ -342,7 +342,7 @@ static ssize_t pdcspath_layer_read(struct pdcspath_entry *entry, char *buf) { char *out = buf; - struct device_path *devpath; + struct pdc_module_path *devpath; short i; if (!entry || !buf) @@ -547,7 +547,7 @@ static ssize_t pdcs_auto_read(struct kobject *kobj, pathentry = &pdcspath_entry_primary; read_lock(&pathentry->rw_lock); - out += sprintf(out, "%s\n", (pathentry->devpath.flags & knob) ? + out += sprintf(out, "%s\n", (pathentry->devpath.path.flags & knob) ? "On" : "Off"); read_unlock(&pathentry->rw_lock); @@ -594,8 +594,8 @@ static ssize_t pdcs_timer_read(struct kobject *kobj, /* print the timer value in seconds */ read_lock(&pathentry->rw_lock); - out += sprintf(out, "%u\n", (pathentry->devpath.flags & PF_TIMER) ? - (1 << (pathentry->devpath.flags & PF_TIMER)) : 0); + out += sprintf(out, "%u\n", (pathentry->devpath.path.flags & PF_TIMER) ? + (1 << (pathentry->devpath.path.flags & PF_TIMER)) : 0); read_unlock(&pathentry->rw_lock); return out - buf; @@ -764,7 +764,7 @@ static ssize_t pdcs_auto_write(struct kobject *kobj, /* Be nice to the existing flag record */ read_lock(&pathentry->rw_lock); - flags = pathentry->devpath.flags; + flags = pathentry->devpath.path.flags; read_unlock(&pathentry->rw_lock); DPRINTK("%s: flags before: 0x%X\n", __func__, flags); @@ -785,7 +785,7 @@ static ssize_t pdcs_auto_write(struct kobject *kobj, write_lock(&pathentry->rw_lock); /* Change the path entry flags first */ - pathentry->devpath.flags = flags; + pathentry->devpath.path.flags = flags; /* Now, dive in. Write back to the hardware */ pdcspath_store(pathentry); diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c index 7c45927e2131c6dcd0b39ef93f9ff49c4c84e0f9..5784dc20fb38239a13976c3a9501d35337fb0465 100644 --- a/drivers/parport/parport_pc.c +++ b/drivers/parport/parport_pc.c @@ -468,7 +468,7 @@ static size_t parport_pc_fifo_write_block_pio(struct parport *port, const unsigned char *bufp = buf; size_t left = length; unsigned long expire = jiffies + port->physport->cad->timeout; - const int fifo = FIFO(port); + const unsigned long fifo = FIFO(port); int poll_for = 8; /* 80 usecs */ const struct parport_pc_private *priv = port->physport->private_data; const int fifo_depth = priv->fifo_depth; diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c index e7c6f6629e7c5edfb41f20d9187c6ab400143087..f1ec8931dfbc5c7d53df9dbcc32679b51eeb1028 100644 --- a/drivers/pci/controller/pci-hyperv.c +++ b/drivers/pci/controller/pci-hyperv.c @@ -1613,8 +1613,8 @@ static void hv_pci_compose_compl(void *context, struct pci_response *resp, } static u32 hv_compose_msi_req_v1( - struct pci_create_interrupt *int_pkt, const struct cpumask *affinity, - u32 slot, u8 vector, u8 vector_count) + struct pci_create_interrupt *int_pkt, + u32 slot, u8 vector, u16 vector_count) { int_pkt->message_type.type = PCI_CREATE_INTERRUPT_MESSAGE; int_pkt->wslot.slot = slot; @@ -1631,6 +1631,35 @@ static u32 hv_compose_msi_req_v1( return sizeof(*int_pkt); } +/* + * The vCPU selected by hv_compose_multi_msi_req_get_cpu() and + * hv_compose_msi_req_get_cpu() is a "dummy" vCPU because the final vCPU to be + * interrupted is specified later in hv_irq_unmask() and communicated to Hyper-V + * via the HVCALL_RETARGET_INTERRUPT hypercall. But the choice of dummy vCPU is + * not irrelevant because Hyper-V chooses the physical CPU to handle the + * interrupts based on the vCPU specified in message sent to the vPCI VSP in + * hv_compose_msi_msg(). Hyper-V's choice of pCPU is not visible to the guest, + * but assigning too many vPCI device interrupts to the same pCPU can cause a + * performance bottleneck. So we spread out the dummy vCPUs to influence Hyper-V + * to spread out the pCPUs that it selects. + * + * For the single-MSI and MSI-X cases, it's OK for hv_compose_msi_req_get_cpu() + * to always return the same dummy vCPU, because a second call to + * hv_compose_msi_msg() contains the "real" vCPU, causing Hyper-V to choose a + * new pCPU for the interrupt. But for the multi-MSI case, the second call to + * hv_compose_msi_msg() exits without sending a message to the vPCI VSP, so the + * original dummy vCPU is used. This dummy vCPU must be round-robin'ed so that + * the pCPUs are spread out. All interrupts for a multi-MSI device end up using + * the same pCPU, even though the vCPUs will be spread out by later calls + * to hv_irq_unmask(), but that is the best we can do now. + * + * With Hyper-V in Nov 2022, the HVCALL_RETARGET_INTERRUPT hypercall does *not* + * cause Hyper-V to reselect the pCPU based on the specified vCPU. Such an + * enhancement is planned for a future version. With that enhancement, the + * dummy vCPU selection won't matter, and interrupts for the same multi-MSI + * device will be spread across multiple pCPUs. + */ + /* * Create MSI w/ dummy vCPU set targeting just one vCPU, overwritten * by subsequent retarget in hv_irq_unmask(). @@ -1640,18 +1669,39 @@ static int hv_compose_msi_req_get_cpu(const struct cpumask *affinity) return cpumask_first_and(affinity, cpu_online_mask); } -static u32 hv_compose_msi_req_v2( - struct pci_create_interrupt2 *int_pkt, const struct cpumask *affinity, - u32 slot, u8 vector, u8 vector_count) +/* + * Make sure the dummy vCPU values for multi-MSI don't all point to vCPU0. + */ +static int hv_compose_multi_msi_req_get_cpu(void) { + static DEFINE_SPINLOCK(multi_msi_cpu_lock); + + /* -1 means starting with CPU 0 */ + static int cpu_next = -1; + + unsigned long flags; int cpu; + spin_lock_irqsave(&multi_msi_cpu_lock, flags); + + cpu_next = cpumask_next_wrap(cpu_next, cpu_online_mask, nr_cpu_ids, + false); + cpu = cpu_next; + + spin_unlock_irqrestore(&multi_msi_cpu_lock, flags); + + return cpu; +} + +static u32 hv_compose_msi_req_v2( + struct pci_create_interrupt2 *int_pkt, int cpu, + u32 slot, u8 vector, u16 vector_count) +{ int_pkt->message_type.type = PCI_CREATE_INTERRUPT_MESSAGE2; int_pkt->wslot.slot = slot; int_pkt->int_desc.vector = vector; int_pkt->int_desc.vector_count = vector_count; int_pkt->int_desc.delivery_mode = DELIVERY_MODE; - cpu = hv_compose_msi_req_get_cpu(affinity); int_pkt->int_desc.processor_array[0] = hv_cpu_number_to_vp_number(cpu); int_pkt->int_desc.processor_count = 1; @@ -1660,18 +1710,15 @@ static u32 hv_compose_msi_req_v2( } static u32 hv_compose_msi_req_v3( - struct pci_create_interrupt3 *int_pkt, const struct cpumask *affinity, - u32 slot, u32 vector, u8 vector_count) + struct pci_create_interrupt3 *int_pkt, int cpu, + u32 slot, u32 vector, u16 vector_count) { - int cpu; - int_pkt->message_type.type = PCI_CREATE_INTERRUPT_MESSAGE3; int_pkt->wslot.slot = slot; int_pkt->int_desc.vector = vector; int_pkt->int_desc.reserved = 0; int_pkt->int_desc.vector_count = vector_count; int_pkt->int_desc.delivery_mode = DELIVERY_MODE; - cpu = hv_compose_msi_req_get_cpu(affinity); int_pkt->int_desc.processor_array[0] = hv_cpu_number_to_vp_number(cpu); int_pkt->int_desc.processor_count = 1; @@ -1701,7 +1748,12 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg) struct compose_comp_ctxt comp; struct tran_int_desc *int_desc; struct msi_desc *msi_desc; - u8 vector, vector_count; + /* + * vector_count should be u16: see hv_msi_desc, hv_msi_desc2 + * and hv_msi_desc3. vector must be u32: see hv_msi_desc3. + */ + u16 vector_count; + u32 vector; struct { struct pci_packet pci_pkt; union { @@ -1710,12 +1762,18 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg) struct pci_create_interrupt3 v3; } int_pkts; } __packed ctxt; + bool multi_msi; u64 trans_id; u32 size; int ret; + int cpu; + + msi_desc = irq_data_get_msi_desc(data); + multi_msi = !msi_desc->pci.msi_attrib.is_msix && + msi_desc->nvec_used > 1; /* Reuse the previous allocation */ - if (data->chip_data) { + if (data->chip_data && multi_msi) { int_desc = data->chip_data; msg->address_hi = int_desc->address >> 32; msg->address_lo = int_desc->address & 0xffffffff; @@ -1723,7 +1781,6 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg) return; } - msi_desc = irq_data_get_msi_desc(data); pdev = msi_desc_to_pci_dev(msi_desc); dest = irq_data_get_effective_affinity_mask(data); pbus = pdev->bus; @@ -1733,11 +1790,18 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg) if (!hpdev) goto return_null_message; + /* Free any previous message that might have already been composed. */ + if (data->chip_data && !multi_msi) { + int_desc = data->chip_data; + data->chip_data = NULL; + hv_int_desc_free(hpdev, int_desc); + } + int_desc = kzalloc(sizeof(*int_desc), GFP_ATOMIC); if (!int_desc) goto drop_reference; - if (!msi_desc->pci.msi_attrib.is_msix && msi_desc->nvec_used > 1) { + if (multi_msi) { /* * If this is not the first MSI of Multi MSI, we already have * a mapping. Can exit early. @@ -1762,11 +1826,18 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg) */ vector = 32; vector_count = msi_desc->nvec_used; + cpu = hv_compose_multi_msi_req_get_cpu(); } else { vector = hv_msi_get_int_vector(data); vector_count = 1; + cpu = hv_compose_msi_req_get_cpu(dest); } + /* + * hv_compose_msi_req_v1 and v2 are for x86 only, meaning 'vector' + * can't exceed u8. Cast 'vector' down to u8 for v1/v2 explicitly + * for better readability. + */ memset(&ctxt, 0, sizeof(ctxt)); init_completion(&comp.comp_pkt.host_event); ctxt.pci_pkt.completion_func = hv_pci_compose_compl; @@ -1775,24 +1846,23 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg) switch (hbus->protocol_version) { case PCI_PROTOCOL_VERSION_1_1: size = hv_compose_msi_req_v1(&ctxt.int_pkts.v1, - dest, hpdev->desc.win_slot.slot, - vector, + (u8)vector, vector_count); break; case PCI_PROTOCOL_VERSION_1_2: case PCI_PROTOCOL_VERSION_1_3: size = hv_compose_msi_req_v2(&ctxt.int_pkts.v2, - dest, + cpu, hpdev->desc.win_slot.slot, - vector, + (u8)vector, vector_count); break; case PCI_PROTOCOL_VERSION_1_4: size = hv_compose_msi_req_v3(&ctxt.int_pkts.v3, - dest, + cpu, hpdev->desc.win_slot.slot, vector, vector_count); diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-combo.c b/drivers/phy/qualcomm/phy-qcom-qmp-combo.c index 9807c4d935cdb4a482a8213d1196b58ce620890c..ba9d761ec49a75b39f12d183a9a94fc7b16e3834 100644 --- a/drivers/phy/qualcomm/phy-qcom-qmp-combo.c +++ b/drivers/phy/qualcomm/phy-qcom-qmp-combo.c @@ -2240,7 +2240,7 @@ static void qmp_combo_enable_autonomous_mode(struct qmp_phy *qphy) static void qmp_combo_disable_autonomous_mode(struct qmp_phy *qphy) { const struct qmp_phy_cfg *cfg = qphy->cfg; - void __iomem *pcs_usb = qphy->pcs_usb ?: qphy->pcs_usb; + void __iomem *pcs_usb = qphy->pcs_usb ?: qphy->pcs; void __iomem *pcs_misc = qphy->pcs_misc; /* Disable i/o clamp_n on resume for normal mode */ diff --git a/drivers/phy/ralink/phy-mt7621-pci.c b/drivers/phy/ralink/phy-mt7621-pci.c index 5e6530f545b5cf8638793aa19a59bf080b89cc76..85888ab2d307adaa4b11d3520d0f6ee263c15084 100644 --- a/drivers/phy/ralink/phy-mt7621-pci.c +++ b/drivers/phy/ralink/phy-mt7621-pci.c @@ -280,7 +280,8 @@ static struct phy *mt7621_pcie_phy_of_xlate(struct device *dev, } static const struct soc_device_attribute mt7621_pci_quirks_match[] = { - { .soc_id = "mt7621", .revision = "E2" } + { .soc_id = "mt7621", .revision = "E2" }, + { /* sentinel */ } }; static const struct regmap_config mt7621_pci_phy_regmap_config = { diff --git a/drivers/phy/st/phy-stm32-usbphyc.c b/drivers/phy/st/phy-stm32-usbphyc.c index a98c911cc37ae4673611e2de8b5feedc3778eaee..5bb9647b078f127a30cff5eae55c73399f8597e5 100644 --- a/drivers/phy/st/phy-stm32-usbphyc.c +++ b/drivers/phy/st/phy-stm32-usbphyc.c @@ -710,6 +710,8 @@ static int stm32_usbphyc_probe(struct platform_device *pdev) ret = of_property_read_u32(child, "reg", &index); if (ret || index > usbphyc->nphys) { dev_err(&phy->dev, "invalid reg property: %d\n", ret); + if (!ret) + ret = -EINVAL; goto put_child; } diff --git a/drivers/phy/sunplus/phy-sunplus-usb2.c b/drivers/phy/sunplus/phy-sunplus-usb2.c index b932087c55b2943dde6519b684380da802e7f204..e827b79f6d493cb9c1571221d7940e16741b0a2a 100644 --- a/drivers/phy/sunplus/phy-sunplus-usb2.c +++ b/drivers/phy/sunplus/phy-sunplus-usb2.c @@ -256,8 +256,8 @@ static int sp_usb_phy_probe(struct platform_device *pdev) usbphy->moon4_res_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM, "moon4"); usbphy->moon4_regs = devm_ioremap(&pdev->dev, usbphy->moon4_res_mem->start, resource_size(usbphy->moon4_res_mem)); - if (IS_ERR(usbphy->moon4_regs)) - return PTR_ERR(usbphy->moon4_regs); + if (!usbphy->moon4_regs) + return -ENOMEM; usbphy->phy_clk = devm_clk_get(&pdev->dev, NULL); if (IS_ERR(usbphy->phy_clk)) diff --git a/drivers/phy/tegra/xusb.c b/drivers/phy/tegra/xusb.c index 95091876c422230af448470035362725be9bf2c2..dce45fbbd699c12c668e17d4cd62d301c96096b2 100644 --- a/drivers/phy/tegra/xusb.c +++ b/drivers/phy/tegra/xusb.c @@ -1461,8 +1461,14 @@ EXPORT_SYMBOL_GPL(tegra_phy_xusb_utmi_port_reset); void tegra_phy_xusb_utmi_pad_power_on(struct phy *phy) { - struct tegra_xusb_lane *lane = phy_get_drvdata(phy); - struct tegra_xusb_padctl *padctl = lane->pad->padctl; + struct tegra_xusb_lane *lane; + struct tegra_xusb_padctl *padctl; + + if (!phy) + return; + + lane = phy_get_drvdata(phy); + padctl = lane->pad->padctl; if (padctl->soc->ops->utmi_pad_power_on) padctl->soc->ops->utmi_pad_power_on(phy); @@ -1471,8 +1477,14 @@ EXPORT_SYMBOL_GPL(tegra_phy_xusb_utmi_pad_power_on); void tegra_phy_xusb_utmi_pad_power_down(struct phy *phy) { - struct tegra_xusb_lane *lane = phy_get_drvdata(phy); - struct tegra_xusb_padctl *padctl = lane->pad->padctl; + struct tegra_xusb_lane *lane; + struct tegra_xusb_padctl *padctl; + + if (!phy) + return; + + lane = phy_get_drvdata(phy); + padctl = lane->pad->padctl; if (padctl->soc->ops->utmi_pad_power_down) padctl->soc->ops->utmi_pad_power_down(phy); diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c index ef898ee8ca6bd408c9629ee81f31a3956bd19a5a..6e0a40962f384ad05688550993c3cfa6d9980a70 100644 --- a/drivers/pinctrl/devicetree.c +++ b/drivers/pinctrl/devicetree.c @@ -220,6 +220,8 @@ int pinctrl_dt_to_map(struct pinctrl *p, struct pinctrl_dev *pctldev) for (state = 0; ; state++) { /* Retrieve the pinctrl-* property */ propname = kasprintf(GFP_KERNEL, "pinctrl-%d", state); + if (!propname) + return -ENOMEM; prop = of_find_property(np, propname, &size); kfree(propname); if (!prop) { diff --git a/drivers/pinctrl/intel/pinctrl-intel.c b/drivers/pinctrl/intel/pinctrl-intel.c index 52ecd66ce357fceaabbd4e5980c6e9c36994af81..047a8374b4fdcf461cdf991659ffa110912ff2ab 100644 --- a/drivers/pinctrl/intel/pinctrl-intel.c +++ b/drivers/pinctrl/intel/pinctrl-intel.c @@ -436,9 +436,14 @@ static void __intel_gpio_set_direction(void __iomem *padcfg0, bool input) writel(value, padcfg0); } +static int __intel_gpio_get_gpio_mode(u32 value) +{ + return (value & PADCFG0_PMODE_MASK) >> PADCFG0_PMODE_SHIFT; +} + static int intel_gpio_get_gpio_mode(void __iomem *padcfg0) { - return (readl(padcfg0) & PADCFG0_PMODE_MASK) >> PADCFG0_PMODE_SHIFT; + return __intel_gpio_get_gpio_mode(readl(padcfg0)); } static void intel_gpio_set_gpio_mode(void __iomem *padcfg0) @@ -1674,6 +1679,7 @@ EXPORT_SYMBOL_GPL(intel_pinctrl_get_soc_data); static bool intel_pinctrl_should_save(struct intel_pinctrl *pctrl, unsigned int pin) { const struct pin_desc *pd = pin_desc_get(pctrl->pctldev, pin); + u32 value; if (!pd || !intel_pad_usable(pctrl, pin)) return false; @@ -1688,6 +1694,25 @@ static bool intel_pinctrl_should_save(struct intel_pinctrl *pctrl, unsigned int gpiochip_line_is_irq(&pctrl->chip, intel_pin_to_gpio(pctrl, pin))) return true; + /* + * The firmware on some systems may configure GPIO pins to be + * an interrupt source in so called "direct IRQ" mode. In such + * cases the GPIO controller driver has no idea if those pins + * are being used or not. At the same time, there is a known bug + * in the firmwares that don't restore the pin settings correctly + * after suspend, i.e. by an unknown reason the Rx value becomes + * inverted. + * + * Hence, let's save and restore the pins that are configured + * as GPIOs in the input mode with GPIROUTIOXAPIC bit set. + * + * See https://bugzilla.kernel.org/show_bug.cgi?id=214749. + */ + value = readl(intel_get_padcfg(pctrl, pin, PADCFG0)); + if ((value & PADCFG0_GPIROUTIOXAPIC) && (value & PADCFG0_GPIOTXDIS) && + (__intel_gpio_get_gpio_mode(value) == PADCFG0_PMODE_GPIO)) + return true; + return false; } diff --git a/drivers/pinctrl/mediatek/mtk-eint.c b/drivers/pinctrl/mediatek/mtk-eint.c index f7b54a55176418ed51204bb02feda27550de7aa7..27f0a54e12bfe3068d610749be801801887e5601 100644 --- a/drivers/pinctrl/mediatek/mtk-eint.c +++ b/drivers/pinctrl/mediatek/mtk-eint.c @@ -24,6 +24,7 @@ #define MTK_EINT_EDGE_SENSITIVE 0 #define MTK_EINT_LEVEL_SENSITIVE 1 #define MTK_EINT_DBNC_SET_DBNC_BITS 4 +#define MTK_EINT_DBNC_MAX 16 #define MTK_EINT_DBNC_RST_BIT (0x1 << 1) #define MTK_EINT_DBNC_SET_EN (0x1 << 0) @@ -48,6 +49,21 @@ static const struct mtk_eint_regs mtk_generic_eint_regs = { .dbnc_clr = 0x700, }; +const unsigned int debounce_time_mt2701[] = { + 500, 1000, 16000, 32000, 64000, 128000, 256000, 0 +}; +EXPORT_SYMBOL_GPL(debounce_time_mt2701); + +const unsigned int debounce_time_mt6765[] = { + 125, 250, 500, 1000, 16000, 32000, 64000, 128000, 256000, 512000, 0 +}; +EXPORT_SYMBOL_GPL(debounce_time_mt6765); + +const unsigned int debounce_time_mt6795[] = { + 500, 1000, 16000, 32000, 64000, 128000, 256000, 512000, 0 +}; +EXPORT_SYMBOL_GPL(debounce_time_mt6795); + static void __iomem *mtk_eint_get_offset(struct mtk_eint *eint, unsigned int eint_num, unsigned int offset) @@ -287,12 +303,15 @@ static struct irq_chip mtk_eint_irq_chip = { static unsigned int mtk_eint_hw_init(struct mtk_eint *eint) { - void __iomem *reg = eint->base + eint->regs->dom_en; + void __iomem *dom_en = eint->base + eint->regs->dom_en; + void __iomem *mask_set = eint->base + eint->regs->mask_set; unsigned int i; for (i = 0; i < eint->hw->ap_num; i += 32) { - writel(0xffffffff, reg); - reg += 4; + writel(0xffffffff, dom_en); + writel(0xffffffff, mask_set); + dom_en += 4; + mask_set += 4; } return 0; @@ -404,10 +423,11 @@ int mtk_eint_set_debounce(struct mtk_eint *eint, unsigned long eint_num, int virq, eint_offset; unsigned int set_offset, bit, clr_bit, clr_offset, rst, i, unmask, dbnc; - static const unsigned int debounce_time[] = {500, 1000, 16000, 32000, - 64000, 128000, 256000}; struct irq_data *d; + if (!eint->hw->db_time) + return -EOPNOTSUPP; + virq = irq_find_mapping(eint->domain, eint_num); eint_offset = (eint_num % 4) * 8; d = irq_get_irq_data(virq); @@ -418,9 +438,9 @@ int mtk_eint_set_debounce(struct mtk_eint *eint, unsigned long eint_num, if (!mtk_eint_can_en_debounce(eint, eint_num)) return -EINVAL; - dbnc = ARRAY_SIZE(debounce_time); - for (i = 0; i < ARRAY_SIZE(debounce_time); i++) { - if (debounce <= debounce_time[i]) { + dbnc = eint->num_db_time; + for (i = 0; i < eint->num_db_time; i++) { + if (debounce <= eint->hw->db_time[i]) { dbnc = i; break; } @@ -494,6 +514,13 @@ int mtk_eint_do_init(struct mtk_eint *eint) if (!eint->domain) return -ENOMEM; + if (eint->hw->db_time) { + for (i = 0; i < MTK_EINT_DBNC_MAX; i++) + if (eint->hw->db_time[i] == 0) + break; + eint->num_db_time = i; + } + mtk_eint_hw_init(eint); for (i = 0; i < eint->hw->ap_num; i++) { int virq = irq_create_mapping(eint->domain, i); diff --git a/drivers/pinctrl/mediatek/mtk-eint.h b/drivers/pinctrl/mediatek/mtk-eint.h index 48468d0fae686dff21cc8a8b2f0e8e55aabee352..6139b16cd225fe0c93aa7e11c28e2f608dc41b24 100644 --- a/drivers/pinctrl/mediatek/mtk-eint.h +++ b/drivers/pinctrl/mediatek/mtk-eint.h @@ -37,8 +37,13 @@ struct mtk_eint_hw { u8 ports; unsigned int ap_num; unsigned int db_cnt; + const unsigned int *db_time; }; +extern const unsigned int debounce_time_mt2701[]; +extern const unsigned int debounce_time_mt6765[]; +extern const unsigned int debounce_time_mt6795[]; + struct mtk_eint; struct mtk_eint_xt { @@ -62,6 +67,7 @@ struct mtk_eint { /* Used to fit into various EINT device */ const struct mtk_eint_hw *hw; const struct mtk_eint_regs *regs; + u16 num_db_time; /* Used to fit into various pinctrl device */ void *pctl; diff --git a/drivers/pinctrl/mediatek/pinctrl-mt2701.c b/drivers/pinctrl/mediatek/pinctrl-mt2701.c index d1583b4fdd9d49fbf422823df4b628bbb6b9af18..b185538452a0f57920e9db7a9909f343ce39eb8f 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt2701.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt2701.c @@ -518,6 +518,7 @@ static const struct mtk_pinctrl_devdata mt2701_pinctrl_data = { .ports = 6, .ap_num = 169, .db_cnt = 16, + .db_time = debounce_time_mt2701, }, }; diff --git a/drivers/pinctrl/mediatek/pinctrl-mt2712.c b/drivers/pinctrl/mediatek/pinctrl-mt2712.c index b921068f9e69ae12c1e2d369e4dab9a9d71fb20d..730a496848dc3607ca2a11358e15b377faeea5a6 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt2712.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt2712.c @@ -567,6 +567,7 @@ static const struct mtk_pinctrl_devdata mt2712_pinctrl_data = { .ports = 8, .ap_num = 229, .db_cnt = 40, + .db_time = debounce_time_mt2701, }, }; diff --git a/drivers/pinctrl/mediatek/pinctrl-mt6765.c b/drivers/pinctrl/mediatek/pinctrl-mt6765.c index c57b19fcda03d4adba9e14ffbc0fbf28f0f91731..f6ec41eb6e0c9309da85456dae2af276afbd301e 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt6765.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt6765.c @@ -1062,6 +1062,7 @@ static const struct mtk_eint_hw mt6765_eint_hw = { .ports = 6, .ap_num = 160, .db_cnt = 13, + .db_time = debounce_time_mt6765, }; static const struct mtk_pin_soc mt6765_data = { diff --git a/drivers/pinctrl/mediatek/pinctrl-mt6779.c b/drivers/pinctrl/mediatek/pinctrl-mt6779.c index 4ddf8bda682790976d6b31acc4a7dfb8196db558..62d4f5ad6737da75e315aa0b58738a2a40a3c357 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt6779.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt6779.c @@ -737,6 +737,7 @@ static const struct mtk_eint_hw mt6779_eint_hw = { .ports = 6, .ap_num = 195, .db_cnt = 13, + .db_time = debounce_time_mt2701, }; static const struct mtk_pin_soc mt6779_data = { diff --git a/drivers/pinctrl/mediatek/pinctrl-mt6795.c b/drivers/pinctrl/mediatek/pinctrl-mt6795.c index f90152261a0f619ab162e54f6f436e42dd7da52b..01e855ccd4dd9d61b062ae8b520fe6e05ddf52d8 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt6795.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt6795.c @@ -475,6 +475,7 @@ static const struct mtk_eint_hw mt6795_eint_hw = { .ports = 7, .ap_num = 224, .db_cnt = 32, + .db_time = debounce_time_mt6795, }; static const unsigned int mt6795_pull_type[] = { diff --git a/drivers/pinctrl/mediatek/pinctrl-mt7622.c b/drivers/pinctrl/mediatek/pinctrl-mt7622.c index 68eee881ee3d110861f95e359ed9cfcde59a8831..3c1148d59eff76893a7d9a5bf0b35522598d0f2c 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt7622.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt7622.c @@ -846,6 +846,7 @@ static const struct mtk_eint_hw mt7622_eint_hw = { .ports = 7, .ap_num = ARRAY_SIZE(mt7622_pins), .db_cnt = 20, + .db_time = debounce_time_mt6765, }; static const struct mtk_pin_soc mt7622_data = { diff --git a/drivers/pinctrl/mediatek/pinctrl-mt7623.c b/drivers/pinctrl/mediatek/pinctrl-mt7623.c index b8d9d31db74f7c21a0bf7f67a5af9ea265c7eca6..699977074697363e407acf1d9d3d6a9135d9c99c 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt7623.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt7623.c @@ -1369,6 +1369,7 @@ static const struct mtk_eint_hw mt7623_eint_hw = { .ports = 6, .ap_num = 169, .db_cnt = 20, + .db_time = debounce_time_mt2701, }; static struct mtk_pin_soc mt7623_data = { diff --git a/drivers/pinctrl/mediatek/pinctrl-mt7629.c b/drivers/pinctrl/mediatek/pinctrl-mt7629.c index b5f0fa43245f1ef85887ee566d6c19a6a19504ae..2ce411cb9c6ec0adeb983fa92727e37aed09928f 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt7629.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt7629.c @@ -402,6 +402,7 @@ static const struct mtk_eint_hw mt7629_eint_hw = { .ports = 7, .ap_num = ARRAY_SIZE(mt7629_pins), .db_cnt = 16, + .db_time = debounce_time_mt2701, }; static struct mtk_pin_soc mt7629_data = { diff --git a/drivers/pinctrl/mediatek/pinctrl-mt7986.c b/drivers/pinctrl/mediatek/pinctrl-mt7986.c index f26869f1a367bf39e83c9cdddba3a884706fc703..50cb736f9f11677bf691179bc80346b471183931 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt7986.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt7986.c @@ -826,6 +826,7 @@ static const struct mtk_eint_hw mt7986a_eint_hw = { .ports = 7, .ap_num = ARRAY_SIZE(mt7986a_pins), .db_cnt = 16, + .db_time = debounce_time_mt6765, }; static const struct mtk_eint_hw mt7986b_eint_hw = { @@ -833,6 +834,7 @@ static const struct mtk_eint_hw mt7986b_eint_hw = { .ports = 7, .ap_num = ARRAY_SIZE(mt7986b_pins), .db_cnt = 16, + .db_time = debounce_time_mt6765, }; static struct mtk_pin_soc mt7986a_data = { diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8127.c b/drivers/pinctrl/mediatek/pinctrl-mt8127.c index 91c530e7b00e69971e258f8d78d95d251bec4097..e8772dcfe69e61e1235afb1e72a6422f020b1615 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt8127.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt8127.c @@ -286,6 +286,7 @@ static const struct mtk_pinctrl_devdata mt8127_pinctrl_data = { .ports = 6, .ap_num = 143, .db_cnt = 16, + .db_time = debounce_time_mt2701, }, }; diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8135.c b/drivers/pinctrl/mediatek/pinctrl-mt8135.c index 5628467565174faf96db6472470163a2c3d39eaa..cdb0252071fb7835b3cbe8e66852d89907a49ae5 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt8135.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt8135.c @@ -315,6 +315,7 @@ static const struct mtk_pinctrl_devdata mt8135_pinctrl_data = { .ports = 6, .ap_num = 192, .db_cnt = 16, + .db_time = debounce_time_mt2701, }, }; diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8167.c b/drivers/pinctrl/mediatek/pinctrl-mt8167.c index 825167f5d0200f62f8b114f9496175466063b0a3..866da2c4a890cd2ee472f3e9e5efa0fd28121a2a 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt8167.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt8167.c @@ -319,6 +319,7 @@ static const struct mtk_pinctrl_devdata mt8167_pinctrl_data = { .ports = 6, .ap_num = 169, .db_cnt = 64, + .db_time = debounce_time_mt6795, }, }; diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8173.c b/drivers/pinctrl/mediatek/pinctrl-mt8173.c index 1d7d11a32e7d213f3fffa4c21ebadbba93afd368..37d8cec1c3cebea113f5d11e77decf255dd8fc9c 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt8173.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt8173.c @@ -327,6 +327,7 @@ static const struct mtk_pinctrl_devdata mt8173_pinctrl_data = { .ports = 6, .ap_num = 224, .db_cnt = 16, + .db_time = debounce_time_mt2701, }, }; diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8183.c b/drivers/pinctrl/mediatek/pinctrl-mt8183.c index fecb1e64fff4605ab7e169b3d2ac3d3f6ccb5c0b..ddc48b725c22d99a03f3ddd2d3af2e446491ae1d 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt8183.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt8183.c @@ -545,6 +545,7 @@ static const struct mtk_eint_hw mt8183_eint_hw = { .ports = 6, .ap_num = 212, .db_cnt = 13, + .db_time = debounce_time_mt6765, }; static const struct mtk_pin_soc mt8183_data = { diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8186.c b/drivers/pinctrl/mediatek/pinctrl-mt8186.c index a4dd5197abc19a572b6dd5d43507fa7bae8bd555..a02f7c3269707ee9adf3b0dc75706f97289892b6 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt8186.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt8186.c @@ -1222,6 +1222,7 @@ static const struct mtk_eint_hw mt8186_eint_hw = { .ports = 7, .ap_num = 217, .db_cnt = 32, + .db_time = debounce_time_mt6765, }; static const struct mtk_pin_soc mt8186_data = { diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8188.c b/drivers/pinctrl/mediatek/pinctrl-mt8188.c index d0e75c1b4417ab00c87ba00b020c4f8ad3e7b36e..6a3d0126288e2b7dbad57b731db9804636aba441 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt8188.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt8188.c @@ -1625,6 +1625,7 @@ static const struct mtk_eint_hw mt8188_eint_hw = { .ports = 7, .ap_num = 225, .db_cnt = 32, + .db_time = debounce_time_mt6765, }; static const struct mtk_pin_soc mt8188_data = { diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8192.c b/drivers/pinctrl/mediatek/pinctrl-mt8192.c index 78c02b7c81f064239594c9eb7e7e43d8d47d0bdb..9695f4ec6aba9c72b649141d5d966aff4e379de3 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt8192.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt8192.c @@ -1371,6 +1371,7 @@ static const struct mtk_eint_hw mt8192_eint_hw = { .ports = 7, .ap_num = 224, .db_cnt = 32, + .db_time = debounce_time_mt6765, }; static const struct mtk_pin_reg_calc mt8192_reg_cals[PINCTRL_PIN_REG_MAX] = { diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8195.c b/drivers/pinctrl/mediatek/pinctrl-mt8195.c index 563693d3d4c20137aafa0d36130251536510b52c..89557c7ed2ab015b241a3027fe170809db9429ff 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt8195.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt8195.c @@ -935,6 +935,7 @@ static const struct mtk_eint_hw mt8195_eint_hw = { .ports = 7, .ap_num = 225, .db_cnt = 32, + .db_time = debounce_time_mt6765, }; static const struct mtk_pin_soc mt8195_data = { diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8365.c b/drivers/pinctrl/mediatek/pinctrl-mt8365.c index 57f37a294063c5999ff73efacd3e27daa7da6463..e31b89b226b7a4bc9e7811c784b36ea639ce1a5e 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt8365.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt8365.c @@ -453,6 +453,7 @@ static const struct mtk_pinctrl_devdata mt8365_pinctrl_data = { .ports = 5, .ap_num = 160, .db_cnt = 160, + .db_time = debounce_time_mt6765, }, }; diff --git a/drivers/pinctrl/mediatek/pinctrl-mt8516.c b/drivers/pinctrl/mediatek/pinctrl-mt8516.c index 939a1932b8dcdba975516fea0257a1980d1fb11e..e929339dd2cb3ddaf9e9e019c0cd40f8201257c3 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mt8516.c +++ b/drivers/pinctrl/mediatek/pinctrl-mt8516.c @@ -319,6 +319,7 @@ static const struct mtk_pinctrl_devdata mt8516_pinctrl_data = { .ports = 6, .ap_num = 169, .db_cnt = 64, + .db_time = debounce_time_mt6795, }, }; diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c index e1ae3beb9f72b07ab9977259f4fd78979242e140..b7921b59eb7b15f720fbfe65837cf6bfc876ee9c 100644 --- a/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c +++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c @@ -709,6 +709,9 @@ static int mtk_pinconf_bias_set_rsel(struct mtk_pinctrl *hw, { int err, rsel_val; + if (!pullup && arg == MTK_DISABLE) + return 0; + if (hw->rsel_si_unit) { /* find pin rsel_index from pin_rsel array*/ err = mtk_hw_pin_rsel_lookup(hw, desc, pullup, arg, &rsel_val); diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c index 53bdfc40f0558b9b5d96915c9e59e3770411ca3e..da974ff2d75d0f9898603e7fe7ae3167ef384217 100644 --- a/drivers/pinctrl/pinctrl-rockchip.c +++ b/drivers/pinctrl/pinctrl-rockchip.c @@ -679,14 +679,54 @@ static void rockchip_get_recalced_mux(struct rockchip_pin_bank *bank, int pin, } static struct rockchip_mux_route_data px30_mux_route_data[] = { + RK_MUXROUTE_SAME(2, RK_PB4, 1, 0x184, BIT(16 + 7)), /* cif-d0m0 */ + RK_MUXROUTE_SAME(3, RK_PA1, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d0m1 */ + RK_MUXROUTE_SAME(2, RK_PB6, 1, 0x184, BIT(16 + 7)), /* cif-d1m0 */ + RK_MUXROUTE_SAME(3, RK_PA2, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d1m1 */ RK_MUXROUTE_SAME(2, RK_PA0, 1, 0x184, BIT(16 + 7)), /* cif-d2m0 */ RK_MUXROUTE_SAME(3, RK_PA3, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d2m1 */ + RK_MUXROUTE_SAME(2, RK_PA1, 1, 0x184, BIT(16 + 7)), /* cif-d3m0 */ + RK_MUXROUTE_SAME(3, RK_PA5, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d3m1 */ + RK_MUXROUTE_SAME(2, RK_PA2, 1, 0x184, BIT(16 + 7)), /* cif-d4m0 */ + RK_MUXROUTE_SAME(3, RK_PA7, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d4m1 */ + RK_MUXROUTE_SAME(2, RK_PA3, 1, 0x184, BIT(16 + 7)), /* cif-d5m0 */ + RK_MUXROUTE_SAME(3, RK_PB0, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d5m1 */ + RK_MUXROUTE_SAME(2, RK_PA4, 1, 0x184, BIT(16 + 7)), /* cif-d6m0 */ + RK_MUXROUTE_SAME(3, RK_PB1, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d6m1 */ + RK_MUXROUTE_SAME(2, RK_PA5, 1, 0x184, BIT(16 + 7)), /* cif-d7m0 */ + RK_MUXROUTE_SAME(3, RK_PB4, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d7m1 */ + RK_MUXROUTE_SAME(2, RK_PA6, 1, 0x184, BIT(16 + 7)), /* cif-d8m0 */ + RK_MUXROUTE_SAME(3, RK_PB6, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d8m1 */ + RK_MUXROUTE_SAME(2, RK_PA7, 1, 0x184, BIT(16 + 7)), /* cif-d9m0 */ + RK_MUXROUTE_SAME(3, RK_PB7, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d9m1 */ + RK_MUXROUTE_SAME(2, RK_PB7, 1, 0x184, BIT(16 + 7)), /* cif-d10m0 */ + RK_MUXROUTE_SAME(3, RK_PC6, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d10m1 */ + RK_MUXROUTE_SAME(2, RK_PC0, 1, 0x184, BIT(16 + 7)), /* cif-d11m0 */ + RK_MUXROUTE_SAME(3, RK_PC7, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d11m1 */ + RK_MUXROUTE_SAME(2, RK_PB0, 1, 0x184, BIT(16 + 7)), /* cif-vsyncm0 */ + RK_MUXROUTE_SAME(3, RK_PD1, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-vsyncm1 */ + RK_MUXROUTE_SAME(2, RK_PB1, 1, 0x184, BIT(16 + 7)), /* cif-hrefm0 */ + RK_MUXROUTE_SAME(3, RK_PD2, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-hrefm1 */ + RK_MUXROUTE_SAME(2, RK_PB2, 1, 0x184, BIT(16 + 7)), /* cif-clkinm0 */ + RK_MUXROUTE_SAME(3, RK_PD3, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-clkinm1 */ + RK_MUXROUTE_SAME(2, RK_PB3, 1, 0x184, BIT(16 + 7)), /* cif-clkoutm0 */ + RK_MUXROUTE_SAME(3, RK_PD0, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-clkoutm1 */ RK_MUXROUTE_SAME(3, RK_PC6, 2, 0x184, BIT(16 + 8)), /* pdm-m0 */ RK_MUXROUTE_SAME(2, RK_PC6, 1, 0x184, BIT(16 + 8) | BIT(8)), /* pdm-m1 */ + RK_MUXROUTE_SAME(3, RK_PD3, 2, 0x184, BIT(16 + 8)), /* pdm-sdi0m0 */ + RK_MUXROUTE_SAME(2, RK_PC5, 2, 0x184, BIT(16 + 8) | BIT(8)), /* pdm-sdi0m1 */ RK_MUXROUTE_SAME(1, RK_PD3, 2, 0x184, BIT(16 + 10)), /* uart2-rxm0 */ RK_MUXROUTE_SAME(2, RK_PB6, 2, 0x184, BIT(16 + 10) | BIT(10)), /* uart2-rxm1 */ + RK_MUXROUTE_SAME(1, RK_PD2, 2, 0x184, BIT(16 + 10)), /* uart2-txm0 */ + RK_MUXROUTE_SAME(2, RK_PB4, 2, 0x184, BIT(16 + 10) | BIT(10)), /* uart2-txm1 */ RK_MUXROUTE_SAME(0, RK_PC1, 2, 0x184, BIT(16 + 9)), /* uart3-rxm0 */ RK_MUXROUTE_SAME(1, RK_PB7, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-rxm1 */ + RK_MUXROUTE_SAME(0, RK_PC0, 2, 0x184, BIT(16 + 9)), /* uart3-txm0 */ + RK_MUXROUTE_SAME(1, RK_PB6, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-txm1 */ + RK_MUXROUTE_SAME(0, RK_PC2, 2, 0x184, BIT(16 + 9)), /* uart3-ctsm0 */ + RK_MUXROUTE_SAME(1, RK_PB4, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-ctsm1 */ + RK_MUXROUTE_SAME(0, RK_PC3, 2, 0x184, BIT(16 + 9)), /* uart3-rtsm0 */ + RK_MUXROUTE_SAME(1, RK_PB5, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-rtsm1 */ }; static struct rockchip_mux_route_data rv1126_mux_route_data[] = { diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c index 67bec7ea0f8b0bfc3c7abf2d854096f8f4f9ea6b..414ee6bb8ac98eaa463523a1e6f9c27c76f97ec1 100644 --- a/drivers/pinctrl/pinctrl-single.c +++ b/drivers/pinctrl/pinctrl-single.c @@ -727,7 +727,7 @@ static int pcs_allocate_pin_table(struct pcs_device *pcs) mux_bytes = pcs->width / BITS_PER_BYTE; - if (pcs->bits_per_mux) { + if (pcs->bits_per_mux && pcs->fmask) { pcs->bits_per_pin = fls(pcs->fmask); nr_pins = (pcs->size * BITS_PER_BYTE) / pcs->bits_per_pin; } else { diff --git a/drivers/pinctrl/qcom/pinctrl-sc8280xp.c b/drivers/pinctrl/qcom/pinctrl-sc8280xp.c index aa2075390f3eba97da6bd7800b84b3b54328150d..e96c00686a25bc1f68a179f7d9db3c9c647afc85 100644 --- a/drivers/pinctrl/qcom/pinctrl-sc8280xp.c +++ b/drivers/pinctrl/qcom/pinctrl-sc8280xp.c @@ -1873,8 +1873,8 @@ static const struct msm_pingroup sc8280xp_groups[] = { [225] = PINGROUP(225, hs3_mi2s, phase_flag, _, _, _, _, egpio), [226] = PINGROUP(226, hs3_mi2s, phase_flag, _, _, _, _, egpio), [227] = PINGROUP(227, hs3_mi2s, phase_flag, _, _, _, _, egpio), - [228] = UFS_RESET(ufs_reset, 0xf1004), - [229] = UFS_RESET(ufs1_reset, 0xf3004), + [228] = UFS_RESET(ufs_reset, 0xf1000), + [229] = UFS_RESET(ufs1_reset, 0xf3000), [230] = SDC_QDSD_PINGROUP(sdc2_clk, 0xe8000, 14, 6), [231] = SDC_QDSD_PINGROUP(sdc2_cmd, 0xe8000, 11, 3), [232] = SDC_QDSD_PINGROUP(sdc2_data, 0xe8000, 9, 0), diff --git a/drivers/platform/surface/aggregator/ssh_packet_layer.c b/drivers/platform/surface/aggregator/ssh_packet_layer.c index 6748fe4ac5d5fdb53502fe9210e99369c19cd557..def8d7ac541f790f88dfe373ce1c758fb2f3fbe4 100644 --- a/drivers/platform/surface/aggregator/ssh_packet_layer.c +++ b/drivers/platform/surface/aggregator/ssh_packet_layer.c @@ -1596,16 +1596,32 @@ static void ssh_ptl_timeout_reap(struct work_struct *work) ssh_ptl_tx_wakeup_packet(ptl); } -static bool ssh_ptl_rx_retransmit_check(struct ssh_ptl *ptl, u8 seq) +static bool ssh_ptl_rx_retransmit_check(struct ssh_ptl *ptl, const struct ssh_frame *frame) { int i; + /* + * Ignore unsequenced packets. On some devices (notably Surface Pro 9), + * unsequenced events will always be sent with SEQ=0x00. Attempting to + * detect retransmission would thus just block all events. + * + * While sequence numbers would also allow detection of retransmitted + * packets in unsequenced communication, they have only ever been used + * to cover edge-cases in sequenced transmission. In particular, the + * only instance of packets being retransmitted (that we are aware of) + * is due to an ACK timeout. As this does not happen in unsequenced + * communication, skip the retransmission check for those packets + * entirely. + */ + if (frame->type == SSH_FRAME_TYPE_DATA_NSQ) + return false; + /* * Check if SEQ has been seen recently (i.e. packet was * re-transmitted and we should ignore it). */ for (i = 0; i < ARRAY_SIZE(ptl->rx.blocked.seqs); i++) { - if (likely(ptl->rx.blocked.seqs[i] != seq)) + if (likely(ptl->rx.blocked.seqs[i] != frame->seq)) continue; ptl_dbg(ptl, "ptl: ignoring repeated data packet\n"); @@ -1613,7 +1629,7 @@ static bool ssh_ptl_rx_retransmit_check(struct ssh_ptl *ptl, u8 seq) } /* Update list of blocked sequence IDs. */ - ptl->rx.blocked.seqs[ptl->rx.blocked.offset] = seq; + ptl->rx.blocked.seqs[ptl->rx.blocked.offset] = frame->seq; ptl->rx.blocked.offset = (ptl->rx.blocked.offset + 1) % ARRAY_SIZE(ptl->rx.blocked.seqs); @@ -1624,7 +1640,7 @@ static void ssh_ptl_rx_dataframe(struct ssh_ptl *ptl, const struct ssh_frame *frame, const struct ssam_span *payload) { - if (ssh_ptl_rx_retransmit_check(ptl, frame->seq)) + if (ssh_ptl_rx_retransmit_check(ptl, frame)) return; ptl->ops.data_received(ptl, payload); diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c index 585911020cea076229a853f49888a7047b851e98..023f126121d7d0d1700e1c780ad8789f096271c6 100644 --- a/drivers/platform/surface/surface_aggregator_registry.c +++ b/drivers/platform/surface/surface_aggregator_registry.c @@ -234,6 +234,19 @@ static const struct software_node *ssam_node_group_sl3[] = { NULL, }; +/* Devices for Surface Laptop 5. */ +static const struct software_node *ssam_node_group_sl5[] = { + &ssam_node_root, + &ssam_node_bat_ac, + &ssam_node_bat_main, + &ssam_node_tmp_pprof, + &ssam_node_hid_main_keyboard, + &ssam_node_hid_main_touchpad, + &ssam_node_hid_main_iid5, + &ssam_node_hid_sam_ucm_ucsi, + NULL, +}; + /* Devices for Surface Laptop Studio. */ static const struct software_node *ssam_node_group_sls[] = { &ssam_node_root, @@ -268,6 +281,7 @@ static const struct software_node *ssam_node_group_sp7[] = { NULL, }; +/* Devices for Surface Pro 8 */ static const struct software_node *ssam_node_group_sp8[] = { &ssam_node_root, &ssam_node_hub_kip, @@ -284,6 +298,23 @@ static const struct software_node *ssam_node_group_sp8[] = { NULL, }; +/* Devices for Surface Pro 9 */ +static const struct software_node *ssam_node_group_sp9[] = { + &ssam_node_root, + &ssam_node_hub_kip, + &ssam_node_bat_ac, + &ssam_node_bat_main, + &ssam_node_tmp_pprof, + /* TODO: Tablet mode switch (via POS subsystem) */ + &ssam_node_hid_kip_keyboard, + &ssam_node_hid_kip_penstash, + &ssam_node_hid_kip_touchpad, + &ssam_node_hid_kip_fwupd, + &ssam_node_hid_sam_sensors, + &ssam_node_hid_sam_ucm_ucsi, + NULL, +}; + /* -- SSAM platform/meta-hub driver. ---------------------------------------- */ @@ -303,6 +334,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = { /* Surface Pro 8 */ { "MSHW0263", (unsigned long)ssam_node_group_sp8 }, + /* Surface Pro 9 */ + { "MSHW0343", (unsigned long)ssam_node_group_sp9 }, + /* Surface Book 2 */ { "MSHW0107", (unsigned long)ssam_node_group_gen5 }, @@ -324,6 +358,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = { /* Surface Laptop 4 (13", Intel) */ { "MSHW0250", (unsigned long)ssam_node_group_sl3 }, + /* Surface Laptop 5 */ + { "MSHW0350", (unsigned long)ssam_node_group_sl5 }, + /* Surface Laptop Go 1 */ { "MSHW0118", (unsigned long)ssam_node_group_slg1 }, diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c index 18224f9a5bc07604c73c1789eb3a288fce862547..ee67efdd54995e1bcd81a3fa2f4f2dd6fe5a59d9 100644 --- a/drivers/platform/x86/acer-wmi.c +++ b/drivers/platform/x86/acer-wmi.c @@ -564,6 +564,15 @@ static const struct dmi_system_id acer_quirks[] __initconst = { }, .driver_data = (void *)ACER_CAP_KBD_DOCK, }, + { + .callback = set_force_caps, + .ident = "Acer Aspire Switch V 10 SW5-017", + .matches = { + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Acer"), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "SW5-017"), + }, + .driver_data = (void *)ACER_CAP_KBD_DOCK, + }, { .callback = set_force_caps, .ident = "Acer One 10 (S1003)", diff --git a/drivers/platform/x86/amd/pmc.c b/drivers/platform/x86/amd/pmc.c index 96e790e639a2165d7073edd95ff7296d1ccfb6fe..ef4ae977b8e0dda80938bc1054087bbbbc8eaef0 100644 --- a/drivers/platform/x86/amd/pmc.c +++ b/drivers/platform/x86/amd/pmc.c @@ -276,7 +276,6 @@ static const struct file_operations amd_pmc_stb_debugfs_fops_v2 = { .release = amd_pmc_stb_debugfs_release_v2, }; -#if defined(CONFIG_SUSPEND) || defined(CONFIG_DEBUG_FS) static int amd_pmc_setup_smu_logging(struct amd_pmc_dev *dev) { if (dev->cpu_id == AMD_CPU_ID_PCO) { @@ -351,7 +350,6 @@ static int get_metrics_table(struct amd_pmc_dev *pdev, struct smu_metrics *table memcpy_fromio(table, pdev->smu_virt_addr, sizeof(struct smu_metrics)); return 0; } -#endif /* CONFIG_SUSPEND || CONFIG_DEBUG_FS */ #ifdef CONFIG_SUSPEND static void amd_pmc_validate_deepest(struct amd_pmc_dev *pdev) @@ -964,6 +962,7 @@ static const struct acpi_device_id amd_pmc_acpi_ids[] = { {"AMDI0006", 0}, {"AMDI0007", 0}, {"AMDI0008", 0}, + {"AMDI0009", 0}, {"AMD0004", 0}, {"AMD0005", 0}, { } diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c index 6e8e093f96b3a2fa60184f8353838386738837ce..872efc1d5b36b1b5ee5963197fae4c8bdf1624bd 100644 --- a/drivers/platform/x86/asus-wmi.c +++ b/drivers/platform/x86/asus-wmi.c @@ -1738,6 +1738,8 @@ static void asus_wmi_set_xusb2pr(struct asus_wmi *asus) pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR, cpu_to_le32(ports_available)); + pci_dev_put(xhci_pdev); + pr_info("set USB_INTEL_XUSB2PR old: 0x%04x, new: 0x%04x\n", orig_ports_available, ports_available); } diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c index 627a6d0eaf831e91c4f88c502e54c4167cedf76f..0a99058be81304c8e55e12410524a10a655b6c53 100644 --- a/drivers/platform/x86/hp-wmi.c +++ b/drivers/platform/x86/hp-wmi.c @@ -90,6 +90,7 @@ enum hp_wmi_event_ids { HPWMI_PEAKSHIFT_PERIOD = 0x0F, HPWMI_BATTERY_CHARGE_PERIOD = 0x10, HPWMI_SANITIZATION_MODE = 0x17, + HPWMI_SMART_EXPERIENCE_APP = 0x21, }; /* @@ -859,6 +860,8 @@ static void hp_wmi_notify(u32 value, void *context) break; case HPWMI_SANITIZATION_MODE: break; + case HPWMI_SMART_EXPERIENCE_APP: + break; default: pr_info("Unknown event_id - %d - 0x%x\n", event_id, event_data); break; @@ -1300,8 +1303,16 @@ static int __init hp_wmi_bios_setup(struct platform_device *device) wwan_rfkill = NULL; rfkill2_count = 0; - if (hp_wmi_rfkill_setup(device)) - hp_wmi_rfkill2_setup(device); + /* + * In pre-2009 BIOS, command 1Bh return 0x4 to indicate that + * BIOS no longer controls the power for the wireless + * devices. All features supported by this command will no + * longer be supported. + */ + if (!hp_wmi_bios_2009_later()) { + if (hp_wmi_rfkill_setup(device)) + hp_wmi_rfkill2_setup(device); + } err = hp_wmi_hwmon_init(); diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c index abd0c81d62c402645d2878bd5d17dc2f47da7100..3ea8fc6a9ca3658c42be6f587e5368c329fc122f 100644 --- a/drivers/platform/x86/ideapad-laptop.c +++ b/drivers/platform/x86/ideapad-laptop.c @@ -136,6 +136,7 @@ struct ideapad_private { bool dytc : 1; bool fan_mode : 1; bool fn_lock : 1; + bool set_fn_lock_led : 1; bool hw_rfkill_switch : 1; bool kbd_bl : 1; bool touchpad_ctrl_via_ec : 1; @@ -154,7 +155,21 @@ MODULE_PARM_DESC(no_bt_rfkill, "No rfkill for bluetooth."); static bool allow_v4_dytc; module_param(allow_v4_dytc, bool, 0444); -MODULE_PARM_DESC(allow_v4_dytc, "Enable DYTC version 4 platform-profile support."); +MODULE_PARM_DESC(allow_v4_dytc, + "Enable DYTC version 4 platform-profile support. " + "If you need this please report this to: platform-driver-x86@vger.kernel.org"); + +static bool hw_rfkill_switch; +module_param(hw_rfkill_switch, bool, 0444); +MODULE_PARM_DESC(hw_rfkill_switch, + "Enable rfkill support for laptops with a hw on/off wifi switch/slider. " + "If you need this please report this to: platform-driver-x86@vger.kernel.org"); + +static bool set_fn_lock_led; +module_param(set_fn_lock_led, bool, 0444); +MODULE_PARM_DESC(set_fn_lock_led, + "Enable driver based updates of the fn-lock LED on fn-lock changes. " + "If you need this please report this to: platform-driver-x86@vger.kernel.org"); /* * ACPI Helpers @@ -1501,6 +1516,9 @@ static void ideapad_wmi_notify(u32 value, void *context) ideapad_input_report(priv, value); break; case 208: + if (!priv->features.set_fn_lock_led) + break; + if (!eval_hals(priv->adev->handle, &result)) { bool state = test_bit(HALS_FNLOCK_STATE_BIT, &result); @@ -1514,6 +1532,18 @@ static void ideapad_wmi_notify(u32 value, void *context) } #endif +/* On some models we need to call exec_sals(SALS_FNLOCK_ON/OFF) to set the LED */ +static const struct dmi_system_id set_fn_lock_led_list[] = { + { + /* https://bugzilla.kernel.org/show_bug.cgi?id=212671 */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Legion R7000P2020H"), + } + }, + {} +}; + /* * Some ideapads have a hardware rfkill switch, but most do not have one. * Reading VPCCMD_R_RF always results in 0 on models without a hardware rfkill, @@ -1533,15 +1563,41 @@ static const struct dmi_system_id hw_rfkill_list[] = { {} }; +static const struct dmi_system_id no_touchpad_switch_list[] = { + { + .ident = "Lenovo Yoga 3 Pro 1370", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo YOGA 3"), + }, + }, + { + .ident = "ZhaoYang K4e-IML", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_VERSION, "ZhaoYang K4e-IML"), + }, + }, + {} +}; + static void ideapad_check_features(struct ideapad_private *priv) { acpi_handle handle = priv->adev->handle; unsigned long val; - priv->features.hw_rfkill_switch = dmi_check_system(hw_rfkill_list); + priv->features.set_fn_lock_led = + set_fn_lock_led || dmi_check_system(set_fn_lock_led_list); + priv->features.hw_rfkill_switch = + hw_rfkill_switch || dmi_check_system(hw_rfkill_list); /* Most ideapads with ELAN0634 touchpad don't use EC touchpad switch */ - priv->features.touchpad_ctrl_via_ec = !acpi_dev_present("ELAN0634", NULL, -1); + if (acpi_dev_present("ELAN0634", NULL, -1)) + priv->features.touchpad_ctrl_via_ec = 0; + else if (dmi_check_system(no_touchpad_switch_list)) + priv->features.touchpad_ctrl_via_ec = 0; + else + priv->features.touchpad_ctrl_via_ec = 1; if (!read_ec_data(handle, VPCCMD_R_FAN, &val)) priv->features.fan_mode = true; diff --git a/drivers/platform/x86/intel/hid.c b/drivers/platform/x86/intel/hid.c index 79cff1fc675c2006ffedd35dfcf08b5cac5d1cdc..b6313ecd190c04b4a604018fc3e4a1ade1e9a804 100644 --- a/drivers/platform/x86/intel/hid.c +++ b/drivers/platform/x86/intel/hid.c @@ -27,6 +27,9 @@ static const struct acpi_device_id intel_hid_ids[] = { {"INTC1051", 0}, {"INTC1054", 0}, {"INTC1070", 0}, + {"INTC1076", 0}, + {"INTC1077", 0}, + {"INTC1078", 0}, {"", 0}, }; MODULE_DEVICE_TABLE(acpi, intel_hid_ids); diff --git a/drivers/platform/x86/intel/pmc/pltdrv.c b/drivers/platform/x86/intel/pmc/pltdrv.c index 15ca8afdd973de2a2b0c7060e8b26b4beb2951bf..ddfba38c210444f70612cd707ec22db5931f9724 100644 --- a/drivers/platform/x86/intel/pmc/pltdrv.c +++ b/drivers/platform/x86/intel/pmc/pltdrv.c @@ -18,6 +18,8 @@ #include #include +#include + static void intel_pmc_core_release(struct device *dev) { kfree(dev); @@ -53,6 +55,13 @@ static int __init pmc_core_platform_init(void) if (acpi_dev_present("INT33A1", NULL, -1)) return -ENODEV; + /* + * Skip forcefully attaching the device for VMs. Make an exception for + * Xen dom0, which does have full hardware access. + */ + if (cpu_feature_enabled(X86_FEATURE_HYPERVISOR) && !xen_initial_domain()) + return -ENODEV; + if (!x86_match_cpu(intel_pmc_core_platform_ids)) return -ENODEV; diff --git a/drivers/platform/x86/intel/pmt/class.c b/drivers/platform/x86/intel/pmt/class.c index 53d7fd2943b4c6a98230934a4a16ea188baaf555..46598dcb634aac7e8485d98e5082a47255723248 100644 --- a/drivers/platform/x86/intel/pmt/class.c +++ b/drivers/platform/x86/intel/pmt/class.c @@ -9,6 +9,7 @@ */ #include +#include #include #include #include @@ -19,6 +20,7 @@ #define PMT_XA_START 0 #define PMT_XA_MAX INT_MAX #define PMT_XA_LIMIT XA_LIMIT(PMT_XA_START, PMT_XA_MAX) +#define GUID_SPR_PUNIT 0x9956f43f bool intel_pmt_is_early_client_hw(struct device *dev) { @@ -33,6 +35,29 @@ bool intel_pmt_is_early_client_hw(struct device *dev) } EXPORT_SYMBOL_GPL(intel_pmt_is_early_client_hw); +static inline int +pmt_memcpy64_fromio(void *to, const u64 __iomem *from, size_t count) +{ + int i, remain; + u64 *buf = to; + + if (!IS_ALIGNED((unsigned long)from, 8)) + return -EFAULT; + + for (i = 0; i < count/8; i++) + buf[i] = readq(&from[i]); + + /* Copy any remaining bytes */ + remain = count % 8; + if (remain) { + u64 tmp = readq(&from[i]); + + memcpy(&buf[i], &tmp, remain); + } + + return count; +} + /* * sysfs */ @@ -54,7 +79,11 @@ intel_pmt_read(struct file *filp, struct kobject *kobj, if (count > entry->size - off) count = entry->size - off; - memcpy_fromio(buf, entry->base + off, count); + if (entry->guid == GUID_SPR_PUNIT) + /* PUNIT on SPR only supports aligned 64-bit read */ + count = pmt_memcpy64_fromio(buf, entry->base + off, count); + else + memcpy_fromio(buf, entry->base + off, count); return count; } diff --git a/drivers/platform/x86/p2sb.c b/drivers/platform/x86/p2sb.c index 384d0962ae93ab0d840d9e19f00ca85cdcd46bc3..1cf2471d54ddef765b017fd079864b3ffb868fdc 100644 --- a/drivers/platform/x86/p2sb.c +++ b/drivers/platform/x86/p2sb.c @@ -19,26 +19,23 @@ #define P2SBC 0xe0 #define P2SBC_HIDE BIT(8) +#define P2SB_DEVFN_DEFAULT PCI_DEVFN(31, 1) + static const struct x86_cpu_id p2sb_cpu_ids[] = { X86_MATCH_INTEL_FAM6_MODEL(ATOM_GOLDMONT, PCI_DEVFN(13, 0)), - X86_MATCH_INTEL_FAM6_MODEL(ATOM_GOLDMONT_D, PCI_DEVFN(31, 1)), - X86_MATCH_INTEL_FAM6_MODEL(ATOM_SILVERMONT_D, PCI_DEVFN(31, 1)), - X86_MATCH_INTEL_FAM6_MODEL(KABYLAKE, PCI_DEVFN(31, 1)), - X86_MATCH_INTEL_FAM6_MODEL(KABYLAKE_L, PCI_DEVFN(31, 1)), - X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE, PCI_DEVFN(31, 1)), - X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE_L, PCI_DEVFN(31, 1)), {} }; static int p2sb_get_devfn(unsigned int *devfn) { + unsigned int fn = P2SB_DEVFN_DEFAULT; const struct x86_cpu_id *id; id = x86_match_cpu(p2sb_cpu_ids); - if (!id) - return -ENODEV; + if (id) + fn = (unsigned int)id->driver_data; - *devfn = (unsigned int)id->driver_data; + *devfn = fn; return 0; } diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c index 20e5c043a8e877a7ede6eea5f4a047f36e854ae7..8476dfef4e626c3fed72ca1c27e98ec751fdb30a 100644 --- a/drivers/platform/x86/thinkpad_acpi.c +++ b/drivers/platform/x86/thinkpad_acpi.c @@ -4497,6 +4497,14 @@ static const struct dmi_system_id fwbug_list[] __initconst = { DMI_MATCH(DMI_PRODUCT_NAME, "21A0"), } }, + { + .ident = "P14s Gen2 AMD", + .driver_data = &quirk_s2idle_bug, + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), + DMI_MATCH(DMI_PRODUCT_NAME, "21A1"), + } + }, {} }; diff --git a/drivers/platform/x86/touchscreen_dmi.c b/drivers/platform/x86/touchscreen_dmi.c index bc97bfa8e8a65f548194f8028851a64151f2c8e9..baae3120efd0525f19ced2c2e21b2520ddb32652 100644 --- a/drivers/platform/x86/touchscreen_dmi.c +++ b/drivers/platform/x86/touchscreen_dmi.c @@ -770,6 +770,22 @@ static const struct ts_dmi_data predia_basic_data = { .properties = predia_basic_props, }; +static const struct property_entry rca_cambio_w101_v2_props[] = { + PROPERTY_ENTRY_U32("touchscreen-min-x", 4), + PROPERTY_ENTRY_U32("touchscreen-min-y", 20), + PROPERTY_ENTRY_U32("touchscreen-size-x", 1644), + PROPERTY_ENTRY_U32("touchscreen-size-y", 874), + PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"), + PROPERTY_ENTRY_STRING("firmware-name", "gsl1680-rca-cambio-w101-v2.fw"), + PROPERTY_ENTRY_U32("silead,max-fingers", 10), + { } +}; + +static const struct ts_dmi_data rca_cambio_w101_v2_data = { + .acpi_name = "MSSL1680:00", + .properties = rca_cambio_w101_v2_props, +}; + static const struct property_entry rwc_nanote_p8_props[] = { PROPERTY_ENTRY_U32("touchscreen-min-y", 46), PROPERTY_ENTRY_U32("touchscreen-size-x", 1728), @@ -1409,6 +1425,15 @@ const struct dmi_system_id touchscreen_dmi_table[] = { DMI_EXACT_MATCH(DMI_BOARD_NAME, "0E57"), }, }, + { + /* RCA Cambio W101 v2 */ + /* https://github.com/onitake/gsl-firmware/discussions/193 */ + .driver_data = (void *)&rca_cambio_w101_v2_data, + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "RCA"), + DMI_MATCH(DMI_PRODUCT_NAME, "W101SA23T1"), + }, + }, { /* RWC NANOTE P8 */ .driver_data = (void *)&rwc_nanote_p8_data, diff --git a/drivers/power/supply/ab8500_btemp.c b/drivers/power/supply/ab8500_btemp.c index 863fabe05bdcf84bb824417b7b814a6c283bbd8d..307ee6f71042e953f26a8f9c552aef63e10a6a13 100644 --- a/drivers/power/supply/ab8500_btemp.c +++ b/drivers/power/supply/ab8500_btemp.c @@ -725,7 +725,14 @@ static int ab8500_btemp_probe(struct platform_device *pdev) /* Get thermal zone and ADC */ di->tz = thermal_zone_get_zone_by_name("battery-thermal"); if (IS_ERR(di->tz)) { - return dev_err_probe(dev, PTR_ERR(di->tz), + ret = PTR_ERR(di->tz); + /* + * This usually just means we are probing before the thermal + * zone, so just defer. + */ + if (ret == -ENODEV) + ret = -EPROBE_DEFER; + return dev_err_probe(dev, ret, "failed to get battery thermal zone\n"); } di->bat_ctrl = devm_iio_channel_get(dev, "bat_ctrl"); diff --git a/drivers/power/supply/ip5xxx_power.c b/drivers/power/supply/ip5xxx_power.c index 218e8e689a3fbbf255d170dc1d6f8364f10f5df3..00221e9c0bfccf90a95880e9832e8152788103c7 100644 --- a/drivers/power/supply/ip5xxx_power.c +++ b/drivers/power/supply/ip5xxx_power.c @@ -352,7 +352,7 @@ static int ip5xxx_battery_get_property(struct power_supply *psy, ret = ip5xxx_battery_read_adc(ip5xxx, IP5XXX_BATIADC_DAT0, IP5XXX_BATIADC_DAT1, &raw); - val->intval = DIV_ROUND_CLOSEST(raw * 745985, 1000); + val->intval = DIV_ROUND_CLOSEST(raw * 149197, 200); return 0; case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT: diff --git a/drivers/power/supply/rk817_charger.c b/drivers/power/supply/rk817_charger.c index 635f051b08216c3907a243589e250a5e2f4f3a15..f20a6ac584ccdb531be616d36b2588d15c4abe10 100644 --- a/drivers/power/supply/rk817_charger.c +++ b/drivers/power/supply/rk817_charger.c @@ -121,7 +121,7 @@ struct rk817_charger { #define ADC_TO_CHARGE_UAH(adc_value, res_div) \ (adc_value / 3600 * 172 / res_div) -static u8 rk817_chg_cur_to_reg(u32 chg_cur_ma) +static int rk817_chg_cur_to_reg(u32 chg_cur_ma) { if (chg_cur_ma >= 3500) return CHG_3_5A; @@ -864,8 +864,8 @@ static int rk817_battery_init(struct rk817_charger *charger, { struct rk808 *rk808 = charger->rk808; u32 tmp, max_chg_vol_mv, max_chg_cur_ma; - u8 max_chg_vol_reg, chg_term_i_reg, max_chg_cur_reg; - int ret, chg_term_ma; + u8 max_chg_vol_reg, chg_term_i_reg; + int ret, chg_term_ma, max_chg_cur_reg; u8 bulk_reg[2]; /* Get initial plug state */ @@ -1116,14 +1116,12 @@ static int rk817_charger_probe(struct platform_device *pdev) charger->bat_ps = devm_power_supply_register(&pdev->dev, &rk817_bat_desc, &pscfg); - - charger->chg_ps = devm_power_supply_register(&pdev->dev, - &rk817_chg_desc, &pscfg); - - if (IS_ERR(charger->chg_ps)) + if (IS_ERR(charger->bat_ps)) return dev_err_probe(dev, -EINVAL, "Battery failed to probe\n"); + charger->chg_ps = devm_power_supply_register(&pdev->dev, + &rk817_chg_desc, &pscfg); if (IS_ERR(charger->chg_ps)) return dev_err_probe(dev, -EINVAL, "Charger failed to probe\n"); diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index bcccad8f751627c98e618f5ab86dde9d0b3df340..e8c00a884f1f13983e794459d3ce051290bd24dc 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -5154,6 +5154,7 @@ static void regulator_dev_release(struct device *dev) { struct regulator_dev *rdev = dev_get_drvdata(dev); + debugfs_remove_recursive(rdev->debugfs); kfree(rdev->constraints); of_node_put(rdev->dev.of_node); kfree(rdev); @@ -5644,11 +5645,15 @@ regulator_register(const struct regulator_desc *regulator_desc, mutex_lock(®ulator_list_mutex); regulator_ena_gpio_free(rdev); mutex_unlock(®ulator_list_mutex); + put_device(&rdev->dev); + rdev = NULL; clean: if (dangling_of_gpiod) gpiod_put(config->ena_gpiod); + if (rdev && rdev->dev.of_node) + of_node_put(rdev->dev.of_node); + kfree(rdev); kfree(config); - put_device(&rdev->dev); rinse: if (dangling_cfg_gpiod) gpiod_put(cfg->ena_gpiod); @@ -5677,7 +5682,6 @@ void regulator_unregister(struct regulator_dev *rdev) mutex_lock(®ulator_list_mutex); - debugfs_remove_recursive(rdev->debugfs); WARN_ON(rdev->open_count); regulator_remove_coupling(rdev); unset_regulator_supplies(rdev); diff --git a/drivers/regulator/rt5759-regulator.c b/drivers/regulator/rt5759-regulator.c index 6b96899eb27e324e5032ae4ed25be6ee66ced037..8488417f4b2cf2d1451994be6613facebff1ee4c 100644 --- a/drivers/regulator/rt5759-regulator.c +++ b/drivers/regulator/rt5759-regulator.c @@ -243,6 +243,7 @@ static int rt5759_regulator_register(struct rt5759_priv *priv) if (priv->chip_type == CHIP_TYPE_RT5759A) reg_desc->uV_step = RT5759A_STEP_UV; + memset(®_cfg, 0, sizeof(reg_cfg)); reg_cfg.dev = priv->dev; reg_cfg.of_node = np; reg_cfg.init_data = of_get_regulator_init_data(priv->dev, np, reg_desc); diff --git a/drivers/regulator/slg51000-regulator.c b/drivers/regulator/slg51000-regulator.c index 75a941fb3c2bda50a16ddbeb645780c25b109cc2..1b2eee95ad3f9f90989ca3efc5fd3cad7b987eb9 100644 --- a/drivers/regulator/slg51000-regulator.c +++ b/drivers/regulator/slg51000-regulator.c @@ -457,6 +457,8 @@ static int slg51000_i2c_probe(struct i2c_client *client) chip->cs_gpiod = cs_gpiod; } + usleep_range(10000, 11000); + i2c_set_clientdata(client, chip); chip->chip_irq = client->irq; chip->dev = dev; diff --git a/drivers/regulator/twl6030-regulator.c b/drivers/regulator/twl6030-regulator.c index 430265c404d65846733898e2f118739ca46ecdb7..f3856750944f4389671af73529a70918496b22e4 100644 --- a/drivers/regulator/twl6030-regulator.c +++ b/drivers/regulator/twl6030-regulator.c @@ -67,6 +67,7 @@ struct twlreg_info { #define TWL6030_CFG_STATE_SLEEP 0x03 #define TWL6030_CFG_STATE_GRP_SHIFT 5 #define TWL6030_CFG_STATE_APP_SHIFT 2 +#define TWL6030_CFG_STATE_MASK 0x03 #define TWL6030_CFG_STATE_APP_MASK (0x03 << TWL6030_CFG_STATE_APP_SHIFT) #define TWL6030_CFG_STATE_APP(v) (((v) & TWL6030_CFG_STATE_APP_MASK) >>\ TWL6030_CFG_STATE_APP_SHIFT) @@ -128,13 +129,14 @@ static int twl6030reg_is_enabled(struct regulator_dev *rdev) if (grp < 0) return grp; grp &= P1_GRP_6030; + val = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_STATE); + val = TWL6030_CFG_STATE_APP(val); } else { + val = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_STATE); + val &= TWL6030_CFG_STATE_MASK; grp = 1; } - val = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_STATE); - val = TWL6030_CFG_STATE_APP(val); - return grp && (val == TWL6030_CFG_STATE_ON); } @@ -187,7 +189,12 @@ static int twl6030reg_get_status(struct regulator_dev *rdev) val = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_STATE); - switch (TWL6030_CFG_STATE_APP(val)) { + if (info->features & TWL6032_SUBCLASS) + val &= TWL6030_CFG_STATE_MASK; + else + val = TWL6030_CFG_STATE_APP(val); + + switch (val) { case TWL6030_CFG_STATE_ON: return REGULATOR_STATUS_NORMAL; @@ -530,6 +537,7 @@ static const struct twlreg_info TWL6030_INFO_##label = { \ #define TWL6032_ADJUSTABLE_LDO(label, offset) \ static const struct twlreg_info TWL6032_INFO_##label = { \ .base = offset, \ + .features = TWL6032_SUBCLASS, \ .desc = { \ .name = #label, \ .id = TWL6032_REG_##label, \ @@ -562,6 +570,7 @@ static const struct twlreg_info TWLFIXED_INFO_##label = { \ #define TWL6032_ADJUSTABLE_SMPS(label, offset) \ static const struct twlreg_info TWLSMPS_INFO_##label = { \ .base = offset, \ + .features = TWL6032_SUBCLASS, \ .desc = { \ .name = #label, \ .id = TWL6032_REG_##label, \ diff --git a/drivers/s390/block/dasd_devmap.c b/drivers/s390/block/dasd_devmap.c index cb83f81da41624552a26388efccdaf61cdceb888..df17f0f9cb0fc3cb4680e9557ade922b2d18a0f8 100644 --- a/drivers/s390/block/dasd_devmap.c +++ b/drivers/s390/block/dasd_devmap.c @@ -1954,7 +1954,7 @@ dasd_copy_pair_show(struct device *dev, break; } } - if (!copy->entry[i].primary) + if (i == DASD_CP_ENTRIES) goto out; /* print all secondary */ diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index 662730f3b027c6933317eaaba99aced0d1a233a8..5d0b9991e91a4c59b898601db0624a9afaed7a4a 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c @@ -4722,7 +4722,6 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_raw(struct dasd_device *startdev, struct dasd_device *basedev; struct req_iterator iter; struct dasd_ccw_req *cqr; - unsigned int first_offs; unsigned int trkcount; unsigned long *idaws; unsigned int size; @@ -4756,7 +4755,6 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_raw(struct dasd_device *startdev, last_trk = (blk_rq_pos(req) + blk_rq_sectors(req) - 1) / DASD_RAW_SECTORS_PER_TRACK; trkcount = last_trk - first_trk + 1; - first_offs = 0; if (rq_data_dir(req) == READ) cmd = DASD_ECKD_CCW_READ_TRACK; @@ -4800,13 +4798,13 @@ static struct dasd_ccw_req *dasd_eckd_build_cp_raw(struct dasd_device *startdev, if (use_prefix) { prefix_LRE(ccw++, data, first_trk, last_trk, cmd, basedev, - startdev, 1, first_offs + 1, trkcount, 0, 0); + startdev, 1, 0, trkcount, 0, 0); } else { define_extent(ccw++, data, first_trk, last_trk, cmd, basedev, 0); ccw[-1].flags |= CCW_FLAG_CC; data += sizeof(struct DE_eckd_data); - locate_record_ext(ccw++, data, first_trk, first_offs + 1, + locate_record_ext(ccw++, data, first_trk, 0, trkcount, cmd, basedev, 0, 0); } @@ -5500,7 +5498,7 @@ dasd_eckd_ioctl(struct dasd_block *block, unsigned int cmd, void __user *argp) * Dump the range of CCWs into 'page' buffer * and return number of printed chars. */ -static int +static void dasd_eckd_dump_ccw_range(struct ccw1 *from, struct ccw1 *to, char *page) { int len, count; @@ -5518,16 +5516,21 @@ dasd_eckd_dump_ccw_range(struct ccw1 *from, struct ccw1 *to, char *page) else datap = (char *) ((addr_t) from->cda); - /* dump data (max 32 bytes) */ - for (count = 0; count < from->count && count < 32; count++) { - if (count % 8 == 0) len += sprintf(page + len, " "); - if (count % 4 == 0) len += sprintf(page + len, " "); + /* dump data (max 128 bytes) */ + for (count = 0; count < from->count && count < 128; count++) { + if (count % 32 == 0) + len += sprintf(page + len, "\n"); + if (count % 8 == 0) + len += sprintf(page + len, " "); + if (count % 4 == 0) + len += sprintf(page + len, " "); len += sprintf(page + len, "%02x", datap[count]); } len += sprintf(page + len, "\n"); from++; } - return len; + if (len > 0) + printk(KERN_ERR "%s", page); } static void @@ -5619,37 +5622,33 @@ static void dasd_eckd_dump_sense_ccw(struct dasd_device *device, if (req) { /* req == NULL for unsolicited interrupts */ /* dump the Channel Program (max 140 Bytes per line) */ - /* Count CCW and print first CCWs (maximum 1024 % 140 = 7) */ + /* Count CCW and print first CCWs (maximum 7) */ first = req->cpaddr; for (last = first; last->flags & (CCW_FLAG_CC | CCW_FLAG_DC); last++); to = min(first + 6, last); - len = sprintf(page, PRINTK_HEADER - " Related CP in req: %p\n", req); - dasd_eckd_dump_ccw_range(first, to, page + len); - printk(KERN_ERR "%s", page); + printk(KERN_ERR PRINTK_HEADER " Related CP in req: %p\n", req); + dasd_eckd_dump_ccw_range(first, to, page); /* print failing CCW area (maximum 4) */ /* scsw->cda is either valid or zero */ - len = 0; from = ++to; fail = (struct ccw1 *)(addr_t) irb->scsw.cmd.cpa; /* failing CCW */ if (from < fail - 2) { from = fail - 2; /* there is a gap - print header */ - len += sprintf(page, PRINTK_HEADER "......\n"); + printk(KERN_ERR PRINTK_HEADER "......\n"); } to = min(fail + 1, last); - len += dasd_eckd_dump_ccw_range(from, to, page + len); + dasd_eckd_dump_ccw_range(from, to, page + len); /* print last CCWs (maximum 2) */ + len = 0; from = max(from, ++to); if (from < last - 1) { from = last - 1; /* there is a gap - print header */ - len += sprintf(page + len, PRINTK_HEADER "......\n"); + printk(KERN_ERR PRINTK_HEADER "......\n"); } - len += dasd_eckd_dump_ccw_range(from, last, page + len); - if (len > 0) - printk(KERN_ERR "%s", page); + dasd_eckd_dump_ccw_range(from, last, page + len); } free_page((unsigned long) page); } diff --git a/drivers/s390/block/dasd_ioctl.c b/drivers/s390/block/dasd_ioctl.c index d0ddf2cc97861345252bd38fd0a274a852c98506..9327dcdd6e5e43271276226ebdda360130389ee8 100644 --- a/drivers/s390/block/dasd_ioctl.c +++ b/drivers/s390/block/dasd_ioctl.c @@ -401,7 +401,7 @@ dasd_ioctl_copy_pair_swap(struct block_device *bdev, void __user *argp) return -EFAULT; } if (memchr_inv(data.reserved, 0, sizeof(data.reserved))) { - pr_warn("%s: Ivalid swap data specified.\n", + pr_warn("%s: Invalid swap data specified\n", dev_name(&device->cdev->dev)); dasd_put_device(device); return DASD_COPYPAIRSWAP_INVALID; diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c index 93b80da602772ac5a1d654e15b27ed32f29820bc..b392b9f5482e0e1f3c3e3c67118876981b7cfe7a 100644 --- a/drivers/s390/block/dcssblk.c +++ b/drivers/s390/block/dcssblk.c @@ -636,6 +636,7 @@ dcssblk_add_store(struct device *dev, struct device_attribute *attr, const char dev_info->gd->minors = DCSSBLK_MINORS_PER_DISK; dev_info->gd->fops = &dcssblk_devops; dev_info->gd->private_data = dev_info; + dev_info->gd->flags |= GENHD_FL_NO_PART; blk_queue_logical_block_size(dev_info->gd->queue, 4096); blk_queue_flag_set(QUEUE_FLAG_DAX, dev_info->gd->queue); diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c index 59ac98f2bd2756fa2cbae94ac11f1301babc9ad7..b02c631f3b71ac93bf9a4d18bfd056f87fb536df 100644 --- a/drivers/s390/crypto/ap_bus.c +++ b/drivers/s390/crypto/ap_bus.c @@ -233,8 +233,11 @@ static void __init ap_init_qci_info(void) if (!ap_qci_info) return; ap_qci_info_old = kzalloc(sizeof(*ap_qci_info_old), GFP_KERNEL); - if (!ap_qci_info_old) + if (!ap_qci_info_old) { + kfree(ap_qci_info); + ap_qci_info = NULL; return; + } if (ap_fetch_qci_info(ap_qci_info) != 0) { kfree(ap_qci_info); kfree(ap_qci_info_old); diff --git a/drivers/s390/crypto/zcrypt_msgtype6.c b/drivers/s390/crypto/zcrypt_msgtype6.c index 8fb34b8eeb189a3bb227f8378c113c5c5a82838e..5ad25147759311029e555168fdcc2acc7fb2977e 100644 --- a/drivers/s390/crypto/zcrypt_msgtype6.c +++ b/drivers/s390/crypto/zcrypt_msgtype6.c @@ -342,7 +342,10 @@ static int xcrb_msg_to_type6cprb_msgx(bool userspace, struct ap_message *ap_msg, }; struct { struct type6_hdr hdr; - struct CPRBX cprbx; + union { + struct CPRBX cprbx; + DECLARE_FLEX_ARRAY(u8, userdata); + }; } __packed * msg = ap_msg->msg; int rcblen = CEIL4(xcrb->request_control_blk_length); @@ -403,7 +406,8 @@ static int xcrb_msg_to_type6cprb_msgx(bool userspace, struct ap_message *ap_msg, msg->hdr.fromcardlen2 = xcrb->reply_data_length; /* prepare CPRB */ - if (z_copy_from_user(userspace, &msg->cprbx, xcrb->request_control_blk_addr, + if (z_copy_from_user(userspace, msg->userdata, + xcrb->request_control_blk_addr, xcrb->request_control_blk_length)) return -EFAULT; if (msg->cprbx.cprb_len + sizeof(msg->hdr.function_code) > @@ -469,9 +473,14 @@ static int xcrb_msg_to_type6_ep11cprb_msgx(bool userspace, struct ap_message *ap struct { struct type6_hdr hdr; - struct ep11_cprb cprbx; - unsigned char pld_tag; /* fixed value 0x30 */ - unsigned char pld_lenfmt; /* payload length format */ + union { + struct { + struct ep11_cprb cprbx; + unsigned char pld_tag; /* fixed value 0x30 */ + unsigned char pld_lenfmt; /* length format */ + } __packed; + DECLARE_FLEX_ARRAY(u8, userdata); + }; } __packed * msg = ap_msg->msg; struct pld_hdr { @@ -500,7 +509,7 @@ static int xcrb_msg_to_type6_ep11cprb_msgx(bool userspace, struct ap_message *ap msg->hdr.fromcardlen1 = xcrb->resp_len; /* Import CPRB data from the ioctl input parameter */ - if (z_copy_from_user(userspace, &msg->cprbx.cprb_len, + if (z_copy_from_user(userspace, msg->userdata, (char __force __user *)xcrb->req, xcrb->req_len)) { return -EFAULT; } diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index 19223b0755686c74a6fc53a72acf315ccc5459f5..ab3ea529cca709377a95e0a8f2b52589a18c779e 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c @@ -884,7 +884,7 @@ static int zfcp_fsf_req_send(struct zfcp_fsf_req *req) const bool is_srb = zfcp_fsf_req_is_status_read_buffer(req); struct zfcp_adapter *adapter = req->adapter; struct zfcp_qdio *qdio = adapter->qdio; - int req_id = req->req_id; + unsigned long req_id = req->req_id; zfcp_reqlist_add(adapter->req_list, req); diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c index 00684e11976be36680a8eca55506cbea2ea1cf73..1a0c0b7289d263a91bb8260bcb3674b43aed26f3 100644 --- a/drivers/scsi/ibmvscsi/ibmvfc.c +++ b/drivers/scsi/ibmvscsi/ibmvfc.c @@ -708,8 +708,13 @@ static void ibmvfc_init_host(struct ibmvfc_host *vhost) memset(vhost->async_crq.msgs.async, 0, PAGE_SIZE); vhost->async_crq.cur = 0; - list_for_each_entry(tgt, &vhost->targets, queue) - ibmvfc_del_tgt(tgt); + list_for_each_entry(tgt, &vhost->targets, queue) { + if (vhost->client_migrated) + tgt->need_login = 1; + else + ibmvfc_del_tgt(tgt); + } + scsi_block_requests(vhost->host); ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_INIT); vhost->job_step = ibmvfc_npiv_login; @@ -3235,9 +3240,12 @@ static void ibmvfc_handle_crq(struct ibmvfc_crq *crq, struct ibmvfc_host *vhost, /* We need to re-setup the interpartition connection */ dev_info(vhost->dev, "Partition migrated, Re-enabling adapter\n"); vhost->client_migrated = 1; + + scsi_block_requests(vhost->host); ibmvfc_purge_requests(vhost, DID_REQUEUE); - ibmvfc_link_down(vhost, IBMVFC_LINK_DOWN); + ibmvfc_set_host_state(vhost, IBMVFC_LINK_DOWN); ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_REENABLE); + wake_up(&vhost->work_wait_q); } else if (crq->format == IBMVFC_PARTNER_FAILED || crq->format == IBMVFC_PARTNER_DEREGISTER) { dev_err(vhost->dev, "Host partner adapter deregistered or failed (rc=%d)\n", crq->format); ibmvfc_purge_requests(vhost, DID_ERROR); diff --git a/drivers/scsi/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c index f77ee4051b00d140e58938d1512db53486de3494..3306de7170f644b49436ce8d576a5286156e483e 100644 --- a/drivers/scsi/mpi3mr/mpi3mr_os.c +++ b/drivers/scsi/mpi3mr/mpi3mr_os.c @@ -3265,7 +3265,8 @@ void mpi3mr_process_op_reply_desc(struct mpi3mr_ioc *mrioc, } if (scmd->result != (DID_OK << 16) && (scmd->cmnd[0] != ATA_12) && - (scmd->cmnd[0] != ATA_16)) { + (scmd->cmnd[0] != ATA_16) && + mrioc->logging_level & MPI3_DEBUG_SCSI_ERROR) { ioc_info(mrioc, "%s :scmd->result 0x%x\n", __func__, scmd->result); scsi_print_command(scmd); diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 697fc57bc711fb0e8492234c5cf65ac90d80b9c9..bebda917b13839734103a2d3fb20440797d33451 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -1899,6 +1899,13 @@ static int resp_readcap16(struct scsi_cmnd *scp, arr[14] |= 0x40; } + /* + * Since the scsi_debug READ CAPACITY implementation always reports the + * total disk capacity, set RC BASIS = 1 for host-managed ZBC devices. + */ + if (devip->zmodel == BLK_ZONED_HM) + arr[12] |= 1 << 4; + arr[15] = sdebug_lowest_aligned & 0xff; if (have_dif_prot) { @@ -7316,8 +7323,12 @@ static int sdebug_add_host_helper(int per_host_idx) dev_set_name(&sdbg_host->dev, "adapter%d", sdebug_num_hosts); error = device_register(&sdbg_host->dev); - if (error) + if (error) { + spin_lock(&sdebug_host_list_lock); + list_del(&sdbg_host->host_list); + spin_unlock(&sdebug_host_list_lock); goto clean; + } ++sdebug_num_hosts; return 0; diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c index cd3db9684e52d4e0a11d537f2ccc1ae2394dfa30..f473c002fa4d6c2e0712bfc0ada288e1b6847e2b 100644 --- a/drivers/scsi/scsi_transport_iscsi.c +++ b/drivers/scsi/scsi_transport_iscsi.c @@ -231,7 +231,7 @@ iscsi_create_endpoint(int dd_size) dev_set_name(&ep->dev, "ep-%d", id); err = device_register(&ep->dev); if (err) - goto free_id; + goto put_dev; err = sysfs_create_group(&ep->dev.kobj, &iscsi_endpoint_group); if (err) @@ -245,10 +245,12 @@ iscsi_create_endpoint(int dd_size) device_unregister(&ep->dev); return NULL; -free_id: +put_dev: mutex_lock(&iscsi_ep_idr_mutex); idr_remove(&iscsi_ep_idr, id); mutex_unlock(&iscsi_ep_idr_mutex); + put_device(&ep->dev); + return NULL; free_ep: kfree(ep); return NULL; @@ -766,7 +768,7 @@ iscsi_create_iface(struct Scsi_Host *shost, struct iscsi_transport *transport, err = device_register(&iface->dev); if (err) - goto free_iface; + goto put_dev; err = sysfs_create_group(&iface->dev.kobj, &iscsi_iface_group); if (err) @@ -780,9 +782,8 @@ iscsi_create_iface(struct Scsi_Host *shost, struct iscsi_transport *transport, device_unregister(&iface->dev); return NULL; -free_iface: - put_device(iface->dev.parent); - kfree(iface); +put_dev: + put_device(&iface->dev); return NULL; } EXPORT_SYMBOL_GPL(iscsi_create_iface); @@ -1251,15 +1252,15 @@ iscsi_create_flashnode_sess(struct Scsi_Host *shost, int index, err = device_register(&fnode_sess->dev); if (err) - goto free_fnode_sess; + goto put_dev; if (dd_size) fnode_sess->dd_data = &fnode_sess[1]; return fnode_sess; -free_fnode_sess: - kfree(fnode_sess); +put_dev: + put_device(&fnode_sess->dev); return NULL; } EXPORT_SYMBOL_GPL(iscsi_create_flashnode_sess); @@ -1299,15 +1300,15 @@ iscsi_create_flashnode_conn(struct Scsi_Host *shost, err = device_register(&fnode_conn->dev); if (err) - goto free_fnode_conn; + goto put_dev; if (dd_size) fnode_conn->dd_data = &fnode_conn[1]; return fnode_conn; -free_fnode_conn: - kfree(fnode_conn); +put_dev: + put_device(&fnode_conn->dev); return NULL; } EXPORT_SYMBOL_GPL(iscsi_create_flashnode_conn); @@ -4815,7 +4816,7 @@ iscsi_register_transport(struct iscsi_transport *tt) dev_set_name(&priv->dev, "%s", tt->name); err = device_register(&priv->dev); if (err) - goto free_priv; + goto put_dev; err = sysfs_create_group(&priv->dev.kobj, &iscsi_transport_group); if (err) @@ -4850,8 +4851,8 @@ iscsi_register_transport(struct iscsi_transport *tt) unregister_dev: device_unregister(&priv->dev); return NULL; -free_priv: - kfree(priv); +put_dev: + put_device(&priv->dev); return NULL; } EXPORT_SYMBOL_GPL(iscsi_register_transport); diff --git a/drivers/scsi/scsi_transport_sas.c b/drivers/scsi/scsi_transport_sas.c index 2f88c61216eea4aa50043beeb3131e472150435a..74b99f2b0b74ac5c32ef00fe6ca698b4f5f7f0ae 100644 --- a/drivers/scsi/scsi_transport_sas.c +++ b/drivers/scsi/scsi_transport_sas.c @@ -722,12 +722,17 @@ int sas_phy_add(struct sas_phy *phy) int error; error = device_add(&phy->dev); - if (!error) { - transport_add_device(&phy->dev); - transport_configure_device(&phy->dev); + if (error) + return error; + + error = transport_add_device(&phy->dev); + if (error) { + device_del(&phy->dev); + return error; } + transport_configure_device(&phy->dev); - return error; + return 0; } EXPORT_SYMBOL(sas_phy_add); diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c index bc46721aa01cbf58ad99ee16cffe0ec2bb3fa2f6..3c5b7e4227b25e3d44795d26ad70974a32add542 100644 --- a/drivers/scsi/storvsc_drv.c +++ b/drivers/scsi/storvsc_drv.c @@ -303,16 +303,21 @@ enum storvsc_request_type { }; /* - * SRB status codes and masks; a subset of the codes used here. + * SRB status codes and masks. In the 8-bit field, the two high order bits + * are flags, while the remaining 6 bits are an integer status code. The + * definitions here include only the subset of the integer status codes that + * are tested for in this driver. */ - #define SRB_STATUS_AUTOSENSE_VALID 0x80 #define SRB_STATUS_QUEUE_FROZEN 0x40 -#define SRB_STATUS_INVALID_LUN 0x20 -#define SRB_STATUS_SUCCESS 0x01 -#define SRB_STATUS_ABORTED 0x02 -#define SRB_STATUS_ERROR 0x04 -#define SRB_STATUS_DATA_OVERRUN 0x12 + +/* SRB status integer codes */ +#define SRB_STATUS_SUCCESS 0x01 +#define SRB_STATUS_ABORTED 0x02 +#define SRB_STATUS_ERROR 0x04 +#define SRB_STATUS_INVALID_REQUEST 0x06 +#define SRB_STATUS_DATA_OVERRUN 0x12 +#define SRB_STATUS_INVALID_LUN 0x20 #define SRB_STATUS(status) \ (status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN)) @@ -969,38 +974,25 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb, void (*process_err_fn)(struct work_struct *work); struct hv_host_device *host_dev = shost_priv(host); - /* - * In some situations, Hyper-V sets multiple bits in the - * srb_status, such as ABORTED and ERROR. So process them - * individually, with the most specific bits first. - */ - - if (vm_srb->srb_status & SRB_STATUS_INVALID_LUN) { - set_host_byte(scmnd, DID_NO_CONNECT); - process_err_fn = storvsc_remove_lun; - goto do_work; - } + switch (SRB_STATUS(vm_srb->srb_status)) { + case SRB_STATUS_ERROR: + case SRB_STATUS_ABORTED: + case SRB_STATUS_INVALID_REQUEST: + if (vm_srb->srb_status & SRB_STATUS_AUTOSENSE_VALID) { + /* Check for capacity change */ + if ((asc == 0x2a) && (ascq == 0x9)) { + process_err_fn = storvsc_device_scan; + /* Retry the I/O that triggered this. */ + set_host_byte(scmnd, DID_REQUEUE); + goto do_work; + } - if (vm_srb->srb_status & SRB_STATUS_ABORTED) { - if (vm_srb->srb_status & SRB_STATUS_AUTOSENSE_VALID && - /* Capacity data has changed */ - (asc == 0x2a) && (ascq == 0x9)) { - process_err_fn = storvsc_device_scan; /* - * Retry the I/O that triggered this. + * Otherwise, let upper layer deal with the + * error when sense message is present */ - set_host_byte(scmnd, DID_REQUEUE); - goto do_work; - } - } - - if (vm_srb->srb_status & SRB_STATUS_ERROR) { - /* - * Let upper layer deal with error when - * sense message is present. - */ - if (vm_srb->srb_status & SRB_STATUS_AUTOSENSE_VALID) return; + } /* * If there is an error; offline the device since all @@ -1023,6 +1015,13 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb, default: set_host_byte(scmnd, DID_ERROR); } + return; + + case SRB_STATUS_INVALID_LUN: + set_host_byte(scmnd, DID_NO_CONNECT); + process_err_fn = storvsc_remove_lun; + goto do_work; + } return; diff --git a/drivers/siox/siox-core.c b/drivers/siox/siox-core.c index 7c4f32d7696666702399022714dc7f8eff963c92..561408583b2bfe00f6dbff314988aeee733a49ae 100644 --- a/drivers/siox/siox-core.c +++ b/drivers/siox/siox-core.c @@ -839,6 +839,8 @@ static struct siox_device *siox_device_add(struct siox_master *smaster, err_device_register: /* don't care to make the buffer smaller again */ + put_device(&sdevice->dev); + sdevice = NULL; err_buf_alloc: siox_master_unlock(smaster); diff --git a/drivers/slimbus/Kconfig b/drivers/slimbus/Kconfig index 2ed821f75816c4e45663e9dc076c431021a36fbd..a0fdf9d792cb4cedee1e04bfdb4eefdf4a9ba424 100644 --- a/drivers/slimbus/Kconfig +++ b/drivers/slimbus/Kconfig @@ -23,7 +23,7 @@ config SLIM_QCOM_CTRL config SLIM_QCOM_NGD_CTRL tristate "Qualcomm SLIMbus Satellite Non-Generic Device Component" depends on HAS_IOMEM && DMA_ENGINE && NET - depends on QCOM_RPROC_COMMON || COMPILE_TEST + depends on QCOM_RPROC_COMMON || (COMPILE_TEST && !QCOM_RPROC_COMMON) depends on ARCH_QCOM || COMPILE_TEST select QCOM_QMI_HELPERS select QCOM_PDR_HELPERS diff --git a/drivers/slimbus/stream.c b/drivers/slimbus/stream.c index 75f87b3d8b9538a2f5293deb4270aae350d04721..73a2aa362957206c29d0c2afa50fe71275ebca61 100644 --- a/drivers/slimbus/stream.c +++ b/drivers/slimbus/stream.c @@ -67,10 +67,10 @@ static const int slim_presence_rate_table[] = { 384000, 768000, 0, /* Reserved */ - 110250, - 220500, - 441000, - 882000, + 11025, + 22050, + 44100, + 88200, 176400, 352800, 705600, diff --git a/drivers/soc/imx/imx93-pd.c b/drivers/soc/imx/imx93-pd.c index 1f3d7039c1de9c674deda7ad0e9f473f2cb44e74..4d235c8c4924dd14f90237ac745a363a79b4d51a 100644 --- a/drivers/soc/imx/imx93-pd.c +++ b/drivers/soc/imx/imx93-pd.c @@ -135,11 +135,24 @@ static int imx93_pd_probe(struct platform_device *pdev) ret = pm_genpd_init(&domain->genpd, NULL, domain->init_off); if (ret) - return ret; + goto err_clk_unprepare; platform_set_drvdata(pdev, domain); - return of_genpd_add_provider_simple(np, &domain->genpd); + ret = of_genpd_add_provider_simple(np, &domain->genpd); + if (ret) + goto err_genpd_remove; + + return 0; + +err_genpd_remove: + pm_genpd_remove(&domain->genpd); + +err_clk_unprepare: + if (!domain->init_off) + clk_bulk_disable_unprepare(domain->num_clks, domain->clks); + + return ret; } static const struct of_device_id imx93_pd_ids[] = { diff --git a/drivers/soc/imx/soc-imx8m.c b/drivers/soc/imx/soc-imx8m.c index cc57a384d74d201efe1f7c0dd2857419a84900e4..28144c699b0c39c0548a8f50d1b9ef44f34e155d 100644 --- a/drivers/soc/imx/soc-imx8m.c +++ b/drivers/soc/imx/soc-imx8m.c @@ -11,6 +11,7 @@ #include #include #include +#include #define REV_B1 0x21 @@ -56,6 +57,7 @@ static u32 __init imx8mq_soc_revision(void) void __iomem *ocotp_base; u32 magic; u32 rev; + struct clk *clk; np = of_find_compatible_node(NULL, NULL, "fsl,imx8mq-ocotp"); if (!np) @@ -63,6 +65,13 @@ static u32 __init imx8mq_soc_revision(void) ocotp_base = of_iomap(np, 0); WARN_ON(!ocotp_base); + clk = of_clk_get_by_name(np, NULL); + if (!clk) { + WARN_ON(!clk); + return 0; + } + + clk_prepare_enable(clk); /* * SOC revision on older imx8mq is not available in fuses so query @@ -79,6 +88,8 @@ static u32 __init imx8mq_soc_revision(void) soc_uid <<= 32; soc_uid |= readl_relaxed(ocotp_base + OCOTP_UID_LOW); + clk_disable_unprepare(clk); + clk_put(clk); iounmap(ocotp_base); of_node_put(np); diff --git a/drivers/soundwire/intel.c b/drivers/soundwire/intel.c index 244209358784ffb2c5f9348a497d12b4a2bf2052..8c76541d553f116d951f27cf4f8adbf39fcbe9cd 100644 --- a/drivers/soundwire/intel.c +++ b/drivers/soundwire/intel.c @@ -1513,6 +1513,7 @@ static int intel_link_probe(struct auxiliary_device *auxdev, bus->link_id = auxdev->id; bus->dev_num_ida_min = INTEL_DEV_NUM_IDA_MIN; + bus->clk_stop_timeout = 1; sdw_cdns_probe(cdns); diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c index b33d5db494a54ebbcebceaa675c2db423098d515..cee2b22231410345e9373b5968b1f9b9c977623b 100644 --- a/drivers/soundwire/qcom.c +++ b/drivers/soundwire/qcom.c @@ -344,6 +344,9 @@ static int qcom_swrm_cmd_fifo_wr_cmd(struct qcom_swrm_ctrl *swrm, u8 cmd_data, if (swrm_wait_for_wr_fifo_avail(swrm)) return SDW_CMD_FAIL_OTHER; + if (cmd_id == SWR_BROADCAST_CMD_ID) + reinit_completion(&swrm->broadcast); + /* Its assumed that write is okay as we do not get any status back */ swrm->reg_write(swrm, SWRM_CMD_FIFO_WR_CMD, val); @@ -377,6 +380,12 @@ static int qcom_swrm_cmd_fifo_rd_cmd(struct qcom_swrm_ctrl *swrm, val = swrm_get_packed_reg_val(&swrm->rcmd_id, len, dev_addr, reg_addr); + /* + * Check for outstanding cmd wrt. write fifo depth to avoid + * overflow as read will also increase write fifo cnt. + */ + swrm_wait_for_wr_fifo_avail(swrm); + /* wait for FIFO RD to complete to avoid overflow */ usleep_range(100, 105); swrm->reg_write(swrm, SWRM_CMD_FIFO_RD_CMD, val); diff --git a/drivers/spi/spi-amd.c b/drivers/spi/spi-amd.c index e23121456c706a3cd43e0821e5beca46a045fb61..bfc3ab5f39eaaa567a332f107c44d690b9151897 100644 --- a/drivers/spi/spi-amd.c +++ b/drivers/spi/spi-amd.c @@ -65,7 +65,7 @@ enum amd_spi_speed { F_16_66MHz, F_100MHz, F_800KHz, - SPI_SPD7, + SPI_SPD7 = 0x7, F_50MHz = 0x4, F_4MHz = 0x32, F_3_17MHz = 0x3F diff --git a/drivers/spi/spi-dw-dma.c b/drivers/spi/spi-dw-dma.c index 1322b8cce5b7c542f39b2022105fb50ed7aa1a26..ababb910b3914c84e88998d16b79ab6444eaac18 100644 --- a/drivers/spi/spi-dw-dma.c +++ b/drivers/spi/spi-dw-dma.c @@ -128,12 +128,15 @@ static int dw_spi_dma_init_mfld(struct device *dev, struct dw_spi *dws) dw_spi_dma_sg_burst_init(dws); + pci_dev_put(dma_dev); + return 0; free_rxchan: dma_release_channel(dws->rxchan); dws->rxchan = NULL; err_exit: + pci_dev_put(dma_dev); return -EBUSY; } diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index 30d82cc7300b2472f6111a39ea8d9f1950016295..d209930069cf3d1ab873537bca7a3e3184baf491 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c @@ -444,8 +444,7 @@ static unsigned int mx51_ecspi_clkdiv(struct spi_imx_data *spi_imx, unsigned int pre, post; unsigned int fin = spi_imx->spi_clk; - if (unlikely(fspi > fin)) - return 0; + fspi = min(fspi, fin); post = fls(fin) - fls(fspi); if (fin > fspi << post) @@ -1607,6 +1606,13 @@ static int spi_imx_transfer_one(struct spi_controller *controller, if (spi_imx->slave_mode) return spi_imx_pio_transfer_slave(spi, transfer); + /* + * If we decided in spi_imx_can_dma() that we want to do a DMA + * transfer, the SPI transfer has already been mapped, so we + * have to do the DMA transfer here. + */ + if (spi_imx->usedma) + return spi_imx_dma_transfer(spi_imx, transfer); /* * Calculate the estimated time in us the transfer runs. Find * the number of Hz per byte per polling limit. @@ -1618,9 +1624,6 @@ static int spi_imx_transfer_one(struct spi_controller *controller, if (transfer->len < byte_limit) return spi_imx_poll_transfer(spi, transfer); - if (spi_imx->usedma) - return spi_imx_dma_transfer(spi_imx, transfer); - return spi_imx_pio_transfer(spi, transfer); } diff --git a/drivers/spi/spi-intel.c b/drivers/spi/spi-intel.c index 605acb1bf4b08e83c158c5871a1e3e8d8b7a9193..3ac73691fbb549604e06d4f787c6b8f9b89e352f 100644 --- a/drivers/spi/spi-intel.c +++ b/drivers/spi/spi-intel.c @@ -52,17 +52,17 @@ #define FRACC 0x50 #define FREG(n) (0x54 + ((n) * 4)) -#define FREG_BASE_MASK 0x3fff +#define FREG_BASE_MASK GENMASK(14, 0) #define FREG_LIMIT_SHIFT 16 -#define FREG_LIMIT_MASK (0x03fff << FREG_LIMIT_SHIFT) +#define FREG_LIMIT_MASK GENMASK(30, 16) /* Offset is from @ispi->pregs */ #define PR(n) ((n) * 4) #define PR_WPE BIT(31) #define PR_LIMIT_SHIFT 16 -#define PR_LIMIT_MASK (0x3fff << PR_LIMIT_SHIFT) +#define PR_LIMIT_MASK GENMASK(30, 16) #define PR_RPE BIT(15) -#define PR_BASE_MASK 0x3fff +#define PR_BASE_MASK GENMASK(14, 0) /* Offsets are from @ispi->sregs */ #define SSFSTS_CTL 0x00 diff --git a/drivers/spi/spi-meson-spicc.c b/drivers/spi/spi-meson-spicc.c index bad201510a99261eb7d4804358e7ba0696f6cf59..1b4195c54ee2655e01a2c0433f4f620eedd2b65a 100644 --- a/drivers/spi/spi-meson-spicc.c +++ b/drivers/spi/spi-meson-spicc.c @@ -160,6 +160,7 @@ struct meson_spicc_device { struct clk *clk; struct spi_message *message; struct spi_transfer *xfer; + struct completion done; const struct meson_spicc_data *data; u8 *tx_buf; u8 *rx_buf; @@ -282,7 +283,7 @@ static irqreturn_t meson_spicc_irq(int irq, void *data) /* Disable all IRQs */ writel(0, spicc->base + SPICC_INTREG); - spi_finalize_current_transfer(spicc->master); + complete(&spicc->done); return IRQ_HANDLED; } @@ -386,6 +387,7 @@ static int meson_spicc_transfer_one(struct spi_master *master, struct spi_transfer *xfer) { struct meson_spicc_device *spicc = spi_master_get_devdata(master); + uint64_t timeout; /* Store current transfer */ spicc->xfer = xfer; @@ -410,13 +412,29 @@ static int meson_spicc_transfer_one(struct spi_master *master, /* Setup burst */ meson_spicc_setup_burst(spicc); + /* Setup wait for completion */ + reinit_completion(&spicc->done); + + /* For each byte we wait for 8 cycles of the SPI clock */ + timeout = 8LL * MSEC_PER_SEC * xfer->len; + do_div(timeout, xfer->speed_hz); + + /* Add 10us delay between each fifo bursts */ + timeout += ((xfer->len >> 4) * 10) / MSEC_PER_SEC; + + /* Increase it twice and add 200 ms tolerance */ + timeout += timeout + 200; + /* Start burst */ writel_bits_relaxed(SPICC_XCH, SPICC_XCH, spicc->base + SPICC_CONREG); /* Enable interrupts */ writel_relaxed(SPICC_TC_EN, spicc->base + SPICC_INTREG); - return 1; + if (!wait_for_completion_timeout(&spicc->done, msecs_to_jiffies(timeout))) + return -ETIMEDOUT; + + return 0; } static int meson_spicc_prepare_message(struct spi_master *master, @@ -743,6 +761,8 @@ static int meson_spicc_probe(struct platform_device *pdev) spicc->pdev = pdev; platform_set_drvdata(pdev, spicc); + init_completion(&spicc->done); + spicc->base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(spicc->base)) { dev_err(&pdev->dev, "io resource mapping failed\n"); diff --git a/drivers/spi/spi-mt65xx.c b/drivers/spi/spi-mt65xx.c index 11aeae7fe7fc9fd59e7e40e0f1e3e162a1b54914..d6aff909fc365e0fa48f0cdd2b20fa52659f7232 100644 --- a/drivers/spi/spi-mt65xx.c +++ b/drivers/spi/spi-mt65xx.c @@ -551,14 +551,17 @@ static void mtk_spi_enable_transfer(struct spi_master *master) writel(cmd, mdata->base + SPI_CMD_REG); } -static int mtk_spi_get_mult_delta(u32 xfer_len) +static int mtk_spi_get_mult_delta(struct mtk_spi *mdata, u32 xfer_len) { - u32 mult_delta; + u32 mult_delta = 0; - if (xfer_len > MTK_SPI_PACKET_SIZE) - mult_delta = xfer_len % MTK_SPI_PACKET_SIZE; - else - mult_delta = 0; + if (mdata->dev_comp->ipm_design) { + if (xfer_len > MTK_SPI_IPM_PACKET_SIZE) + mult_delta = xfer_len % MTK_SPI_IPM_PACKET_SIZE; + } else { + if (xfer_len > MTK_SPI_PACKET_SIZE) + mult_delta = xfer_len % MTK_SPI_PACKET_SIZE; + } return mult_delta; } @@ -570,22 +573,22 @@ static void mtk_spi_update_mdata_len(struct spi_master *master) if (mdata->tx_sgl_len && mdata->rx_sgl_len) { if (mdata->tx_sgl_len > mdata->rx_sgl_len) { - mult_delta = mtk_spi_get_mult_delta(mdata->rx_sgl_len); + mult_delta = mtk_spi_get_mult_delta(mdata, mdata->rx_sgl_len); mdata->xfer_len = mdata->rx_sgl_len - mult_delta; mdata->rx_sgl_len = mult_delta; mdata->tx_sgl_len -= mdata->xfer_len; } else { - mult_delta = mtk_spi_get_mult_delta(mdata->tx_sgl_len); + mult_delta = mtk_spi_get_mult_delta(mdata, mdata->tx_sgl_len); mdata->xfer_len = mdata->tx_sgl_len - mult_delta; mdata->tx_sgl_len = mult_delta; mdata->rx_sgl_len -= mdata->xfer_len; } } else if (mdata->tx_sgl_len) { - mult_delta = mtk_spi_get_mult_delta(mdata->tx_sgl_len); + mult_delta = mtk_spi_get_mult_delta(mdata, mdata->tx_sgl_len); mdata->xfer_len = mdata->tx_sgl_len - mult_delta; mdata->tx_sgl_len = mult_delta; } else if (mdata->rx_sgl_len) { - mult_delta = mtk_spi_get_mult_delta(mdata->rx_sgl_len); + mult_delta = mtk_spi_get_mult_delta(mdata, mdata->rx_sgl_len); mdata->xfer_len = mdata->rx_sgl_len - mult_delta; mdata->rx_sgl_len = mult_delta; } @@ -1270,8 +1273,11 @@ static int mtk_spi_remove(struct platform_device *pdev) { struct spi_master *master = platform_get_drvdata(pdev); struct mtk_spi *mdata = spi_master_get_devdata(master); + int ret; - pm_runtime_disable(&pdev->dev); + ret = pm_runtime_resume_and_get(&pdev->dev); + if (ret < 0) + return ret; mtk_spi_reset(mdata); @@ -1280,6 +1286,9 @@ static int mtk_spi_remove(struct platform_device *pdev) clk_unprepare(mdata->spi_hclk); } + pm_runtime_put_noidle(&pdev->dev); + pm_runtime_disable(&pdev->dev); + return 0; } diff --git a/drivers/spi/spi-stm32.c b/drivers/spi/spi-stm32.c index 6fe617b445a595ec06312936406eb60f2644cc1b..def09cf0dc147c2987789d975976ca6ecc45f1da 100644 --- a/drivers/spi/spi-stm32.c +++ b/drivers/spi/spi-stm32.c @@ -434,7 +434,7 @@ static int stm32_spi_prepare_mbr(struct stm32_spi *spi, u32 speed_hz, u32 div, mbrdiv; /* Ensure spi->clk_rate is even */ - div = DIV_ROUND_UP(spi->clk_rate & ~0x1, speed_hz); + div = DIV_ROUND_CLOSEST(spi->clk_rate & ~0x1, speed_hz); /* * SPI framework set xfer->speed_hz to master->max_speed_hz if @@ -886,6 +886,7 @@ static irqreturn_t stm32h7_spi_irq_thread(int irq, void *dev_id) static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL * 10, 1); + ratelimit_set_flags(&rs, RATELIMIT_MSG_ON_RELEASE); if (__ratelimit(&rs)) dev_dbg_ratelimited(spi->dev, "Communication suspended\n"); if (!spi->cur_usedma && (spi->rx_buf && (spi->rx_len > 0))) diff --git a/drivers/spi/spi-tegra210-quad.c b/drivers/spi/spi-tegra210-quad.c index 904972606bd45bb99a960b028ec5aef4c335c706..9f356612ba7e54f46fb5868e6675904a6ad20c6c 100644 --- a/drivers/spi/spi-tegra210-quad.c +++ b/drivers/spi/spi-tegra210-quad.c @@ -720,6 +720,9 @@ static int tegra_qspi_start_cpu_based_transfer(struct tegra_qspi *qspi, struct s static void tegra_qspi_deinit_dma(struct tegra_qspi *tqspi) { + if (!tqspi->soc_data->has_dma) + return; + if (tqspi->tx_dma_buf) { dma_free_coherent(tqspi->dev, tqspi->dma_buf_size, tqspi->tx_dma_buf, tqspi->tx_dma_phys); @@ -750,6 +753,9 @@ static int tegra_qspi_init_dma(struct tegra_qspi *tqspi) u32 *dma_buf; int err; + if (!tqspi->soc_data->has_dma) + return 0; + dma_chan = dma_request_chan(tqspi->dev, "rx"); if (IS_ERR(dma_chan)) { err = PTR_ERR(dma_chan); @@ -918,8 +924,9 @@ static int tegra_qspi_start_transfer_one(struct spi_device *spi, static struct tegra_qspi_client_data *tegra_qspi_parse_cdata_dt(struct spi_device *spi) { struct tegra_qspi_client_data *cdata; + struct tegra_qspi *tqspi = spi_master_get_devdata(spi->master); - cdata = devm_kzalloc(&spi->dev, sizeof(*cdata), GFP_KERNEL); + cdata = devm_kzalloc(tqspi->dev, sizeof(*cdata), GFP_KERNEL); if (!cdata) return NULL; diff --git a/drivers/staging/rtl8192e/rtllib_softmac_wx.c b/drivers/staging/rtl8192e/rtllib_softmac_wx.c index f9589c5b62bacca0802e2cb0dc034e336e89884c..1e5ad3b476ef74b20624ef50e03a409487ee8919 100644 --- a/drivers/staging/rtl8192e/rtllib_softmac_wx.c +++ b/drivers/staging/rtl8192e/rtllib_softmac_wx.c @@ -439,7 +439,7 @@ int rtllib_wx_set_essid(struct rtllib_device *ieee, union iwreq_data *wrqu, char *extra) { - int ret = 0, len, i; + int ret = 0, len; short proto_started; unsigned long flags; @@ -455,13 +455,6 @@ int rtllib_wx_set_essid(struct rtllib_device *ieee, goto out; } - for (i = 0; i < len; i++) { - if (extra[i] < 0) { - ret = -1; - goto out; - } - } - if (proto_started) rtllib_stop_protocol(ieee, true); diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c index 4407b56aa6d1afd737fed5ae62e1fbba53104b58..139031ccb700a7fdda510ef8a112aefb3f293482 100644 --- a/drivers/target/loopback/tcm_loop.c +++ b/drivers/target/loopback/tcm_loop.c @@ -397,6 +397,7 @@ static int tcm_loop_setup_hba_bus(struct tcm_loop_hba *tl_hba, int tcm_loop_host ret = device_register(&tl_hba->dev); if (ret) { pr_err("device_register() failed for tl_hba->dev: %d\n", ret); + put_device(&tl_hba->dev); return -ENODEV; } @@ -1073,7 +1074,7 @@ static struct se_wwn *tcm_loop_make_scsi_hba( */ ret = tcm_loop_setup_hba_bus(tl_hba, tcm_loop_hba_no_cnt); if (ret) - goto out; + return ERR_PTR(ret); sh = tl_hba->sh; tcm_loop_hba_no_cnt++; diff --git a/drivers/tee/optee/device.c b/drivers/tee/optee/device.c index f3947be13e2e52cb670cb05c4602bb357a5d5196..64f0e047c23d2a16d54099f486400eec8c361adf 100644 --- a/drivers/tee/optee/device.c +++ b/drivers/tee/optee/device.c @@ -80,7 +80,7 @@ static int optee_register_device(const uuid_t *device_uuid) rc = device_register(&optee_device->dev); if (rc) { pr_err("device registration failed, err: %d\n", rc); - kfree(optee_device); + put_device(&optee_device->dev); } return rc; diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index 5e516f5cac5a32171428d72d510765586b61ad3e..b6e0cc4571eacc403d9ac56b58340b18791fd841 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -264,7 +264,7 @@ struct gsm_mux { bool constipated; /* Asked by remote to shut up */ bool has_devices; /* Devices were registered */ - struct mutex tx_mutex; + spinlock_t tx_lock; unsigned int tx_bytes; /* TX data outstanding */ #define TX_THRESH_HI 8192 #define TX_THRESH_LO 2048 @@ -272,7 +272,7 @@ struct gsm_mux { struct list_head tx_data_list; /* Pending data packets */ /* Control messages */ - struct delayed_work kick_timeout; /* Kick TX queuing on timeout */ + struct timer_list kick_timer; /* Kick TX queuing on timeout */ struct timer_list t2_timer; /* Retransmit timer for commands */ int cretries; /* Command retry counter */ struct gsm_control *pending_cmd;/* Our current pending command */ @@ -700,6 +700,7 @@ static int gsm_send(struct gsm_mux *gsm, int addr, int cr, int control) struct gsm_msg *msg; u8 *dp; int ocr; + unsigned long flags; msg = gsm_data_alloc(gsm, addr, 0, control); if (!msg) @@ -721,10 +722,10 @@ static int gsm_send(struct gsm_mux *gsm, int addr, int cr, int control) gsm_print_packet("Q->", addr, cr, control, NULL, 0); - mutex_lock(&gsm->tx_mutex); + spin_lock_irqsave(&gsm->tx_lock, flags); list_add_tail(&msg->list, &gsm->tx_ctrl_list); gsm->tx_bytes += msg->len; - mutex_unlock(&gsm->tx_mutex); + spin_unlock_irqrestore(&gsm->tx_lock, flags); gsmld_write_trigger(gsm); return 0; @@ -749,7 +750,7 @@ static void gsm_dlci_clear_queues(struct gsm_mux *gsm, struct gsm_dlci *dlci) spin_unlock_irqrestore(&dlci->lock, flags); /* Clear data packets in MUX write queue */ - mutex_lock(&gsm->tx_mutex); + spin_lock_irqsave(&gsm->tx_lock, flags); list_for_each_entry_safe(msg, nmsg, &gsm->tx_data_list, list) { if (msg->addr != addr) continue; @@ -757,7 +758,7 @@ static void gsm_dlci_clear_queues(struct gsm_mux *gsm, struct gsm_dlci *dlci) list_del(&msg->list); kfree(msg); } - mutex_unlock(&gsm->tx_mutex); + spin_unlock_irqrestore(&gsm->tx_lock, flags); } /** @@ -1028,7 +1029,7 @@ static void __gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg) gsm->tx_bytes += msg->len; gsmld_write_trigger(gsm); - schedule_delayed_work(&gsm->kick_timeout, 10 * gsm->t1 * HZ / 100); + mod_timer(&gsm->kick_timer, jiffies + 10 * gsm->t1 * HZ / 100); } /** @@ -1043,9 +1044,10 @@ static void __gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg) static void gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg) { - mutex_lock(&dlci->gsm->tx_mutex); + unsigned long flags; + spin_lock_irqsave(&dlci->gsm->tx_lock, flags); __gsm_data_queue(dlci, msg); - mutex_unlock(&dlci->gsm->tx_mutex); + spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags); } /** @@ -1057,7 +1059,7 @@ static void gsm_data_queue(struct gsm_dlci *dlci, struct gsm_msg *msg) * is data. Keep to the MRU of the mux. This path handles the usual tty * interface which is a byte stream with optional modem data. * - * Caller must hold the tx_mutex of the mux. + * Caller must hold the tx_lock of the mux. */ static int gsm_dlci_data_output(struct gsm_mux *gsm, struct gsm_dlci *dlci) @@ -1117,7 +1119,7 @@ static int gsm_dlci_data_output(struct gsm_mux *gsm, struct gsm_dlci *dlci) * is data. Keep to the MRU of the mux. This path handles framed data * queued as skbuffs to the DLCI. * - * Caller must hold the tx_mutex of the mux. + * Caller must hold the tx_lock of the mux. */ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm, @@ -1133,7 +1135,7 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm, if (dlci->adaption == 4) overhead = 1; - /* dlci->skb is locked by tx_mutex */ + /* dlci->skb is locked by tx_lock */ if (dlci->skb == NULL) { dlci->skb = skb_dequeue_tail(&dlci->skb_list); if (dlci->skb == NULL) @@ -1187,7 +1189,7 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm, * Push an empty frame in to the transmit queue to update the modem status * bits and to transmit an optional break. * - * Caller must hold the tx_mutex of the mux. + * Caller must hold the tx_lock of the mux. */ static int gsm_dlci_modem_output(struct gsm_mux *gsm, struct gsm_dlci *dlci, @@ -1301,12 +1303,13 @@ static int gsm_dlci_data_sweep(struct gsm_mux *gsm) static void gsm_dlci_data_kick(struct gsm_dlci *dlci) { + unsigned long flags; int sweep; if (dlci->constipated) return; - mutex_lock(&dlci->gsm->tx_mutex); + spin_lock_irqsave(&dlci->gsm->tx_lock, flags); /* If we have nothing running then we need to fire up */ sweep = (dlci->gsm->tx_bytes < TX_THRESH_LO); if (dlci->gsm->tx_bytes == 0) { @@ -1317,7 +1320,7 @@ static void gsm_dlci_data_kick(struct gsm_dlci *dlci) } if (sweep) gsm_dlci_data_sweep(dlci->gsm); - mutex_unlock(&dlci->gsm->tx_mutex); + spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags); } /* @@ -1708,7 +1711,7 @@ static struct gsm_control *gsm_control_send(struct gsm_mux *gsm, unsigned int command, u8 *data, int clen) { struct gsm_control *ctrl = kzalloc(sizeof(struct gsm_control), - GFP_KERNEL); + GFP_ATOMIC); unsigned long flags; if (ctrl == NULL) return NULL; @@ -2019,23 +2022,24 @@ static void gsm_dlci_command(struct gsm_dlci *dlci, const u8 *data, int len) } /** - * gsm_kick_timeout - transmit if possible - * @work: work contained in our gsm object + * gsm_kick_timer - transmit if possible + * @t: timer contained in our gsm object * * Transmit data from DLCIs if the queue is empty. We can't rely on * a tty wakeup except when we filled the pipe so we need to fire off * new data ourselves in other cases. */ -static void gsm_kick_timeout(struct work_struct *work) +static void gsm_kick_timer(struct timer_list *t) { - struct gsm_mux *gsm = container_of(work, struct gsm_mux, kick_timeout.work); + struct gsm_mux *gsm = from_timer(gsm, t, kick_timer); + unsigned long flags; int sent = 0; - mutex_lock(&gsm->tx_mutex); + spin_lock_irqsave(&gsm->tx_lock, flags); /* If we have nothing running then we need to fire up */ if (gsm->tx_bytes < TX_THRESH_LO) sent = gsm_dlci_data_sweep(gsm); - mutex_unlock(&gsm->tx_mutex); + spin_unlock_irqrestore(&gsm->tx_lock, flags); if (sent && debug & DBG_DATA) pr_info("%s TX queue stalled\n", __func__); @@ -2492,7 +2496,7 @@ static void gsm_cleanup_mux(struct gsm_mux *gsm, bool disc) } /* Finish outstanding timers, making sure they are done */ - cancel_delayed_work_sync(&gsm->kick_timeout); + del_timer_sync(&gsm->kick_timer); del_timer_sync(&gsm->t2_timer); /* Finish writing to ldisc */ @@ -2565,7 +2569,6 @@ static void gsm_free_mux(struct gsm_mux *gsm) break; } } - mutex_destroy(&gsm->tx_mutex); mutex_destroy(&gsm->mutex); kfree(gsm->txframe); kfree(gsm->buf); @@ -2637,15 +2640,15 @@ static struct gsm_mux *gsm_alloc_mux(void) } spin_lock_init(&gsm->lock); mutex_init(&gsm->mutex); - mutex_init(&gsm->tx_mutex); kref_init(&gsm->ref); INIT_LIST_HEAD(&gsm->tx_ctrl_list); INIT_LIST_HEAD(&gsm->tx_data_list); - INIT_DELAYED_WORK(&gsm->kick_timeout, gsm_kick_timeout); + timer_setup(&gsm->kick_timer, gsm_kick_timer, 0); timer_setup(&gsm->t2_timer, gsm_control_retransmit, 0); INIT_WORK(&gsm->tx_work, gsmld_write_task); init_waitqueue_head(&gsm->event); spin_lock_init(&gsm->control_lock); + spin_lock_init(&gsm->tx_lock); gsm->t1 = T1; gsm->t2 = T2; @@ -2670,7 +2673,6 @@ static struct gsm_mux *gsm_alloc_mux(void) } spin_unlock(&gsm_mux_lock); if (i == MAX_MUX) { - mutex_destroy(&gsm->tx_mutex); mutex_destroy(&gsm->mutex); kfree(gsm->txframe); kfree(gsm->buf); @@ -2826,16 +2828,17 @@ static void gsmld_write_trigger(struct gsm_mux *gsm) static void gsmld_write_task(struct work_struct *work) { struct gsm_mux *gsm = container_of(work, struct gsm_mux, tx_work); + unsigned long flags; int i, ret; /* All outstanding control channel and control messages and one data * frame is sent. */ ret = -ENODEV; - mutex_lock(&gsm->tx_mutex); + spin_lock_irqsave(&gsm->tx_lock, flags); if (gsm->tty) ret = gsm_data_kick(gsm); - mutex_unlock(&gsm->tx_mutex); + spin_unlock_irqrestore(&gsm->tx_lock, flags); if (ret >= 0) for (i = 0; i < NUM_DLCI; i++) @@ -3042,6 +3045,7 @@ static ssize_t gsmld_write(struct tty_struct *tty, struct file *file, const unsigned char *buf, size_t nr) { struct gsm_mux *gsm = tty->disc_data; + unsigned long flags; int space; int ret; @@ -3049,13 +3053,13 @@ static ssize_t gsmld_write(struct tty_struct *tty, struct file *file, return -ENODEV; ret = -ENOBUFS; - mutex_lock(&gsm->tx_mutex); + spin_lock_irqsave(&gsm->tx_lock, flags); space = tty_write_room(tty); if (space >= nr) ret = tty->ops->write(tty, buf, nr); else set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags); - mutex_unlock(&gsm->tx_mutex); + spin_unlock_irqrestore(&gsm->tx_lock, flags); return ret; } @@ -3352,13 +3356,14 @@ static struct tty_ldisc_ops tty_ldisc_packet = { static void gsm_modem_upd_via_data(struct gsm_dlci *dlci, u8 brk) { struct gsm_mux *gsm = dlci->gsm; + unsigned long flags; if (dlci->state != DLCI_OPEN || dlci->adaption != 2) return; - mutex_lock(&gsm->tx_mutex); + spin_lock_irqsave(&gsm->tx_lock, flags); gsm_dlci_modem_output(gsm, dlci, brk); - mutex_unlock(&gsm->tx_mutex); + spin_unlock_irqrestore(&gsm->tx_lock, flags); } /** diff --git a/drivers/tty/serial/8250/8250_lpss.c b/drivers/tty/serial/8250/8250_lpss.c index 44cc755b1a29a90988f292b9844dcec98fd5fdc3..0e43bdfb745989c72a3d015b29b7cf8505777d42 100644 --- a/drivers/tty/serial/8250/8250_lpss.c +++ b/drivers/tty/serial/8250/8250_lpss.c @@ -174,6 +174,8 @@ static int ehl_serial_setup(struct lpss8250 *lpss, struct uart_port *port) */ up->dma = dma; + lpss->dma_maxburst = 16; + port->set_termios = dw8250_do_set_termios; return 0; @@ -277,8 +279,13 @@ static int lpss8250_dma_setup(struct lpss8250 *lpss, struct uart_8250_port *port struct dw_dma_slave *rx_param, *tx_param; struct device *dev = port->port.dev; - if (!lpss->dma_param.dma_dev) + if (!lpss->dma_param.dma_dev) { + dma = port->dma; + if (dma) + goto out_configuration_only; + return 0; + } rx_param = devm_kzalloc(dev, sizeof(*rx_param), GFP_KERNEL); if (!rx_param) @@ -289,16 +296,18 @@ static int lpss8250_dma_setup(struct lpss8250 *lpss, struct uart_8250_port *port return -ENOMEM; *rx_param = lpss->dma_param; - dma->rxconf.src_maxburst = lpss->dma_maxburst; - *tx_param = lpss->dma_param; - dma->txconf.dst_maxburst = lpss->dma_maxburst; dma->fn = lpss8250_dma_filter; dma->rx_param = rx_param; dma->tx_param = tx_param; port->dma = dma; + +out_configuration_only: + dma->rxconf.src_maxburst = lpss->dma_maxburst; + dma->txconf.dst_maxburst = lpss->dma_maxburst; + return 0; } diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c index 41b8c6b27136a9cdb624e5c7c7c8bbedaeb26b53..3f33014022f0e9f5774e44fc7df291cd1912c26e 100644 --- a/drivers/tty/serial/8250/8250_omap.c +++ b/drivers/tty/serial/8250/8250_omap.c @@ -157,7 +157,11 @@ static u32 uart_read(struct uart_8250_port *up, u32 reg) return readl(up->port.membase + (reg << up->port.regshift)); } -static void omap8250_set_mctrl(struct uart_port *port, unsigned int mctrl) +/* + * Called on runtime PM resume path from omap8250_restore_regs(), and + * omap8250_set_mctrl(). + */ +static void __omap8250_set_mctrl(struct uart_port *port, unsigned int mctrl) { struct uart_8250_port *up = up_to_u8250p(port); struct omap8250_priv *priv = up->port.private_data; @@ -181,6 +185,20 @@ static void omap8250_set_mctrl(struct uart_port *port, unsigned int mctrl) } } +static void omap8250_set_mctrl(struct uart_port *port, unsigned int mctrl) +{ + int err; + + err = pm_runtime_resume_and_get(port->dev); + if (err) + return; + + __omap8250_set_mctrl(port, mctrl); + + pm_runtime_mark_last_busy(port->dev); + pm_runtime_put_autosuspend(port->dev); +} + /* * Work Around for Errata i202 (2430, 3430, 3630, 4430 and 4460) * The access to uart register after MDR1 Access @@ -193,27 +211,10 @@ static void omap8250_set_mctrl(struct uart_port *port, unsigned int mctrl) static void omap_8250_mdr1_errataset(struct uart_8250_port *up, struct omap8250_priv *priv) { - u8 timeout = 255; - serial_out(up, UART_OMAP_MDR1, priv->mdr1); udelay(2); serial_out(up, UART_FCR, up->fcr | UART_FCR_CLEAR_XMIT | UART_FCR_CLEAR_RCVR); - /* - * Wait for FIFO to empty: when empty, RX_FIFO_E bit is 0 and - * TX_FIFO_E bit is 1. - */ - while (UART_LSR_THRE != (serial_in(up, UART_LSR) & - (UART_LSR_THRE | UART_LSR_DR))) { - timeout--; - if (!timeout) { - /* Should *never* happen. we warn and carry on */ - dev_crit(up->port.dev, "Errata i202: timedout %x\n", - serial_in(up, UART_LSR)); - break; - } - udelay(1); - } } static void omap_8250_get_divisor(struct uart_port *port, unsigned int baud, @@ -292,6 +293,7 @@ static void omap8250_restore_regs(struct uart_8250_port *up) { struct omap8250_priv *priv = up->port.private_data; struct uart_8250_dma *dma = up->dma; + u8 mcr = serial8250_in_MCR(up); if (dma && dma->tx_running) { /* @@ -308,7 +310,7 @@ static void omap8250_restore_regs(struct uart_8250_port *up) serial_out(up, UART_EFR, UART_EFR_ECB); serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A); - serial8250_out_MCR(up, UART_MCR_TCRTLR); + serial8250_out_MCR(up, mcr | UART_MCR_TCRTLR); serial_out(up, UART_FCR, up->fcr); omap8250_update_scr(up, priv); @@ -324,7 +326,8 @@ static void omap8250_restore_regs(struct uart_8250_port *up) serial_out(up, UART_LCR, 0); /* drop TCR + TLR access, we setup XON/XOFF later */ - serial8250_out_MCR(up, up->mcr); + serial8250_out_MCR(up, mcr); + serial_out(up, UART_IER, up->ier); serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); @@ -341,7 +344,7 @@ static void omap8250_restore_regs(struct uart_8250_port *up) omap8250_update_mdr1(up, priv); - up->port.ops->set_mctrl(&up->port, up->port.mctrl); + __omap8250_set_mctrl(&up->port, up->port.mctrl); if (up->port.rs485.flags & SER_RS485_ENABLED) serial8250_em485_stop_tx(up); @@ -669,7 +672,6 @@ static int omap_8250_startup(struct uart_port *port) pm_runtime_get_sync(port->dev); - up->mcr = 0; serial_out(up, UART_FCR, UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT); serial_out(up, UART_LCR, UART_LCR_WLEN8); @@ -1458,9 +1460,15 @@ static int omap8250_probe(struct platform_device *pdev) static int omap8250_remove(struct platform_device *pdev) { struct omap8250_priv *priv = platform_get_drvdata(pdev); + int err; + + err = pm_runtime_resume_and_get(&pdev->dev); + if (err) + return err; pm_runtime_dont_use_autosuspend(&pdev->dev); pm_runtime_put_sync(&pdev->dev); + flush_work(&priv->qos_work); pm_runtime_disable(&pdev->dev); serial8250_unregister_port(priv->line); cpu_latency_qos_remove_request(&priv->pm_qos_request); diff --git a/drivers/tty/serial/8250/8250_gsc.c b/drivers/tty/serial/8250/8250_parisc.c similarity index 100% rename from drivers/tty/serial/8250/8250_gsc.c rename to drivers/tty/serial/8250/8250_parisc.c diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c index fe8662cd9402411ec4be7dd6f7e161ae4e7725bb..388172289627ad5c03fd376660e1b7090dac1256 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -1897,10 +1897,13 @@ EXPORT_SYMBOL_GPL(serial8250_modem_status); static bool handle_rx_dma(struct uart_8250_port *up, unsigned int iir) { switch (iir & 0x3f) { - case UART_IIR_RX_TIMEOUT: - serial8250_rx_dma_flush(up); + case UART_IIR_RDI: + if (!up->dma->rx_running) + break; fallthrough; case UART_IIR_RLSI: + case UART_IIR_RX_TIMEOUT: + serial8250_rx_dma_flush(up); return true; } return up->dma->rx_dma(up); diff --git a/drivers/tty/serial/8250/Kconfig b/drivers/tty/serial/8250/Kconfig index d0b49e15fbf5e7ee7aabf5ce025b4a133738c979..b0f62345bc846dcb98ffb3b511f1bdc9db9d816f 100644 --- a/drivers/tty/serial/8250/Kconfig +++ b/drivers/tty/serial/8250/Kconfig @@ -116,9 +116,9 @@ config SERIAL_8250_CONSOLE If unsure, say N. -config SERIAL_8250_GSC +config SERIAL_8250_PARISC tristate - depends on SERIAL_8250 && GSC + depends on SERIAL_8250 && PARISC default SERIAL_8250 config SERIAL_8250_DMA diff --git a/drivers/tty/serial/8250/Makefile b/drivers/tty/serial/8250/Makefile index bee908f99ea0e81877747d9b56d9ff6ef3d42472..1615bfdde2a077b93381e24101362c317ff11b99 100644 --- a/drivers/tty/serial/8250/Makefile +++ b/drivers/tty/serial/8250/Makefile @@ -12,7 +12,7 @@ obj-$(CONFIG_SERIAL_8250) += 8250.o 8250_base.o 8250_base-$(CONFIG_SERIAL_8250_DMA) += 8250_dma.o 8250_base-$(CONFIG_SERIAL_8250_DWLIB) += 8250_dwlib.o 8250_base-$(CONFIG_SERIAL_8250_FINTEK) += 8250_fintek.o -obj-$(CONFIG_SERIAL_8250_GSC) += 8250_gsc.o +obj-$(CONFIG_SERIAL_8250_PARISC) += 8250_parisc.o obj-$(CONFIG_SERIAL_8250_PCI) += 8250_pci.o obj-$(CONFIG_SERIAL_8250_EXAR) += 8250_exar.o obj-$(CONFIG_SERIAL_8250_HP300) += 8250_hp300.o diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c index 67fa113f77d475a621bc53bec3b33752abc0ad2a..888e01fbd9c5f82dff7b5bf0a841dea5d88c12fb 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -404,33 +405,6 @@ static unsigned int lpuart_get_baud_clk_rate(struct lpuart_port *sport) #define lpuart_enable_clks(x) __lpuart_enable_clks(x, true) #define lpuart_disable_clks(x) __lpuart_enable_clks(x, false) -static int lpuart_global_reset(struct lpuart_port *sport) -{ - struct uart_port *port = &sport->port; - void __iomem *global_addr; - int ret; - - if (uart_console(port)) - return 0; - - ret = clk_prepare_enable(sport->ipg_clk); - if (ret) { - dev_err(sport->port.dev, "failed to enable uart ipg clk: %d\n", ret); - return ret; - } - - if (is_imx7ulp_lpuart(sport) || is_imx8qxp_lpuart(sport)) { - global_addr = port->membase + UART_GLOBAL - IMX_REG_OFF; - writel(UART_GLOBAL_RST, global_addr); - usleep_range(GLOBAL_RST_MIN_US, GLOBAL_RST_MAX_US); - writel(0, global_addr); - usleep_range(GLOBAL_RST_MIN_US, GLOBAL_RST_MAX_US); - } - - clk_disable_unprepare(sport->ipg_clk); - return 0; -} - static void lpuart_stop_tx(struct uart_port *port) { unsigned char temp; @@ -2636,6 +2610,54 @@ static const struct serial_rs485 lpuart_rs485_supported = { /* delay_rts_* and RX_DURING_TX are not supported */ }; +static int lpuart_global_reset(struct lpuart_port *sport) +{ + struct uart_port *port = &sport->port; + void __iomem *global_addr; + unsigned long ctrl, bd; + unsigned int val = 0; + int ret; + + ret = clk_prepare_enable(sport->ipg_clk); + if (ret) { + dev_err(sport->port.dev, "failed to enable uart ipg clk: %d\n", ret); + return ret; + } + + if (is_imx7ulp_lpuart(sport) || is_imx8qxp_lpuart(sport)) { + /* + * If the transmitter is used by earlycon, wait for transmit engine to + * complete and then reset. + */ + ctrl = lpuart32_read(port, UARTCTRL); + if (ctrl & UARTCTRL_TE) { + bd = lpuart32_read(&sport->port, UARTBAUD); + if (read_poll_timeout(lpuart32_tx_empty, val, val, 1, 100000, false, + port)) { + dev_warn(sport->port.dev, + "timeout waiting for transmit engine to complete\n"); + clk_disable_unprepare(sport->ipg_clk); + return 0; + } + } + + global_addr = port->membase + UART_GLOBAL - IMX_REG_OFF; + writel(UART_GLOBAL_RST, global_addr); + usleep_range(GLOBAL_RST_MIN_US, GLOBAL_RST_MAX_US); + writel(0, global_addr); + usleep_range(GLOBAL_RST_MIN_US, GLOBAL_RST_MAX_US); + + /* Recover the transmitter for earlycon. */ + if (ctrl & UARTCTRL_TE) { + lpuart32_write(port, bd, UARTBAUD); + lpuart32_write(port, ctrl, UARTCTRL); + } + } + + clk_disable_unprepare(sport->ipg_clk); + return 0; +} + static int lpuart_probe(struct platform_device *pdev) { const struct lpuart_soc_data *sdata = of_device_get_match_data(&pdev->dev); diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c index 05b432dc7a85c79065efd53d1a2d6fe6bed27b6c..aadda66405b47d49f34366c9502f29dcbc8983c3 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c @@ -2594,6 +2594,7 @@ static const struct dev_pm_ops imx_uart_pm_ops = { .suspend_noirq = imx_uart_suspend_noirq, .resume_noirq = imx_uart_resume_noirq, .freeze_noirq = imx_uart_suspend_noirq, + .thaw_noirq = imx_uart_resume_noirq, .restore_noirq = imx_uart_resume_noirq, .suspend = imx_uart_suspend, .resume = imx_uart_resume, diff --git a/drivers/usb/cdns3/cdnsp-gadget.c b/drivers/usb/cdns3/cdnsp-gadget.c index c67715f6f756dba557c2151a8d7047b7b608690f..f9aa50ff14d42bfcdeed861f2e71d3581b5cf0e4 100644 --- a/drivers/usb/cdns3/cdnsp-gadget.c +++ b/drivers/usb/cdns3/cdnsp-gadget.c @@ -600,11 +600,11 @@ int cdnsp_halt_endpoint(struct cdnsp_device *pdev, trace_cdnsp_ep_halt(value ? "Set" : "Clear"); - if (value) { - ret = cdnsp_cmd_stop_ep(pdev, pep); - if (ret) - return ret; + ret = cdnsp_cmd_stop_ep(pdev, pep); + if (ret) + return ret; + if (value) { if (GET_EP_CTX_STATE(pep->out_ctx) == EP_STATE_STOPPED) { cdnsp_queue_halt_endpoint(pdev, pep->idx); cdnsp_ring_cmd_db(pdev); @@ -613,10 +613,6 @@ int cdnsp_halt_endpoint(struct cdnsp_device *pdev, pep->ep_state |= EP_HALTED; } else { - /* - * In device mode driver can call reset endpoint command - * from any endpoint state. - */ cdnsp_queue_reset_ep(pdev, pep->idx); cdnsp_ring_cmd_db(pdev); ret = cdnsp_wait_for_cmd_compl(pdev); diff --git a/drivers/usb/cdns3/cdnsp-ring.c b/drivers/usb/cdns3/cdnsp-ring.c index 794e413800ae8239ac8ce2d92de8ddb8c6620345..2f29431f612e04f7a755fc6f2e32b9b8f01b4730 100644 --- a/drivers/usb/cdns3/cdnsp-ring.c +++ b/drivers/usb/cdns3/cdnsp-ring.c @@ -1763,10 +1763,15 @@ static u32 cdnsp_td_remainder(struct cdnsp_device *pdev, int trb_buff_len, unsigned int td_total_len, struct cdnsp_request *preq, - bool more_trbs_coming) + bool more_trbs_coming, + bool zlp) { u32 maxp, total_packet_count; + /* Before ZLP driver needs set TD_SIZE = 1. */ + if (zlp) + return 1; + /* One TRB with a zero-length data packet. */ if (!more_trbs_coming || (transferred == 0 && trb_buff_len == 0) || trb_buff_len == td_total_len) @@ -1960,7 +1965,8 @@ int cdnsp_queue_bulk_tx(struct cdnsp_device *pdev, struct cdnsp_request *preq) /* Set the TRB length, TD size, and interrupter fields. */ remainder = cdnsp_td_remainder(pdev, enqd_len, trb_buff_len, full_len, preq, - more_trbs_coming); + more_trbs_coming, + zero_len_trb); length_field = TRB_LEN(trb_buff_len) | TRB_TD_SIZE(remainder) | TRB_INTR_TARGET(0); @@ -2025,7 +2031,7 @@ int cdnsp_queue_ctrl_tx(struct cdnsp_device *pdev, struct cdnsp_request *preq) if (preq->request.length > 0) { remainder = cdnsp_td_remainder(pdev, 0, preq->request.length, - preq->request.length, preq, 1); + preq->request.length, preq, 1, 0); length_field = TRB_LEN(preq->request.length) | TRB_TD_SIZE(remainder) | TRB_INTR_TARGET(0); @@ -2076,7 +2082,8 @@ int cdnsp_cmd_stop_ep(struct cdnsp_device *pdev, struct cdnsp_ep *pep) u32 ep_state = GET_EP_CTX_STATE(pep->out_ctx); int ret = 0; - if (ep_state == EP_STATE_STOPPED || ep_state == EP_STATE_DISABLED) { + if (ep_state == EP_STATE_STOPPED || ep_state == EP_STATE_DISABLED || + ep_state == EP_STATE_HALTED) { trace_cdnsp_ep_stopped_or_disabled(pep->out_ctx); goto ep_stopped; } @@ -2225,7 +2232,7 @@ static int cdnsp_queue_isoc_tx(struct cdnsp_device *pdev, /* Set the TRB length, TD size, & interrupter fields. */ remainder = cdnsp_td_remainder(pdev, running_total, trb_buff_len, td_len, preq, - more_trbs_coming); + more_trbs_coming, 0); length_field = TRB_LEN(trb_buff_len) | TRB_INTR_TARGET(0); diff --git a/drivers/usb/cdns3/host.c b/drivers/usb/cdns3/host.c index 9643b905e2d8b38da465ff48028d23274be0a0c5..6164fc4c96a49b60b73f772bdc92b8acf383269c 100644 --- a/drivers/usb/cdns3/host.c +++ b/drivers/usb/cdns3/host.c @@ -24,11 +24,37 @@ #define CFG_RXDET_P3_EN BIT(15) #define LPM_2_STB_SWITCH_EN BIT(25) -static int xhci_cdns3_suspend_quirk(struct usb_hcd *hcd); +static void xhci_cdns3_plat_start(struct usb_hcd *hcd) +{ + struct xhci_hcd *xhci = hcd_to_xhci(hcd); + u32 value; + + /* set usbcmd.EU3S */ + value = readl(&xhci->op_regs->command); + value |= CMD_PM_INDEX; + writel(value, &xhci->op_regs->command); + + if (hcd->regs) { + value = readl(hcd->regs + XECP_AUX_CTRL_REG1); + value |= CFG_RXDET_P3_EN; + writel(value, hcd->regs + XECP_AUX_CTRL_REG1); + + value = readl(hcd->regs + XECP_PORT_CAP_REG); + value |= LPM_2_STB_SWITCH_EN; + writel(value, hcd->regs + XECP_PORT_CAP_REG); + } +} + +static int xhci_cdns3_resume_quirk(struct usb_hcd *hcd) +{ + xhci_cdns3_plat_start(hcd); + return 0; +} static const struct xhci_plat_priv xhci_plat_cdns3_xhci = { .quirks = XHCI_SKIP_PHY_INIT | XHCI_AVOID_BEI, - .suspend_quirk = xhci_cdns3_suspend_quirk, + .plat_start = xhci_cdns3_plat_start, + .resume_quirk = xhci_cdns3_resume_quirk, }; static int __cdns_host_init(struct cdns *cdns) @@ -90,32 +116,6 @@ static int __cdns_host_init(struct cdns *cdns) return ret; } -static int xhci_cdns3_suspend_quirk(struct usb_hcd *hcd) -{ - struct xhci_hcd *xhci = hcd_to_xhci(hcd); - u32 value; - - if (pm_runtime_status_suspended(hcd->self.controller)) - return 0; - - /* set usbcmd.EU3S */ - value = readl(&xhci->op_regs->command); - value |= CMD_PM_INDEX; - writel(value, &xhci->op_regs->command); - - if (hcd->regs) { - value = readl(hcd->regs + XECP_AUX_CTRL_REG1); - value |= CFG_RXDET_P3_EN; - writel(value, hcd->regs + XECP_AUX_CTRL_REG1); - - value = readl(hcd->regs + XECP_PORT_CAP_REG); - value |= LPM_2_STB_SWITCH_EN; - writel(value, hcd->regs + XECP_PORT_CAP_REG); - } - - return 0; -} - static void cdns_host_exit(struct cdns *cdns) { kfree(cdns->xhci_plat_data); diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c index ada78daba6df9cd89a616aa30f72cfee2f3d58c1..c17516c29b63b8b4ab65aacc6e1d381e51ecfa2f 100644 --- a/drivers/usb/chipidea/otg_fsm.c +++ b/drivers/usb/chipidea/otg_fsm.c @@ -256,8 +256,10 @@ static void ci_otg_del_timer(struct ci_hdrc *ci, enum otg_fsm_timer t) ci->enabled_otg_timer_bits &= ~(1 << t); if (ci->next_otg_timer == t) { if (ci->enabled_otg_timer_bits == 0) { + spin_unlock_irqrestore(&ci->lock, flags); /* No enabled timers after delete it */ hrtimer_cancel(&ci->otg_fsm_hrtimer); + spin_lock_irqsave(&ci->lock, flags); ci->next_otg_timer = NUM_OTG_FSM_TIMERS; } else { /* Find the next timer */ diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index 0722d213130550a9fec9e3e39362a63042021ca9..079e183cf3bffba822c3ed0dba58ce05d3ca617a 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c @@ -362,6 +362,9 @@ static const struct usb_device_id usb_quirk_list[] = { { USB_DEVICE(0x0781, 0x5583), .driver_info = USB_QUIRK_NO_LPM }, { USB_DEVICE(0x0781, 0x5591), .driver_info = USB_QUIRK_NO_LPM }, + /* Realforce 87U Keyboard */ + { USB_DEVICE(0x0853, 0x011b), .driver_info = USB_QUIRK_NO_LPM }, + /* M-Systems Flash Disk Pioneers */ { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index c0e7c76dc5c8b7bfe7a30b727d57e3e6fc2ebd73..1f348bc867c22afa68da07e1a81419f97a7cdb57 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -1710,6 +1710,16 @@ static struct extcon_dev *dwc3_get_extcon(struct dwc3 *dwc) if (device_property_read_string(dev, "linux,extcon-name", &name) == 0) return extcon_get_extcon_dev(name); + /* + * Check explicitly if "usb-role-switch" is used since + * extcon_find_edev_by_node() can not be used to check the absence of + * an extcon device. In the absence of an device it will always return + * EPROBE_DEFER. + */ + if (IS_ENABLED(CONFIG_USB_ROLE_SWITCH) && + device_property_read_bool(dev, "usb-role-switch")) + return NULL; + /* * Try to get an extcon device from the USB PHY controller's "port" * node. Check if it has the "port" node first, to avoid printing the diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c index 0ecf20eeceee9ddb1bb0c26317062f743539fd80..4be6a873bd07166d1c3ed9bbe88f78417e8c0498 100644 --- a/drivers/usb/dwc3/dwc3-exynos.c +++ b/drivers/usb/dwc3/dwc3-exynos.c @@ -37,15 +37,6 @@ struct dwc3_exynos { struct regulator *vdd10; }; -static int dwc3_exynos_remove_child(struct device *dev, void *unused) -{ - struct platform_device *pdev = to_platform_device(dev); - - platform_device_unregister(pdev); - - return 0; -} - static int dwc3_exynos_probe(struct platform_device *pdev) { struct dwc3_exynos *exynos; @@ -142,7 +133,7 @@ static int dwc3_exynos_remove(struct platform_device *pdev) struct dwc3_exynos *exynos = platform_get_drvdata(pdev); int i; - device_for_each_child(&pdev->dev, NULL, dwc3_exynos_remove_child); + of_platform_depopulate(&pdev->dev); for (i = exynos->num_clks - 1; i >= 0; i--) clk_disable_unprepare(exynos->clks[i]); diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 5fe2d136dff51e32e59fe2b75bef0d6f1ad45bd4..6d524fa7644388ae7ef124f51b1f7a4e26963861 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -291,7 +291,8 @@ int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned int cmd, * * DWC_usb3 3.30a and DWC_usb31 1.90a programming guide section 3.2.2 */ - if (dwc->gadget->speed <= USB_SPEED_HIGH) { + if (dwc->gadget->speed <= USB_SPEED_HIGH || + DWC3_DEPCMD_CMD(cmd) == DWC3_DEPCMD_ENDTRANSFER) { reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0)); if (unlikely(reg & DWC3_GUSB2PHYCFG_SUSPHY)) { saved_config |= DWC3_GUSB2PHYCFG_SUSPHY; @@ -1023,13 +1024,7 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep) reg &= ~DWC3_DALEPENA_EP(dep->number); dwc3_writel(dwc->regs, DWC3_DALEPENA, reg); - /* Clear out the ep descriptors for non-ep0 */ - if (dep->number > 1) { - dep->endpoint.comp_desc = NULL; - dep->endpoint.desc = NULL; - } - - dwc3_remove_requests(dwc, dep, -ECONNRESET); + dwc3_remove_requests(dwc, dep, -ESHUTDOWN); dep->stream_capable = false; dep->type = 0; @@ -1043,6 +1038,12 @@ static int __dwc3_gadget_ep_disable(struct dwc3_ep *dep) mask |= (DWC3_EP_DELAY_STOP | DWC3_EP_TRANSFER_STARTED); dep->flags &= mask; + /* Clear out the ep descriptors for non-ep0 */ + if (dep->number > 1) { + dep->endpoint.comp_desc = NULL; + dep->endpoint.desc = NULL; + } + return 0; } diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c index a7154fe8206d147fdc00d3f6affbcb92b5772093..f6f13e7f1ba14a8457f32d03627ae183351cdf6b 100644 --- a/drivers/usb/dwc3/host.c +++ b/drivers/usb/dwc3/host.c @@ -11,13 +11,8 @@ #include #include -#include "../host/xhci-plat.h" #include "core.h" -static const struct xhci_plat_priv dwc3_xhci_plat_priv = { - .quirks = XHCI_SKIP_PHY_INIT, -}; - static void dwc3_host_fill_xhci_irq_res(struct dwc3 *dwc, int irq, char *name) { @@ -97,11 +92,6 @@ int dwc3_host_init(struct dwc3 *dwc) goto err; } - ret = platform_device_add_data(xhci, &dwc3_xhci_plat_priv, - sizeof(dwc3_xhci_plat_priv)); - if (ret) - goto err; - memset(props, 0, sizeof(struct property_entry) * ARRAY_SIZE(props)); if (dwc->usb3_lpm_capable) diff --git a/drivers/usb/gadget/function/uvc_v4l2.c b/drivers/usb/gadget/function/uvc_v4l2.c index c4ed48d6b8a407a744299d4a2c4b07e0495103aa..a189b08bba800dfa6ef951c01a89d8fed6cdb049 100644 --- a/drivers/usb/gadget/function/uvc_v4l2.c +++ b/drivers/usb/gadget/function/uvc_v4l2.c @@ -199,16 +199,6 @@ uvc_send_response(struct uvc_device *uvc, struct uvc_request_data *data) * V4L2 ioctls */ -struct uvc_format { - u8 bpp; - u32 fcc; -}; - -static struct uvc_format uvc_formats[] = { - { 16, V4L2_PIX_FMT_YUYV }, - { 0, V4L2_PIX_FMT_MJPEG }, -}; - static int uvc_v4l2_querycap(struct file *file, void *fh, struct v4l2_capability *cap) { @@ -242,47 +232,6 @@ uvc_v4l2_get_format(struct file *file, void *fh, struct v4l2_format *fmt) return 0; } -static int -uvc_v4l2_set_format(struct file *file, void *fh, struct v4l2_format *fmt) -{ - struct video_device *vdev = video_devdata(file); - struct uvc_device *uvc = video_get_drvdata(vdev); - struct uvc_video *video = &uvc->video; - struct uvc_format *format; - unsigned int imagesize; - unsigned int bpl; - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(uvc_formats); ++i) { - format = &uvc_formats[i]; - if (format->fcc == fmt->fmt.pix.pixelformat) - break; - } - - if (i == ARRAY_SIZE(uvc_formats)) { - uvcg_info(&uvc->func, "Unsupported format 0x%08x.\n", - fmt->fmt.pix.pixelformat); - return -EINVAL; - } - - bpl = format->bpp * fmt->fmt.pix.width / 8; - imagesize = bpl ? bpl * fmt->fmt.pix.height : fmt->fmt.pix.sizeimage; - - video->fcc = format->fcc; - video->bpp = format->bpp; - video->width = fmt->fmt.pix.width; - video->height = fmt->fmt.pix.height; - video->imagesize = imagesize; - - fmt->fmt.pix.field = V4L2_FIELD_NONE; - fmt->fmt.pix.bytesperline = bpl; - fmt->fmt.pix.sizeimage = imagesize; - fmt->fmt.pix.colorspace = V4L2_COLORSPACE_SRGB; - fmt->fmt.pix.priv = 0; - - return 0; -} - static int uvc_v4l2_try_format(struct file *file, void *fh, struct v4l2_format *fmt) { @@ -323,6 +272,27 @@ uvc_v4l2_try_format(struct file *file, void *fh, struct v4l2_format *fmt) return 0; } +static int +uvc_v4l2_set_format(struct file *file, void *fh, struct v4l2_format *fmt) +{ + struct video_device *vdev = video_devdata(file); + struct uvc_device *uvc = video_get_drvdata(vdev); + struct uvc_video *video = &uvc->video; + int ret; + + ret = uvc_v4l2_try_format(file, fh, fmt); + if (ret) + return ret; + + video->fcc = fmt->fmt.pix.pixelformat; + video->bpp = fmt->fmt.pix.bytesperline * 8 / video->width; + video->width = fmt->fmt.pix.width; + video->height = fmt->fmt.pix.height; + video->imagesize = fmt->fmt.pix.sizeimage; + + return ret; +} + static int uvc_v4l2_enum_frameintervals(struct file *file, void *fh, struct v4l2_frmivalenum *fival) diff --git a/drivers/usb/host/bcma-hcd.c b/drivers/usb/host/bcma-hcd.c index 2df52f75f6b3c7e0b947025660a051cda475ae48..7558cc4d90cc66bd23f9c17997b6cc5d3ca9bad9 100644 --- a/drivers/usb/host/bcma-hcd.c +++ b/drivers/usb/host/bcma-hcd.c @@ -285,7 +285,7 @@ static void bcma_hci_platform_power_gpio(struct bcma_device *dev, bool val) { struct bcma_hcd_device *usb_dev = bcma_get_drvdata(dev); - if (IS_ERR_OR_NULL(usb_dev->gpio_desc)) + if (!usb_dev->gpio_desc) return; gpiod_set_value(usb_dev->gpio_desc, val); @@ -406,9 +406,11 @@ static int bcma_hcd_probe(struct bcma_device *core) return -ENOMEM; usb_dev->core = core; - if (core->dev.of_node) - usb_dev->gpio_desc = devm_gpiod_get(&core->dev, "vcc", - GPIOD_OUT_HIGH); + usb_dev->gpio_desc = devm_gpiod_get_optional(&core->dev, "vcc", + GPIOD_OUT_HIGH); + if (IS_ERR(usb_dev->gpio_desc)) + return dev_err_probe(&core->dev, PTR_ERR(usb_dev->gpio_desc), + "error obtaining VCC GPIO"); switch (core->id.id) { case BCMA_CORE_USB20_HOST: diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 697683e3fbffaff030640e9124027459c04e6c73..c3b7f1d98e781fa0c39ed48d393db2467d39f704 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c @@ -162,6 +162,8 @@ static void option_instat_callback(struct urb *urb); #define NOVATELWIRELESS_PRODUCT_G2 0xA010 #define NOVATELWIRELESS_PRODUCT_MC551 0xB001 +#define UBLOX_VENDOR_ID 0x1546 + /* AMOI PRODUCTS */ #define AMOI_VENDOR_ID 0x1614 #define AMOI_PRODUCT_H01 0x0800 @@ -240,7 +242,6 @@ static void option_instat_callback(struct urb *urb); #define QUECTEL_PRODUCT_UC15 0x9090 /* These u-blox products use Qualcomm's vendor ID */ #define UBLOX_PRODUCT_R410M 0x90b2 -#define UBLOX_PRODUCT_R6XX 0x90fa /* These Yuga products use Qualcomm's vendor ID */ #define YUGA_PRODUCT_CLM920_NC5 0x9625 @@ -581,6 +582,9 @@ static void option_instat_callback(struct urb *urb); #define OPPO_VENDOR_ID 0x22d9 #define OPPO_PRODUCT_R11 0x276c +/* Sierra Wireless products */ +#define SIERRA_VENDOR_ID 0x1199 +#define SIERRA_PRODUCT_EM9191 0x90d3 /* Device flags */ @@ -1124,8 +1128,16 @@ static const struct usb_device_id option_ids[] = { /* u-blox products using Qualcomm vendor ID */ { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R410M), .driver_info = RSVD(1) | RSVD(3) }, - { USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R6XX), + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x908b), /* u-blox LARA-R6 00B */ + .driver_info = RSVD(4) }, + { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x90fa), .driver_info = RSVD(3) }, + /* u-blox products */ + { USB_DEVICE(UBLOX_VENDOR_ID, 0x1341) }, /* u-blox LARA-L6 */ + { USB_DEVICE(UBLOX_VENDOR_ID, 0x1342), /* u-blox LARA-L6 (RMNET) */ + .driver_info = RSVD(4) }, + { USB_DEVICE(UBLOX_VENDOR_ID, 0x1343), /* u-blox LARA-L6 (ECM) */ + .driver_info = RSVD(4) }, /* Quectel products using Quectel vendor ID */ { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21, 0xff, 0xff, 0xff), .driver_info = NUMEP2 }, @@ -2167,6 +2179,7 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x010a, 0xff) }, /* Fibocom MA510 (ECM mode) */ { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0xff, 0x30) }, /* Fibocom FG150 Diag */ { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0, 0) }, /* Fibocom FG150 AT */ + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0111, 0xff) }, /* Fibocom FM160 (MBIM mode) */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a2, 0xff) }, /* Fibocom FM101-GL (laptop MBIM) */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a4, 0xff), /* Fibocom FM101-GL (laptop MBIM) */ @@ -2176,6 +2189,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1405, 0xff) }, /* GosunCn GM500 MBIM */ { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1406, 0xff) }, /* GosunCn GM500 ECM/NCM */ { USB_DEVICE_AND_INTERFACE_INFO(OPPO_VENDOR_ID, OPPO_PRODUCT_R11, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0, 0) }, { } /* Terminating entry */ }; MODULE_DEVICE_TABLE(usb, option_ids); diff --git a/drivers/usb/typec/mux/intel_pmc_mux.c b/drivers/usb/typec/mux/intel_pmc_mux.c index e1f4df7238bf4d1b29c502814d07651daaa81ab1..fdbf3694e21f43dd41ced347ff176aec7499cff3 100644 --- a/drivers/usb/typec/mux/intel_pmc_mux.c +++ b/drivers/usb/typec/mux/intel_pmc_mux.c @@ -369,13 +369,24 @@ pmc_usb_mux_usb4(struct pmc_usb_port *port, struct typec_mux_state *state) return pmc_usb_command(port, (void *)&req, sizeof(req)); } -static int pmc_usb_mux_safe_state(struct pmc_usb_port *port) +static int pmc_usb_mux_safe_state(struct pmc_usb_port *port, + struct typec_mux_state *state) { u8 msg; if (IOM_PORT_ACTIVITY_IS(port->iom_status, SAFE_MODE)) return 0; + if ((IOM_PORT_ACTIVITY_IS(port->iom_status, DP) || + IOM_PORT_ACTIVITY_IS(port->iom_status, DP_MFD)) && + state->alt && state->alt->svid == USB_TYPEC_DP_SID) + return 0; + + if ((IOM_PORT_ACTIVITY_IS(port->iom_status, TBT) || + IOM_PORT_ACTIVITY_IS(port->iom_status, ALT_MODE_TBT_USB)) && + state->alt && state->alt->svid == USB_TYPEC_TBT_SID) + return 0; + msg = PMC_USB_SAFE_MODE; msg |= port->usb3_port << PMC_USB_MSG_USB3_PORT_SHIFT; @@ -443,7 +454,7 @@ pmc_usb_mux_set(struct typec_mux_dev *mux, struct typec_mux_state *state) return 0; if (state->mode == TYPEC_STATE_SAFE) - return pmc_usb_mux_safe_state(port); + return pmc_usb_mux_safe_state(port, state); if (state->mode == TYPEC_STATE_USB) return pmc_usb_connect(port, port->role); diff --git a/drivers/usb/typec/tipd/core.c b/drivers/usb/typec/tipd/core.c index b637e8b378b3a00210548d064b00715400a3562d..2a77bab948f54973ca846a3171badb01d256d87c 100644 --- a/drivers/usb/typec/tipd/core.c +++ b/drivers/usb/typec/tipd/core.c @@ -474,7 +474,7 @@ static void tps6598x_handle_plug_event(struct tps6598x *tps, u32 status) static irqreturn_t cd321x_interrupt(int irq, void *data) { struct tps6598x *tps = data; - u64 event; + u64 event = 0; u32 status; int ret; @@ -519,8 +519,8 @@ static irqreturn_t cd321x_interrupt(int irq, void *data) static irqreturn_t tps6598x_interrupt(int irq, void *data) { struct tps6598x *tps = data; - u64 event1; - u64 event2; + u64 event1 = 0; + u64 event2 = 0; u32 status; int ret; diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c index badc9d828cac201c3d2a0a9c28ebf971056c89c7..e030c2120183ef5c6bd4019ad50e5e6ac4f40a6c 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -2488,12 +2488,12 @@ static bool vfio_pci_dev_set_needs_reset(struct vfio_device_set *dev_set) struct vfio_pci_core_device *cur; bool needs_reset = false; - list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list) { - /* No VFIO device in the set can have an open device FD */ - if (cur->vdev.open_count) - return false; + /* No other VFIO device in the set can be open. */ + if (vfio_device_set_open_count(dev_set) > 1) + return false; + + list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list) needs_reset |= cur->needs_reset; - } return needs_reset; } diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c index 2d168793d4e1ce99b223c5b4c193e49476cf493c..6e8804fe00953d4fa7beaf1b503751302cefcafc 100644 --- a/drivers/vfio/vfio_main.c +++ b/drivers/vfio/vfio_main.c @@ -125,6 +125,19 @@ static void vfio_release_device_set(struct vfio_device *device) xa_unlock(&vfio_device_set_xa); } +unsigned int vfio_device_set_open_count(struct vfio_device_set *dev_set) +{ + struct vfio_device *cur; + unsigned int open_count = 0; + + lockdep_assert_held(&dev_set->lock); + + list_for_each_entry(cur, &dev_set->device_list, dev_set_list) + open_count += cur->open_count; + return open_count; +} +EXPORT_SYMBOL_GPL(vfio_device_set_open_count); + /* * Group objects - create, release, get, put, search */ @@ -801,8 +814,9 @@ static struct file *vfio_device_open(struct vfio_device *device) err_close_device: mutex_lock(&device->dev_set->lock); mutex_lock(&device->group->group_lock); - if (device->open_count == 1 && device->ops->close_device) { - device->ops->close_device(device); + if (device->open_count == 1) { + if (device->ops->close_device) + device->ops->close_device(device); vfio_device_container_unregister(device); } @@ -1017,10 +1031,12 @@ static int vfio_device_fops_release(struct inode *inode, struct file *filep) mutex_lock(&device->dev_set->lock); vfio_assert_device_open(device); mutex_lock(&device->group->group_lock); - if (device->open_count == 1 && device->ops->close_device) - device->ops->close_device(device); + if (device->open_count == 1) { + if (device->ops->close_device) + device->ops->close_device(device); - vfio_device_container_unregister(device); + vfio_device_container_unregister(device); + } mutex_unlock(&device->group->group_lock); device->open_count--; if (device->open_count == 0) diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index 098b62f7b701e5815c67994424550416418e98be..c0143d38df83a09946aa38bee9a019ebc7fcd4be 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -577,7 +577,7 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, if (scr_readw(r) != vc->vc_video_erase_char) break; if (r != q && new_rows >= rows + logo_lines) { - save = kmalloc(array3_size(logo_lines, new_cols, 2), + save = kzalloc(array3_size(logo_lines, new_cols, 2), GFP_KERNEL); if (save) { int i = min(cols, new_cols); diff --git a/drivers/virt/coco/sev-guest/sev-guest.c b/drivers/virt/coco/sev-guest/sev-guest.c index f422f9c58ba790c94957f4c38da4f8599fbc1e44..1ea6d2e5b218703236846e605b47d422653adfed 100644 --- a/drivers/virt/coco/sev-guest/sev-guest.c +++ b/drivers/virt/coco/sev-guest/sev-guest.c @@ -67,8 +67,27 @@ static bool is_vmpck_empty(struct snp_guest_dev *snp_dev) return true; } +/* + * If an error is received from the host or AMD Secure Processor (ASP) there + * are two options. Either retry the exact same encrypted request or discontinue + * using the VMPCK. + * + * This is because in the current encryption scheme GHCB v2 uses AES-GCM to + * encrypt the requests. The IV for this scheme is the sequence number. GCM + * cannot tolerate IV reuse. + * + * The ASP FW v1.51 only increments the sequence numbers on a successful + * guest<->ASP back and forth and only accepts messages at its exact sequence + * number. + * + * So if the sequence number were to be reused the encryption scheme is + * vulnerable. If the sequence number were incremented for a fresh IV the ASP + * will reject the request. + */ static void snp_disable_vmpck(struct snp_guest_dev *snp_dev) { + dev_alert(snp_dev->dev, "Disabling vmpck_id %d to prevent IV reuse.\n", + vmpck_id); memzero_explicit(snp_dev->vmpck, VMPCK_KEY_LEN); snp_dev->vmpck = NULL; } @@ -321,34 +340,71 @@ static int handle_guest_request(struct snp_guest_dev *snp_dev, u64 exit_code, in if (rc) return rc; - /* Call firmware to process the request */ + /* + * Call firmware to process the request. In this function the encrypted + * message enters shared memory with the host. So after this call the + * sequence number must be incremented or the VMPCK must be deleted to + * prevent reuse of the IV. + */ rc = snp_issue_guest_request(exit_code, &snp_dev->input, &err); + + /* + * If the extended guest request fails due to having too small of a + * certificate data buffer, retry the same guest request without the + * extended data request in order to increment the sequence number + * and thus avoid IV reuse. + */ + if (exit_code == SVM_VMGEXIT_EXT_GUEST_REQUEST && + err == SNP_GUEST_REQ_INVALID_LEN) { + const unsigned int certs_npages = snp_dev->input.data_npages; + + exit_code = SVM_VMGEXIT_GUEST_REQUEST; + + /* + * If this call to the firmware succeeds, the sequence number can + * be incremented allowing for continued use of the VMPCK. If + * there is an error reflected in the return value, this value + * is checked further down and the result will be the deletion + * of the VMPCK and the error code being propagated back to the + * user as an ioctl() return code. + */ + rc = snp_issue_guest_request(exit_code, &snp_dev->input, &err); + + /* + * Override the error to inform callers the given extended + * request buffer size was too small and give the caller the + * required buffer size. + */ + err = SNP_GUEST_REQ_INVALID_LEN; + snp_dev->input.data_npages = certs_npages; + } + if (fw_err) *fw_err = err; - if (rc) - return rc; + if (rc) { + dev_alert(snp_dev->dev, + "Detected error from ASP request. rc: %d, fw_err: %llu\n", + rc, *fw_err); + goto disable_vmpck; + } - /* - * The verify_and_dec_payload() will fail only if the hypervisor is - * actively modifying the message header or corrupting the encrypted payload. - * This hints that hypervisor is acting in a bad faith. Disable the VMPCK so that - * the key cannot be used for any communication. The key is disabled to ensure - * that AES-GCM does not use the same IV while encrypting the request payload. - */ rc = verify_and_dec_payload(snp_dev, resp_buf, resp_sz); if (rc) { dev_alert(snp_dev->dev, - "Detected unexpected decode failure, disabling the vmpck_id %d\n", - vmpck_id); - snp_disable_vmpck(snp_dev); - return rc; + "Detected unexpected decode failure from ASP. rc: %d\n", + rc); + goto disable_vmpck; } /* Increment to new message sequence after payload decryption was successful. */ snp_inc_msg_seqno(snp_dev); return 0; + +disable_vmpck: + snp_disable_vmpck(snp_dev); + return rc; } static int get_report(struct snp_guest_dev *snp_dev, struct snp_guest_request_ioctl *arg) diff --git a/drivers/watchdog/exar_wdt.c b/drivers/watchdog/exar_wdt.c index 35058d8b21bc71334822bd9491b0a9f327835a53..7c61ff3432711623aa4f6992f41c94f2664a5372 100644 --- a/drivers/watchdog/exar_wdt.c +++ b/drivers/watchdog/exar_wdt.c @@ -355,8 +355,10 @@ static int __init exar_wdt_register(struct wdt_priv *priv, const int idx) &priv->wdt_res, 1, priv, sizeof(*priv)); if (IS_ERR(n->pdev)) { + int err = PTR_ERR(n->pdev); + kfree(n); - return PTR_ERR(n->pdev); + return err; } list_add_tail(&n->list, &pdev_list); diff --git a/drivers/watchdog/sp805_wdt.c b/drivers/watchdog/sp805_wdt.c index 78ba36689eeca8ffd30d2ec00ba7dcb46ac7fefa..2756ed54ca3d55c2d4d25b9b9828101d73244e86 100644 --- a/drivers/watchdog/sp805_wdt.c +++ b/drivers/watchdog/sp805_wdt.c @@ -88,7 +88,7 @@ static bool wdt_is_running(struct watchdog_device *wdd) return (wdtcontrol & ENABLE_MASK) == ENABLE_MASK; } -/* This routine finds load value that will reset system in required timout */ +/* This routine finds load value that will reset system in required timeout */ static int wdt_setload(struct watchdog_device *wdd, unsigned int timeout) { struct sp805_wdt *wdt = watchdog_get_drvdata(wdd); diff --git a/drivers/xen/pcpu.c b/drivers/xen/pcpu.c index 47aa3a1ccaf5746a9a7eae7f1f8ab82d2065e33c..fd3a644b0855992944671897efcf8dba241d2985 100644 --- a/drivers/xen/pcpu.c +++ b/drivers/xen/pcpu.c @@ -228,7 +228,7 @@ static int register_pcpu(struct pcpu *pcpu) err = device_register(dev); if (err) { - pcpu_release(dev); + put_device(dev); return err; } diff --git a/drivers/xen/platform-pci.c b/drivers/xen/platform-pci.c index 18f0ed8b1f93b8fab25824162f86bac9beb2d781..cd07e3fed0faf6136f22c8702d9b450bbe7026ce 100644 --- a/drivers/xen/platform-pci.c +++ b/drivers/xen/platform-pci.c @@ -54,7 +54,8 @@ static uint64_t get_callback_via(struct pci_dev *pdev) pin = pdev->pin; /* We don't know the GSI. Specify the PCI INTx line instead. */ - return ((uint64_t)0x01 << HVM_CALLBACK_VIA_TYPE_SHIFT) | /* PCI INTx identifier */ + return ((uint64_t)HVM_PARAM_CALLBACK_TYPE_PCI_INTX << + HVM_CALLBACK_VIA_TYPE_SHIFT) | ((uint64_t)pci_domain_nr(pdev->bus) << 32) | ((uint64_t)pdev->bus->number << 16) | ((uint64_t)(pdev->devfn & 0xff) << 8) | @@ -144,7 +145,7 @@ static int platform_pci_probe(struct pci_dev *pdev, if (ret) { dev_warn(&pdev->dev, "Unable to set the evtchn callback " "err=%d\n", ret); - goto out; + goto irq_out; } } @@ -152,13 +153,16 @@ static int platform_pci_probe(struct pci_dev *pdev, grant_frames = alloc_xen_mmio(PAGE_SIZE * max_nr_gframes); ret = gnttab_setup_auto_xlat_frames(grant_frames); if (ret) - goto out; + goto irq_out; ret = gnttab_init(); if (ret) goto grant_out; return 0; grant_out: gnttab_free_auto_xlat_frames(); +irq_out: + if (!xen_have_vector_callback) + free_irq(pdev->irq, pdev); out: pci_release_region(pdev, 0); mem_out: diff --git a/drivers/xen/xen-pciback/conf_space_capability.c b/drivers/xen/xen-pciback/conf_space_capability.c index 5e53b4817f16796bec96c67a4af63b97bc9c97cc..097316a741268b6da10d2024303ac7b4ceae8490 100644 --- a/drivers/xen/xen-pciback/conf_space_capability.c +++ b/drivers/xen/xen-pciback/conf_space_capability.c @@ -190,13 +190,16 @@ static const struct config_field caplist_pm[] = { }; static struct msi_msix_field_config { - u16 enable_bit; /* bit for enabling MSI/MSI-X */ - unsigned int int_type; /* interrupt type for exclusiveness check */ + u16 enable_bit; /* bit for enabling MSI/MSI-X */ + u16 allowed_bits; /* bits allowed to be changed */ + unsigned int int_type; /* interrupt type for exclusiveness check */ } msi_field_config = { .enable_bit = PCI_MSI_FLAGS_ENABLE, + .allowed_bits = PCI_MSI_FLAGS_ENABLE, .int_type = INTERRUPT_TYPE_MSI, }, msix_field_config = { .enable_bit = PCI_MSIX_FLAGS_ENABLE, + .allowed_bits = PCI_MSIX_FLAGS_ENABLE | PCI_MSIX_FLAGS_MASKALL, .int_type = INTERRUPT_TYPE_MSIX, }; @@ -229,7 +232,7 @@ static int msi_msix_flags_write(struct pci_dev *dev, int offset, u16 new_value, return 0; if (!dev_data->allow_interrupt_control || - (new_value ^ old_value) & ~field_config->enable_bit) + (new_value ^ old_value) & ~field_config->allowed_bits) return PCIBIOS_SET_FAILED; if (new_value & field_config->enable_bit) { diff --git a/fs/afs/fs_probe.c b/fs/afs/fs_probe.c index c0031a3ab42f5a921fe94feb7440d4bc1030fac4..3ac5fcf98d0d65b5c701ea2c255f8b36cf140181 100644 --- a/fs/afs/fs_probe.c +++ b/fs/afs/fs_probe.c @@ -167,8 +167,8 @@ void afs_fileserver_probe_result(struct afs_call *call) clear_bit(AFS_SERVER_FL_HAS_FS64, &server->flags); } - if (rxrpc_kernel_get_srtt(call->net->socket, call->rxcall, &rtt_us) && - rtt_us < server->probe.rtt) { + rxrpc_kernel_get_srtt(call->net->socket, call->rxcall, &rtt_us); + if (rtt_us < server->probe.rtt) { server->probe.rtt = rtt_us; server->rtt = rtt_us; alist->preferred = index; diff --git a/fs/afs/server.c b/fs/afs/server.c index 4981baf97835cb870a6abfb854b7d9a9122e4eba..b5237206eac3e925e1e22c4ba84d787fcf2e5321 100644 --- a/fs/afs/server.c +++ b/fs/afs/server.c @@ -406,7 +406,7 @@ void afs_put_server(struct afs_net *net, struct afs_server *server, if (!server) return; - a = atomic_inc_return(&server->active); + a = atomic_read(&server->active); zero = __refcount_dec_and_test(&server->ref, &r); trace_afs_server(debug_id, r - 1, a, reason); if (unlikely(zero)) diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c index 4ec18ceb2f21d9be8dd0810399670ffb879a9b2d..18374a6d05bdf59eae039c9d9c378b11ca9fad53 100644 --- a/fs/btrfs/backref.c +++ b/fs/btrfs/backref.c @@ -289,8 +289,10 @@ static void prelim_release(struct preftree *preftree) struct prelim_ref *ref, *next_ref; rbtree_postorder_for_each_entry_safe(ref, next_ref, - &preftree->root.rb_root, rbnode) + &preftree->root.rb_root, rbnode) { + free_inode_elem_list(ref->inode_list); free_pref(ref); + } preftree->root = RB_ROOT_CACHED; preftree->count = 0; @@ -648,6 +650,18 @@ unode_aux_to_inode_list(struct ulist_node *node) return (struct extent_inode_elem *)(uintptr_t)node->aux; } +static void free_leaf_list(struct ulist *ulist) +{ + struct ulist_node *node; + struct ulist_iterator uiter; + + ULIST_ITER_INIT(&uiter); + while ((node = ulist_next(ulist, &uiter))) + free_inode_elem_list(unode_aux_to_inode_list(node)); + + ulist_free(ulist); +} + /* * We maintain three separate rbtrees: one for direct refs, one for * indirect refs which have a key, and one for indirect refs which do not @@ -762,7 +776,11 @@ static int resolve_indirect_refs(struct btrfs_fs_info *fs_info, cond_resched(); } out: - ulist_free(parents); + /* + * We may have inode lists attached to refs in the parents ulist, so we + * must free them before freeing the ulist and its refs. + */ + free_leaf_list(parents); return ret; } @@ -1368,6 +1386,12 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans, if (ret < 0) goto out; ref->inode_list = eie; + /* + * We transferred the list ownership to the ref, + * so set to NULL to avoid a double free in case + * an error happens after this. + */ + eie = NULL; } ret = ulist_add_merge_ptr(refs, ref->parent, ref->inode_list, @@ -1393,6 +1417,14 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans, eie->next = ref->inode_list; } eie = NULL; + /* + * We have transferred the inode list ownership from + * this ref to the ref we added to the 'refs' ulist. + * So set this ref's inode list to NULL to avoid + * use-after-free when our caller uses it or double + * frees in case an error happens before we return. + */ + ref->inode_list = NULL; } cond_resched(); } @@ -1409,24 +1441,6 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans, return ret; } -static void free_leaf_list(struct ulist *blocks) -{ - struct ulist_node *node = NULL; - struct extent_inode_elem *eie; - struct ulist_iterator uiter; - - ULIST_ITER_INIT(&uiter); - while ((node = ulist_next(blocks, &uiter))) { - if (!node->aux) - continue; - eie = unode_aux_to_inode_list(node); - free_inode_elem_list(eie); - node->aux = 0; - } - - ulist_free(blocks); -} - /* * Finds all leafs with a reference to the specified combination of bytenr and * offset. key_list_head will point to a list of corresponding keys (caller must diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c index f1f051ad31474c738bd430ef7db662c398353afb..e6635fe7006789cfac33fabfec8cb8f7468687c2 100644 --- a/fs/btrfs/compression.c +++ b/fs/btrfs/compression.c @@ -512,7 +512,7 @@ static u64 bio_end_offset(struct bio *bio) static noinline int add_ra_bio_pages(struct inode *inode, u64 compressed_end, struct compressed_bio *cb, - unsigned long *pflags) + int *memstall, unsigned long *pflags) { struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); unsigned long end_index; @@ -581,8 +581,10 @@ static noinline int add_ra_bio_pages(struct inode *inode, continue; } - if (PageWorkingset(page)) + if (!*memstall && PageWorkingset(page)) { psi_memstall_enter(pflags); + *memstall = 1; + } ret = set_page_extent_mapped(page); if (ret < 0) { @@ -670,8 +672,8 @@ void btrfs_submit_compressed_read(struct inode *inode, struct bio *bio, u64 em_len; u64 em_start; struct extent_map *em; - /* Initialize to 1 to make skip psi_memstall_leave unless needed */ - unsigned long pflags = 1; + unsigned long pflags; + int memstall = 0; blk_status_t ret; int ret2; int i; @@ -727,7 +729,7 @@ void btrfs_submit_compressed_read(struct inode *inode, struct bio *bio, goto fail; } - add_ra_bio_pages(inode, em_start + em_len, cb, &pflags); + add_ra_bio_pages(inode, em_start + em_len, cb, &memstall, &pflags); /* include any pages we added in add_ra-bio_pages */ cb->len = bio->bi_iter.bi_size; @@ -807,7 +809,7 @@ void btrfs_submit_compressed_read(struct inode *inode, struct bio *bio, } } - if (!pflags) + if (memstall) psi_memstall_leave(&pflags); if (refcount_dec_and_test(&cb->pending_ios)) diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index b39b339fbf96ce31f4c3e858e8aef52710b6fd72..dcb510f38dda045b9951de1ad2eadd418c3aa948 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -113,6 +113,22 @@ noinline void btrfs_release_path(struct btrfs_path *p) } } +/* + * We want the transaction abort to print stack trace only for errors where the + * cause could be a bug, eg. due to ENOSPC, and not for common errors that are + * caused by external factors. + */ +bool __cold abort_should_print_stack(int errno) +{ + switch (errno) { + case -EIO: + case -EROFS: + case -ENOMEM: + return false; + } + return true; +} + /* * safely gets a reference on the root node of a tree. A lock * is not taken, so a concurrent writer may put a different node @@ -4647,7 +4663,12 @@ int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, int ret; int i; - ASSERT(!path->nowait); + /* + * The nowait semantics are used only for write paths, where we don't + * use the tree mod log and sequence numbers. + */ + if (time_seq) + ASSERT(!path->nowait); nritems = btrfs_header_nritems(path->nodes[0]); if (nritems == 0) @@ -4667,7 +4688,14 @@ int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, if (path->need_commit_sem) { path->need_commit_sem = 0; need_commit_sem = true; - down_read(&fs_info->commit_root_sem); + if (path->nowait) { + if (!down_read_trylock(&fs_info->commit_root_sem)) { + ret = -EAGAIN; + goto done; + } + } else { + down_read(&fs_info->commit_root_sem); + } } ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); } @@ -4743,7 +4771,7 @@ int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, next = c; ret = read_block_for_search(root, path, &next, level, slot, &key); - if (ret == -EAGAIN) + if (ret == -EAGAIN && !path->nowait) goto again; if (ret < 0) { @@ -4753,6 +4781,10 @@ int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, if (!path->skip_locking) { ret = btrfs_try_tree_read_lock(next); + if (!ret && path->nowait) { + ret = -EAGAIN; + goto done; + } if (!ret && time_seq) { /* * If we don't get the lock, we may be racing @@ -4783,7 +4815,7 @@ int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, ret = read_block_for_search(root, path, &next, level, 0, &key); - if (ret == -EAGAIN) + if (ret == -EAGAIN && !path->nowait) goto again; if (ret < 0) { @@ -4791,8 +4823,16 @@ int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, goto done; } - if (!path->skip_locking) - btrfs_tree_read_lock(next); + if (!path->skip_locking) { + if (path->nowait) { + if (!btrfs_try_tree_read_lock(next)) { + ret = -EAGAIN; + goto done; + } + } else { + btrfs_tree_read_lock(next); + } + } } ret = 0; done: diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 727595eee9732c0f240c62a5b6cdd66d4f0a04dd..9e6d48ff4597212f1a30c8b28f8a82116d949616 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -3462,7 +3462,10 @@ ssize_t btrfs_encoded_read(struct kiocb *iocb, struct iov_iter *iter, ssize_t btrfs_do_encoded_write(struct kiocb *iocb, struct iov_iter *from, const struct btrfs_ioctl_encoded_io_args *encoded); -ssize_t btrfs_dio_rw(struct kiocb *iocb, struct iov_iter *iter, size_t done_before); +ssize_t btrfs_dio_read(struct kiocb *iocb, struct iov_iter *iter, + size_t done_before); +struct iomap_dio *btrfs_dio_write(struct kiocb *iocb, struct iov_iter *iter, + size_t done_before); extern const struct dentry_operations btrfs_dentry_operations; @@ -3793,9 +3796,11 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans, const char *function, unsigned int line, int errno, bool first_hit); +bool __cold abort_should_print_stack(int errno); + /* * Call btrfs_abort_transaction as early as possible when an error condition is - * detected, that way the exact line number is reported. + * detected, that way the exact stack trace is reported for some errors. */ #define btrfs_abort_transaction(trans, errno) \ do { \ @@ -3804,10 +3809,11 @@ do { \ if (!test_and_set_bit(BTRFS_FS_STATE_TRANS_ABORTED, \ &((trans)->fs_info->fs_state))) { \ first = true; \ - if ((errno) != -EIO && (errno) != -EROFS) { \ - WARN(1, KERN_DEBUG \ + if (WARN(abort_should_print_stack(errno), \ + KERN_DEBUG \ "BTRFS: Transaction aborted (error %d)\n", \ - (errno)); \ + (errno))) { \ + /* Stack trace printed. */ \ } else { \ btrfs_debug((trans)->fs_info, \ "Transaction aborted (error %d)", \ diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index a2da9313c6947c5111c38d2eaa73f14bf5075e9f..d99bf7c6461108bbb995f625045964bacc1a0234 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -166,11 +166,9 @@ static bool btrfs_supported_super_csum(u16 csum_type) * Return 0 if the superblock checksum type matches the checksum value of that * algorithm. Pass the raw disk superblock data. */ -static int btrfs_check_super_csum(struct btrfs_fs_info *fs_info, - char *raw_disk_sb) +int btrfs_check_super_csum(struct btrfs_fs_info *fs_info, + const struct btrfs_super_block *disk_sb) { - struct btrfs_super_block *disk_sb = - (struct btrfs_super_block *)raw_disk_sb; char result[BTRFS_CSUM_SIZE]; SHASH_DESC_ON_STACK(shash, fs_info->csum_shash); @@ -181,7 +179,7 @@ static int btrfs_check_super_csum(struct btrfs_fs_info *fs_info, * BTRFS_SUPER_INFO_SIZE range, we expect that the unused space is * filled with zeros and is included in the checksum. */ - crypto_shash_digest(shash, raw_disk_sb + BTRFS_CSUM_SIZE, + crypto_shash_digest(shash, (const u8 *)disk_sb + BTRFS_CSUM_SIZE, BTRFS_SUPER_INFO_SIZE - BTRFS_CSUM_SIZE, result); if (memcmp(disk_sb->csum, result, fs_info->csum_size)) @@ -2553,7 +2551,9 @@ static int btrfs_read_roots(struct btrfs_fs_info *fs_info) fs_info->dev_root = root; } /* Initialize fs_info for all devices in any case */ - btrfs_init_devices_late(fs_info); + ret = btrfs_init_devices_late(fs_info); + if (ret) + goto out; /* * This tree can share blocks with some other fs tree during relocation @@ -3479,7 +3479,7 @@ int __cold open_ctree(struct super_block *sb, struct btrfs_fs_devices *fs_device * We want to check superblock checksum, the type is stored inside. * Pass the whole disk block of size BTRFS_SUPER_INFO_SIZE (4k). */ - if (btrfs_check_super_csum(fs_info, (u8 *)disk_super)) { + if (btrfs_check_super_csum(fs_info, disk_super)) { btrfs_err(fs_info, "superblock checksum mismatch"); err = -EINVAL; btrfs_release_disk_super(disk_super); diff --git a/fs/btrfs/disk-io.h b/fs/btrfs/disk-io.h index c67c15d4d20be0a5f52843821a138bf58ad01f2a..9fa923e005a3a9bac07b0b02eb9aa736270305cb 100644 --- a/fs/btrfs/disk-io.h +++ b/fs/btrfs/disk-io.h @@ -42,6 +42,8 @@ struct extent_buffer *btrfs_find_create_tree_block( void btrfs_clean_tree_block(struct extent_buffer *buf); void btrfs_clear_oneshot_options(struct btrfs_fs_info *fs_info); int btrfs_start_pre_rw_mount(struct btrfs_fs_info *fs_info); +int btrfs_check_super_csum(struct btrfs_fs_info *fs_info, + const struct btrfs_super_block *disk_sb); int __cold open_ctree(struct super_block *sb, struct btrfs_fs_devices *fs_devices, char *options); diff --git a/fs/btrfs/export.c b/fs/btrfs/export.c index 1d4c2397d0d62c21889286d457885a04559e7736..fab7eb76e53b2a3e9b3f2508f4b7aa2ef9077c2f 100644 --- a/fs/btrfs/export.c +++ b/fs/btrfs/export.c @@ -58,7 +58,7 @@ static int btrfs_encode_fh(struct inode *inode, u32 *fh, int *max_len, } struct dentry *btrfs_get_dentry(struct super_block *sb, u64 objectid, - u64 root_objectid, u32 generation, + u64 root_objectid, u64 generation, int check_generation) { struct btrfs_fs_info *fs_info = btrfs_sb(sb); diff --git a/fs/btrfs/export.h b/fs/btrfs/export.h index f32f4113c976a95a072a65e558810ebc561a2a51..5afb7ca428289da24296b8e207ed67613fa691b0 100644 --- a/fs/btrfs/export.h +++ b/fs/btrfs/export.h @@ -19,7 +19,7 @@ struct btrfs_fid { } __attribute__ ((packed)); struct dentry *btrfs_get_dentry(struct super_block *sb, u64 objectid, - u64 root_objectid, u32 generation, + u64 root_objectid, u64 generation, int check_generation); struct dentry *btrfs_get_parent(struct dentry *child); diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index cd2d36580f1ac169fa0724ba2db732f03bfcfe5d..2801c991814f573e33977c17eb32205852eb2192 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -3295,21 +3295,22 @@ void btrfs_free_tree_block(struct btrfs_trans_handle *trans, } /* - * If this is a leaf and there are tree mod log users, we may - * have recorded mod log operations that point to this leaf. - * So we must make sure no one reuses this leaf's extent before - * mod log operations are applied to a node, otherwise after - * rewinding a node using the mod log operations we get an - * inconsistent btree, as the leaf's extent may now be used as - * a node or leaf for another different btree. + * If there are tree mod log users we may have recorded mod log + * operations for this node. If we re-allocate this node we + * could replay operations on this node that happened when it + * existed in a completely different root. For example if it + * was part of root A, then was reallocated to root B, and we + * are doing a btrfs_old_search_slot(root b), we could replay + * operations that happened when the block was part of root A, + * giving us an inconsistent view of the btree. + * * We are safe from races here because at this point no other * node or root points to this extent buffer, so if after this - * check a new tree mod log user joins, it will not be able to - * find a node pointing to this leaf and record operations that - * point to this leaf. + * check a new tree mod log user joins we will not have an + * existing log of operations on this node that we have to + * contend with. */ - if (btrfs_header_level(buf) == 0 && - test_bit(BTRFS_FS_TREE_MOD_LOG_USERS, &fs_info->flags)) + if (test_bit(BTRFS_FS_TREE_MOD_LOG_USERS, &fs_info->flags)) must_pin = true; if (must_pin || btrfs_is_zoned(fs_info)) { diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 176b432035aeaaa3f543b899b246e56dee11e7f3..d01631d478067e788264a6bc3dcc8a3e94302748 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -1598,14 +1598,19 @@ static noinline ssize_t btrfs_buffered_write(struct kiocb *iocb, write_bytes); else btrfs_check_nocow_unlock(BTRFS_I(inode)); + + if (nowait && ret == -ENOSPC) + ret = -EAGAIN; break; } release_bytes = reserve_bytes; again: ret = balance_dirty_pages_ratelimited_flags(inode->i_mapping, bdp_flags); - if (ret) + if (ret) { + btrfs_delalloc_release_extents(BTRFS_I(inode), reserve_bytes); break; + } /* * This is going to setup the pages array with the number of @@ -1765,6 +1770,7 @@ static ssize_t btrfs_direct_write(struct kiocb *iocb, struct iov_iter *from) loff_t endbyte; ssize_t err; unsigned int ilock_flags = 0; + struct iomap_dio *dio; if (iocb->ki_flags & IOCB_NOWAIT) ilock_flags |= BTRFS_ILOCK_TRY; @@ -1825,11 +1831,22 @@ static ssize_t btrfs_direct_write(struct kiocb *iocb, struct iov_iter *from) * So here we disable page faults in the iov_iter and then retry if we * got -EFAULT, faulting in the pages before the retry. */ -again: from->nofault = true; - err = btrfs_dio_rw(iocb, from, written); + dio = btrfs_dio_write(iocb, from, written); from->nofault = false; + /* + * iomap_dio_complete() will call btrfs_sync_file() if we have a dsync + * iocb, and that needs to lock the inode. So unlock it before calling + * iomap_dio_complete() to avoid a deadlock. + */ + btrfs_inode_unlock(inode, ilock_flags); + + if (IS_ERR_OR_NULL(dio)) + err = PTR_ERR_OR_ZERO(dio); + else + err = iomap_dio_complete(dio); + /* No increment (+=) because iomap returns a cumulative value. */ if (err > 0) written = err; @@ -1855,12 +1872,10 @@ static ssize_t btrfs_direct_write(struct kiocb *iocb, struct iov_iter *from) } else { fault_in_iov_iter_readable(from, left); prev_left = left; - goto again; + goto relock; } } - btrfs_inode_unlock(inode, ilock_flags); - /* * If 'err' is -ENOTBLK or we have not written all data, then it means * we must fallback to buffered IO. @@ -4035,7 +4050,7 @@ static ssize_t btrfs_direct_read(struct kiocb *iocb, struct iov_iter *to) */ pagefault_disable(); to->nofault = true; - ret = btrfs_dio_rw(iocb, to, read); + ret = btrfs_dio_read(iocb, to, read); to->nofault = false; pagefault_enable(); diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index b0807c59e32107087998fc7a59450bcffcb1c3fe..0e516aefbf51b8c31ed7e3fa6c56a8ac179c41eb 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -7980,7 +7980,7 @@ static void btrfs_submit_direct(const struct iomap_iter *iter, */ status = BLK_STS_RESOURCE; dip->csums = kcalloc(nr_sectors, fs_info->csum_size, GFP_NOFS); - if (!dip) + if (!dip->csums) goto out_err; status = btrfs_lookup_bio_sums(inode, dio_bio, dip->csums); @@ -8078,13 +8078,21 @@ static const struct iomap_dio_ops btrfs_dio_ops = { .bio_set = &btrfs_dio_bioset, }; -ssize_t btrfs_dio_rw(struct kiocb *iocb, struct iov_iter *iter, size_t done_before) +ssize_t btrfs_dio_read(struct kiocb *iocb, struct iov_iter *iter, size_t done_before) { struct btrfs_dio_data data; return iomap_dio_rw(iocb, iter, &btrfs_dio_iomap_ops, &btrfs_dio_ops, - IOMAP_DIO_PARTIAL | IOMAP_DIO_NOSYNC, - &data, done_before); + IOMAP_DIO_PARTIAL, &data, done_before); +} + +struct iomap_dio *btrfs_dio_write(struct kiocb *iocb, struct iov_iter *iter, + size_t done_before) +{ + struct btrfs_dio_data data; + + return __iomap_dio_rw(iocb, iter, &btrfs_dio_iomap_ops, &btrfs_dio_ops, + IOMAP_DIO_PARTIAL, &data, done_before); } static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index d5dd8bed1488a807d9ec4e5bb0834b8b6c0b4f1e..5ba2e810dc6e0eb07180fa34a8db0cdb0d75f78d 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -3105,6 +3105,8 @@ static int btrfs_ioctl_get_subvol_info(struct inode *inode, void __user *argp) } } + btrfs_free_path(path); + path = NULL; if (copy_to_user(argp, subvol_info, sizeof(*subvol_info))) ret = -EFAULT; @@ -3194,6 +3196,8 @@ static int btrfs_ioctl_get_subvol_rootref(struct btrfs_root *root, } out: + btrfs_free_path(path); + if (!ret || ret == -EOVERFLOW) { rootrefs->num_items = found; /* update min_treeid for next search */ @@ -3205,7 +3209,6 @@ static int btrfs_ioctl_get_subvol_rootref(struct btrfs_root *root, } kfree(rootrefs); - btrfs_free_path(path); return ret; } @@ -4231,6 +4234,8 @@ static long btrfs_ioctl_ino_to_path(struct btrfs_root *root, void __user *arg) ipath->fspath->val[i] = rel_ptr; } + btrfs_free_path(path); + path = NULL; ret = copy_to_user((void __user *)(unsigned long)ipa->fspath, ipath->fspath, size); if (ret) { @@ -4281,21 +4286,20 @@ static long btrfs_ioctl_logical_to_ino(struct btrfs_fs_info *fs_info, size = min_t(u32, loi->size, SZ_16M); } - path = btrfs_alloc_path(); - if (!path) { - ret = -ENOMEM; - goto out; - } - inodes = init_data_container(size); if (IS_ERR(inodes)) { ret = PTR_ERR(inodes); - inodes = NULL; - goto out; + goto out_loi; } + path = btrfs_alloc_path(); + if (!path) { + ret = -ENOMEM; + goto out; + } ret = iterate_inodes_from_logical(loi->logical, fs_info, path, inodes, ignore_offset); + btrfs_free_path(path); if (ret == -EINVAL) ret = -ENOENT; if (ret < 0) @@ -4307,7 +4311,6 @@ static long btrfs_ioctl_logical_to_ino(struct btrfs_fs_info *fs_info, ret = -EFAULT; out: - btrfs_free_path(path); kvfree(inodes); out_loi: kfree(loi); diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 9334c3157c22e89ca242daad82705e5c5229d8c3..b74105a10f16c10de23ec0a9b1ab1f4d561a01b3 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -2951,14 +2951,7 @@ int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans, u64 srcid, dstgroup->rsv_rfer = inherit->lim.rsv_rfer; dstgroup->rsv_excl = inherit->lim.rsv_excl; - ret = update_qgroup_limit_item(trans, dstgroup); - if (ret) { - qgroup_mark_inconsistent(fs_info); - btrfs_info(fs_info, - "unable to update quota limit for %llu", - dstgroup->qgroupid); - goto unlock; - } + qgroup_dirty(fs_info, dstgroup); } if (srcid) { diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c index f6395e8288d69b5dc95ca6d24dbc994bac9bed45..82c8e991300e34b8b3f66d3fc9ef2f70ed6b5e43 100644 --- a/fs/btrfs/raid56.c +++ b/fs/btrfs/raid56.c @@ -1632,10 +1632,8 @@ static int full_stripe_write(struct btrfs_raid_bio *rbio) int ret; ret = alloc_rbio_parity_pages(rbio); - if (ret) { - __free_raid_bio(rbio); + if (ret) return ret; - } ret = lock_stripe_add(rbio); if (ret == 0) @@ -1823,8 +1821,10 @@ void raid56_parity_write(struct bio *bio, struct btrfs_io_context *bioc) */ if (rbio_is_full(rbio)) { ret = full_stripe_write(rbio); - if (ret) + if (ret) { + __free_raid_bio(rbio); goto fail; + } return; } @@ -1838,8 +1838,10 @@ void raid56_parity_write(struct bio *bio, struct btrfs_io_context *bioc) list_add_tail(&rbio->plug_list, &plug->rbio_list); } else { ret = __raid56_parity_write(rbio); - if (ret) + if (ret) { + __free_raid_bio(rbio); goto fail; + } } return; @@ -2742,8 +2744,10 @@ raid56_alloc_missing_rbio(struct bio *bio, struct btrfs_io_context *bioc) rbio->faila = find_logical_bio_stripe(rbio, bio); if (rbio->faila == -1) { - BUG(); - kfree(rbio); + btrfs_warn_rl(fs_info, + "can not determine the failed stripe number for full stripe %llu", + bioc->raid_map[0]); + __free_raid_bio(rbio); return NULL; } diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c index f260c53829e5efe07a76c0ec8eed8bf7994ae623..196c4c6ed1ed81c93c74d55321a33ad635bbdcec 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -2672,17 +2672,11 @@ static int scrub_extent(struct scrub_ctx *sctx, struct map_lookup *map, u8 csum[BTRFS_CSUM_SIZE]; u32 blocksize; - /* - * Block size determines how many scrub_block will be allocated. Here - * we use BTRFS_STRIPE_LEN (64KiB) as default limit, so we won't - * allocate too many scrub_block, while still won't cause too large - * bios for large extents. - */ if (flags & BTRFS_EXTENT_FLAG_DATA) { if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) blocksize = map->stripe_len; else - blocksize = BTRFS_STRIPE_LEN; + blocksize = sctx->fs_info->sectorsize; spin_lock(&sctx->stat_lock); sctx->stat.data_extents_scrubbed++; sctx->stat.data_bytes_scrubbed += len; @@ -3917,7 +3911,6 @@ int scrub_enumerate_chunks(struct scrub_ctx *sctx, if (sctx->is_dev_replace && btrfs_is_zoned(fs_info)) { if (!test_bit(BLOCK_GROUP_FLAG_TO_COPY, &cache->runtime_flags)) { - spin_unlock(&cache->lock); btrfs_put_block_group(cache); goto skip; } diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index ec6e1752af2caeab62074616de6f5d13c1cd79e4..1c4b693ee4a3aeb849558dbcf523e427ba542f39 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -5702,6 +5702,7 @@ static int clone_range(struct send_ctx *sctx, struct btrfs_path *dst_path, u64 ext_len; u64 clone_len; u64 clone_data_offset; + bool crossed_src_i_size = false; if (slot >= btrfs_header_nritems(leaf)) { ret = btrfs_next_leaf(clone_root->root, path); @@ -5759,8 +5760,10 @@ static int clone_range(struct send_ctx *sctx, struct btrfs_path *dst_path, if (key.offset >= clone_src_i_size) break; - if (key.offset + ext_len > clone_src_i_size) + if (key.offset + ext_len > clone_src_i_size) { ext_len = clone_src_i_size - key.offset; + crossed_src_i_size = true; + } clone_data_offset = btrfs_file_extent_offset(leaf, ei); if (btrfs_file_extent_disk_bytenr(leaf, ei) == disk_byte) { @@ -5821,6 +5824,25 @@ static int clone_range(struct send_ctx *sctx, struct btrfs_path *dst_path, ret = send_clone(sctx, offset, clone_len, clone_root); } + } else if (crossed_src_i_size && clone_len < len) { + /* + * If we are at i_size of the clone source inode and we + * can not clone from it, terminate the loop. This is + * to avoid sending two write operations, one with a + * length matching clone_len and the final one after + * this loop with a length of len - clone_len. + * + * When using encoded writes (BTRFS_SEND_FLAG_COMPRESSED + * was passed to the send ioctl), this helps avoid + * sending an encoded write for an offset that is not + * sector size aligned, in case the i_size of the source + * inode is not sector size aligned. That will make the + * receiver fallback to decompression of the data and + * writing it using regular buffered IO, therefore while + * not incorrect, it's not optimal due decompression and + * possible re-compression at the receiver. + */ + break; } else { ret = send_extent_data(sctx, dst_path, offset, clone_len); @@ -6668,17 +6690,19 @@ static int changed_inode(struct send_ctx *sctx, /* * First, process the inode as if it was deleted. */ - sctx->cur_inode_gen = right_gen; - sctx->cur_inode_new = false; - sctx->cur_inode_deleted = true; - sctx->cur_inode_size = btrfs_inode_size( - sctx->right_path->nodes[0], right_ii); - sctx->cur_inode_mode = btrfs_inode_mode( - sctx->right_path->nodes[0], right_ii); - ret = process_all_refs(sctx, - BTRFS_COMPARE_TREE_DELETED); - if (ret < 0) - goto out; + if (old_nlinks > 0) { + sctx->cur_inode_gen = right_gen; + sctx->cur_inode_new = false; + sctx->cur_inode_deleted = true; + sctx->cur_inode_size = btrfs_inode_size( + sctx->right_path->nodes[0], right_ii); + sctx->cur_inode_mode = btrfs_inode_mode( + sctx->right_path->nodes[0], right_ii); + ret = process_all_refs(sctx, + BTRFS_COMPARE_TREE_DELETED); + if (ret < 0) + goto out; + } /* * Now process the inode as if it was new. diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 9be4fd2db0f44e01b6e4a16157acc66b1871ad8c..5942b93840884564d24477da400c04e49dbe1c7f 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -2555,6 +2555,7 @@ static int check_dev_super(struct btrfs_device *dev) { struct btrfs_fs_info *fs_info = dev->fs_info; struct btrfs_super_block *sb; + u16 csum_type; int ret = 0; /* This should be called with fs still frozen. */ @@ -2569,6 +2570,21 @@ static int check_dev_super(struct btrfs_device *dev) if (IS_ERR(sb)) return PTR_ERR(sb); + /* Verify the checksum. */ + csum_type = btrfs_super_csum_type(sb); + if (csum_type != btrfs_super_csum_type(fs_info->super_copy)) { + btrfs_err(fs_info, "csum type changed, has %u expect %u", + csum_type, btrfs_super_csum_type(fs_info->super_copy)); + ret = -EUCLEAN; + goto out; + } + + if (btrfs_check_super_csum(fs_info, sb)) { + btrfs_err(fs_info, "csum for on-disk super block no longer matches"); + ret = -EUCLEAN; + goto out; + } + /* Btrfs_validate_super() includes fsid check against super->fsid. */ ret = btrfs_validate_super(fs_info, sb, 0); if (ret < 0) diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c index 699b54b3acaae0b6e8e31f69e34066631b1aaa9c..74fef1f49c358cdc70f6ee2ada45d2c699194b80 100644 --- a/fs/btrfs/sysfs.c +++ b/fs/btrfs/sysfs.c @@ -2321,8 +2321,11 @@ int __init btrfs_init_sysfs(void) #ifdef CONFIG_BTRFS_DEBUG ret = sysfs_create_group(&btrfs_kset->kobj, &btrfs_debug_feature_attr_group); - if (ret) - goto out2; + if (ret) { + sysfs_unmerge_group(&btrfs_kset->kobj, + &btrfs_static_feature_attr_group); + goto out_remove_group; + } #endif return 0; diff --git a/fs/btrfs/tests/btrfs-tests.c b/fs/btrfs/tests/btrfs-tests.c index 9c478fa256f65cdaaf1771c10367b520d20478b8..d43cb5242fec920b6a1792279a25c6f0cccb7c09 100644 --- a/fs/btrfs/tests/btrfs-tests.c +++ b/fs/btrfs/tests/btrfs-tests.c @@ -200,7 +200,7 @@ void btrfs_free_dummy_fs_info(struct btrfs_fs_info *fs_info) void btrfs_free_dummy_root(struct btrfs_root *root) { - if (!root) + if (IS_ERR_OR_NULL(root)) return; /* Will be freed by btrfs_free_fs_roots */ if (WARN_ON(test_bit(BTRFS_ROOT_IN_RADIX, &root->state))) diff --git a/fs/btrfs/tests/qgroup-tests.c b/fs/btrfs/tests/qgroup-tests.c index eee1e4459541049cd9930f26ef6a22e52a9f7e77..63676ea19f29eb71077731c640ae24f78c2abbb2 100644 --- a/fs/btrfs/tests/qgroup-tests.c +++ b/fs/btrfs/tests/qgroup-tests.c @@ -225,20 +225,20 @@ static int test_no_shared_qgroup(struct btrfs_root *root, */ ret = btrfs_find_all_roots(&trans, fs_info, nodesize, 0, &old_roots, false); if (ret) { - ulist_free(old_roots); test_err("couldn't find old roots: %d", ret); return ret; } ret = insert_normal_tree_ref(root, nodesize, nodesize, 0, BTRFS_FS_TREE_OBJECTID); - if (ret) + if (ret) { + ulist_free(old_roots); return ret; + } ret = btrfs_find_all_roots(&trans, fs_info, nodesize, 0, &new_roots, false); if (ret) { ulist_free(old_roots); - ulist_free(new_roots); test_err("couldn't find old roots: %d", ret); return ret; } @@ -250,29 +250,31 @@ static int test_no_shared_qgroup(struct btrfs_root *root, return ret; } + /* btrfs_qgroup_account_extent() always frees the ulists passed to it. */ + old_roots = NULL; + new_roots = NULL; + if (btrfs_verify_qgroup_counts(fs_info, BTRFS_FS_TREE_OBJECTID, nodesize, nodesize)) { test_err("qgroup counts didn't match expected values"); return -EINVAL; } - old_roots = NULL; - new_roots = NULL; ret = btrfs_find_all_roots(&trans, fs_info, nodesize, 0, &old_roots, false); if (ret) { - ulist_free(old_roots); test_err("couldn't find old roots: %d", ret); return ret; } ret = remove_extent_item(root, nodesize, nodesize); - if (ret) + if (ret) { + ulist_free(old_roots); return -EINVAL; + } ret = btrfs_find_all_roots(&trans, fs_info, nodesize, 0, &new_roots, false); if (ret) { ulist_free(old_roots); - ulist_free(new_roots); test_err("couldn't find old roots: %d", ret); return ret; } @@ -322,20 +324,20 @@ static int test_multiple_refs(struct btrfs_root *root, ret = btrfs_find_all_roots(&trans, fs_info, nodesize, 0, &old_roots, false); if (ret) { - ulist_free(old_roots); test_err("couldn't find old roots: %d", ret); return ret; } ret = insert_normal_tree_ref(root, nodesize, nodesize, 0, BTRFS_FS_TREE_OBJECTID); - if (ret) + if (ret) { + ulist_free(old_roots); return ret; + } ret = btrfs_find_all_roots(&trans, fs_info, nodesize, 0, &new_roots, false); if (ret) { ulist_free(old_roots); - ulist_free(new_roots); test_err("couldn't find old roots: %d", ret); return ret; } @@ -355,20 +357,20 @@ static int test_multiple_refs(struct btrfs_root *root, ret = btrfs_find_all_roots(&trans, fs_info, nodesize, 0, &old_roots, false); if (ret) { - ulist_free(old_roots); test_err("couldn't find old roots: %d", ret); return ret; } ret = add_tree_ref(root, nodesize, nodesize, 0, BTRFS_FIRST_FREE_OBJECTID); - if (ret) + if (ret) { + ulist_free(old_roots); return ret; + } ret = btrfs_find_all_roots(&trans, fs_info, nodesize, 0, &new_roots, false); if (ret) { ulist_free(old_roots); - ulist_free(new_roots); test_err("couldn't find old roots: %d", ret); return ret; } @@ -394,20 +396,20 @@ static int test_multiple_refs(struct btrfs_root *root, ret = btrfs_find_all_roots(&trans, fs_info, nodesize, 0, &old_roots, false); if (ret) { - ulist_free(old_roots); test_err("couldn't find old roots: %d", ret); return ret; } ret = remove_extent_ref(root, nodesize, nodesize, 0, BTRFS_FIRST_FREE_OBJECTID); - if (ret) + if (ret) { + ulist_free(old_roots); return ret; + } ret = btrfs_find_all_roots(&trans, fs_info, nodesize, 0, &new_roots, false); if (ret) { ulist_free(old_roots); - ulist_free(new_roots); test_err("couldn't find old roots: %d", ret); return ret; } diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 813986e38258b78ceed6f4207dd1e38b3e66a8b2..c3cf3dabe0b1b625c1229bcb5a922f6d66bcc86b 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -3694,15 +3694,29 @@ static int process_dir_items_leaf(struct btrfs_trans_handle *trans, u64 *last_old_dentry_offset) { struct btrfs_root *log = inode->root->log_root; - struct extent_buffer *src = path->nodes[0]; - const int nritems = btrfs_header_nritems(src); + struct extent_buffer *src; + const int nritems = btrfs_header_nritems(path->nodes[0]); const u64 ino = btrfs_ino(inode); bool last_found = false; int batch_start = 0; int batch_size = 0; int i; - for (i = path->slots[0]; i < nritems; i++) { + /* + * We need to clone the leaf, release the read lock on it, and use the + * clone before modifying the log tree. See the comment at copy_items() + * about why we need to do this. + */ + src = btrfs_clone_extent_buffer(path->nodes[0]); + if (!src) + return -ENOMEM; + + i = path->slots[0]; + btrfs_release_path(path); + path->nodes[0] = src; + path->slots[0] = i; + + for (; i < nritems; i++) { struct btrfs_dir_item *di; struct btrfs_key key; int ret; @@ -4303,7 +4317,7 @@ static noinline int copy_items(struct btrfs_trans_handle *trans, { struct btrfs_root *log = inode->root->log_root; struct btrfs_file_extent_item *extent; - struct extent_buffer *src = src_path->nodes[0]; + struct extent_buffer *src; int ret = 0; struct btrfs_key *ins_keys; u32 *ins_sizes; @@ -4314,6 +4328,43 @@ static noinline int copy_items(struct btrfs_trans_handle *trans, const bool skip_csum = (inode->flags & BTRFS_INODE_NODATASUM); const u64 i_size = i_size_read(&inode->vfs_inode); + /* + * To keep lockdep happy and avoid deadlocks, clone the source leaf and + * use the clone. This is because otherwise we would be changing the log + * tree, to insert items from the subvolume tree or insert csum items, + * while holding a read lock on a leaf from the subvolume tree, which + * creates a nasty lock dependency when COWing log tree nodes/leaves: + * + * 1) Modifying the log tree triggers an extent buffer allocation while + * holding a write lock on a parent extent buffer from the log tree. + * Allocating the pages for an extent buffer, or the extent buffer + * struct, can trigger inode eviction and finally the inode eviction + * will trigger a release/remove of a delayed node, which requires + * taking the delayed node's mutex; + * + * 2) Allocating a metadata extent for a log tree can trigger the async + * reclaim thread and make us wait for it to release enough space and + * unblock our reservation ticket. The reclaim thread can start + * flushing delayed items, and that in turn results in the need to + * lock delayed node mutexes and in the need to write lock extent + * buffers of a subvolume tree - all this while holding a write lock + * on the parent extent buffer in the log tree. + * + * So one task in scenario 1) running in parallel with another task in + * scenario 2) could lead to a deadlock, one wanting to lock a delayed + * node mutex while having a read lock on a leaf from the subvolume, + * while the other is holding the delayed node's mutex and wants to + * write lock the same subvolume leaf for flushing delayed items. + */ + src = btrfs_clone_extent_buffer(src_path->nodes[0]); + if (!src) + return -ENOMEM; + + i = src_path->slots[0]; + btrfs_release_path(src_path); + src_path->nodes[0] = src; + src_path->slots[0] = i; + ins_data = kmalloc(nr * sizeof(struct btrfs_key) + nr * sizeof(u32), GFP_NOFS); if (!ins_data) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 94ba46d5792053553936b55518a002237e5c5fef..635f45f1a2ef80508f850ee593b8375786d1fc25 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -1011,6 +1011,18 @@ static struct btrfs_fs_devices *clone_fs_devices(struct btrfs_fs_devices *orig) rcu_assign_pointer(device->name, name); } + if (orig_dev->zone_info) { + struct btrfs_zoned_device_info *zone_info; + + zone_info = btrfs_clone_dev_zone_info(orig_dev); + if (!zone_info) { + btrfs_free_device(device); + ret = -ENOMEM; + goto error; + } + device->zone_info = zone_info; + } + list_add(&device->dev_list, &fs_devices->devices); device->fs_devices = fs_devices; fs_devices->num_devices++; @@ -6918,18 +6930,18 @@ static bool dev_args_match_fs_devices(const struct btrfs_dev_lookup_args *args, static bool dev_args_match_device(const struct btrfs_dev_lookup_args *args, const struct btrfs_device *device) { - ASSERT((args->devid != (u64)-1) || args->missing); + if (args->missing) { + if (test_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state) && + !device->bdev) + return true; + return false; + } - if ((args->devid != (u64)-1) && device->devid != args->devid) + if (device->devid != args->devid) return false; if (args->uuid && memcmp(device->uuid, args->uuid, BTRFS_UUID_SIZE) != 0) return false; - if (!args->missing) - return true; - if (test_bit(BTRFS_DEV_STATE_IN_FS_METADATA, &device->dev_state) && - !device->bdev) - return true; - return false; + return true; } /* @@ -7142,6 +7154,7 @@ static int read_one_chunk(struct btrfs_key *key, struct extent_buffer *leaf, u64 devid; u64 type; u8 uuid[BTRFS_UUID_SIZE]; + int index; int num_stripes; int ret; int i; @@ -7149,6 +7162,7 @@ static int read_one_chunk(struct btrfs_key *key, struct extent_buffer *leaf, logical = key->offset; length = btrfs_chunk_length(leaf, chunk); type = btrfs_chunk_type(leaf, chunk); + index = btrfs_bg_flags_to_raid_index(type); num_stripes = btrfs_chunk_num_stripes(leaf, chunk); #if BITS_PER_LONG == 32 @@ -7202,7 +7216,15 @@ static int read_one_chunk(struct btrfs_key *key, struct extent_buffer *leaf, map->io_align = btrfs_chunk_io_align(leaf, chunk); map->stripe_len = btrfs_chunk_stripe_len(leaf, chunk); map->type = type; - map->sub_stripes = btrfs_chunk_sub_stripes(leaf, chunk); + /* + * We can't use the sub_stripes value, as for profiles other than + * RAID10, they may have 0 as sub_stripes for filesystems created by + * older mkfs (sub_stripes = btrfs_raid_array[index].sub_stripes; map->verified_stripes = 0; em->orig_block_len = btrfs_calc_stripe_length(em); for (i = 0; i < num_stripes; i++) { @@ -7734,10 +7756,11 @@ int btrfs_read_chunk_tree(struct btrfs_fs_info *fs_info) return ret; } -void btrfs_init_devices_late(struct btrfs_fs_info *fs_info) +int btrfs_init_devices_late(struct btrfs_fs_info *fs_info) { struct btrfs_fs_devices *fs_devices = fs_info->fs_devices, *seed_devs; struct btrfs_device *device; + int ret = 0; fs_devices->fs_info = fs_info; @@ -7746,12 +7769,18 @@ void btrfs_init_devices_late(struct btrfs_fs_info *fs_info) device->fs_info = fs_info; list_for_each_entry(seed_devs, &fs_devices->seed_list, seed_list) { - list_for_each_entry(device, &seed_devs->devices, dev_list) + list_for_each_entry(device, &seed_devs->devices, dev_list) { device->fs_info = fs_info; + ret = btrfs_get_dev_zone_info(device, false); + if (ret) + break; + } seed_devs->fs_info = fs_info; } mutex_unlock(&fs_devices->device_list_mutex); + + return ret; } static u64 btrfs_dev_stats_value(const struct extent_buffer *eb, diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h index 599b9d5af349f10fabb30b1da8b35f4b4f1bf4e5..099def5613b875a3cdae1997f4cc34faef898919 100644 --- a/fs/btrfs/volumes.h +++ b/fs/btrfs/volumes.h @@ -395,6 +395,7 @@ typedef void (*btrfs_bio_end_io_t)(struct btrfs_bio *bbio); */ struct btrfs_bio { unsigned int mirror_num; + struct bvec_iter iter; /* for direct I/O */ u64 file_offset; @@ -403,7 +404,6 @@ struct btrfs_bio { struct btrfs_device *device; u8 *csum; u8 csum_inline[BTRFS_BIO_INLINE_CSUM_SIZE]; - struct bvec_iter iter; /* End I/O information supplied to btrfs_bio_alloc */ btrfs_bio_end_io_t end_io; @@ -671,7 +671,7 @@ int find_free_dev_extent(struct btrfs_device *device, u64 num_bytes, void btrfs_dev_stat_inc_and_print(struct btrfs_device *dev, int index); int btrfs_get_dev_stats(struct btrfs_fs_info *fs_info, struct btrfs_ioctl_get_dev_stats *stats); -void btrfs_init_devices_late(struct btrfs_fs_info *fs_info); +int btrfs_init_devices_late(struct btrfs_fs_info *fs_info); int btrfs_init_dev_stats(struct btrfs_fs_info *fs_info); int btrfs_run_dev_stats(struct btrfs_trans_handle *trans); void btrfs_rm_dev_replace_remove_srcdev(struct btrfs_device *srcdev); diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c index e2d073b08a7d28cbff66b78cac3133bc11a51bf2..c9e2b0c85309971b016704150361f2994afb2f4b 100644 --- a/fs/btrfs/zoned.c +++ b/fs/btrfs/zoned.c @@ -134,7 +134,8 @@ static int sb_write_pointer(struct block_device *bdev, struct blk_zone *zones, super[i] = page_address(page[i]); } - if (super[0]->generation > super[1]->generation) + if (btrfs_super_generation(super[0]) > + btrfs_super_generation(super[1])) sector = zones[1].start; else sector = zones[0].start; @@ -466,7 +467,7 @@ int btrfs_get_dev_zone_info(struct btrfs_device *device, bool populate_cache) goto out; } - zones = kcalloc(BTRFS_REPORT_NR_ZONES, sizeof(struct blk_zone), GFP_KERNEL); + zones = kvcalloc(BTRFS_REPORT_NR_ZONES, sizeof(struct blk_zone), GFP_KERNEL); if (!zones) { ret = -ENOMEM; goto out; @@ -585,7 +586,7 @@ int btrfs_get_dev_zone_info(struct btrfs_device *device, bool populate_cache) } - kfree(zones); + kvfree(zones); switch (bdev_zoned_model(bdev)) { case BLK_ZONED_HM: @@ -617,7 +618,7 @@ int btrfs_get_dev_zone_info(struct btrfs_device *device, bool populate_cache) return 0; out: - kfree(zones); + kvfree(zones); out_free_zone_info: btrfs_destroy_dev_zone_info(device); @@ -639,6 +640,46 @@ void btrfs_destroy_dev_zone_info(struct btrfs_device *device) device->zone_info = NULL; } +struct btrfs_zoned_device_info *btrfs_clone_dev_zone_info(struct btrfs_device *orig_dev) +{ + struct btrfs_zoned_device_info *zone_info; + + zone_info = kmemdup(orig_dev->zone_info, sizeof(*zone_info), GFP_KERNEL); + if (!zone_info) + return NULL; + + zone_info->seq_zones = bitmap_zalloc(zone_info->nr_zones, GFP_KERNEL); + if (!zone_info->seq_zones) + goto out; + + bitmap_copy(zone_info->seq_zones, orig_dev->zone_info->seq_zones, + zone_info->nr_zones); + + zone_info->empty_zones = bitmap_zalloc(zone_info->nr_zones, GFP_KERNEL); + if (!zone_info->empty_zones) + goto out; + + bitmap_copy(zone_info->empty_zones, orig_dev->zone_info->empty_zones, + zone_info->nr_zones); + + zone_info->active_zones = bitmap_zalloc(zone_info->nr_zones, GFP_KERNEL); + if (!zone_info->active_zones) + goto out; + + bitmap_copy(zone_info->active_zones, orig_dev->zone_info->active_zones, + zone_info->nr_zones); + zone_info->zone_cache = NULL; + + return zone_info; + +out: + bitmap_free(zone_info->seq_zones); + bitmap_free(zone_info->empty_zones); + bitmap_free(zone_info->active_zones); + kfree(zone_info); + return NULL; +} + int btrfs_get_dev_zone(struct btrfs_device *device, u64 pos, struct blk_zone *zone) { diff --git a/fs/btrfs/zoned.h b/fs/btrfs/zoned.h index e17462db3a842c632e8ec5b08d82fe3ad458ee96..8bd16d40b7c65befa495df76860ff4da619b944e 100644 --- a/fs/btrfs/zoned.h +++ b/fs/btrfs/zoned.h @@ -36,6 +36,7 @@ int btrfs_get_dev_zone(struct btrfs_device *device, u64 pos, int btrfs_get_dev_zone_info_all_devices(struct btrfs_fs_info *fs_info); int btrfs_get_dev_zone_info(struct btrfs_device *device, bool populate_cache); void btrfs_destroy_dev_zone_info(struct btrfs_device *device); +struct btrfs_zoned_device_info *btrfs_clone_dev_zone_info(struct btrfs_device *orig_dev); int btrfs_check_zoned_mode(struct btrfs_fs_info *fs_info); int btrfs_check_mountopts_zoned(struct btrfs_fs_info *info); int btrfs_sb_log_location_bdev(struct block_device *bdev, int mirror, int rw, @@ -103,6 +104,16 @@ static inline int btrfs_get_dev_zone_info(struct btrfs_device *device, static inline void btrfs_destroy_dev_zone_info(struct btrfs_device *device) { } +/* + * In case the kernel is compiled without CONFIG_BLK_DEV_ZONED we'll never call + * into btrfs_clone_dev_zone_info() so it's safe to return NULL here. + */ +static inline struct btrfs_zoned_device_info *btrfs_clone_dev_zone_info( + struct btrfs_device *orig_dev) +{ + return NULL; +} + static inline int btrfs_check_zoned_mode(const struct btrfs_fs_info *fs_info) { if (!btrfs_is_zoned(fs_info)) diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index fb023f9fafcbe38dedb2246ade02f8fddece19bf..e54814d0c2f7bd3f61cb34369faf9a3f45e28da8 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c @@ -2248,7 +2248,6 @@ static int flush_mdlog_and_wait_inode_unsafe_requests(struct inode *inode) struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; struct ceph_inode_info *ci = ceph_inode(inode); struct ceph_mds_request *req1 = NULL, *req2 = NULL; - unsigned int max_sessions; int ret, err = 0; spin_lock(&ci->i_unsafe_lock); @@ -2266,28 +2265,24 @@ static int flush_mdlog_and_wait_inode_unsafe_requests(struct inode *inode) } spin_unlock(&ci->i_unsafe_lock); - /* - * The mdsc->max_sessions is unlikely to be changed - * mostly, here we will retry it by reallocating the - * sessions array memory to get rid of the mdsc->mutex - * lock. - */ -retry: - max_sessions = mdsc->max_sessions; - /* * Trigger to flush the journal logs in all the relevant MDSes * manually, or in the worst case we must wait at most 5 seconds * to wait the journal logs to be flushed by the MDSes periodically. */ - if ((req1 || req2) && likely(max_sessions)) { - struct ceph_mds_session **sessions = NULL; - struct ceph_mds_session *s; + if (req1 || req2) { struct ceph_mds_request *req; + struct ceph_mds_session **sessions; + struct ceph_mds_session *s; + unsigned int max_sessions; int i; + mutex_lock(&mdsc->mutex); + max_sessions = mdsc->max_sessions; + sessions = kcalloc(max_sessions, sizeof(s), GFP_KERNEL); if (!sessions) { + mutex_unlock(&mdsc->mutex); err = -ENOMEM; goto out; } @@ -2299,16 +2294,6 @@ static int flush_mdlog_and_wait_inode_unsafe_requests(struct inode *inode) s = req->r_session; if (!s) continue; - if (unlikely(s->s_mds >= max_sessions)) { - spin_unlock(&ci->i_unsafe_lock); - for (i = 0; i < max_sessions; i++) { - s = sessions[i]; - if (s) - ceph_put_mds_session(s); - } - kfree(sessions); - goto retry; - } if (!sessions[s->s_mds]) { s = ceph_get_mds_session(s); sessions[s->s_mds] = s; @@ -2321,16 +2306,6 @@ static int flush_mdlog_and_wait_inode_unsafe_requests(struct inode *inode) s = req->r_session; if (!s) continue; - if (unlikely(s->s_mds >= max_sessions)) { - spin_unlock(&ci->i_unsafe_lock); - for (i = 0; i < max_sessions; i++) { - s = sessions[i]; - if (s) - ceph_put_mds_session(s); - } - kfree(sessions); - goto retry; - } if (!sessions[s->s_mds]) { s = ceph_get_mds_session(s); sessions[s->s_mds] = s; @@ -2342,11 +2317,12 @@ static int flush_mdlog_and_wait_inode_unsafe_requests(struct inode *inode) /* the auth MDS */ spin_lock(&ci->i_ceph_lock); if (ci->i_auth_cap) { - s = ci->i_auth_cap->session; - if (!sessions[s->s_mds]) - sessions[s->s_mds] = ceph_get_mds_session(s); + s = ci->i_auth_cap->session; + if (!sessions[s->s_mds]) + sessions[s->s_mds] = ceph_get_mds_session(s); } spin_unlock(&ci->i_ceph_lock); + mutex_unlock(&mdsc->mutex); /* send flush mdlog request to MDSes */ for (i = 0; i < max_sessions; i++) { diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 4af5e55abc1586748882e54e3da3660d8444aaab..bad9eeb6a1a59db7b507b43b9bd2bd449cf086a0 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -2492,7 +2492,7 @@ int ceph_getattr(struct user_namespace *mnt_userns, const struct path *path, struct inode *parent; parent = ceph_lookup_inode(sb, ceph_ino(inode)); - if (!parent) + if (IS_ERR(parent)) return PTR_ERR(parent); pci = ceph_inode(parent); diff --git a/fs/ceph/snap.c b/fs/ceph/snap.c index 864cdaa0d2bd659e43459ddfdecf6f5fd8bcc7b0..e4151852184e04d092b6ff0b1b4d139d3b2f5dad 100644 --- a/fs/ceph/snap.c +++ b/fs/ceph/snap.c @@ -763,7 +763,7 @@ int ceph_update_snap_trace(struct ceph_mds_client *mdsc, struct ceph_mds_snap_realm *ri; /* encoded */ __le64 *snaps; /* encoded */ __le64 *prior_parent_snaps; /* encoded */ - struct ceph_snap_realm *realm = NULL; + struct ceph_snap_realm *realm; struct ceph_snap_realm *first_realm = NULL; struct ceph_snap_realm *realm_to_rebuild = NULL; int rebuild_snapcs; @@ -774,6 +774,7 @@ int ceph_update_snap_trace(struct ceph_mds_client *mdsc, dout("%s deletion=%d\n", __func__, deletion); more: + realm = NULL; rebuild_snapcs = 0; ceph_decode_need(&p, e, sizeof(*ri), bad); ri = p; diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index d0b9fec111aacd93fe81f12d932e371c05c4bc8f..712a431614480d082cd6cb24683a6bc378e27df7 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c @@ -1143,8 +1143,32 @@ const struct inode_operations cifs_file_inode_ops = { .fiemap = cifs_fiemap, }; +const char *cifs_get_link(struct dentry *dentry, struct inode *inode, + struct delayed_call *done) +{ + char *target_path; + + target_path = kmalloc(PATH_MAX, GFP_KERNEL); + if (!target_path) + return ERR_PTR(-ENOMEM); + + spin_lock(&inode->i_lock); + if (likely(CIFS_I(inode)->symlink_target)) { + strscpy(target_path, CIFS_I(inode)->symlink_target, PATH_MAX); + } else { + kfree(target_path); + target_path = ERR_PTR(-EOPNOTSUPP); + } + spin_unlock(&inode->i_lock); + + if (!IS_ERR(target_path)) + set_delayed_call(done, kfree_link, target_path); + + return target_path; +} + const struct inode_operations cifs_symlink_inode_ops = { - .get_link = simple_get_link, + .get_link = cifs_get_link, .permission = cifs_permission, .listxattr = cifs_listxattr, }; @@ -1257,7 +1281,7 @@ ssize_t cifs_file_copychunk_range(unsigned int xid, rc = filemap_write_and_wait_range(src_inode->i_mapping, off, off + len - 1); if (rc) - goto out; + goto unlock; /* should we flush first and last page first */ truncate_inode_pages(&target_inode->i_data, 0); @@ -1273,6 +1297,8 @@ ssize_t cifs_file_copychunk_range(unsigned int xid, * that target is updated on the server */ CIFS_I(target_inode)->time = 0; + +unlock: /* although unlocking in the reverse order from locking is not * strictly necessary here it is a little cleaner to be consistent */ diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 1cc47dd3b4d623eb1941fbc215fd2ee488634112..9db9527c61cfc16c11f4fa114853bb83c0fe876a 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -3855,9 +3855,13 @@ int cifs_mount(struct cifs_sb_info *cifs_sb, struct smb3_fs_context *ctx) uuid_copy(&cifs_sb->dfs_mount_id, &mnt_ctx.mount_id); out: - free_xid(mnt_ctx.xid); cifs_try_adding_channels(cifs_sb, mnt_ctx.ses); - return mount_setup_tlink(cifs_sb, mnt_ctx.ses, mnt_ctx.tcon); + rc = mount_setup_tlink(cifs_sb, mnt_ctx.ses, mnt_ctx.tcon); + if (rc) + goto error; + + free_xid(mnt_ctx.xid); + return rc; error: dfs_cache_put_refsrv_sessions(&mnt_ctx.mount_id); @@ -3884,8 +3888,12 @@ int cifs_mount(struct cifs_sb_info *cifs_sb, struct smb3_fs_context *ctx) goto error; } + rc = mount_setup_tlink(cifs_sb, mnt_ctx.ses, mnt_ctx.tcon); + if (rc) + goto error; + free_xid(mnt_ctx.xid); - return mount_setup_tlink(cifs_sb, mnt_ctx.ses, mnt_ctx.tcon); + return rc; error: mount_put_conns(&mnt_ctx); diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index 9bde08d44617f2be4b477717e2e6ce0779f156de..4e2ca3c6e5c00cb86278ee4636659725e1f2bad9 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c @@ -215,11 +215,6 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr) kfree(cifs_i->symlink_target); cifs_i->symlink_target = fattr->cf_symlink_target; fattr->cf_symlink_target = NULL; - - if (unlikely(!cifs_i->symlink_target)) - inode->i_link = ERR_PTR(-EOPNOTSUPP); - else - inode->i_link = cifs_i->symlink_target; } spin_unlock(&inode->i_lock); diff --git a/fs/cifs/ioctl.c b/fs/cifs/ioctl.c index 89d5fa8873649ce4bea3c6c2393293a7c9bdb139..6419ec47c2a8508a089c8bea352e28fce6c2d84b 100644 --- a/fs/cifs/ioctl.c +++ b/fs/cifs/ioctl.c @@ -343,7 +343,7 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) rc = put_user(ExtAttrBits & FS_FL_USER_VISIBLE, (int __user *)arg); - if (rc != EOPNOTSUPP) + if (rc != -EOPNOTSUPP) break; } #endif /* CONFIG_CIFS_ALLOW_INSECURE_LEGACY */ @@ -373,7 +373,7 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) * pSMBFile->fid.netfid, * extAttrBits, * &ExtAttrMask); - * if (rc != EOPNOTSUPP) + * if (rc != -EOPNOTSUPP) * break; */ diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c index da51ffd029280ec7c4444f246427254894adfdb3..3e68d8208cf5ee924a1b58e765bc5836eca0b315 100644 --- a/fs/cifs/misc.c +++ b/fs/cifs/misc.c @@ -400,6 +400,7 @@ is_valid_oplock_break(char *buffer, struct TCP_Server_Info *srv) { struct smb_hdr *buf = (struct smb_hdr *)buffer; struct smb_com_lock_req *pSMB = (struct smb_com_lock_req *)buf; + struct TCP_Server_Info *pserver; struct cifs_ses *ses; struct cifs_tcon *tcon; struct cifsInodeInfo *pCifsInode; @@ -464,9 +465,12 @@ is_valid_oplock_break(char *buffer, struct TCP_Server_Info *srv) if (!(pSMB->LockType & LOCKING_ANDX_OPLOCK_RELEASE)) return false; + /* If server is a channel, select the primary channel */ + pserver = CIFS_SERVER_IS_CHAN(srv) ? srv->primary_server : srv; + /* look up tcon based on tid & uid */ spin_lock(&cifs_tcp_ses_lock); - list_for_each_entry(ses, &srv->smb_ses_list, smb_ses_list) { + list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) { list_for_each_entry(tcon, &ses->tcon_list, tcon_list) { if (tcon->tid != buf->Tid) continue; diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c index 92e4278ec35d536714a440a6193c35a9721ec5eb..9e7d9f0baa18a133eb1afd76a4916d7f47d00dd2 100644 --- a/fs/cifs/sess.c +++ b/fs/cifs/sess.c @@ -302,14 +302,14 @@ cifs_chan_update_iface(struct cifs_ses *ses, struct TCP_Server_Info *server) /* now drop the ref to the current iface */ if (old_iface && iface) { - kref_put(&old_iface->refcount, release_iface); cifs_dbg(FYI, "replacing iface: %pIS with %pIS\n", &old_iface->sockaddr, &iface->sockaddr); - } else if (old_iface) { kref_put(&old_iface->refcount, release_iface); + } else if (old_iface) { cifs_dbg(FYI, "releasing ref to iface: %pIS\n", &old_iface->sockaddr); + kref_put(&old_iface->refcount, release_iface); } else { WARN_ON(!iface); cifs_dbg(FYI, "adding new iface: %pIS\n", &iface->sockaddr); diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c index a387204779660f64d47069eb8ae50da9c00b9a44..572293c18e16f5ab86a9b6e45515c49dc521a1c5 100644 --- a/fs/cifs/smb2misc.c +++ b/fs/cifs/smb2misc.c @@ -135,6 +135,7 @@ static __u32 get_neg_ctxt_len(struct smb2_hdr *hdr, __u32 len, int smb2_check_message(char *buf, unsigned int len, struct TCP_Server_Info *server) { + struct TCP_Server_Info *pserver; struct smb2_hdr *shdr = (struct smb2_hdr *)buf; struct smb2_pdu *pdu = (struct smb2_pdu *)shdr; int hdr_size = sizeof(struct smb2_hdr); @@ -143,6 +144,9 @@ smb2_check_message(char *buf, unsigned int len, struct TCP_Server_Info *server) __u32 calc_len; /* calculated length */ __u64 mid; + /* If server is a channel, select the primary channel */ + pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server; + /* * Add function to do table lookup of StructureSize by command * ie Validate the wct via smb2_struct_sizes table above @@ -155,7 +159,7 @@ smb2_check_message(char *buf, unsigned int len, struct TCP_Server_Info *server) /* decrypt frame now that it is completely read in */ spin_lock(&cifs_tcp_ses_lock); - list_for_each_entry(iter, &server->smb_ses_list, smb_ses_list) { + list_for_each_entry(iter, &pserver->smb_ses_list, smb_ses_list) { if (iter->Suid == le64_to_cpu(thdr->SessionId)) { ses = iter; break; @@ -608,51 +612,52 @@ smb2_tcon_find_pending_open_lease(struct cifs_tcon *tcon, } static bool -smb2_is_valid_lease_break(char *buffer) +smb2_is_valid_lease_break(char *buffer, struct TCP_Server_Info *server) { struct smb2_lease_break *rsp = (struct smb2_lease_break *)buffer; - struct TCP_Server_Info *server; + struct TCP_Server_Info *pserver; struct cifs_ses *ses; struct cifs_tcon *tcon; struct cifs_pending_open *open; cifs_dbg(FYI, "Checking for lease break\n"); + /* If server is a channel, select the primary channel */ + pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server; + /* look up tcon based on tid & uid */ spin_lock(&cifs_tcp_ses_lock); - list_for_each_entry(server, &cifs_tcp_ses_list, tcp_ses_list) { - list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) { - list_for_each_entry(tcon, &ses->tcon_list, tcon_list) { - spin_lock(&tcon->open_file_lock); - cifs_stats_inc( - &tcon->stats.cifs_stats.num_oplock_brks); - if (smb2_tcon_has_lease(tcon, rsp)) { - spin_unlock(&tcon->open_file_lock); - spin_unlock(&cifs_tcp_ses_lock); - return true; - } - open = smb2_tcon_find_pending_open_lease(tcon, - rsp); - if (open) { - __u8 lease_key[SMB2_LEASE_KEY_SIZE]; - struct tcon_link *tlink; - - tlink = cifs_get_tlink(open->tlink); - memcpy(lease_key, open->lease_key, - SMB2_LEASE_KEY_SIZE); - spin_unlock(&tcon->open_file_lock); - spin_unlock(&cifs_tcp_ses_lock); - smb2_queue_pending_open_break(tlink, - lease_key, - rsp->NewLeaseState); - return true; - } + list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) { + list_for_each_entry(tcon, &ses->tcon_list, tcon_list) { + spin_lock(&tcon->open_file_lock); + cifs_stats_inc( + &tcon->stats.cifs_stats.num_oplock_brks); + if (smb2_tcon_has_lease(tcon, rsp)) { spin_unlock(&tcon->open_file_lock); + spin_unlock(&cifs_tcp_ses_lock); + return true; + } + open = smb2_tcon_find_pending_open_lease(tcon, + rsp); + if (open) { + __u8 lease_key[SMB2_LEASE_KEY_SIZE]; + struct tcon_link *tlink; + + tlink = cifs_get_tlink(open->tlink); + memcpy(lease_key, open->lease_key, + SMB2_LEASE_KEY_SIZE); + spin_unlock(&tcon->open_file_lock); + spin_unlock(&cifs_tcp_ses_lock); + smb2_queue_pending_open_break(tlink, + lease_key, + rsp->NewLeaseState); + return true; + } + spin_unlock(&tcon->open_file_lock); - if (cached_dir_lease_break(tcon, rsp->LeaseKey)) { - spin_unlock(&cifs_tcp_ses_lock); - return true; - } + if (cached_dir_lease_break(tcon, rsp->LeaseKey)) { + spin_unlock(&cifs_tcp_ses_lock); + return true; } } } @@ -671,6 +676,7 @@ bool smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server) { struct smb2_oplock_break *rsp = (struct smb2_oplock_break *)buffer; + struct TCP_Server_Info *pserver; struct cifs_ses *ses; struct cifs_tcon *tcon; struct cifsInodeInfo *cinode; @@ -684,16 +690,19 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server) if (rsp->StructureSize != smb2_rsp_struct_sizes[SMB2_OPLOCK_BREAK_HE]) { if (le16_to_cpu(rsp->StructureSize) == 44) - return smb2_is_valid_lease_break(buffer); + return smb2_is_valid_lease_break(buffer, server); else return false; } cifs_dbg(FYI, "oplock level 0x%x\n", rsp->OplockLevel); + /* If server is a channel, select the primary channel */ + pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server; + /* look up tcon based on tid & uid */ spin_lock(&cifs_tcp_ses_lock); - list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) { + list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) { list_for_each_entry(tcon, &ses->tcon_list, tcon_list) { spin_lock(&tcon->open_file_lock); diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c index 4f53fa012936e3530eb33545e2dcbffb8f1fcf60..bfaafd02fb1f249bcf18dd6a5219b749e73c37f2 100644 --- a/fs/cifs/smb2ops.c +++ b/fs/cifs/smb2ops.c @@ -1116,6 +1116,8 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon, COMPOUND_FID, current->tgid, FILE_FULL_EA_INFORMATION, SMB2_O_INFO_FILE, 0, data, size); + if (rc) + goto sea_exit; smb2_set_next_command(tcon, &rqst[1]); smb2_set_related(&rqst[1]); @@ -1126,6 +1128,8 @@ smb2_set_ea(const unsigned int xid, struct cifs_tcon *tcon, rqst[2].rq_nvec = 1; rc = SMB2_close_init(tcon, server, &rqst[2], COMPOUND_FID, COMPOUND_FID, false); + if (rc) + goto sea_exit; smb2_set_related(&rqst[2]); rc = compound_send_recv(xid, ses, server, @@ -2302,14 +2306,18 @@ static void smb2_is_network_name_deleted(char *buf, struct TCP_Server_Info *server) { struct smb2_hdr *shdr = (struct smb2_hdr *)buf; + struct TCP_Server_Info *pserver; struct cifs_ses *ses; struct cifs_tcon *tcon; if (shdr->Status != STATUS_NETWORK_NAME_DELETED) return; + /* If server is a channel, select the primary channel */ + pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server; + spin_lock(&cifs_tcp_ses_lock); - list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) { + list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) { list_for_each_entry(tcon, &ses->tcon_list, tcon_list) { if (tcon->tid == le32_to_cpu(shdr->Id.SyncId.TreeId)) { spin_lock(&tcon->tc_lock); @@ -4264,21 +4272,23 @@ init_sg(int num_rqst, struct smb_rqst *rqst, u8 *sign) static int smb2_get_enc_key(struct TCP_Server_Info *server, __u64 ses_id, int enc, u8 *key) { + struct TCP_Server_Info *pserver; struct cifs_ses *ses; u8 *ses_enc_key; + /* If server is a channel, select the primary channel */ + pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server; + spin_lock(&cifs_tcp_ses_lock); - list_for_each_entry(server, &cifs_tcp_ses_list, tcp_ses_list) { - list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) { - if (ses->Suid == ses_id) { - spin_lock(&ses->ses_lock); - ses_enc_key = enc ? ses->smb3encryptionkey : - ses->smb3decryptionkey; - memcpy(key, ses_enc_key, SMB3_ENC_DEC_KEY_SIZE); - spin_unlock(&ses->ses_lock); - spin_unlock(&cifs_tcp_ses_lock); - return 0; - } + list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) { + if (ses->Suid == ses_id) { + spin_lock(&ses->ses_lock); + ses_enc_key = enc ? ses->smb3encryptionkey : + ses->smb3decryptionkey; + memcpy(key, ses_enc_key, SMB3_ENC_DEC_KEY_SIZE); + spin_unlock(&ses->ses_lock); + spin_unlock(&cifs_tcp_ses_lock); + return 0; } } spin_unlock(&cifs_tcp_ses_lock); diff --git a/fs/cifs/smb2transport.c b/fs/cifs/smb2transport.c index 8e3f26e6f6b9b46727c623012c51427e6b597e28..381babc1212c9e8a95911e6382e5ba4ff5c3cc80 100644 --- a/fs/cifs/smb2transport.c +++ b/fs/cifs/smb2transport.c @@ -77,18 +77,19 @@ static int smb2_get_sign_key(__u64 ses_id, struct TCP_Server_Info *server, u8 *key) { struct cifs_chan *chan; + struct TCP_Server_Info *pserver; struct cifs_ses *ses = NULL; - struct TCP_Server_Info *it = NULL; int i; int rc = 0; spin_lock(&cifs_tcp_ses_lock); - list_for_each_entry(it, &cifs_tcp_ses_list, tcp_ses_list) { - list_for_each_entry(ses, &it->smb_ses_list, smb_ses_list) { - if (ses->Suid == ses_id) - goto found; - } + /* If server is a channel, select the primary channel */ + pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server; + + list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) { + if (ses->Suid == ses_id) + goto found; } cifs_server_dbg(VFS, "%s: Could not find session 0x%llx\n", __func__, ses_id); @@ -136,9 +137,13 @@ int smb2_get_sign_key(__u64 ses_id, struct TCP_Server_Info *server, u8 *key) static struct cifs_ses * smb2_find_smb_ses_unlocked(struct TCP_Server_Info *server, __u64 ses_id) { + struct TCP_Server_Info *pserver; struct cifs_ses *ses; - list_for_each_entry(ses, &server->smb_ses_list, smb_ses_list) { + /* If server is a channel, select the primary channel */ + pserver = CIFS_SERVER_IS_CHAN(server) ? server->primary_server : server; + + list_for_each_entry(ses, &pserver->smb_ses_list, smb_ses_list) { if (ses->Suid != ses_id) continue; ++ses->ses_count; diff --git a/fs/erofs/fscache.c b/fs/erofs/fscache.c index fe05bc51f9f2f3f26f8de0272d99eb56c67cf96a..af5ed6b9c54dd868246135e8394380cd47726061 100644 --- a/fs/erofs/fscache.c +++ b/fs/erofs/fscache.c @@ -75,11 +75,15 @@ static void erofs_fscache_rreq_unlock_folios(struct netfs_io_request *rreq) rcu_read_lock(); xas_for_each(&xas, folio, last_page) { - unsigned int pgpos = - (folio_index(folio) - start_page) * PAGE_SIZE; - unsigned int pgend = pgpos + folio_size(folio); + unsigned int pgpos, pgend; bool pg_failed = false; + if (xas_retry(&xas, folio)) + continue; + + pgpos = (folio_index(folio) - start_page) * PAGE_SIZE; + pgend = pgpos + folio_size(folio); + for (;;) { if (!subreq) { pg_failed = true; @@ -287,22 +291,25 @@ static int erofs_fscache_data_read(struct address_space *mapping, return PTR_ERR(src); iov_iter_xarray(&iter, READ, &mapping->i_pages, pos, PAGE_SIZE); - if (copy_to_iter(src + offset, size, &iter) != size) + if (copy_to_iter(src + offset, size, &iter) != size) { + erofs_put_metabuf(&buf); return -EFAULT; + } iov_iter_zero(PAGE_SIZE - size, &iter); erofs_put_metabuf(&buf); return PAGE_SIZE; } - count = min_t(size_t, map.m_llen - (pos - map.m_la), len); - DBG_BUGON(!count || count % PAGE_SIZE); - if (!(map.m_flags & EROFS_MAP_MAPPED)) { + count = len; iov_iter_xarray(&iter, READ, &mapping->i_pages, pos, count); iov_iter_zero(count, &iter); return count; } + count = min_t(size_t, map.m_llen - (pos - map.m_la), len); + DBG_BUGON(!count || count % PAGE_SIZE); + mdev = (struct erofs_map_dev) { .m_deviceid = map.m_deviceid, .m_pa = map.m_pa, @@ -403,13 +410,13 @@ static void erofs_fscache_domain_put(struct erofs_domain *domain) static int erofs_fscache_register_volume(struct super_block *sb) { struct erofs_sb_info *sbi = EROFS_SB(sb); - char *domain_id = sbi->opt.domain_id; + char *domain_id = sbi->domain_id; struct fscache_volume *volume; char *name; int ret = 0; name = kasprintf(GFP_KERNEL, "erofs,%s", - domain_id ? domain_id : sbi->opt.fsid); + domain_id ? domain_id : sbi->fsid); if (!name) return -ENOMEM; @@ -435,7 +442,7 @@ static int erofs_fscache_init_domain(struct super_block *sb) if (!domain) return -ENOMEM; - domain->domain_id = kstrdup(sbi->opt.domain_id, GFP_KERNEL); + domain->domain_id = kstrdup(sbi->domain_id, GFP_KERNEL); if (!domain->domain_id) { kfree(domain); return -ENOMEM; @@ -472,7 +479,7 @@ static int erofs_fscache_register_domain(struct super_block *sb) mutex_lock(&erofs_domain_list_lock); list_for_each_entry(domain, &erofs_domain_list, list) { - if (!strcmp(domain->domain_id, sbi->opt.domain_id)) { + if (!strcmp(domain->domain_id, sbi->domain_id)) { sbi->domain = domain; sbi->volume = domain->volume; refcount_inc(&domain->ref); @@ -609,7 +616,7 @@ struct erofs_fscache *erofs_domain_register_cookie(struct super_block *sb, struct erofs_fscache *erofs_fscache_register_cookie(struct super_block *sb, char *name, bool need_inode) { - if (EROFS_SB(sb)->opt.domain_id) + if (EROFS_SB(sb)->domain_id) return erofs_domain_register_cookie(sb, name, need_inode); return erofs_fscache_acquire_cookie(sb, name, need_inode); } @@ -641,7 +648,7 @@ int erofs_fscache_register_fs(struct super_block *sb) struct erofs_sb_info *sbi = EROFS_SB(sb); struct erofs_fscache *fscache; - if (sbi->opt.domain_id) + if (sbi->domain_id) ret = erofs_fscache_register_domain(sb); else ret = erofs_fscache_register_volume(sb); @@ -649,7 +656,7 @@ int erofs_fscache_register_fs(struct super_block *sb) return ret; /* acquired domain/volume will be relinquished in kill_sb() on error */ - fscache = erofs_fscache_register_cookie(sb, sbi->opt.fsid, true); + fscache = erofs_fscache_register_cookie(sb, sbi->fsid, true); if (IS_ERR(fscache)) return PTR_ERR(fscache); diff --git a/fs/erofs/internal.h b/fs/erofs/internal.h index 1701df48c4464977d8e0524024ce42ff55985914..05dc686277220e3f822a89ca036af82bed2ff063 100644 --- a/fs/erofs/internal.h +++ b/fs/erofs/internal.h @@ -75,8 +75,6 @@ struct erofs_mount_opts { unsigned int max_sync_decompress_pages; #endif unsigned int mount_opt; - char *fsid; - char *domain_id; }; struct erofs_dev_context { @@ -89,6 +87,8 @@ struct erofs_dev_context { struct erofs_fs_context { struct erofs_mount_opts opt; struct erofs_dev_context *devs; + char *fsid; + char *domain_id; }; /* all filesystem-wide lz4 configurations */ @@ -170,6 +170,8 @@ struct erofs_sb_info { struct fscache_volume *volume; struct erofs_fscache *s_fscache; struct erofs_domain *domain; + char *fsid; + char *domain_id; }; #define EROFS_SB(sb) ((struct erofs_sb_info *)(sb)->s_fs_info) diff --git a/fs/erofs/super.c b/fs/erofs/super.c index 2cf96ce1c32eed444fbf89f4aa90e4f79fbee42c..1c7dcca702b3e3ff96df72a35e54869f3bb8d460 100644 --- a/fs/erofs/super.c +++ b/fs/erofs/super.c @@ -579,9 +579,9 @@ static int erofs_fc_parse_param(struct fs_context *fc, break; case Opt_fsid: #ifdef CONFIG_EROFS_FS_ONDEMAND - kfree(ctx->opt.fsid); - ctx->opt.fsid = kstrdup(param->string, GFP_KERNEL); - if (!ctx->opt.fsid) + kfree(ctx->fsid); + ctx->fsid = kstrdup(param->string, GFP_KERNEL); + if (!ctx->fsid) return -ENOMEM; #else errorfc(fc, "fsid option not supported"); @@ -589,9 +589,9 @@ static int erofs_fc_parse_param(struct fs_context *fc, break; case Opt_domain_id: #ifdef CONFIG_EROFS_FS_ONDEMAND - kfree(ctx->opt.domain_id); - ctx->opt.domain_id = kstrdup(param->string, GFP_KERNEL); - if (!ctx->opt.domain_id) + kfree(ctx->domain_id); + ctx->domain_id = kstrdup(param->string, GFP_KERNEL); + if (!ctx->domain_id) return -ENOMEM; #else errorfc(fc, "domain_id option not supported"); @@ -728,10 +728,12 @@ static int erofs_fc_fill_super(struct super_block *sb, struct fs_context *fc) sb->s_fs_info = sbi; sbi->opt = ctx->opt; - ctx->opt.fsid = NULL; - ctx->opt.domain_id = NULL; sbi->devs = ctx->devs; ctx->devs = NULL; + sbi->fsid = ctx->fsid; + ctx->fsid = NULL; + sbi->domain_id = ctx->domain_id; + ctx->domain_id = NULL; if (erofs_is_fscache_mode(sb)) { sb->s_blocksize = EROFS_BLKSIZ; @@ -820,7 +822,7 @@ static int erofs_fc_get_tree(struct fs_context *fc) { struct erofs_fs_context *ctx = fc->fs_private; - if (IS_ENABLED(CONFIG_EROFS_FS_ONDEMAND) && ctx->opt.fsid) + if (IS_ENABLED(CONFIG_EROFS_FS_ONDEMAND) && ctx->fsid) return get_tree_nodev(fc, erofs_fc_fill_super); return get_tree_bdev(fc, erofs_fc_fill_super); @@ -834,6 +836,9 @@ static int erofs_fc_reconfigure(struct fs_context *fc) DBG_BUGON(!sb_rdonly(sb)); + if (ctx->fsid || ctx->domain_id) + erofs_info(sb, "ignoring reconfiguration for fsid|domain_id."); + if (test_opt(&ctx->opt, POSIX_ACL)) fc->sb_flags |= SB_POSIXACL; else @@ -873,8 +878,8 @@ static void erofs_fc_free(struct fs_context *fc) struct erofs_fs_context *ctx = fc->fs_private; erofs_free_dev_context(ctx->devs); - kfree(ctx->opt.fsid); - kfree(ctx->opt.domain_id); + kfree(ctx->fsid); + kfree(ctx->domain_id); kfree(ctx); } @@ -944,8 +949,8 @@ static void erofs_kill_sb(struct super_block *sb) erofs_free_dev_context(sbi->devs); fs_put_dax(sbi->dax_dev, NULL); erofs_fscache_unregister_fs(sb); - kfree(sbi->opt.fsid); - kfree(sbi->opt.domain_id); + kfree(sbi->fsid); + kfree(sbi->domain_id); kfree(sbi); sb->s_fs_info = NULL; } @@ -1098,10 +1103,10 @@ static int erofs_show_options(struct seq_file *seq, struct dentry *root) if (test_opt(opt, DAX_NEVER)) seq_puts(seq, ",dax=never"); #ifdef CONFIG_EROFS_FS_ONDEMAND - if (opt->fsid) - seq_printf(seq, ",fsid=%s", opt->fsid); - if (opt->domain_id) - seq_printf(seq, ",domain_id=%s", opt->domain_id); + if (sbi->fsid) + seq_printf(seq, ",fsid=%s", sbi->fsid); + if (sbi->domain_id) + seq_printf(seq, ",domain_id=%s", sbi->domain_id); #endif return 0; } diff --git a/fs/erofs/sysfs.c b/fs/erofs/sysfs.c index 783bb7b21b514a67a9da748c786e59c8ab6522db..fd476961f742f074359033d4752ebc96480e1d10 100644 --- a/fs/erofs/sysfs.c +++ b/fs/erofs/sysfs.c @@ -210,14 +210,14 @@ int erofs_register_sysfs(struct super_block *sb) int err; if (erofs_is_fscache_mode(sb)) { - if (sbi->opt.domain_id) { - str = kasprintf(GFP_KERNEL, "%s,%s", sbi->opt.domain_id, - sbi->opt.fsid); + if (sbi->domain_id) { + str = kasprintf(GFP_KERNEL, "%s,%s", sbi->domain_id, + sbi->fsid); if (!str) return -ENOMEM; name = str; } else { - name = sbi->opt.fsid; + name = sbi->fsid; } } else { name = sb->s_id; diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c index c7f24fc7efd590c14246599a17a94ebf266bdb6f..b792d424d774cd37ce9646f0473b2dae5a1e23e7 100644 --- a/fs/erofs/zdata.c +++ b/fs/erofs/zdata.c @@ -660,6 +660,9 @@ static int z_erofs_read_fragment(struct inode *inode, erofs_off_t pos, u8 *src, *dst; unsigned int i, cnt; + if (!packed_inode) + return -EFSCORRUPTED; + pos += EROFS_I(inode)->z_fragmentoff; for (i = 0; i < len; i += cnt) { cnt = min_t(unsigned int, len - i, @@ -1412,8 +1415,8 @@ static void z_erofs_submit_queue(struct z_erofs_decompress_frontend *f, struct block_device *last_bdev; unsigned int nr_bios = 0; struct bio *bio = NULL; - /* initialize to 1 to make skip psi_memstall_leave unless needed */ - unsigned long pflags = 1; + unsigned long pflags; + int memstall = 0; bi_private = jobqueueset_init(sb, q, fgq, force_fg); qtail[JQ_BYPASS] = &q[JQ_BYPASS]->head; @@ -1463,14 +1466,18 @@ static void z_erofs_submit_queue(struct z_erofs_decompress_frontend *f, if (bio && (cur != last_index + 1 || last_bdev != mdev.m_bdev)) { submit_bio_retry: - if (!pflags) - psi_memstall_leave(&pflags); submit_bio(bio); + if (memstall) { + psi_memstall_leave(&pflags); + memstall = 0; + } bio = NULL; } - if (unlikely(PageWorkingset(page))) + if (unlikely(PageWorkingset(page)) && !memstall) { psi_memstall_enter(&pflags); + memstall = 1; + } if (!bio) { bio = bio_alloc(mdev.m_bdev, BIO_MAX_VECS, @@ -1500,9 +1507,9 @@ static void z_erofs_submit_queue(struct z_erofs_decompress_frontend *f, } while (owned_head != Z_EROFS_PCLUSTER_TAIL); if (bio) { - if (!pflags) - psi_memstall_leave(&pflags); submit_bio(bio); + if (memstall) + psi_memstall_leave(&pflags); } /* diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index f1956288307f39f497cc088b77bdc4363b3f0fed..6c399a8b22b3512e2da1993258a2d172843c6e9f 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -5184,6 +5184,7 @@ ext4_ext_shift_extents(struct inode *inode, handle_t *handle, * and it is decreased till we reach start. */ again: + ret = 0; if (SHIFT == SHIFT_LEFT) iterator = &start; else @@ -5227,14 +5228,21 @@ ext4_ext_shift_extents(struct inode *inode, handle_t *handle, ext4_ext_get_actual_len(extent); } else { extent = EXT_FIRST_EXTENT(path[depth].p_hdr); - if (le32_to_cpu(extent->ee_block) > 0) + if (le32_to_cpu(extent->ee_block) > start) *iterator = le32_to_cpu(extent->ee_block) - 1; - else - /* Beginning is reached, end of the loop */ + else if (le32_to_cpu(extent->ee_block) == start) iterator = NULL; - /* Update path extent in case we need to stop */ - while (le32_to_cpu(extent->ee_block) < start) + else { + extent = EXT_LAST_EXTENT(path[depth].p_hdr); + while (le32_to_cpu(extent->ee_block) >= start) + extent--; + + if (extent == EXT_LAST_EXTENT(path[depth].p_hdr)) + break; + extent++; + iterator = NULL; + } path[depth].p_ext = extent; } ret = ext4_ext_shift_path_extents(path, shift, inode, diff --git a/fs/ext4/fast_commit.c b/fs/ext4/fast_commit.c index ef05bfa87798c12f2ebba8ff56ee58a5ab5343bf..0f6d0a80467d7eb0f5cefff63d04b250a59bf3f8 100644 --- a/fs/ext4/fast_commit.c +++ b/fs/ext4/fast_commit.c @@ -1521,6 +1521,7 @@ static int ext4_fc_replay_inode(struct super_block *sb, struct ext4_fc_tl *tl, struct ext4_iloc iloc; int inode_len, ino, ret, tag = tl->fc_tag; struct ext4_extent_header *eh; + size_t off_gen = offsetof(struct ext4_inode, i_generation); memcpy(&fc_inode, val, sizeof(fc_inode)); @@ -1548,8 +1549,8 @@ static int ext4_fc_replay_inode(struct super_block *sb, struct ext4_fc_tl *tl, raw_inode = ext4_raw_inode(&iloc); memcpy(raw_inode, raw_fc_inode, offsetof(struct ext4_inode, i_block)); - memcpy(&raw_inode->i_generation, &raw_fc_inode->i_generation, - inode_len - offsetof(struct ext4_inode, i_generation)); + memcpy((u8 *)raw_inode + off_gen, (u8 *)raw_fc_inode + off_gen, + inode_len - off_gen); if (le32_to_cpu(raw_inode->i_flags) & EXT4_EXTENTS_FL) { eh = (struct ext4_extent_header *)(&raw_inode->i_block[0]); if (eh->eh_magic != EXT4_EXT_MAGIC) { diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c index ded535535b27bc394a56e4d6b9d2fd52e5839812..95dfea28bf4e99433645c185af401e68c1c588e3 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c @@ -145,9 +145,8 @@ static int ext4_update_backup_sb(struct super_block *sb, if (ext4_has_metadata_csum(sb) && es->s_checksum != ext4_superblock_csum(sb, es)) { ext4_msg(sb, KERN_ERR, "Invalid checksum for backup " - "superblock %llu\n", sb_block); + "superblock %llu", sb_block); unlock_buffer(bh); - err = -EFSBADCRC; goto out_bh; } func(es, arg); diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c index 0a220ec9862de3ca520d609ec2803008b0412556..a19a9661646ebfa87cf0813bd29dd7eda2f668f7 100644 --- a/fs/ext4/migrate.c +++ b/fs/ext4/migrate.c @@ -424,7 +424,8 @@ int ext4_ext_migrate(struct inode *inode) * already is extent-based, error out. */ if (!ext4_has_feature_extents(inode->i_sb) || - (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) + ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS) || + ext4_has_inline_data(inode)) return -EINVAL; if (S_ISLNK(inode->i_mode) && inode->i_blocks == 0) diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index d5daaf41e1fc9e982c432801d1d5053ca269b08d..c08c0aba188366c9187c6a2f3b0b2c83e55d849d 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c @@ -2259,8 +2259,16 @@ static int make_indexed_dir(handle_t *handle, struct ext4_filename *fname, memset(de, 0, len); /* wipe old data */ de = (struct ext4_dir_entry_2 *) data2; top = data2 + len; - while ((char *)(de2 = ext4_next_entry(de, blocksize)) < top) + while ((char *)(de2 = ext4_next_entry(de, blocksize)) < top) { + if (ext4_check_dir_entry(dir, NULL, de, bh2, data2, len, + (data2 + (blocksize - csum_size) - + (char *) de))) { + brelse(bh2); + brelse(bh); + return -EFSCORRUPTED; + } de = de2; + } de->rec_len = ext4_rec_len_to_disk(data2 + (blocksize - csum_size) - (char *) de, blocksize); diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c index 6dfe9ccae0c50c2ba92cc24e9b7489072f4e42a4..46b87ffeb3045e6603535bc070a4b87223f1b06e 100644 --- a/fs/ext4/resize.c +++ b/fs/ext4/resize.c @@ -1158,6 +1158,7 @@ static void update_backups(struct super_block *sb, sector_t blk_off, char *data, while (group < sbi->s_groups_count) { struct buffer_head *bh; ext4_fsblk_t backup_block; + struct ext4_super_block *es; /* Out of journal space, and can't get more - abort - so sad */ err = ext4_resize_ensure_credits_batch(handle, 1); @@ -1186,6 +1187,10 @@ static void update_backups(struct super_block *sb, sector_t blk_off, char *data, memcpy(bh->b_data, data, size); if (rest) memset(bh->b_data + size, 0, rest); + es = (struct ext4_super_block *) bh->b_data; + es->s_block_group_nr = cpu_to_le16(group); + if (ext4_has_metadata_csum(sb)) + es->s_checksum = ext4_superblock_csum(sb, es); set_buffer_uptodate(bh); unlock_buffer(bh); err = ext4_handle_dirty_metadata(handle, NULL, bh); diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 7950904fbf04fdb00eda8344cd9d8ba373edc33e..7cdd2138c897273892c68fbfe38d52d2180a85ee 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -4881,7 +4881,7 @@ static int ext4_load_and_init_journal(struct super_block *sb, flush_work(&sbi->s_error_work); jbd2_journal_destroy(sbi->s_journal); sbi->s_journal = NULL; - return err; + return -EINVAL; } static int ext4_journal_data_mode_check(struct super_block *sb) diff --git a/fs/file.c b/fs/file.c index 5f9c802a5d8d34454f2382196ef9d81b43e76bd9..c942c89ca4cda90b94eaf724a2dabd63853bb52e 100644 --- a/fs/file.c +++ b/fs/file.c @@ -1003,7 +1003,16 @@ static unsigned long __fget_light(unsigned int fd, fmode_t mask) struct files_struct *files = current->files; struct file *file; - if (atomic_read(&files->count) == 1) { + /* + * If another thread is concurrently calling close_fd() followed + * by put_files_struct(), we must not observe the old table + * entry combined with the new refcount - otherwise we could + * return a file that is concurrently being freed. + * + * atomic_read_acquire() pairs with atomic_dec_and_test() in + * put_files_struct(). + */ + if (atomic_read_acquire(&files->count) == 1) { file = files_lookup_fd_raw(files, fd); if (!file || unlikely(file->f_mode & mask)) return 0; diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 443f83382b9bdda308451ab285dccec25b4e9edc..9958d40207712845c41934839a9c810bad54288a 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -1712,18 +1712,26 @@ static int writeback_single_inode(struct inode *inode, wb = inode_to_wb_and_lock_list(inode); spin_lock(&inode->i_lock); /* - * If the inode is now fully clean, then it can be safely removed from - * its writeback list (if any). Otherwise the flusher threads are - * responsible for the writeback lists. + * If the inode is freeing, its i_io_list shoudn't be updated + * as it can be finally deleted at this moment. */ - if (!(inode->i_state & I_DIRTY_ALL)) - inode_cgwb_move_to_attached(inode, wb); - else if (!(inode->i_state & I_SYNC_QUEUED)) { - if ((inode->i_state & I_DIRTY)) - redirty_tail_locked(inode, wb); - else if (inode->i_state & I_DIRTY_TIME) { - inode->dirtied_when = jiffies; - inode_io_list_move_locked(inode, wb, &wb->b_dirty_time); + if (!(inode->i_state & I_FREEING)) { + /* + * If the inode is now fully clean, then it can be safely + * removed from its writeback list (if any). Otherwise the + * flusher threads are responsible for the writeback lists. + */ + if (!(inode->i_state & I_DIRTY_ALL)) + inode_cgwb_move_to_attached(inode, wb); + else if (!(inode->i_state & I_SYNC_QUEUED)) { + if ((inode->i_state & I_DIRTY)) + redirty_tail_locked(inode, wb); + else if (inode->i_state & I_DIRTY_TIME) { + inode->dirtied_when = jiffies; + inode_io_list_move_locked(inode, + wb, + &wb->b_dirty_time); + } } } diff --git a/fs/fscache/volume.c b/fs/fscache/volume.c index a058e0136bfebfc8fb5771f3826c91a5cbe5e5cc..ab8ceddf9efad9d16ed5ecfaa54606fea53412b5 100644 --- a/fs/fscache/volume.c +++ b/fs/fscache/volume.c @@ -203,7 +203,11 @@ static struct fscache_volume *fscache_alloc_volume(const char *volume_key, struct fscache_volume *volume; struct fscache_cache *cache; size_t klen, hlen; - char *key; + u8 *key; + + klen = strlen(volume_key); + if (klen > NAME_MAX) + return NULL; if (!coherency_data) coherency_len = 0; @@ -229,7 +233,6 @@ static struct fscache_volume *fscache_alloc_volume(const char *volume_key, /* Stick the length on the front of the key and pad it out to make * hashing easier. */ - klen = strlen(volume_key); hlen = round_up(1 + klen + 1, sizeof(__le32)); key = kzalloc(hlen, GFP_KERNEL); if (!key) diff --git a/fs/fuse/file.c b/fs/fuse/file.c index 1a3afd469e3a9d2dd757bc64f8b60bc5965120ac..89f4741728ba3473646371d383a8e3c1b7cc343d 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c @@ -2963,11 +2963,9 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset, .mode = mode }; int err; - bool lock_inode = !(mode & FALLOC_FL_KEEP_SIZE) || - (mode & (FALLOC_FL_PUNCH_HOLE | - FALLOC_FL_ZERO_RANGE)); - - bool block_faults = FUSE_IS_DAX(inode) && lock_inode; + bool block_faults = FUSE_IS_DAX(inode) && + (!(mode & FALLOC_FL_KEEP_SIZE) || + (mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE))); if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE)) @@ -2976,22 +2974,20 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset, if (fm->fc->no_fallocate) return -EOPNOTSUPP; - if (lock_inode) { - inode_lock(inode); - if (block_faults) { - filemap_invalidate_lock(inode->i_mapping); - err = fuse_dax_break_layouts(inode, 0, 0); - if (err) - goto out; - } + inode_lock(inode); + if (block_faults) { + filemap_invalidate_lock(inode->i_mapping); + err = fuse_dax_break_layouts(inode, 0, 0); + if (err) + goto out; + } - if (mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE)) { - loff_t endbyte = offset + length - 1; + if (mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE)) { + loff_t endbyte = offset + length - 1; - err = fuse_writeback_range(inode, offset, endbyte); - if (err) - goto out; - } + err = fuse_writeback_range(inode, offset, endbyte); + if (err) + goto out; } if (!(mode & FALLOC_FL_KEEP_SIZE) && @@ -3001,6 +2997,10 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset, goto out; } + err = file_modified(file); + if (err) + goto out; + if (!(mode & FALLOC_FL_KEEP_SIZE)) set_bit(FUSE_I_SIZE_UNSTABLE, &fi->state); @@ -3035,8 +3035,7 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset, if (block_faults) filemap_invalidate_unlock(inode->i_mapping); - if (lock_inode) - inode_unlock(inode); + inode_unlock(inode); fuse_flush_time_update(inode); diff --git a/fs/fuse/readdir.c b/fs/fuse/readdir.c index b4e56571104575509c25c8892197284846f6c94f..e8deaacf1832a184a98733e19b093d6876e86e7b 100644 --- a/fs/fuse/readdir.c +++ b/fs/fuse/readdir.c @@ -77,8 +77,10 @@ static void fuse_add_dirent_to_cache(struct file *file, goto unlock; addr = kmap_local_page(page); - if (!offset) + if (!offset) { clear_page(addr); + SetPageUptodate(page); + } memcpy(addr + offset, dirent, reclen); kunmap_local(addr); fi->rdc.size = (index << PAGE_SHIFT) + offset + reclen; @@ -516,6 +518,12 @@ static int fuse_readdir_cached(struct file *file, struct dir_context *ctx) page = find_get_page_flags(file->f_mapping, index, FGP_ACCESSED | FGP_LOCK); + /* Page gone missing, then re-added to cache, but not initialized? */ + if (page && !PageUptodate(page)) { + unlock_page(page); + put_page(page); + page = NULL; + } spin_lock(&fi->rdc.lock); if (!page) { /* diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index dd54f67e47fdf145ab602571f821daee713eaf9c..df7772335dc0e41cfbebfca782d5f64cbc26cccc 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -328,6 +328,12 @@ static ssize_t hugetlbfs_read_iter(struct kiocb *iocb, struct iov_iter *to) } else { unlock_page(page); + if (PageHWPoison(page)) { + put_page(page); + retval = -EIO; + break; + } + /* * We have the page, copy it to user space buffer. */ @@ -1111,13 +1117,6 @@ static int hugetlbfs_migrate_folio(struct address_space *mapping, static int hugetlbfs_error_remove_page(struct address_space *mapping, struct page *page) { - struct inode *inode = mapping->host; - pgoff_t index = page->index; - - hugetlb_delete_from_page_cache(page); - if (unlikely(hugetlb_unreserve_pages(inode, index, index + 1, 1))) - hugetlb_fix_reserve_counts(inode); - return 0; } diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c index 3990f3e270cb67707c019703ac9868b0b7523617..f33b3baad07cb36d2e533353de52a7dde5a626f7 100644 --- a/fs/kernfs/dir.c +++ b/fs/kernfs/dir.c @@ -31,10 +31,15 @@ static DEFINE_SPINLOCK(kernfs_idr_lock); /* root->ino_idr */ #define rb_to_kn(X) rb_entry((X), struct kernfs_node, rb) +static bool __kernfs_active(struct kernfs_node *kn) +{ + return atomic_read(&kn->active) >= 0; +} + static bool kernfs_active(struct kernfs_node *kn) { lockdep_assert_held(&kernfs_root(kn)->kernfs_rwsem); - return atomic_read(&kn->active) >= 0; + return __kernfs_active(kn); } static bool kernfs_lockdep(struct kernfs_node *kn) @@ -705,7 +710,12 @@ struct kernfs_node *kernfs_find_and_get_node_by_id(struct kernfs_root *root, goto err_unlock; } - if (unlikely(!kernfs_active(kn) || !atomic_inc_not_zero(&kn->count))) + /* + * We should fail if @kn has never been activated and guarantee success + * if the caller knows that @kn is active. Both can be achieved by + * __kernfs_active() which tests @kn->active without kernfs_rwsem. + */ + if (unlikely(!__kernfs_active(kn) || !atomic_inc_not_zero(&kn->count))) goto err_unlock; spin_unlock(&kernfs_idr_lock); diff --git a/fs/ksmbd/vfs.c b/fs/ksmbd/vfs.c index 8de970d6146f2b09e7977450b4c56abe3585f6db..94b8ed4ef8707c1476405ccc2e825b94952603cf 100644 --- a/fs/ksmbd/vfs.c +++ b/fs/ksmbd/vfs.c @@ -1794,9 +1794,9 @@ int ksmbd_vfs_copy_file_ranges(struct ksmbd_work *work, ret = vfs_copy_file_range(src_fp->filp, src_off, dst_fp->filp, dst_off, len, 0); if (ret == -EOPNOTSUPP || ret == -EXDEV) - ret = generic_copy_file_range(src_fp->filp, src_off, - dst_fp->filp, dst_off, - len, 0); + ret = vfs_copy_file_range(src_fp->filp, src_off, + dst_fp->filp, dst_off, len, + COPY_FILE_SPLICE); if (ret < 0) return ret; diff --git a/fs/namei.c b/fs/namei.c index 578c2110df0223fbdb952e3e002de5feaa2d1446..9155ecb547ce62464dd8b304e63ed73b7cf2b73e 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -3591,6 +3591,7 @@ static int vfs_tmpfile(struct user_namespace *mnt_userns, struct inode *dir = d_inode(parentpath->dentry); struct inode *inode; int error; + int open_flag = file->f_flags; /* we want directory to be writable */ error = inode_permission(mnt_userns, dir, MAY_WRITE | MAY_EXEC); @@ -3613,7 +3614,7 @@ static int vfs_tmpfile(struct user_namespace *mnt_userns, if (error) return error; inode = file_inode(file); - if (!(file->f_flags & O_EXCL)) { + if (!(open_flag & O_EXCL)) { spin_lock(&inode->i_lock); inode->i_state |= I_LINKABLE; spin_unlock(&inode->i_lock); diff --git a/fs/netfs/buffered_read.c b/fs/netfs/buffered_read.c index 0ce5358521510694f21b9dd1133081e182593be7..7679a68e8193070bdf22e3554c102e25bf6621e2 100644 --- a/fs/netfs/buffered_read.c +++ b/fs/netfs/buffered_read.c @@ -17,9 +17,9 @@ void netfs_rreq_unlock_folios(struct netfs_io_request *rreq) { struct netfs_io_subrequest *subreq; struct folio *folio; - unsigned int iopos, account = 0; pgoff_t start_page = rreq->start / PAGE_SIZE; pgoff_t last_page = ((rreq->start + rreq->len) / PAGE_SIZE) - 1; + size_t account = 0; bool subreq_failed = false; XA_STATE(xas, &rreq->mapping->i_pages, start_page); @@ -39,18 +39,23 @@ void netfs_rreq_unlock_folios(struct netfs_io_request *rreq) */ subreq = list_first_entry(&rreq->subrequests, struct netfs_io_subrequest, rreq_link); - iopos = 0; subreq_failed = (subreq->error < 0); trace_netfs_rreq(rreq, netfs_rreq_trace_unlock); rcu_read_lock(); xas_for_each(&xas, folio, last_page) { - unsigned int pgpos = (folio_index(folio) - start_page) * PAGE_SIZE; - unsigned int pgend = pgpos + folio_size(folio); + loff_t pg_end; bool pg_failed = false; + if (xas_retry(&xas, folio)) + continue; + + pg_end = folio_pos(folio) + folio_size(folio) - 1; + for (;;) { + loff_t sreq_end; + if (!subreq) { pg_failed = true; break; @@ -58,11 +63,11 @@ void netfs_rreq_unlock_folios(struct netfs_io_request *rreq) if (test_bit(NETFS_SREQ_COPY_TO_CACHE, &subreq->flags)) folio_start_fscache(folio); pg_failed |= subreq_failed; - if (pgend < iopos + subreq->len) + sreq_end = subreq->start + subreq->len - 1; + if (pg_end < sreq_end) break; account += subreq->transferred; - iopos += subreq->len; if (!list_is_last(&subreq->rreq_link, &rreq->subrequests)) { subreq = list_next_entry(subreq, rreq_link); subreq_failed = (subreq->error < 0); @@ -70,7 +75,8 @@ void netfs_rreq_unlock_folios(struct netfs_io_request *rreq) subreq = NULL; subreq_failed = false; } - if (pgend == iopos) + + if (pg_end == sreq_end) break; } diff --git a/fs/netfs/io.c b/fs/netfs/io.c index 4289258992826bd298323fde25592209dcbfaad3..e374767d1b6832745e9c59249d426c331669f95b 100644 --- a/fs/netfs/io.c +++ b/fs/netfs/io.c @@ -121,6 +121,9 @@ static void netfs_rreq_unmark_after_write(struct netfs_io_request *rreq, XA_STATE(xas, &rreq->mapping->i_pages, subreq->start / PAGE_SIZE); xas_for_each(&xas, folio, (subreq->start + subreq->len - 1) / PAGE_SIZE) { + if (xas_retry(&xas, folio)) + continue; + /* We might have multiple writes from the same huge * folio, but we mustn't unlock a folio more than once. */ diff --git a/fs/nfs/client.c b/fs/nfs/client.c index da8da5cdbbc1f39c47755eb5d91659b893510555..f50e025ae40640f14e3d79771c576f6ea1a8246f 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c @@ -280,7 +280,7 @@ EXPORT_SYMBOL_GPL(nfs_put_client); static struct nfs_client *nfs_match_client(const struct nfs_client_initdata *data) { struct nfs_client *clp; - const struct sockaddr *sap = data->addr; + const struct sockaddr *sap = (struct sockaddr *)data->addr; struct nfs_net *nn = net_generic(data->net, nfs_net_id); int error; @@ -666,7 +666,7 @@ static int nfs_init_server(struct nfs_server *server, struct rpc_timeout timeparms; struct nfs_client_initdata cl_init = { .hostname = ctx->nfs_server.hostname, - .addr = (const struct sockaddr *)&ctx->nfs_server.address, + .addr = &ctx->nfs_server._address, .addrlen = ctx->nfs_server.addrlen, .nfs_mod = ctx->nfs_mod, .proto = ctx->nfs_server.protocol, diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c index 5c97cad741a73f4e328cb4a277c05e3a1aec26fa..ead8a0e06abf9abdc179601f61ee3a3fe2c4736c 100644 --- a/fs/nfs/delegation.c +++ b/fs/nfs/delegation.c @@ -228,8 +228,7 @@ static int nfs_delegation_claim_opens(struct inode *inode, * */ void nfs_inode_reclaim_delegation(struct inode *inode, const struct cred *cred, - fmode_t type, - const nfs4_stateid *stateid, + fmode_t type, const nfs4_stateid *stateid, unsigned long pagemod_limit) { struct nfs_delegation *delegation; @@ -239,25 +238,24 @@ void nfs_inode_reclaim_delegation(struct inode *inode, const struct cred *cred, delegation = rcu_dereference(NFS_I(inode)->delegation); if (delegation != NULL) { spin_lock(&delegation->lock); - if (nfs4_is_valid_delegation(delegation, 0)) { - nfs4_stateid_copy(&delegation->stateid, stateid); - delegation->type = type; - delegation->pagemod_limit = pagemod_limit; - oldcred = delegation->cred; - delegation->cred = get_cred(cred); - clear_bit(NFS_DELEGATION_NEED_RECLAIM, - &delegation->flags); - spin_unlock(&delegation->lock); - rcu_read_unlock(); - put_cred(oldcred); - trace_nfs4_reclaim_delegation(inode, type); - return; - } - /* We appear to have raced with a delegation return. */ + nfs4_stateid_copy(&delegation->stateid, stateid); + delegation->type = type; + delegation->pagemod_limit = pagemod_limit; + oldcred = delegation->cred; + delegation->cred = get_cred(cred); + clear_bit(NFS_DELEGATION_NEED_RECLAIM, &delegation->flags); + if (test_and_clear_bit(NFS_DELEGATION_REVOKED, + &delegation->flags)) + atomic_long_inc(&nfs_active_delegations); spin_unlock(&delegation->lock); + rcu_read_unlock(); + put_cred(oldcred); + trace_nfs4_reclaim_delegation(inode, type); + } else { + rcu_read_unlock(); + nfs_inode_set_delegation(inode, cred, type, stateid, + pagemod_limit); } - rcu_read_unlock(); - nfs_inode_set_delegation(inode, cred, type, stateid, pagemod_limit); } static int nfs_do_return_delegation(struct inode *inode, struct nfs_delegation *delegation, int issync) diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 58036f657126878e54eca3448f10032b26b7320c..f594dac436a7e9fafd7fd8624754dc4dcf0aca23 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -2489,9 +2489,8 @@ int nfs_unlink(struct inode *dir, struct dentry *dentry) spin_unlock(&dentry->d_lock); goto out; } - if (dentry->d_fsdata) - /* old devname */ - kfree(dentry->d_fsdata); + /* old devname */ + kfree(dentry->d_fsdata); dentry->d_fsdata = NFS_FSDATA_BLOCKED; spin_unlock(&dentry->d_lock); diff --git a/fs/nfs/dns_resolve.c b/fs/nfs/dns_resolve.c index e87d500ad95aad74ae48e76896e29d8f02df7778..6603b5cee029c0b04e6fdb0eb46be09252628d86 100644 --- a/fs/nfs/dns_resolve.c +++ b/fs/nfs/dns_resolve.c @@ -16,8 +16,9 @@ #include "dns_resolve.h" ssize_t nfs_dns_resolve_name(struct net *net, char *name, size_t namelen, - struct sockaddr *sa, size_t salen) + struct sockaddr_storage *ss, size_t salen) { + struct sockaddr *sa = (struct sockaddr *)ss; ssize_t ret; char *ip_addr = NULL; int ip_len; @@ -341,7 +342,7 @@ static int do_cache_lookup_wait(struct cache_detail *cd, } ssize_t nfs_dns_resolve_name(struct net *net, char *name, - size_t namelen, struct sockaddr *sa, size_t salen) + size_t namelen, struct sockaddr_storage *ss, size_t salen) { struct nfs_dns_ent key = { .hostname = name, @@ -354,7 +355,7 @@ ssize_t nfs_dns_resolve_name(struct net *net, char *name, ret = do_cache_lookup_wait(nn->nfs_dns_resolve, &key, &item); if (ret == 0) { if (salen >= item->addrlen) { - memcpy(sa, &item->addr, item->addrlen); + memcpy(ss, &item->addr, item->addrlen); ret = item->addrlen; } else ret = -EOVERFLOW; diff --git a/fs/nfs/dns_resolve.h b/fs/nfs/dns_resolve.h index 576ff4b54c82a84a1bfff8f970c2e309f40f0744..fe3b172c4de1d651089f2710acd38566902400ff 100644 --- a/fs/nfs/dns_resolve.h +++ b/fs/nfs/dns_resolve.h @@ -32,6 +32,6 @@ extern void nfs_dns_resolver_cache_destroy(struct net *net); #endif extern ssize_t nfs_dns_resolve_name(struct net *net, char *name, - size_t namelen, struct sockaddr *sa, size_t salen); + size_t namelen, struct sockaddr_storage *sa, size_t salen); #endif diff --git a/fs/nfs/fs_context.c b/fs/nfs/fs_context.c index 4da701fd1424f4e6b884aef4d98f0c2c9b900e48..09833ec102fca9a91754f47555aa2c68cbd9ff38 100644 --- a/fs/nfs/fs_context.c +++ b/fs/nfs/fs_context.c @@ -273,9 +273,9 @@ static const struct constant_table nfs_secflavor_tokens[] = { * Address family must be initialized, and address must not be * the ANY address for that family. */ -static int nfs_verify_server_address(struct sockaddr *addr) +static int nfs_verify_server_address(struct sockaddr_storage *addr) { - switch (addr->sa_family) { + switch (addr->ss_family) { case AF_INET: { struct sockaddr_in *sa = (struct sockaddr_in *)addr; return sa->sin_addr.s_addr != htonl(INADDR_ANY); @@ -969,7 +969,7 @@ static int nfs23_parse_monolithic(struct fs_context *fc, { struct nfs_fs_context *ctx = nfs_fc2context(fc); struct nfs_fh *mntfh = ctx->mntfh; - struct sockaddr *sap = (struct sockaddr *)&ctx->nfs_server.address; + struct sockaddr_storage *sap = &ctx->nfs_server._address; int extra_flags = NFS_MOUNT_LEGACY_INTERFACE; int ret; @@ -1044,7 +1044,7 @@ static int nfs23_parse_monolithic(struct fs_context *fc, memcpy(sap, &data->addr, sizeof(data->addr)); ctx->nfs_server.addrlen = sizeof(data->addr); ctx->nfs_server.port = ntohs(data->addr.sin_port); - if (sap->sa_family != AF_INET || + if (sap->ss_family != AF_INET || !nfs_verify_server_address(sap)) goto out_no_address; @@ -1200,7 +1200,7 @@ static int nfs4_parse_monolithic(struct fs_context *fc, struct nfs4_mount_data *data) { struct nfs_fs_context *ctx = nfs_fc2context(fc); - struct sockaddr *sap = (struct sockaddr *)&ctx->nfs_server.address; + struct sockaddr_storage *sap = &ctx->nfs_server._address; int ret; char *c; @@ -1314,7 +1314,7 @@ static int nfs_fs_context_validate(struct fs_context *fc) { struct nfs_fs_context *ctx = nfs_fc2context(fc); struct nfs_subversion *nfs_mod; - struct sockaddr *sap = (struct sockaddr *)&ctx->nfs_server.address; + struct sockaddr_storage *sap = &ctx->nfs_server._address; int max_namelen = PAGE_SIZE; int max_pathlen = NFS_MAXPATHLEN; int port = 0; @@ -1540,7 +1540,7 @@ static int nfs_init_fs_context(struct fs_context *fc) ctx->version = nfss->nfs_client->rpc_ops->version; ctx->minorversion = nfss->nfs_client->cl_minorversion; - memcpy(&ctx->nfs_server.address, &nfss->nfs_client->cl_addr, + memcpy(&ctx->nfs_server._address, &nfss->nfs_client->cl_addr, ctx->nfs_server.addrlen); if (fc->net_ns != net) { diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index d914d609b85b2d67ae315668a3ca59c9afba3bf4..647fc3f547cbe953d7a2729d48b3cdb6f9f8523e 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h @@ -69,7 +69,7 @@ static inline fmode_t flags_to_mode(int flags) struct nfs_client_initdata { unsigned long init_flags; const char *hostname; /* Hostname of the server */ - const struct sockaddr *addr; /* Address of the server */ + const struct sockaddr_storage *addr; /* Address of the server */ const char *nodename; /* Hostname of the client */ const char *ip_addr; /* IP address of the client */ size_t addrlen; @@ -180,7 +180,7 @@ static inline struct nfs_fs_context *nfs_fc2context(const struct fs_context *fc) /* mount_clnt.c */ struct nfs_mount_request { - struct sockaddr *sap; + struct sockaddr_storage *sap; size_t salen; char *hostname; char *dirpath; @@ -223,7 +223,7 @@ extern void nfs4_server_set_init_caps(struct nfs_server *); extern struct nfs_server *nfs4_create_server(struct fs_context *); extern struct nfs_server *nfs4_create_referral_server(struct fs_context *); extern int nfs4_update_server(struct nfs_server *server, const char *hostname, - struct sockaddr *sap, size_t salen, + struct sockaddr_storage *sap, size_t salen, struct net *net); extern void nfs_free_server(struct nfs_server *server); extern struct nfs_server *nfs_clone_server(struct nfs_server *, @@ -235,7 +235,7 @@ extern int nfs_client_init_status(const struct nfs_client *clp); extern int nfs_wait_client_init_complete(const struct nfs_client *clp); extern void nfs_mark_client_ready(struct nfs_client *clp, int state); extern struct nfs_client *nfs4_set_ds_client(struct nfs_server *mds_srv, - const struct sockaddr *ds_addr, + const struct sockaddr_storage *ds_addr, int ds_addrlen, int ds_proto, unsigned int ds_timeo, unsigned int ds_retrans, @@ -243,7 +243,7 @@ extern struct nfs_client *nfs4_set_ds_client(struct nfs_server *mds_srv, extern struct rpc_clnt *nfs4_find_or_create_ds_client(struct nfs_client *, struct inode *); extern struct nfs_client *nfs3_set_ds_client(struct nfs_server *mds_srv, - const struct sockaddr *ds_addr, int ds_addrlen, + const struct sockaddr_storage *ds_addr, int ds_addrlen, int ds_proto, unsigned int ds_timeo, unsigned int ds_retrans); #ifdef CONFIG_PROC_FS @@ -894,13 +894,13 @@ static inline bool nfs_error_is_fatal_on_server(int err) * Select between a default port value and a user-specified port value. * If a zero value is set, then autobind will be used. */ -static inline void nfs_set_port(struct sockaddr *sap, int *port, +static inline void nfs_set_port(struct sockaddr_storage *sap, int *port, const unsigned short default_port) { if (*port == NFS_UNSPEC_PORT) *port = default_port; - rpc_set_port(sap, *port); + rpc_set_port((struct sockaddr *)sap, *port); } struct nfs_direct_req { diff --git a/fs/nfs/mount_clnt.c b/fs/nfs/mount_clnt.c index c5e3b6b3366a65b5d6167b6808289430986eafde..68e76b6263710e53f4e96ecf7156de968c9e4e40 100644 --- a/fs/nfs/mount_clnt.c +++ b/fs/nfs/mount_clnt.c @@ -158,7 +158,7 @@ int nfs_mount(struct nfs_mount_request *info, int timeo, int retrans) struct rpc_create_args args = { .net = info->net, .protocol = info->protocol, - .address = info->sap, + .address = (struct sockaddr *)info->sap, .addrsize = info->salen, .timeout = &mnt_timeout, .servername = info->hostname, @@ -245,7 +245,7 @@ void nfs_umount(const struct nfs_mount_request *info) struct rpc_create_args args = { .net = info->net, .protocol = IPPROTO_UDP, - .address = info->sap, + .address = (struct sockaddr *)info->sap, .addrsize = info->salen, .timeout = &nfs_umnt_timeout, .servername = info->hostname, diff --git a/fs/nfs/namespace.c b/fs/nfs/namespace.c index 3295af4110f1b1c5890f110c3d49424a3d19406f..2f336ace755546e327bae19cbdc117f1cbb380d2 100644 --- a/fs/nfs/namespace.c +++ b/fs/nfs/namespace.c @@ -175,7 +175,7 @@ struct vfsmount *nfs_d_automount(struct path *path) } /* for submounts we want the same server; referrals will reassign */ - memcpy(&ctx->nfs_server.address, &client->cl_addr, client->cl_addrlen); + memcpy(&ctx->nfs_server._address, &client->cl_addr, client->cl_addrlen); ctx->nfs_server.addrlen = client->cl_addrlen; ctx->nfs_server.port = server->port; diff --git a/fs/nfs/nfs3client.c b/fs/nfs/nfs3client.c index b49359afac883b4d26b4a9d58fe52d4c4d5b0169..669cda757a5cec083948ab07ece258b50eb4ddd6 100644 --- a/fs/nfs/nfs3client.c +++ b/fs/nfs/nfs3client.c @@ -78,7 +78,7 @@ struct nfs_server *nfs3_clone_server(struct nfs_server *source, * the MDS. */ struct nfs_client *nfs3_set_ds_client(struct nfs_server *mds_srv, - const struct sockaddr *ds_addr, int ds_addrlen, + const struct sockaddr_storage *ds_addr, int ds_addrlen, int ds_proto, unsigned int ds_timeo, unsigned int ds_retrans) { struct rpc_timeout ds_timeout; @@ -98,7 +98,7 @@ struct nfs_client *nfs3_set_ds_client(struct nfs_server *mds_srv, char buf[INET6_ADDRSTRLEN + 1]; /* fake a hostname because lockd wants it */ - if (rpc_ntop(ds_addr, buf, sizeof(buf)) <= 0) + if (rpc_ntop((struct sockaddr *)ds_addr, buf, sizeof(buf)) <= 0) return ERR_PTR(-EINVAL); cl_init.hostname = buf; diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c index 13424f0d793b22df9da98d55918d714314f80e9e..ecb428512fe1a671f43cbb03f8649e2a706af525 100644 --- a/fs/nfs/nfs42proc.c +++ b/fs/nfs/nfs42proc.c @@ -1093,6 +1093,9 @@ static int _nfs42_proc_clone(struct rpc_message *msg, struct file *src_f, &args.seq_args, &res.seq_res, 0); trace_nfs4_clone(src_inode, dst_inode, &args, status); if (status == 0) { + /* a zero-length count means clone to EOF in src */ + if (count == 0 && res.dst_fattr->valid & NFS_ATTR_FATTR_SIZE) + count = nfs_size_to_loff_t(res.dst_fattr->size) - dst_offset; nfs42_copy_dest_done(dst_inode, dst_offset, count); status = nfs_post_op_update_inode(dst_inode, res.dst_fattr); } diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h index 400a71e75238b55869811dce27238b0d0e88c27e..cfef738d765e0d73c274acbc9835ec7c52ef288f 100644 --- a/fs/nfs/nfs4_fs.h +++ b/fs/nfs/nfs4_fs.h @@ -281,7 +281,7 @@ struct rpc_clnt *nfs4_negotiate_security(struct rpc_clnt *, struct inode *, int nfs4_submount(struct fs_context *, struct nfs_server *); int nfs4_replace_transport(struct nfs_server *server, const struct nfs4_fs_locations *locations); -size_t nfs_parse_server_name(char *string, size_t len, struct sockaddr *sa, +size_t nfs_parse_server_name(char *string, size_t len, struct sockaddr_storage *ss, size_t salen, struct net *net, int port); /* nfs4proc.c */ extern int nfs4_handle_exception(struct nfs_server *, int, struct nfs4_exception *); diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c index 7a5162afa5c0dc33336a36d51fc2a5f0ca32aebb..d3051b051a5640d98827f1fb246fb65dd8499086 100644 --- a/fs/nfs/nfs4client.c +++ b/fs/nfs/nfs4client.c @@ -346,6 +346,7 @@ int nfs40_init_client(struct nfs_client *clp) ret = nfs4_setup_slot_table(tbl, NFS4_MAX_SLOT_TABLE, "NFSv4.0 transport Slot table"); if (ret) { + nfs4_shutdown_slot_table(tbl); kfree(tbl); return ret; } @@ -889,7 +890,7 @@ nfs4_find_client_sessionid(struct net *net, const struct sockaddr *addr, */ static int nfs4_set_client(struct nfs_server *server, const char *hostname, - const struct sockaddr *addr, + const struct sockaddr_storage *addr, const size_t addrlen, const char *ip_addr, int proto, const struct rpc_timeout *timeparms, @@ -924,7 +925,7 @@ static int nfs4_set_client(struct nfs_server *server, __set_bit(NFS_CS_MIGRATION, &cl_init.init_flags); if (test_bit(NFS_MIG_TSM_POSSIBLE, &server->mig_status)) __set_bit(NFS_CS_TSM_POSSIBLE, &cl_init.init_flags); - server->port = rpc_get_port(addr); + server->port = rpc_get_port((struct sockaddr *)addr); /* Allocate or find a client reference we can use */ clp = nfs_get_client(&cl_init); @@ -960,7 +961,7 @@ static int nfs4_set_client(struct nfs_server *server, * the MDS. */ struct nfs_client *nfs4_set_ds_client(struct nfs_server *mds_srv, - const struct sockaddr *ds_addr, int ds_addrlen, + const struct sockaddr_storage *ds_addr, int ds_addrlen, int ds_proto, unsigned int ds_timeo, unsigned int ds_retrans, u32 minor_version) { @@ -980,7 +981,7 @@ struct nfs_client *nfs4_set_ds_client(struct nfs_server *mds_srv, }; char buf[INET6_ADDRSTRLEN + 1]; - if (rpc_ntop(ds_addr, buf, sizeof(buf)) <= 0) + if (rpc_ntop((struct sockaddr *)ds_addr, buf, sizeof(buf)) <= 0) return ERR_PTR(-EINVAL); cl_init.hostname = buf; @@ -1148,7 +1149,7 @@ static int nfs4_init_server(struct nfs_server *server, struct fs_context *fc) /* Get a client record */ error = nfs4_set_client(server, ctx->nfs_server.hostname, - &ctx->nfs_server.address, + &ctx->nfs_server._address, ctx->nfs_server.addrlen, ctx->client_address, ctx->nfs_server.protocol, @@ -1238,7 +1239,7 @@ struct nfs_server *nfs4_create_referral_server(struct fs_context *fc) rpc_set_port(&ctx->nfs_server.address, NFS_RDMA_PORT); error = nfs4_set_client(server, ctx->nfs_server.hostname, - &ctx->nfs_server.address, + &ctx->nfs_server._address, ctx->nfs_server.addrlen, parent_client->cl_ipaddr, XPRT_TRANSPORT_RDMA, @@ -1254,7 +1255,7 @@ struct nfs_server *nfs4_create_referral_server(struct fs_context *fc) rpc_set_port(&ctx->nfs_server.address, NFS_PORT); error = nfs4_set_client(server, ctx->nfs_server.hostname, - &ctx->nfs_server.address, + &ctx->nfs_server._address, ctx->nfs_server.addrlen, parent_client->cl_ipaddr, XPRT_TRANSPORT_TCP, @@ -1303,14 +1304,14 @@ struct nfs_server *nfs4_create_referral_server(struct fs_context *fc) * Returns zero on success, or a negative errno value. */ int nfs4_update_server(struct nfs_server *server, const char *hostname, - struct sockaddr *sap, size_t salen, struct net *net) + struct sockaddr_storage *sap, size_t salen, struct net *net) { struct nfs_client *clp = server->nfs_client; struct rpc_clnt *clnt = server->client; struct xprt_create xargs = { .ident = clp->cl_proto, .net = net, - .dstaddr = sap, + .dstaddr = (struct sockaddr *)sap, .addrlen = salen, .servername = hostname, }; diff --git a/fs/nfs/nfs4namespace.c b/fs/nfs/nfs4namespace.c index f2dbf904c59895b7e6c4f13fd595a50c98164657..9a98595bb160457e1346d82dfbd0ff9cfa71c611 100644 --- a/fs/nfs/nfs4namespace.c +++ b/fs/nfs/nfs4namespace.c @@ -164,16 +164,17 @@ static int nfs4_validate_fspath(struct dentry *dentry, return 0; } -size_t nfs_parse_server_name(char *string, size_t len, struct sockaddr *sa, +size_t nfs_parse_server_name(char *string, size_t len, struct sockaddr_storage *ss, size_t salen, struct net *net, int port) { + struct sockaddr *sa = (struct sockaddr *)ss; ssize_t ret; ret = rpc_pton(net, string, len, sa, salen); if (ret == 0) { ret = rpc_uaddr2sockaddr(net, string, len, sa, salen); if (ret == 0) { - ret = nfs_dns_resolve_name(net, string, len, sa, salen); + ret = nfs_dns_resolve_name(net, string, len, ss, salen); if (ret < 0) ret = 0; } @@ -331,7 +332,7 @@ static int try_location(struct fs_context *fc, ctx->nfs_server.addrlen = nfs_parse_server_name(buf->data, buf->len, - &ctx->nfs_server.address, + &ctx->nfs_server._address, sizeof(ctx->nfs_server._address), fc->net_ns, 0); if (ctx->nfs_server.addrlen == 0) @@ -483,14 +484,13 @@ static int nfs4_try_replacing_one_location(struct nfs_server *server, char *page, char *page2, const struct nfs4_fs_location *location) { - const size_t addr_bufsize = sizeof(struct sockaddr_storage); struct net *net = rpc_net_ns(server->client); - struct sockaddr *sap; + struct sockaddr_storage *sap; unsigned int s; size_t salen; int error; - sap = kmalloc(addr_bufsize, GFP_KERNEL); + sap = kmalloc(sizeof(*sap), GFP_KERNEL); if (sap == NULL) return -ENOMEM; @@ -506,10 +506,10 @@ static int nfs4_try_replacing_one_location(struct nfs_server *server, continue; salen = nfs_parse_server_name(buf->data, buf->len, - sap, addr_bufsize, net, 0); + sap, sizeof(*sap), net, 0); if (salen == 0) continue; - rpc_set_port(sap, NFS_PORT); + rpc_set_port((struct sockaddr *)sap, NFS_PORT); error = -ENOMEM; hostname = kmemdup_nul(buf->data, buf->len, GFP_KERNEL); diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index e2efcd26336c06d0799a53060e789b2162266a92..86ed5c0142c3da48faa536ec4ab77b17cc1e4320 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -3951,7 +3951,7 @@ static void test_fs_location_for_trunking(struct nfs4_fs_location *location, for (i = 0; i < location->nservers; i++) { struct nfs4_string *srv_loc = &location->servers[i]; - struct sockaddr addr; + struct sockaddr_storage addr; size_t addrlen; struct xprt_create xprt_args = { .ident = 0, @@ -3974,7 +3974,7 @@ static void test_fs_location_for_trunking(struct nfs4_fs_location *location, clp->cl_net, server->port); if (!addrlen) return; - xprt_args.dstaddr = &addr; + xprt_args.dstaddr = (struct sockaddr *)&addr; xprt_args.addrlen = addrlen; servername = kmalloc(srv_loc->len + 1, GFP_KERNEL); if (!servername) @@ -7138,6 +7138,7 @@ static void nfs4_lock_done(struct rpc_task *task, void *calldata) { struct nfs4_lockdata *data = calldata; struct nfs4_lock_state *lsp = data->lsp; + struct nfs_server *server = NFS_SERVER(d_inode(data->ctx->dentry)); if (!nfs4_sequence_done(task, &data->res.seq_res)) return; @@ -7145,8 +7146,7 @@ static void nfs4_lock_done(struct rpc_task *task, void *calldata) data->rpc_status = task->tk_status; switch (task->tk_status) { case 0: - renew_lease(NFS_SERVER(d_inode(data->ctx->dentry)), - data->timestamp); + renew_lease(server, data->timestamp); if (data->arg.new_lock && !data->cancelled) { data->fl.fl_flags &= ~(FL_SLEEP | FL_ACCESS); if (locks_lock_inode_wait(lsp->ls_state->inode, &data->fl) < 0) @@ -7167,6 +7167,8 @@ static void nfs4_lock_done(struct rpc_task *task, void *calldata) if (!nfs4_stateid_match(&data->arg.open_stateid, &lsp->ls_state->open_stateid)) goto out_restart; + else if (nfs4_async_handle_error(task, server, lsp->ls_state, NULL) == -EAGAIN) + goto out_restart; } else if (!nfs4_stateid_match(&data->arg.lock_stateid, &lsp->ls_stateid)) goto out_restart; diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index c3503fb26fa271f1073ede4876331aa2df92cb4e..a2d2d5d1b088895aba558358368d57d2ded0b13c 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c @@ -1786,6 +1786,7 @@ static void nfs4_state_mark_reclaim_helper(struct nfs_client *clp, static void nfs4_state_start_reclaim_reboot(struct nfs_client *clp) { + set_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state); /* Mark all delegations for reclaim */ nfs_delegation_mark_reclaim(clp); nfs4_state_mark_reclaim_helper(clp, nfs4_state_mark_reclaim_reboot); @@ -2670,6 +2671,7 @@ static void nfs4_state_manager(struct nfs_client *clp) if (status < 0) goto out_error; nfs4_state_end_reclaim_reboot(clp); + continue; } /* Detect expired delegations... */ diff --git a/fs/nfs/pnfs_nfs.c b/fs/nfs/pnfs_nfs.c index 987c88ddeaf060161e2d1c5fc0a870a94352bac8..5d035dd2d7bf06ef3598fad843a1886769887ef1 100644 --- a/fs/nfs/pnfs_nfs.c +++ b/fs/nfs/pnfs_nfs.c @@ -821,7 +821,7 @@ static void nfs4_clear_ds_conn_bit(struct nfs4_pnfs_ds *ds) static struct nfs_client *(*get_v3_ds_connect)( struct nfs_server *mds_srv, - const struct sockaddr *ds_addr, + const struct sockaddr_storage *ds_addr, int ds_addrlen, int ds_proto, unsigned int ds_timeo, @@ -882,7 +882,7 @@ static int _nfs4_pnfs_v3_ds_connect(struct nfs_server *mds_srv, continue; } clp = get_v3_ds_connect(mds_srv, - (struct sockaddr *)&da->da_addr, + &da->da_addr, da->da_addrlen, da->da_transport, timeo, retrans); if (IS_ERR(clp)) @@ -951,7 +951,7 @@ static int _nfs4_pnfs_v4_ds_connect(struct nfs_server *mds_srv, put_cred(xprtdata.cred); } else { clp = nfs4_set_ds_client(mds_srv, - (struct sockaddr *)&da->da_addr, + &da->da_addr, da->da_addrlen, da->da_transport, timeo, retrans, minor_version); diff --git a/fs/nfs/super.c b/fs/nfs/super.c index ee66ffdb985e8094131a5226baecb876cb05c4a0..05ae23657527da80dc0c66469df936dfff92c5eb 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c @@ -822,8 +822,7 @@ static int nfs_request_mount(struct fs_context *fc, { struct nfs_fs_context *ctx = nfs_fc2context(fc); struct nfs_mount_request request = { - .sap = (struct sockaddr *) - &ctx->mount_server.address, + .sap = &ctx->mount_server._address, .dirpath = ctx->nfs_server.export_path, .protocol = ctx->mount_server.protocol, .fh = root_fh, @@ -854,7 +853,7 @@ static int nfs_request_mount(struct fs_context *fc, * Construct the mount server's address. */ if (ctx->mount_server.address.sa_family == AF_UNSPEC) { - memcpy(request.sap, &ctx->nfs_server.address, + memcpy(request.sap, &ctx->nfs_server._address, ctx->nfs_server.addrlen); ctx->mount_server.addrlen = ctx->nfs_server.addrlen; } diff --git a/fs/nfsd/filecache.c b/fs/nfsd/filecache.c index 29a62db155fbabcc6c8c627d9d2010c9d3e4cbe3..ec3fceb92236eb3be76e42ee0107245559741d1e 100644 --- a/fs/nfsd/filecache.c +++ b/fs/nfsd/filecache.c @@ -893,9 +893,8 @@ __nfsd_file_cache_purge(struct net *net) nf = rhashtable_walk_next(&iter); while (!IS_ERR_OR_NULL(nf)) { - if (net && nf->nf_net != net) - continue; - nfsd_file_unhash_and_dispose(nf, &dispose); + if (!net || nf->nf_net == net) + nfsd_file_unhash_and_dispose(nf, &dispose); nf = rhashtable_walk_next(&iter); } @@ -1077,6 +1076,7 @@ nfsd_file_do_acquire(struct svc_rqst *rqstp, struct svc_fh *fhp, goto open_file; nfsd_file_slab_free(&nf->nf_rcu); + nf = NULL; if (ret == -EEXIST) goto retry; trace_nfsd_file_insert_err(rqstp, key.inode, may_flags, ret); diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 4e718500a00c4a1436685abc22760385fbc8e8db..836bd825ca4ad66a9d70de578e523d2bcbfba12a 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -5382,6 +5382,7 @@ nfsd4_verify_deleg_dentry(struct nfsd4_open *open, struct nfs4_file *fp, if (err) return -EAGAIN; + exp_put(exp); dput(child); if (child != file_dentry(fp->fi_deleg_file->nf_file)) return -EAGAIN; diff --git a/fs/nfsd/trace.h b/fs/nfsd/trace.h index 06a96e955bd00dca4cbf3bfd33cd9ba4b165a531..d4b6839bb459a53d2e6fe29e2e8d58ca6b6f9112 100644 --- a/fs/nfsd/trace.h +++ b/fs/nfsd/trace.h @@ -254,7 +254,10 @@ TRACE_EVENT_CONDITION(nfsd_fh_verify_err, rqstp->rq_xprt->xpt_remotelen); __entry->xid = be32_to_cpu(rqstp->rq_xid); __entry->fh_hash = knfsd_fh_hash(&fhp->fh_handle); - __entry->inode = d_inode(fhp->fh_dentry); + if (fhp->fh_dentry) + __entry->inode = d_inode(fhp->fh_dentry); + else + __entry->inode = NULL; __entry->type = type; __entry->access = access; __entry->error = be32_to_cpu(error); diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c index f650afedd67fafc5d71bbfe41a845ae4a721afe6..849a720ab43f011077a71b4846df09b89e2301ae 100644 --- a/fs/nfsd/vfs.c +++ b/fs/nfsd/vfs.c @@ -596,8 +596,8 @@ ssize_t nfsd_copy_file_range(struct file *src, u64 src_pos, struct file *dst, ret = vfs_copy_file_range(src, src_pos, dst, dst_pos, count, 0); if (ret == -EOPNOTSUPP || ret == -EXDEV) - ret = generic_copy_file_range(src, src_pos, dst, dst_pos, - count, 0); + ret = vfs_copy_file_range(src, src_pos, dst, dst_pos, count, + COPY_FILE_SPLICE); return ret; } @@ -871,10 +871,11 @@ nfsd_splice_actor(struct pipe_inode_info *pipe, struct pipe_buffer *buf, struct svc_rqst *rqstp = sd->u.data; struct page *page = buf->page; // may be a compound one unsigned offset = buf->offset; + struct page *last_page; - page += offset / PAGE_SIZE; - for (int i = sd->len; i > 0; i -= PAGE_SIZE) - svc_rqst_replace_page(rqstp, page++); + last_page = page + (offset + sd->len - 1) / PAGE_SIZE; + for (page += offset / PAGE_SIZE; page <= last_page; page++) + svc_rqst_replace_page(rqstp, page); if (rqstp->rq_res.page_len == 0) // first call rqstp->rq_res.page_base = offset % PAGE_SIZE; rqstp->rq_res.page_len += sd->len; diff --git a/fs/nilfs2/dat.c b/fs/nilfs2/dat.c index 3b55e239705f4091af860201ff12d82430935826..9930fa901039fcf16fe1cc4c8476499960c74869 100644 --- a/fs/nilfs2/dat.c +++ b/fs/nilfs2/dat.c @@ -111,6 +111,13 @@ static void nilfs_dat_commit_free(struct inode *dat, kunmap_atomic(kaddr); nilfs_dat_commit_entry(dat, req); + + if (unlikely(req->pr_desc_bh == NULL || req->pr_bitmap_bh == NULL)) { + nilfs_error(dat->i_sb, + "state inconsistency probably due to duplicate use of vblocknr = %llu", + (unsigned long long)req->pr_entry_nr); + return; + } nilfs_palloc_commit_free_entry(dat, req); } diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c index b4cebad21b48479a39a00af93b5b9c5c62fa0bbf..3335ef352915596956384e77c990ac117a1fd18c 100644 --- a/fs/nilfs2/segment.c +++ b/fs/nilfs2/segment.c @@ -317,7 +317,7 @@ void nilfs_relax_pressure_in_lock(struct super_block *sb) struct the_nilfs *nilfs = sb->s_fs_info; struct nilfs_sc_info *sci = nilfs->ns_writer; - if (!sci || !sci->sc_flush_request) + if (sb_rdonly(sb) || unlikely(!sci) || !sci->sc_flush_request) return; set_bit(NILFS_SC_PRIOR_FLUSH, &sci->sc_flags); @@ -2242,7 +2242,7 @@ int nilfs_construct_segment(struct super_block *sb) struct nilfs_sc_info *sci = nilfs->ns_writer; struct nilfs_transaction_info *ti; - if (!sci) + if (sb_rdonly(sb) || unlikely(!sci)) return -EROFS; /* A call inside transactions causes a deadlock. */ @@ -2280,7 +2280,7 @@ int nilfs_construct_dsync_segment(struct super_block *sb, struct inode *inode, struct nilfs_transaction_info ti; int err = 0; - if (!sci) + if (sb_rdonly(sb) || unlikely(!sci)) return -EROFS; nilfs_transaction_lock(sb, &ti, 0); @@ -2776,11 +2776,12 @@ int nilfs_attach_log_writer(struct super_block *sb, struct nilfs_root *root) if (nilfs->ns_writer) { /* - * This happens if the filesystem was remounted - * read/write after nilfs_error degenerated it into a - * read-only mount. + * This happens if the filesystem is made read-only by + * __nilfs_error or nilfs_remount and then remounted + * read/write. In these cases, reuse the existing + * writer. */ - nilfs_detach_log_writer(sb); + return 0; } nilfs->ns_writer = nilfs_segctor_new(sb, root); diff --git a/fs/nilfs2/sufile.c b/fs/nilfs2/sufile.c index 77ff8e95421fa86b3b3a0b0afa1b89936717db91..dc359b56fdfac4e83c60f20b71f0490d55b7189c 100644 --- a/fs/nilfs2/sufile.c +++ b/fs/nilfs2/sufile.c @@ -495,14 +495,22 @@ void nilfs_sufile_do_free(struct inode *sufile, __u64 segnum, int nilfs_sufile_mark_dirty(struct inode *sufile, __u64 segnum) { struct buffer_head *bh; + void *kaddr; + struct nilfs_segment_usage *su; int ret; + down_write(&NILFS_MDT(sufile)->mi_sem); ret = nilfs_sufile_get_segment_usage_block(sufile, segnum, 0, &bh); if (!ret) { mark_buffer_dirty(bh); nilfs_mdt_mark_dirty(sufile); + kaddr = kmap_atomic(bh->b_page); + su = nilfs_sufile_block_get_segment_usage(sufile, segnum, bh, kaddr); + nilfs_segment_usage_set_dirty(su); + kunmap_atomic(kaddr); brelse(bh); } + up_write(&NILFS_MDT(sufile)->mi_sem); return ret; } diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c index ba108f915391e35c2b900c864f4f436ba91d54f3..6edb6e0dd61f7a7c1cc56ae13999c5eb957735e6 100644 --- a/fs/nilfs2/super.c +++ b/fs/nilfs2/super.c @@ -1133,8 +1133,6 @@ static int nilfs_remount(struct super_block *sb, int *flags, char *data) if ((bool)(*flags & SB_RDONLY) == sb_rdonly(sb)) goto out; if (*flags & SB_RDONLY) { - /* Shutting down log writer */ - nilfs_detach_log_writer(sb); sb->s_flags |= SB_RDONLY; /* diff --git a/fs/nilfs2/the_nilfs.c b/fs/nilfs2/the_nilfs.c index 3b4a079c9617c78438e84c5a91817b329b57b9d8..c8b89b4f94e0e808b270e512f8c1cadf4191a20c 100644 --- a/fs/nilfs2/the_nilfs.c +++ b/fs/nilfs2/the_nilfs.c @@ -690,9 +690,7 @@ int nilfs_count_free_blocks(struct the_nilfs *nilfs, sector_t *nblocks) { unsigned long ncleansegs; - down_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem); ncleansegs = nilfs_sufile_get_ncleansegs(nilfs->ns_sufile); - up_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem); *nblocks = (sector_t)ncleansegs * nilfs->ns_blocks_per_segment; return 0; } diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c index 5101131e6047736fc3d1f6a532de2ae7a4dbeb22..440960110a4257dc0ed2d2c2c94b31887e413ca9 100644 --- a/fs/proc/meminfo.c +++ b/fs/proc/meminfo.c @@ -115,7 +115,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v) #endif show_val_kb(m, "PageTables: ", global_node_page_state(NR_PAGETABLE)); - show_val_kb(m, "SecPageTables: ", + show_val_kb(m, "SecPageTables: ", global_node_page_state(NR_SECONDARY_PAGETABLE)); show_val_kb(m, "NFS_Unstable: ", 0); diff --git a/fs/read_write.c b/fs/read_write.c index 328ce8cf9a85eef7057ffe0a35902a15c8af8486..24b9668d63770f6fc7e1e35772569da1aea915fd 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -1388,6 +1388,8 @@ ssize_t generic_copy_file_range(struct file *file_in, loff_t pos_in, struct file *file_out, loff_t pos_out, size_t len, unsigned int flags) { + lockdep_assert(sb_write_started(file_inode(file_out)->i_sb)); + return do_splice_direct(file_in, &pos_in, file_out, &pos_out, len > MAX_RW_COUNT ? MAX_RW_COUNT : len, 0); } @@ -1424,7 +1426,9 @@ static int generic_copy_file_checks(struct file *file_in, loff_t pos_in, * and several different sets of file_operations, but they all end up * using the same ->copy_file_range() function pointer. */ - if (file_out->f_op->copy_file_range) { + if (flags & COPY_FILE_SPLICE) { + /* cross sb splice is allowed */ + } else if (file_out->f_op->copy_file_range) { if (file_in->f_op->copy_file_range != file_out->f_op->copy_file_range) return -EXDEV; @@ -1474,8 +1478,9 @@ ssize_t vfs_copy_file_range(struct file *file_in, loff_t pos_in, size_t len, unsigned int flags) { ssize_t ret; + bool splice = flags & COPY_FILE_SPLICE; - if (flags != 0) + if (flags & ~COPY_FILE_SPLICE) return -EINVAL; ret = generic_copy_file_checks(file_in, pos_in, file_out, pos_out, &len, @@ -1501,14 +1506,14 @@ ssize_t vfs_copy_file_range(struct file *file_in, loff_t pos_in, * same sb using clone, but for filesystems where both clone and copy * are supported (e.g. nfs,cifs), we only call the copy method. */ - if (file_out->f_op->copy_file_range) { + if (!splice && file_out->f_op->copy_file_range) { ret = file_out->f_op->copy_file_range(file_in, pos_in, file_out, pos_out, len, flags); goto done; } - if (file_in->f_op->remap_file_range && + if (!splice && file_in->f_op->remap_file_range && file_inode(file_in)->i_sb == file_inode(file_out)->i_sb) { ret = file_in->f_op->remap_file_range(file_in, pos_in, file_out, pos_out, @@ -1528,6 +1533,8 @@ ssize_t vfs_copy_file_range(struct file *file_in, loff_t pos_in, * consistent story about which filesystems support copy_file_range() * and which filesystems do not, that will allow userspace tools to * make consistent desicions w.r.t using copy_file_range(). + * + * We also get here if caller (e.g. nfsd) requested COPY_FILE_SPLICE. */ ret = generic_copy_file_range(file_in, pos_in, file_out, pos_out, len, flags); @@ -1582,6 +1589,10 @@ SYSCALL_DEFINE6(copy_file_range, int, fd_in, loff_t __user *, off_in, pos_out = f_out.file->f_pos; } + ret = -EINVAL; + if (flags != 0) + goto out; + ret = vfs_copy_file_range(f_in.file, pos_in, f_out.file, pos_out, len, flags); if (ret > 0) { diff --git a/fs/udf/namei.c b/fs/udf/namei.c index fb4c30e052453dab74e1f18d4eab764a384d4e9d..ae7bc13a5298ab3b221df27f8c6d1a055d1e3aa3 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c @@ -240,7 +240,7 @@ static struct fileIdentDesc *udf_find_entry(struct inode *dir, poffset - lfi); else { if (!copy_name) { - copy_name = kmalloc(UDF_NAME_LEN, + copy_name = kmalloc(UDF_NAME_LEN_CS0, GFP_NOFS); if (!copy_name) { fi = ERR_PTR(-ENOMEM); diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c index 07c81ab3fd4dd301f830180f540db84dc711e00c..98ac37e34e3d4bd4ac229e01a42b2e2a8a27685d 100644 --- a/fs/userfaultfd.c +++ b/fs/userfaultfd.c @@ -1630,17 +1630,20 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx, NULL_VM_UFFD_CTX, anon_vma_name(vma)); if (prev) { vma = prev; + mas_pause(&mas); goto next; } if (vma->vm_start < start) { ret = split_vma(mm, vma, start, 1); if (ret) break; + mas_pause(&mas); } if (vma->vm_end > end) { ret = split_vma(mm, vma, end, 0); if (ret) break; + mas_pause(&mas); } next: /* diff --git a/fs/xfs/libxfs/xfs_ag.h b/fs/xfs/libxfs/xfs_ag.h index 517a138faa669b8494dda3810edbab78dc1930ac..191b22b9a35bfd67981de4f05c97703ad2371f7f 100644 --- a/fs/xfs/libxfs/xfs_ag.h +++ b/fs/xfs/libxfs/xfs_ag.h @@ -133,6 +133,21 @@ xfs_verify_agbno(struct xfs_perag *pag, xfs_agblock_t agbno) return true; } +static inline bool +xfs_verify_agbext( + struct xfs_perag *pag, + xfs_agblock_t agbno, + xfs_agblock_t len) +{ + if (agbno + len <= agbno) + return false; + + if (!xfs_verify_agbno(pag, agbno)) + return false; + + return xfs_verify_agbno(pag, agbno + len - 1); +} + /* * Verify that an AG inode number pointer neither points outside the AG * nor points at static metadata. diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c index 6261599bb389af955f4dc16fe63b36d1cdf0d8c7..de79f5d07f651694da08f3a6f8cf32a7da361a77 100644 --- a/fs/xfs/libxfs/xfs_alloc.c +++ b/fs/xfs/libxfs/xfs_alloc.c @@ -263,11 +263,7 @@ xfs_alloc_get_rec( goto out_bad_rec; /* check for valid extent range, including overflow */ - if (!xfs_verify_agbno(pag, *bno)) - goto out_bad_rec; - if (*bno > *bno + *len) - goto out_bad_rec; - if (!xfs_verify_agbno(pag, *bno + *len - 1)) + if (!xfs_verify_agbext(pag, *bno, *len)) goto out_bad_rec; return 0; diff --git a/fs/xfs/libxfs/xfs_dir2_leaf.c b/fs/xfs/libxfs/xfs_dir2_leaf.c index d9b66306a9a775198140c699340e68eca9e79cf1..cb9e950a911d8afb89792477024a67989050aa9d 100644 --- a/fs/xfs/libxfs/xfs_dir2_leaf.c +++ b/fs/xfs/libxfs/xfs_dir2_leaf.c @@ -146,6 +146,8 @@ xfs_dir3_leaf_check_int( xfs_dir2_leaf_tail_t *ltp; int stale; int i; + bool isleaf1 = (hdr->magic == XFS_DIR2_LEAF1_MAGIC || + hdr->magic == XFS_DIR3_LEAF1_MAGIC); ltp = xfs_dir2_leaf_tail_p(geo, leaf); @@ -158,8 +160,7 @@ xfs_dir3_leaf_check_int( return __this_address; /* Leaves and bests don't overlap in leaf format. */ - if ((hdr->magic == XFS_DIR2_LEAF1_MAGIC || - hdr->magic == XFS_DIR3_LEAF1_MAGIC) && + if (isleaf1 && (char *)&hdr->ents[hdr->count] > (char *)xfs_dir2_leaf_bests_p(ltp)) return __this_address; @@ -175,6 +176,10 @@ xfs_dir3_leaf_check_int( } if (hdr->ents[i].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR)) stale++; + if (isleaf1 && xfs_dir2_dataptr_to_db(geo, + be32_to_cpu(hdr->ents[i].address)) >= + be32_to_cpu(ltp->bestcount)) + return __this_address; } if (hdr->stale != stale) return __this_address; diff --git a/fs/xfs/libxfs/xfs_format.h b/fs/xfs/libxfs/xfs_format.h index b55bdfa9c8a8cd13455f775e49d2daaea23c5293..371dc07233e059a95545629107d409f21653dbe4 100644 --- a/fs/xfs/libxfs/xfs_format.h +++ b/fs/xfs/libxfs/xfs_format.h @@ -1564,20 +1564,6 @@ struct xfs_rmap_rec { #define RMAPBT_UNUSED_OFFSET_BITLEN 7 #define RMAPBT_OFFSET_BITLEN 54 -#define XFS_RMAP_ATTR_FORK (1 << 0) -#define XFS_RMAP_BMBT_BLOCK (1 << 1) -#define XFS_RMAP_UNWRITTEN (1 << 2) -#define XFS_RMAP_KEY_FLAGS (XFS_RMAP_ATTR_FORK | \ - XFS_RMAP_BMBT_BLOCK) -#define XFS_RMAP_REC_FLAGS (XFS_RMAP_UNWRITTEN) -struct xfs_rmap_irec { - xfs_agblock_t rm_startblock; /* extent start block */ - xfs_extlen_t rm_blockcount; /* extent length */ - uint64_t rm_owner; /* extent owner */ - uint64_t rm_offset; /* offset within the owner */ - unsigned int rm_flags; /* state flags */ -}; - /* * Key structure * @@ -1626,7 +1612,7 @@ unsigned int xfs_refc_block(struct xfs_mount *mp); * on the startblock. This speeds up mount time deletion of stale * staging extents because they're all at the right side of the tree. */ -#define XFS_REFC_COW_START ((xfs_agblock_t)(1U << 31)) +#define XFS_REFC_COWFLAG (1U << 31) #define REFCNTBT_COWFLAG_BITLEN 1 #define REFCNTBT_AGBLOCK_BITLEN 31 @@ -1640,12 +1626,6 @@ struct xfs_refcount_key { __be32 rc_startblock; /* starting block number */ }; -struct xfs_refcount_irec { - xfs_agblock_t rc_startblock; /* starting block number */ - xfs_extlen_t rc_blockcount; /* count of free blocks */ - xfs_nlink_t rc_refcount; /* number of inodes linked here */ -}; - #define MAXREFCOUNT ((xfs_nlink_t)~0U) #define MAXREFCEXTLEN ((xfs_extlen_t)~0U) diff --git a/fs/xfs/libxfs/xfs_log_format.h b/fs/xfs/libxfs/xfs_log_format.h index b351b9dc656184369b433640b18f22992114113b..f13e0809dc63f2a2890c570dade05894224cbbec 100644 --- a/fs/xfs/libxfs/xfs_log_format.h +++ b/fs/xfs/libxfs/xfs_log_format.h @@ -613,25 +613,49 @@ typedef struct xfs_efi_log_format { uint16_t efi_size; /* size of this item */ uint32_t efi_nextents; /* # extents to free */ uint64_t efi_id; /* efi identifier */ - xfs_extent_t efi_extents[1]; /* array of extents to free */ + xfs_extent_t efi_extents[]; /* array of extents to free */ } xfs_efi_log_format_t; +static inline size_t +xfs_efi_log_format_sizeof( + unsigned int nr) +{ + return sizeof(struct xfs_efi_log_format) + + nr * sizeof(struct xfs_extent); +} + typedef struct xfs_efi_log_format_32 { uint16_t efi_type; /* efi log item type */ uint16_t efi_size; /* size of this item */ uint32_t efi_nextents; /* # extents to free */ uint64_t efi_id; /* efi identifier */ - xfs_extent_32_t efi_extents[1]; /* array of extents to free */ + xfs_extent_32_t efi_extents[]; /* array of extents to free */ } __attribute__((packed)) xfs_efi_log_format_32_t; +static inline size_t +xfs_efi_log_format32_sizeof( + unsigned int nr) +{ + return sizeof(struct xfs_efi_log_format_32) + + nr * sizeof(struct xfs_extent_32); +} + typedef struct xfs_efi_log_format_64 { uint16_t efi_type; /* efi log item type */ uint16_t efi_size; /* size of this item */ uint32_t efi_nextents; /* # extents to free */ uint64_t efi_id; /* efi identifier */ - xfs_extent_64_t efi_extents[1]; /* array of extents to free */ + xfs_extent_64_t efi_extents[]; /* array of extents to free */ } xfs_efi_log_format_64_t; +static inline size_t +xfs_efi_log_format64_sizeof( + unsigned int nr) +{ + return sizeof(struct xfs_efi_log_format_64) + + nr * sizeof(struct xfs_extent_64); +} + /* * This is the structure used to lay out an efd log item in the * log. The efd_extents array is a variable size array whose @@ -642,25 +666,49 @@ typedef struct xfs_efd_log_format { uint16_t efd_size; /* size of this item */ uint32_t efd_nextents; /* # of extents freed */ uint64_t efd_efi_id; /* id of corresponding efi */ - xfs_extent_t efd_extents[1]; /* array of extents freed */ + xfs_extent_t efd_extents[]; /* array of extents freed */ } xfs_efd_log_format_t; +static inline size_t +xfs_efd_log_format_sizeof( + unsigned int nr) +{ + return sizeof(struct xfs_efd_log_format) + + nr * sizeof(struct xfs_extent); +} + typedef struct xfs_efd_log_format_32 { uint16_t efd_type; /* efd log item type */ uint16_t efd_size; /* size of this item */ uint32_t efd_nextents; /* # of extents freed */ uint64_t efd_efi_id; /* id of corresponding efi */ - xfs_extent_32_t efd_extents[1]; /* array of extents freed */ + xfs_extent_32_t efd_extents[]; /* array of extents freed */ } __attribute__((packed)) xfs_efd_log_format_32_t; +static inline size_t +xfs_efd_log_format32_sizeof( + unsigned int nr) +{ + return sizeof(struct xfs_efd_log_format_32) + + nr * sizeof(struct xfs_extent_32); +} + typedef struct xfs_efd_log_format_64 { uint16_t efd_type; /* efd log item type */ uint16_t efd_size; /* size of this item */ uint32_t efd_nextents; /* # of extents freed */ uint64_t efd_efi_id; /* id of corresponding efi */ - xfs_extent_64_t efd_extents[1]; /* array of extents freed */ + xfs_extent_64_t efd_extents[]; /* array of extents freed */ } xfs_efd_log_format_64_t; +static inline size_t +xfs_efd_log_format64_sizeof( + unsigned int nr) +{ + return sizeof(struct xfs_efd_log_format_64) + + nr * sizeof(struct xfs_extent_64); +} + /* * RUI/RUD (reverse mapping) log format definitions */ diff --git a/fs/xfs/libxfs/xfs_refcount.c b/fs/xfs/libxfs/xfs_refcount.c index 64b910caafaad42a2a6e92f682ca21165b06b3b0..3f34bafe18dd1d86225693c1c35d8e2b10026725 100644 --- a/fs/xfs/libxfs/xfs_refcount.c +++ b/fs/xfs/libxfs/xfs_refcount.c @@ -46,13 +46,16 @@ STATIC int __xfs_refcount_cow_free(struct xfs_btree_cur *rcur, int xfs_refcount_lookup_le( struct xfs_btree_cur *cur, + enum xfs_refc_domain domain, xfs_agblock_t bno, int *stat) { - trace_xfs_refcount_lookup(cur->bc_mp, cur->bc_ag.pag->pag_agno, bno, + trace_xfs_refcount_lookup(cur->bc_mp, cur->bc_ag.pag->pag_agno, + xfs_refcount_encode_startblock(bno, domain), XFS_LOOKUP_LE); cur->bc_rec.rc.rc_startblock = bno; cur->bc_rec.rc.rc_blockcount = 0; + cur->bc_rec.rc.rc_domain = domain; return xfs_btree_lookup(cur, XFS_LOOKUP_LE, stat); } @@ -63,13 +66,16 @@ xfs_refcount_lookup_le( int xfs_refcount_lookup_ge( struct xfs_btree_cur *cur, + enum xfs_refc_domain domain, xfs_agblock_t bno, int *stat) { - trace_xfs_refcount_lookup(cur->bc_mp, cur->bc_ag.pag->pag_agno, bno, + trace_xfs_refcount_lookup(cur->bc_mp, cur->bc_ag.pag->pag_agno, + xfs_refcount_encode_startblock(bno, domain), XFS_LOOKUP_GE); cur->bc_rec.rc.rc_startblock = bno; cur->bc_rec.rc.rc_blockcount = 0; + cur->bc_rec.rc.rc_domain = domain; return xfs_btree_lookup(cur, XFS_LOOKUP_GE, stat); } @@ -80,13 +86,16 @@ xfs_refcount_lookup_ge( int xfs_refcount_lookup_eq( struct xfs_btree_cur *cur, + enum xfs_refc_domain domain, xfs_agblock_t bno, int *stat) { - trace_xfs_refcount_lookup(cur->bc_mp, cur->bc_ag.pag->pag_agno, bno, + trace_xfs_refcount_lookup(cur->bc_mp, cur->bc_ag.pag->pag_agno, + xfs_refcount_encode_startblock(bno, domain), XFS_LOOKUP_LE); cur->bc_rec.rc.rc_startblock = bno; cur->bc_rec.rc.rc_blockcount = 0; + cur->bc_rec.rc.rc_domain = domain; return xfs_btree_lookup(cur, XFS_LOOKUP_EQ, stat); } @@ -96,7 +105,17 @@ xfs_refcount_btrec_to_irec( const union xfs_btree_rec *rec, struct xfs_refcount_irec *irec) { - irec->rc_startblock = be32_to_cpu(rec->refc.rc_startblock); + uint32_t start; + + start = be32_to_cpu(rec->refc.rc_startblock); + if (start & XFS_REFC_COWFLAG) { + start &= ~XFS_REFC_COWFLAG; + irec->rc_domain = XFS_REFC_DOMAIN_COW; + } else { + irec->rc_domain = XFS_REFC_DOMAIN_SHARED; + } + + irec->rc_startblock = start; irec->rc_blockcount = be32_to_cpu(rec->refc.rc_blockcount); irec->rc_refcount = be32_to_cpu(rec->refc.rc_refcount); } @@ -114,7 +133,6 @@ xfs_refcount_get_rec( struct xfs_perag *pag = cur->bc_ag.pag; union xfs_btree_rec *rec; int error; - xfs_agblock_t realstart; error = xfs_btree_get_rec(cur, &rec, stat); if (error || !*stat) @@ -124,22 +142,11 @@ xfs_refcount_get_rec( if (irec->rc_blockcount == 0 || irec->rc_blockcount > MAXREFCEXTLEN) goto out_bad_rec; - /* handle special COW-staging state */ - realstart = irec->rc_startblock; - if (realstart & XFS_REFC_COW_START) { - if (irec->rc_refcount != 1) - goto out_bad_rec; - realstart &= ~XFS_REFC_COW_START; - } else if (irec->rc_refcount < 2) { + if (!xfs_refcount_check_domain(irec)) goto out_bad_rec; - } /* check for valid extent range, including overflow */ - if (!xfs_verify_agbno(pag, realstart)) - goto out_bad_rec; - if (realstart > realstart + irec->rc_blockcount) - goto out_bad_rec; - if (!xfs_verify_agbno(pag, realstart + irec->rc_blockcount - 1)) + if (!xfs_verify_agbext(pag, irec->rc_startblock, irec->rc_blockcount)) goto out_bad_rec; if (irec->rc_refcount == 0 || irec->rc_refcount > MAXREFCOUNT) @@ -169,12 +176,17 @@ xfs_refcount_update( struct xfs_refcount_irec *irec) { union xfs_btree_rec rec; + uint32_t start; int error; trace_xfs_refcount_update(cur->bc_mp, cur->bc_ag.pag->pag_agno, irec); - rec.refc.rc_startblock = cpu_to_be32(irec->rc_startblock); + + start = xfs_refcount_encode_startblock(irec->rc_startblock, + irec->rc_domain); + rec.refc.rc_startblock = cpu_to_be32(start); rec.refc.rc_blockcount = cpu_to_be32(irec->rc_blockcount); rec.refc.rc_refcount = cpu_to_be32(irec->rc_refcount); + error = xfs_btree_update(cur, &rec); if (error) trace_xfs_refcount_update_error(cur->bc_mp, @@ -196,9 +208,12 @@ xfs_refcount_insert( int error; trace_xfs_refcount_insert(cur->bc_mp, cur->bc_ag.pag->pag_agno, irec); + cur->bc_rec.rc.rc_startblock = irec->rc_startblock; cur->bc_rec.rc.rc_blockcount = irec->rc_blockcount; cur->bc_rec.rc.rc_refcount = irec->rc_refcount; + cur->bc_rec.rc.rc_domain = irec->rc_domain; + error = xfs_btree_insert(cur, i); if (error) goto out_error; @@ -244,7 +259,8 @@ xfs_refcount_delete( } if (error) goto out_error; - error = xfs_refcount_lookup_ge(cur, irec.rc_startblock, &found_rec); + error = xfs_refcount_lookup_ge(cur, irec.rc_domain, irec.rc_startblock, + &found_rec); out_error: if (error) trace_xfs_refcount_delete_error(cur->bc_mp, @@ -343,6 +359,7 @@ xfs_refc_next( STATIC int xfs_refcount_split_extent( struct xfs_btree_cur *cur, + enum xfs_refc_domain domain, xfs_agblock_t agbno, bool *shape_changed) { @@ -351,7 +368,7 @@ xfs_refcount_split_extent( int error; *shape_changed = false; - error = xfs_refcount_lookup_le(cur, agbno, &found_rec); + error = xfs_refcount_lookup_le(cur, domain, agbno, &found_rec); if (error) goto out_error; if (!found_rec) @@ -364,6 +381,8 @@ xfs_refcount_split_extent( error = -EFSCORRUPTED; goto out_error; } + if (rcext.rc_domain != domain) + return 0; if (rcext.rc_startblock == agbno || xfs_refc_next(&rcext) <= agbno) return 0; @@ -415,6 +434,9 @@ xfs_refcount_merge_center_extents( trace_xfs_refcount_merge_center_extents(cur->bc_mp, cur->bc_ag.pag->pag_agno, left, center, right); + ASSERT(left->rc_domain == center->rc_domain); + ASSERT(right->rc_domain == center->rc_domain); + /* * Make sure the center and right extents are not in the btree. * If the center extent was synthesized, the first delete call @@ -423,8 +445,8 @@ xfs_refcount_merge_center_extents( * call removes the center and the second one removes the right * extent. */ - error = xfs_refcount_lookup_ge(cur, center->rc_startblock, - &found_rec); + error = xfs_refcount_lookup_ge(cur, center->rc_domain, + center->rc_startblock, &found_rec); if (error) goto out_error; if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) { @@ -451,8 +473,8 @@ xfs_refcount_merge_center_extents( } /* Enlarge the left extent. */ - error = xfs_refcount_lookup_le(cur, left->rc_startblock, - &found_rec); + error = xfs_refcount_lookup_le(cur, left->rc_domain, + left->rc_startblock, &found_rec); if (error) goto out_error; if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) { @@ -491,10 +513,12 @@ xfs_refcount_merge_left_extent( trace_xfs_refcount_merge_left_extent(cur->bc_mp, cur->bc_ag.pag->pag_agno, left, cleft); + ASSERT(left->rc_domain == cleft->rc_domain); + /* If the extent at agbno (cleft) wasn't synthesized, remove it. */ if (cleft->rc_refcount > 1) { - error = xfs_refcount_lookup_le(cur, cleft->rc_startblock, - &found_rec); + error = xfs_refcount_lookup_le(cur, cleft->rc_domain, + cleft->rc_startblock, &found_rec); if (error) goto out_error; if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) { @@ -512,8 +536,8 @@ xfs_refcount_merge_left_extent( } /* Enlarge the left extent. */ - error = xfs_refcount_lookup_le(cur, left->rc_startblock, - &found_rec); + error = xfs_refcount_lookup_le(cur, left->rc_domain, + left->rc_startblock, &found_rec); if (error) goto out_error; if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) { @@ -552,13 +576,15 @@ xfs_refcount_merge_right_extent( trace_xfs_refcount_merge_right_extent(cur->bc_mp, cur->bc_ag.pag->pag_agno, cright, right); + ASSERT(right->rc_domain == cright->rc_domain); + /* * If the extent ending at agbno+aglen (cright) wasn't synthesized, * remove it. */ if (cright->rc_refcount > 1) { - error = xfs_refcount_lookup_le(cur, cright->rc_startblock, - &found_rec); + error = xfs_refcount_lookup_le(cur, cright->rc_domain, + cright->rc_startblock, &found_rec); if (error) goto out_error; if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) { @@ -576,8 +602,8 @@ xfs_refcount_merge_right_extent( } /* Enlarge the right extent. */ - error = xfs_refcount_lookup_le(cur, right->rc_startblock, - &found_rec); + error = xfs_refcount_lookup_le(cur, right->rc_domain, + right->rc_startblock, &found_rec); if (error) goto out_error; if (XFS_IS_CORRUPT(cur->bc_mp, found_rec != 1)) { @@ -600,8 +626,6 @@ xfs_refcount_merge_right_extent( return error; } -#define XFS_FIND_RCEXT_SHARED 1 -#define XFS_FIND_RCEXT_COW 2 /* * Find the left extent and the one after it (cleft). This function assumes * that we've already split any extent crossing agbno. @@ -611,16 +635,16 @@ xfs_refcount_find_left_extents( struct xfs_btree_cur *cur, struct xfs_refcount_irec *left, struct xfs_refcount_irec *cleft, + enum xfs_refc_domain domain, xfs_agblock_t agbno, - xfs_extlen_t aglen, - int flags) + xfs_extlen_t aglen) { struct xfs_refcount_irec tmp; int error; int found_rec; left->rc_startblock = cleft->rc_startblock = NULLAGBLOCK; - error = xfs_refcount_lookup_le(cur, agbno - 1, &found_rec); + error = xfs_refcount_lookup_le(cur, domain, agbno - 1, &found_rec); if (error) goto out_error; if (!found_rec) @@ -634,11 +658,9 @@ xfs_refcount_find_left_extents( goto out_error; } - if (xfs_refc_next(&tmp) != agbno) - return 0; - if ((flags & XFS_FIND_RCEXT_SHARED) && tmp.rc_refcount < 2) + if (tmp.rc_domain != domain) return 0; - if ((flags & XFS_FIND_RCEXT_COW) && tmp.rc_refcount > 1) + if (xfs_refc_next(&tmp) != agbno) return 0; /* We have a left extent; retrieve (or invent) the next right one */ *left = tmp; @@ -655,6 +677,9 @@ xfs_refcount_find_left_extents( goto out_error; } + if (tmp.rc_domain != domain) + goto not_found; + /* if tmp starts at the end of our range, just use that */ if (tmp.rc_startblock == agbno) *cleft = tmp; @@ -671,8 +696,10 @@ xfs_refcount_find_left_extents( cleft->rc_blockcount = min(aglen, tmp.rc_startblock - agbno); cleft->rc_refcount = 1; + cleft->rc_domain = domain; } } else { +not_found: /* * No extents, so pretend that there's one covering the whole * range. @@ -680,6 +707,7 @@ xfs_refcount_find_left_extents( cleft->rc_startblock = agbno; cleft->rc_blockcount = aglen; cleft->rc_refcount = 1; + cleft->rc_domain = domain; } trace_xfs_refcount_find_left_extent(cur->bc_mp, cur->bc_ag.pag->pag_agno, left, cleft, agbno); @@ -700,16 +728,16 @@ xfs_refcount_find_right_extents( struct xfs_btree_cur *cur, struct xfs_refcount_irec *right, struct xfs_refcount_irec *cright, + enum xfs_refc_domain domain, xfs_agblock_t agbno, - xfs_extlen_t aglen, - int flags) + xfs_extlen_t aglen) { struct xfs_refcount_irec tmp; int error; int found_rec; right->rc_startblock = cright->rc_startblock = NULLAGBLOCK; - error = xfs_refcount_lookup_ge(cur, agbno + aglen, &found_rec); + error = xfs_refcount_lookup_ge(cur, domain, agbno + aglen, &found_rec); if (error) goto out_error; if (!found_rec) @@ -723,11 +751,9 @@ xfs_refcount_find_right_extents( goto out_error; } - if (tmp.rc_startblock != agbno + aglen) - return 0; - if ((flags & XFS_FIND_RCEXT_SHARED) && tmp.rc_refcount < 2) + if (tmp.rc_domain != domain) return 0; - if ((flags & XFS_FIND_RCEXT_COW) && tmp.rc_refcount > 1) + if (tmp.rc_startblock != agbno + aglen) return 0; /* We have a right extent; retrieve (or invent) the next left one */ *right = tmp; @@ -744,6 +770,9 @@ xfs_refcount_find_right_extents( goto out_error; } + if (tmp.rc_domain != domain) + goto not_found; + /* if tmp ends at the end of our range, just use that */ if (xfs_refc_next(&tmp) == agbno + aglen) *cright = tmp; @@ -760,8 +789,10 @@ xfs_refcount_find_right_extents( cright->rc_blockcount = right->rc_startblock - cright->rc_startblock; cright->rc_refcount = 1; + cright->rc_domain = domain; } } else { +not_found: /* * No extents, so pretend that there's one covering the whole * range. @@ -769,6 +800,7 @@ xfs_refcount_find_right_extents( cright->rc_startblock = agbno; cright->rc_blockcount = aglen; cright->rc_refcount = 1; + cright->rc_domain = domain; } trace_xfs_refcount_find_right_extent(cur->bc_mp, cur->bc_ag.pag->pag_agno, cright, right, agbno + aglen); @@ -794,10 +826,10 @@ xfs_refc_valid( STATIC int xfs_refcount_merge_extents( struct xfs_btree_cur *cur, + enum xfs_refc_domain domain, xfs_agblock_t *agbno, xfs_extlen_t *aglen, enum xfs_refc_adjust_op adjust, - int flags, bool *shape_changed) { struct xfs_refcount_irec left = {0}, cleft = {0}; @@ -812,12 +844,12 @@ xfs_refcount_merge_extents( * just below (agbno + aglen) [cright], and just above (agbno + aglen) * [right]. */ - error = xfs_refcount_find_left_extents(cur, &left, &cleft, *agbno, - *aglen, flags); + error = xfs_refcount_find_left_extents(cur, &left, &cleft, domain, + *agbno, *aglen); if (error) return error; - error = xfs_refcount_find_right_extents(cur, &right, &cright, *agbno, - *aglen, flags); + error = xfs_refcount_find_right_extents(cur, &right, &cright, domain, + *agbno, *aglen); if (error) return error; @@ -870,7 +902,7 @@ xfs_refcount_merge_extents( aglen); } - return error; + return 0; } /* @@ -933,7 +965,8 @@ xfs_refcount_adjust_extents( if (*aglen == 0) return 0; - error = xfs_refcount_lookup_ge(cur, *agbno, &found_rec); + error = xfs_refcount_lookup_ge(cur, XFS_REFC_DOMAIN_SHARED, *agbno, + &found_rec); if (error) goto out_error; @@ -941,10 +974,11 @@ xfs_refcount_adjust_extents( error = xfs_refcount_get_rec(cur, &ext, &found_rec); if (error) goto out_error; - if (!found_rec) { + if (!found_rec || ext.rc_domain != XFS_REFC_DOMAIN_SHARED) { ext.rc_startblock = cur->bc_mp->m_sb.sb_agblocks; ext.rc_blockcount = 0; ext.rc_refcount = 0; + ext.rc_domain = XFS_REFC_DOMAIN_SHARED; } /* @@ -957,6 +991,8 @@ xfs_refcount_adjust_extents( tmp.rc_blockcount = min(*aglen, ext.rc_startblock - *agbno); tmp.rc_refcount = 1 + adj; + tmp.rc_domain = XFS_REFC_DOMAIN_SHARED; + trace_xfs_refcount_modify_extent(cur->bc_mp, cur->bc_ag.pag->pag_agno, &tmp); @@ -986,15 +1022,30 @@ xfs_refcount_adjust_extents( (*agbno) += tmp.rc_blockcount; (*aglen) -= tmp.rc_blockcount; - error = xfs_refcount_lookup_ge(cur, *agbno, + /* Stop if there's nothing left to modify */ + if (*aglen == 0 || !xfs_refcount_still_have_space(cur)) + break; + + /* Move the cursor to the start of ext. */ + error = xfs_refcount_lookup_ge(cur, + XFS_REFC_DOMAIN_SHARED, *agbno, &found_rec); if (error) goto out_error; } - /* Stop if there's nothing left to modify */ - if (*aglen == 0 || !xfs_refcount_still_have_space(cur)) - break; + /* + * A previous step trimmed agbno/aglen such that the end of the + * range would not be in the middle of the record. If this is + * no longer the case, something is seriously wrong with the + * btree. Make sure we never feed the synthesized record into + * the processing loop below. + */ + if (XFS_IS_CORRUPT(cur->bc_mp, ext.rc_blockcount == 0) || + XFS_IS_CORRUPT(cur->bc_mp, ext.rc_blockcount > *aglen)) { + error = -EFSCORRUPTED; + goto out_error; + } /* * Adjust the reference count and either update the tree @@ -1070,13 +1121,15 @@ xfs_refcount_adjust( /* * Ensure that no rcextents cross the boundary of the adjustment range. */ - error = xfs_refcount_split_extent(cur, agbno, &shape_changed); + error = xfs_refcount_split_extent(cur, XFS_REFC_DOMAIN_SHARED, + agbno, &shape_changed); if (error) goto out_error; if (shape_changed) shape_changes++; - error = xfs_refcount_split_extent(cur, agbno + aglen, &shape_changed); + error = xfs_refcount_split_extent(cur, XFS_REFC_DOMAIN_SHARED, + agbno + aglen, &shape_changed); if (error) goto out_error; if (shape_changed) @@ -1085,8 +1138,8 @@ xfs_refcount_adjust( /* * Try to merge with the left or right extents of the range. */ - error = xfs_refcount_merge_extents(cur, new_agbno, new_aglen, adj, - XFS_FIND_RCEXT_SHARED, &shape_changed); + error = xfs_refcount_merge_extents(cur, XFS_REFC_DOMAIN_SHARED, + new_agbno, new_aglen, adj, &shape_changed); if (error) goto out_error; if (shape_changed) @@ -1124,6 +1177,32 @@ xfs_refcount_finish_one_cleanup( xfs_trans_brelse(tp, agbp); } +/* + * Set up a continuation a deferred refcount operation by updating the intent. + * Checks to make sure we're not going to run off the end of the AG. + */ +static inline int +xfs_refcount_continue_op( + struct xfs_btree_cur *cur, + xfs_fsblock_t startblock, + xfs_agblock_t new_agbno, + xfs_extlen_t new_len, + xfs_fsblock_t *new_fsbno) +{ + struct xfs_mount *mp = cur->bc_mp; + struct xfs_perag *pag = cur->bc_ag.pag; + + if (XFS_IS_CORRUPT(mp, !xfs_verify_agbext(pag, new_agbno, new_len))) + return -EFSCORRUPTED; + + *new_fsbno = XFS_AGB_TO_FSB(mp, pag->pag_agno, new_agbno); + + ASSERT(xfs_verify_fsbext(mp, *new_fsbno, new_len)); + ASSERT(pag->pag_agno == XFS_FSB_TO_AGNO(mp, *new_fsbno)); + + return 0; +} + /* * Process one of the deferred refcount operations. We pass back the * btree cursor to maintain our lock on the btree between calls. @@ -1191,12 +1270,20 @@ xfs_refcount_finish_one( case XFS_REFCOUNT_INCREASE: error = xfs_refcount_adjust(rcur, bno, blockcount, &new_agbno, new_len, XFS_REFCOUNT_ADJUST_INCREASE); - *new_fsb = XFS_AGB_TO_FSB(mp, pag->pag_agno, new_agbno); + if (error) + goto out_drop; + if (*new_len > 0) + error = xfs_refcount_continue_op(rcur, startblock, + new_agbno, *new_len, new_fsb); break; case XFS_REFCOUNT_DECREASE: error = xfs_refcount_adjust(rcur, bno, blockcount, &new_agbno, new_len, XFS_REFCOUNT_ADJUST_DECREASE); - *new_fsb = XFS_AGB_TO_FSB(mp, pag->pag_agno, new_agbno); + if (error) + goto out_drop; + if (*new_len > 0) + error = xfs_refcount_continue_op(rcur, startblock, + new_agbno, *new_len, new_fsb); break; case XFS_REFCOUNT_ALLOC_COW: *new_fsb = startblock + blockcount; @@ -1307,7 +1394,8 @@ xfs_refcount_find_shared( *flen = 0; /* Try to find a refcount extent that crosses the start */ - error = xfs_refcount_lookup_le(cur, agbno, &have); + error = xfs_refcount_lookup_le(cur, XFS_REFC_DOMAIN_SHARED, agbno, + &have); if (error) goto out_error; if (!have) { @@ -1325,6 +1413,8 @@ xfs_refcount_find_shared( error = -EFSCORRUPTED; goto out_error; } + if (tmp.rc_domain != XFS_REFC_DOMAIN_SHARED) + goto done; /* If the extent ends before the start, look at the next one */ if (tmp.rc_startblock + tmp.rc_blockcount <= agbno) { @@ -1340,6 +1430,8 @@ xfs_refcount_find_shared( error = -EFSCORRUPTED; goto out_error; } + if (tmp.rc_domain != XFS_REFC_DOMAIN_SHARED) + goto done; } /* If the extent starts after the range we want, bail out */ @@ -1371,7 +1463,8 @@ xfs_refcount_find_shared( error = -EFSCORRUPTED; goto out_error; } - if (tmp.rc_startblock >= agbno + aglen || + if (tmp.rc_domain != XFS_REFC_DOMAIN_SHARED || + tmp.rc_startblock >= agbno + aglen || tmp.rc_startblock != *fbno + *flen) break; *flen = min(*flen + tmp.rc_blockcount, agbno + aglen - *fbno); @@ -1455,17 +1548,23 @@ xfs_refcount_adjust_cow_extents( return 0; /* Find any overlapping refcount records */ - error = xfs_refcount_lookup_ge(cur, agbno, &found_rec); + error = xfs_refcount_lookup_ge(cur, XFS_REFC_DOMAIN_COW, agbno, + &found_rec); if (error) goto out_error; error = xfs_refcount_get_rec(cur, &ext, &found_rec); if (error) goto out_error; + if (XFS_IS_CORRUPT(cur->bc_mp, found_rec && + ext.rc_domain != XFS_REFC_DOMAIN_COW)) { + error = -EFSCORRUPTED; + goto out_error; + } if (!found_rec) { - ext.rc_startblock = cur->bc_mp->m_sb.sb_agblocks + - XFS_REFC_COW_START; + ext.rc_startblock = cur->bc_mp->m_sb.sb_agblocks; ext.rc_blockcount = 0; ext.rc_refcount = 0; + ext.rc_domain = XFS_REFC_DOMAIN_COW; } switch (adj) { @@ -1480,6 +1579,8 @@ xfs_refcount_adjust_cow_extents( tmp.rc_startblock = agbno; tmp.rc_blockcount = aglen; tmp.rc_refcount = 1; + tmp.rc_domain = XFS_REFC_DOMAIN_COW; + trace_xfs_refcount_modify_extent(cur->bc_mp, cur->bc_ag.pag->pag_agno, &tmp); @@ -1542,24 +1643,24 @@ xfs_refcount_adjust_cow( bool shape_changed; int error; - agbno += XFS_REFC_COW_START; - /* * Ensure that no rcextents cross the boundary of the adjustment range. */ - error = xfs_refcount_split_extent(cur, agbno, &shape_changed); + error = xfs_refcount_split_extent(cur, XFS_REFC_DOMAIN_COW, + agbno, &shape_changed); if (error) goto out_error; - error = xfs_refcount_split_extent(cur, agbno + aglen, &shape_changed); + error = xfs_refcount_split_extent(cur, XFS_REFC_DOMAIN_COW, + agbno + aglen, &shape_changed); if (error) goto out_error; /* * Try to merge with the left or right extents of the range. */ - error = xfs_refcount_merge_extents(cur, &agbno, &aglen, adj, - XFS_FIND_RCEXT_COW, &shape_changed); + error = xfs_refcount_merge_extents(cur, XFS_REFC_DOMAIN_COW, &agbno, + &aglen, adj, &shape_changed); if (error) goto out_error; @@ -1666,10 +1767,18 @@ xfs_refcount_recover_extent( be32_to_cpu(rec->refc.rc_refcount) != 1)) return -EFSCORRUPTED; - rr = kmem_alloc(sizeof(struct xfs_refcount_recovery), 0); + rr = kmalloc(sizeof(struct xfs_refcount_recovery), + GFP_KERNEL | __GFP_NOFAIL); + INIT_LIST_HEAD(&rr->rr_list); xfs_refcount_btrec_to_irec(rec, &rr->rr_rrec); - list_add_tail(&rr->rr_list, debris); + if (XFS_IS_CORRUPT(cur->bc_mp, + rr->rr_rrec.rc_domain != XFS_REFC_DOMAIN_COW)) { + kfree(rr); + return -EFSCORRUPTED; + } + + list_add_tail(&rr->rr_list, debris); return 0; } @@ -1687,10 +1796,11 @@ xfs_refcount_recover_cow_leftovers( union xfs_btree_irec low; union xfs_btree_irec high; xfs_fsblock_t fsb; - xfs_agblock_t agbno; int error; - if (mp->m_sb.sb_agblocks >= XFS_REFC_COW_START) + /* reflink filesystems mustn't have AGs larger than 2^31-1 blocks */ + BUILD_BUG_ON(XFS_MAX_CRC_AG_BLOCKS >= XFS_REFC_COWFLAG); + if (mp->m_sb.sb_agblocks > XFS_MAX_CRC_AG_BLOCKS) return -EOPNOTSUPP; INIT_LIST_HEAD(&debris); @@ -1717,7 +1827,7 @@ xfs_refcount_recover_cow_leftovers( /* Find all the leftover CoW staging extents. */ memset(&low, 0, sizeof(low)); memset(&high, 0, sizeof(high)); - low.rc.rc_startblock = XFS_REFC_COW_START; + low.rc.rc_domain = high.rc.rc_domain = XFS_REFC_DOMAIN_COW; high.rc.rc_startblock = -1U; error = xfs_btree_query_range(cur, &low, &high, xfs_refcount_recover_extent, &debris); @@ -1738,8 +1848,8 @@ xfs_refcount_recover_cow_leftovers( &rr->rr_rrec); /* Free the orphan record */ - agbno = rr->rr_rrec.rc_startblock - XFS_REFC_COW_START; - fsb = XFS_AGB_TO_FSB(mp, pag->pag_agno, agbno); + fsb = XFS_AGB_TO_FSB(mp, pag->pag_agno, + rr->rr_rrec.rc_startblock); xfs_refcount_free_cow_extent(tp, fsb, rr->rr_rrec.rc_blockcount); @@ -1751,7 +1861,7 @@ xfs_refcount_recover_cow_leftovers( goto out_free; list_del(&rr->rr_list); - kmem_free(rr); + kfree(rr); } return error; @@ -1761,7 +1871,7 @@ xfs_refcount_recover_cow_leftovers( /* Free the leftover list */ list_for_each_entry_safe(rr, n, &debris, rr_list) { list_del(&rr->rr_list); - kmem_free(rr); + kfree(rr); } return error; } @@ -1770,6 +1880,7 @@ xfs_refcount_recover_cow_leftovers( int xfs_refcount_has_record( struct xfs_btree_cur *cur, + enum xfs_refc_domain domain, xfs_agblock_t bno, xfs_extlen_t len, bool *exists) @@ -1781,6 +1892,7 @@ xfs_refcount_has_record( low.rc.rc_startblock = bno; memset(&high, 0xFF, sizeof(high)); high.rc.rc_startblock = bno + len - 1; + low.rc.rc_domain = high.rc.rc_domain = domain; return xfs_btree_has_record(cur, &low, &high, exists); } diff --git a/fs/xfs/libxfs/xfs_refcount.h b/fs/xfs/libxfs/xfs_refcount.h index e8b322de7f3d9ebb64feb0d1705fc8479643770e..452f30556f5a9ad9606ddd46ad3b59f5da81fc41 100644 --- a/fs/xfs/libxfs/xfs_refcount.h +++ b/fs/xfs/libxfs/xfs_refcount.h @@ -14,14 +14,33 @@ struct xfs_bmbt_irec; struct xfs_refcount_irec; extern int xfs_refcount_lookup_le(struct xfs_btree_cur *cur, - xfs_agblock_t bno, int *stat); + enum xfs_refc_domain domain, xfs_agblock_t bno, int *stat); extern int xfs_refcount_lookup_ge(struct xfs_btree_cur *cur, - xfs_agblock_t bno, int *stat); + enum xfs_refc_domain domain, xfs_agblock_t bno, int *stat); extern int xfs_refcount_lookup_eq(struct xfs_btree_cur *cur, - xfs_agblock_t bno, int *stat); + enum xfs_refc_domain domain, xfs_agblock_t bno, int *stat); extern int xfs_refcount_get_rec(struct xfs_btree_cur *cur, struct xfs_refcount_irec *irec, int *stat); +static inline uint32_t +xfs_refcount_encode_startblock( + xfs_agblock_t startblock, + enum xfs_refc_domain domain) +{ + uint32_t start; + + /* + * low level btree operations need to handle the generic btree range + * query functions (which set rc_domain == -1U), so we check that the + * domain is /not/ shared. + */ + start = startblock & ~XFS_REFC_COWFLAG; + if (domain != XFS_REFC_DOMAIN_SHARED) + start |= XFS_REFC_COWFLAG; + + return start; +} + enum xfs_refcount_intent_type { XFS_REFCOUNT_INCREASE = 1, XFS_REFCOUNT_DECREASE, @@ -36,6 +55,18 @@ struct xfs_refcount_intent { xfs_fsblock_t ri_startblock; }; +/* Check that the refcount is appropriate for the record domain. */ +static inline bool +xfs_refcount_check_domain( + const struct xfs_refcount_irec *irec) +{ + if (irec->rc_domain == XFS_REFC_DOMAIN_COW && irec->rc_refcount != 1) + return false; + if (irec->rc_domain == XFS_REFC_DOMAIN_SHARED && irec->rc_refcount < 2) + return false; + return true; +} + void xfs_refcount_increase_extent(struct xfs_trans *tp, struct xfs_bmbt_irec *irec); void xfs_refcount_decrease_extent(struct xfs_trans *tp, @@ -79,7 +110,8 @@ extern int xfs_refcount_recover_cow_leftovers(struct xfs_mount *mp, #define XFS_REFCOUNT_ITEM_OVERHEAD 32 extern int xfs_refcount_has_record(struct xfs_btree_cur *cur, - xfs_agblock_t bno, xfs_extlen_t len, bool *exists); + enum xfs_refc_domain domain, xfs_agblock_t bno, + xfs_extlen_t len, bool *exists); union xfs_btree_rec; extern void xfs_refcount_btrec_to_irec(const union xfs_btree_rec *rec, struct xfs_refcount_irec *irec); diff --git a/fs/xfs/libxfs/xfs_refcount_btree.c b/fs/xfs/libxfs/xfs_refcount_btree.c index 316c1ec0c3c26d31e243cd3174293826dfe61a89..e1f7898666831f2bc4bfe413b75553bc0f5927fb 100644 --- a/fs/xfs/libxfs/xfs_refcount_btree.c +++ b/fs/xfs/libxfs/xfs_refcount_btree.c @@ -13,6 +13,7 @@ #include "xfs_btree.h" #include "xfs_btree_staging.h" #include "xfs_refcount_btree.h" +#include "xfs_refcount.h" #include "xfs_alloc.h" #include "xfs_error.h" #include "xfs_trace.h" @@ -160,7 +161,12 @@ xfs_refcountbt_init_rec_from_cur( struct xfs_btree_cur *cur, union xfs_btree_rec *rec) { - rec->refc.rc_startblock = cpu_to_be32(cur->bc_rec.rc.rc_startblock); + const struct xfs_refcount_irec *irec = &cur->bc_rec.rc; + uint32_t start; + + start = xfs_refcount_encode_startblock(irec->rc_startblock, + irec->rc_domain); + rec->refc.rc_startblock = cpu_to_be32(start); rec->refc.rc_blockcount = cpu_to_be32(cur->bc_rec.rc.rc_blockcount); rec->refc.rc_refcount = cpu_to_be32(cur->bc_rec.rc.rc_refcount); } @@ -182,10 +188,13 @@ xfs_refcountbt_key_diff( struct xfs_btree_cur *cur, const union xfs_btree_key *key) { - struct xfs_refcount_irec *rec = &cur->bc_rec.rc; const struct xfs_refcount_key *kp = &key->refc; + const struct xfs_refcount_irec *irec = &cur->bc_rec.rc; + uint32_t start; - return (int64_t)be32_to_cpu(kp->rc_startblock) - rec->rc_startblock; + start = xfs_refcount_encode_startblock(irec->rc_startblock, + irec->rc_domain); + return (int64_t)be32_to_cpu(kp->rc_startblock) - start; } STATIC int64_t diff --git a/fs/xfs/libxfs/xfs_rmap.c b/fs/xfs/libxfs/xfs_rmap.c index 094dfc897ebcdf27ebd4ad7f30bfd8b551d849a4..b56aca1e7c66c35de72ff8230f1728ec6d947b2a 100644 --- a/fs/xfs/libxfs/xfs_rmap.c +++ b/fs/xfs/libxfs/xfs_rmap.c @@ -235,13 +235,8 @@ xfs_rmap_get_rec( goto out_bad_rec; } else { /* check for valid extent range, including overflow */ - if (!xfs_verify_agbno(pag, irec->rm_startblock)) - goto out_bad_rec; - if (irec->rm_startblock > - irec->rm_startblock + irec->rm_blockcount) - goto out_bad_rec; - if (!xfs_verify_agbno(pag, - irec->rm_startblock + irec->rm_blockcount - 1)) + if (!xfs_verify_agbext(pag, irec->rm_startblock, + irec->rm_blockcount)) goto out_bad_rec; } diff --git a/fs/xfs/libxfs/xfs_trans_resv.c b/fs/xfs/libxfs/xfs_trans_resv.c index 2c4ad6e4bb1498be85d66998ec01e4c7ddb61a69..5b2f27cbdb8089d9386cf144288d960777f9d7de 100644 --- a/fs/xfs/libxfs/xfs_trans_resv.c +++ b/fs/xfs/libxfs/xfs_trans_resv.c @@ -422,7 +422,7 @@ xfs_calc_itruncate_reservation_minlogsize( /* * In renaming a files we can modify: - * the four inodes involved: 4 * inode size + * the five inodes involved: 5 * inode size * the two directory btrees: 2 * (max depth + v2) * dir block size * the two directory bmap btrees: 2 * max depth * block size * And the bmap_finish transaction can free dir and bmap blocks (two sets @@ -437,7 +437,7 @@ xfs_calc_rename_reservation( struct xfs_mount *mp) { return XFS_DQUOT_LOGRES(mp) + - max((xfs_calc_inode_res(mp, 4) + + max((xfs_calc_inode_res(mp, 5) + xfs_calc_buf_res(2 * XFS_DIROP_LOG_COUNT(mp), XFS_FSB_TO_B(mp, 1))), (xfs_calc_buf_res(7, mp->m_sb.sb_sectsize) + diff --git a/fs/xfs/libxfs/xfs_types.h b/fs/xfs/libxfs/xfs_types.h index a6b7d98cf68faaac5d66a6daa44d120db4f9ef63..5ebdda7e10780579592cdb741bf158c0be97a0d2 100644 --- a/fs/xfs/libxfs/xfs_types.h +++ b/fs/xfs/libxfs/xfs_types.h @@ -166,6 +166,36 @@ typedef struct xfs_bmbt_irec xfs_exntst_t br_state; /* extent state */ } xfs_bmbt_irec_t; +enum xfs_refc_domain { + XFS_REFC_DOMAIN_SHARED = 0, + XFS_REFC_DOMAIN_COW, +}; + +#define XFS_REFC_DOMAIN_STRINGS \ + { XFS_REFC_DOMAIN_SHARED, "shared" }, \ + { XFS_REFC_DOMAIN_COW, "cow" } + +struct xfs_refcount_irec { + xfs_agblock_t rc_startblock; /* starting block number */ + xfs_extlen_t rc_blockcount; /* count of free blocks */ + xfs_nlink_t rc_refcount; /* number of inodes linked here */ + enum xfs_refc_domain rc_domain; /* shared or cow staging extent? */ +}; + +#define XFS_RMAP_ATTR_FORK (1 << 0) +#define XFS_RMAP_BMBT_BLOCK (1 << 1) +#define XFS_RMAP_UNWRITTEN (1 << 2) +#define XFS_RMAP_KEY_FLAGS (XFS_RMAP_ATTR_FORK | \ + XFS_RMAP_BMBT_BLOCK) +#define XFS_RMAP_REC_FLAGS (XFS_RMAP_UNWRITTEN) +struct xfs_rmap_irec { + xfs_agblock_t rm_startblock; /* extent start block */ + xfs_extlen_t rm_blockcount; /* extent length */ + uint64_t rm_owner; /* extent owner */ + uint64_t rm_offset; /* offset within the owner */ + unsigned int rm_flags; /* state flags */ +}; + /* per-AG block reservation types */ enum xfs_ag_resv_type { XFS_AG_RESV_NONE = 0, diff --git a/fs/xfs/scrub/alloc.c b/fs/xfs/scrub/alloc.c index ab427b4d7fe0b8be847f2574dfee962ec4209ee9..3b38f4e2a5373a23451441c34745d8d6e255f578 100644 --- a/fs/xfs/scrub/alloc.c +++ b/fs/xfs/scrub/alloc.c @@ -100,9 +100,7 @@ xchk_allocbt_rec( bno = be32_to_cpu(rec->alloc.ar_startblock); len = be32_to_cpu(rec->alloc.ar_blockcount); - if (bno + len <= bno || - !xfs_verify_agbno(pag, bno) || - !xfs_verify_agbno(pag, bno + len - 1)) + if (!xfs_verify_agbext(pag, bno, len)) xchk_btree_set_corrupt(bs->sc, bs->cur, 0); xchk_allocbt_xref(bs->sc, bno, len); diff --git a/fs/xfs/scrub/ialloc.c b/fs/xfs/scrub/ialloc.c index e1026e07bf94678c2e59847d5dde82aa929a8a71..e312be7cd375139968d15609b9101bf0168a39b2 100644 --- a/fs/xfs/scrub/ialloc.c +++ b/fs/xfs/scrub/ialloc.c @@ -108,9 +108,8 @@ xchk_iallocbt_chunk( xfs_agblock_t bno; bno = XFS_AGINO_TO_AGBNO(mp, agino); - if (bno + len <= bno || - !xfs_verify_agbno(pag, bno) || - !xfs_verify_agbno(pag, bno + len - 1)) + + if (!xfs_verify_agbext(pag, bno, len)) xchk_btree_set_corrupt(bs->sc, bs->cur, 0); xchk_iallocbt_chunk_xref(bs->sc, irec, agino, bno, len); diff --git a/fs/xfs/scrub/refcount.c b/fs/xfs/scrub/refcount.c index c68b767dc08fe103fb72650d2d5a1ee5a6d99266..a26ee0f24ef2a0c793e0ca651521ab36f613049a 100644 --- a/fs/xfs/scrub/refcount.c +++ b/fs/xfs/scrub/refcount.c @@ -269,15 +269,13 @@ xchk_refcountbt_process_rmap_fragments( STATIC void xchk_refcountbt_xref_rmap( struct xfs_scrub *sc, - xfs_agblock_t bno, - xfs_extlen_t len, - xfs_nlink_t refcount) + const struct xfs_refcount_irec *irec) { struct xchk_refcnt_check refchk = { - .sc = sc, - .bno = bno, - .len = len, - .refcount = refcount, + .sc = sc, + .bno = irec->rc_startblock, + .len = irec->rc_blockcount, + .refcount = irec->rc_refcount, .seen = 0, }; struct xfs_rmap_irec low; @@ -291,9 +289,9 @@ xchk_refcountbt_xref_rmap( /* Cross-reference with the rmapbt to confirm the refcount. */ memset(&low, 0, sizeof(low)); - low.rm_startblock = bno; + low.rm_startblock = irec->rc_startblock; memset(&high, 0xFF, sizeof(high)); - high.rm_startblock = bno + len - 1; + high.rm_startblock = irec->rc_startblock + irec->rc_blockcount - 1; INIT_LIST_HEAD(&refchk.fragments); error = xfs_rmap_query_range(sc->sa.rmap_cur, &low, &high, @@ -302,7 +300,7 @@ xchk_refcountbt_xref_rmap( goto out_free; xchk_refcountbt_process_rmap_fragments(&refchk); - if (refcount != refchk.seen) + if (irec->rc_refcount != refchk.seen) xchk_btree_xref_set_corrupt(sc, sc->sa.rmap_cur, 0); out_free: @@ -315,17 +313,16 @@ xchk_refcountbt_xref_rmap( /* Cross-reference with the other btrees. */ STATIC void xchk_refcountbt_xref( - struct xfs_scrub *sc, - xfs_agblock_t agbno, - xfs_extlen_t len, - xfs_nlink_t refcount) + struct xfs_scrub *sc, + const struct xfs_refcount_irec *irec) { if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT) return; - xchk_xref_is_used_space(sc, agbno, len); - xchk_xref_is_not_inode_chunk(sc, agbno, len); - xchk_refcountbt_xref_rmap(sc, agbno, len, refcount); + xchk_xref_is_used_space(sc, irec->rc_startblock, irec->rc_blockcount); + xchk_xref_is_not_inode_chunk(sc, irec->rc_startblock, + irec->rc_blockcount); + xchk_refcountbt_xref_rmap(sc, irec); } /* Scrub a refcountbt record. */ @@ -334,35 +331,27 @@ xchk_refcountbt_rec( struct xchk_btree *bs, const union xfs_btree_rec *rec) { + struct xfs_refcount_irec irec; xfs_agblock_t *cow_blocks = bs->private; struct xfs_perag *pag = bs->cur->bc_ag.pag; - xfs_agblock_t bno; - xfs_extlen_t len; - xfs_nlink_t refcount; - bool has_cowflag; - bno = be32_to_cpu(rec->refc.rc_startblock); - len = be32_to_cpu(rec->refc.rc_blockcount); - refcount = be32_to_cpu(rec->refc.rc_refcount); + xfs_refcount_btrec_to_irec(rec, &irec); - /* Only CoW records can have refcount == 1. */ - has_cowflag = (bno & XFS_REFC_COW_START); - if ((refcount == 1 && !has_cowflag) || (refcount != 1 && has_cowflag)) + /* Check the domain and refcount are not incompatible. */ + if (!xfs_refcount_check_domain(&irec)) xchk_btree_set_corrupt(bs->sc, bs->cur, 0); - if (has_cowflag) - (*cow_blocks) += len; + + if (irec.rc_domain == XFS_REFC_DOMAIN_COW) + (*cow_blocks) += irec.rc_blockcount; /* Check the extent. */ - bno &= ~XFS_REFC_COW_START; - if (bno + len <= bno || - !xfs_verify_agbno(pag, bno) || - !xfs_verify_agbno(pag, bno + len - 1)) + if (!xfs_verify_agbext(pag, irec.rc_startblock, irec.rc_blockcount)) xchk_btree_set_corrupt(bs->sc, bs->cur, 0); - if (refcount == 0) + if (irec.rc_refcount == 0) xchk_btree_set_corrupt(bs->sc, bs->cur, 0); - xchk_refcountbt_xref(bs->sc, bno, len, refcount); + xchk_refcountbt_xref(bs->sc, &irec); return 0; } @@ -426,7 +415,6 @@ xchk_xref_is_cow_staging( xfs_extlen_t len) { struct xfs_refcount_irec rc; - bool has_cowflag; int has_refcount; int error; @@ -434,8 +422,8 @@ xchk_xref_is_cow_staging( return; /* Find the CoW staging extent. */ - error = xfs_refcount_lookup_le(sc->sa.refc_cur, - agbno + XFS_REFC_COW_START, &has_refcount); + error = xfs_refcount_lookup_le(sc->sa.refc_cur, XFS_REFC_DOMAIN_COW, + agbno, &has_refcount); if (!xchk_should_check_xref(sc, &error, &sc->sa.refc_cur)) return; if (!has_refcount) { @@ -451,9 +439,8 @@ xchk_xref_is_cow_staging( return; } - /* CoW flag must be set, refcount must be 1. */ - has_cowflag = (rc.rc_startblock & XFS_REFC_COW_START); - if (!has_cowflag || rc.rc_refcount != 1) + /* CoW lookup returned a shared extent record? */ + if (rc.rc_domain != XFS_REFC_DOMAIN_COW) xchk_btree_xref_set_corrupt(sc, sc->sa.refc_cur, 0); /* Must be at least as long as what was passed in */ @@ -477,7 +464,8 @@ xchk_xref_is_not_shared( if (!sc->sa.refc_cur || xchk_skip_xref(sc->sm)) return; - error = xfs_refcount_has_record(sc->sa.refc_cur, agbno, len, &shared); + error = xfs_refcount_has_record(sc->sa.refc_cur, XFS_REFC_DOMAIN_SHARED, + agbno, len, &shared); if (!xchk_should_check_xref(sc, &error, &sc->sa.refc_cur)) return; if (shared) diff --git a/fs/xfs/xfs_attr_item.c b/fs/xfs/xfs_attr_item.c index cf5ce607dc051fe15bfb211cff03d0345a73ef04..2788a6f2edcdb82b1765af1a7a939ac2420e8c71 100644 --- a/fs/xfs/xfs_attr_item.c +++ b/fs/xfs/xfs_attr_item.c @@ -245,28 +245,6 @@ xfs_attri_init( return attrip; } -/* - * Copy an attr format buffer from the given buf, and into the destination attr - * format structure. - */ -STATIC int -xfs_attri_copy_format( - struct xfs_log_iovec *buf, - struct xfs_attri_log_format *dst_attr_fmt) -{ - struct xfs_attri_log_format *src_attr_fmt = buf->i_addr; - size_t len; - - len = sizeof(struct xfs_attri_log_format); - if (buf->i_len != len) { - XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, NULL); - return -EFSCORRUPTED; - } - - memcpy((char *)dst_attr_fmt, (char *)src_attr_fmt, len); - return 0; -} - static inline struct xfs_attrd_log_item *ATTRD_ITEM(struct xfs_log_item *lip) { return container_of(lip, struct xfs_attrd_log_item, attrd_item); @@ -731,24 +709,50 @@ xlog_recover_attri_commit_pass2( struct xfs_attri_log_nameval *nv; const void *attr_value = NULL; const void *attr_name; - int error; + size_t len; attri_formatp = item->ri_buf[0].i_addr; attr_name = item->ri_buf[1].i_addr; /* Validate xfs_attri_log_format before the large memory allocation */ + len = sizeof(struct xfs_attri_log_format); + if (item->ri_buf[0].i_len != len) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); + return -EFSCORRUPTED; + } + if (!xfs_attri_validate(mp, attri_formatp)) { - XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); + return -EFSCORRUPTED; + } + + /* Validate the attr name */ + if (item->ri_buf[1].i_len != + xlog_calc_iovec_len(attri_formatp->alfi_name_len)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); return -EFSCORRUPTED; } if (!xfs_attr_namecheck(attr_name, attri_formatp->alfi_name_len)) { - XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + item->ri_buf[1].i_addr, item->ri_buf[1].i_len); return -EFSCORRUPTED; } - if (attri_formatp->alfi_value_len) + /* Validate the attr value, if present */ + if (attri_formatp->alfi_value_len != 0) { + if (item->ri_buf[2].i_len != xlog_calc_iovec_len(attri_formatp->alfi_value_len)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + item->ri_buf[0].i_addr, + item->ri_buf[0].i_len); + return -EFSCORRUPTED; + } + attr_value = item->ri_buf[2].i_addr; + } /* * Memory alloc failure will cause replay to abort. We attach the @@ -760,9 +764,7 @@ xlog_recover_attri_commit_pass2( attri_formatp->alfi_value_len); attrip = xfs_attri_init(mp, nv); - error = xfs_attri_copy_format(&item->ri_buf[0], &attrip->attri_format); - if (error) - goto out; + memcpy(&attrip->attri_format, attri_formatp, len); /* * The ATTRI has two references. One for the ATTRD and one for ATTRI to @@ -774,10 +776,6 @@ xlog_recover_attri_commit_pass2( xfs_attri_release(attrip); xfs_attri_log_nameval_put(nv); return 0; -out: - xfs_attri_item_free(attrip); - xfs_attri_log_nameval_put(nv); - return error; } /* @@ -842,7 +840,8 @@ xlog_recover_attrd_commit_pass2( attrd_formatp = item->ri_buf[0].i_addr; if (item->ri_buf[0].i_len != sizeof(struct xfs_attrd_log_format)) { - XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, NULL); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, log->l_mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); return -EFSCORRUPTED; } diff --git a/fs/xfs/xfs_bmap_item.c b/fs/xfs/xfs_bmap_item.c index 51f66e982484656cef3d4bda7b5c069f31d57cc3..41323da523d1a392c84f391aec41a83c4a659b68 100644 --- a/fs/xfs/xfs_bmap_item.c +++ b/fs/xfs/xfs_bmap_item.c @@ -608,28 +608,18 @@ static const struct xfs_item_ops xfs_bui_item_ops = { .iop_relog = xfs_bui_item_relog, }; -/* - * Copy an BUI format buffer from the given buf, and into the destination - * BUI format structure. The BUI/BUD items were designed not to need any - * special alignment handling. - */ -static int +static inline void xfs_bui_copy_format( - struct xfs_log_iovec *buf, - struct xfs_bui_log_format *dst_bui_fmt) + struct xfs_bui_log_format *dst, + const struct xfs_bui_log_format *src) { - struct xfs_bui_log_format *src_bui_fmt; - uint len; + unsigned int i; - src_bui_fmt = buf->i_addr; - len = xfs_bui_log_format_sizeof(src_bui_fmt->bui_nextents); + memcpy(dst, src, offsetof(struct xfs_bui_log_format, bui_extents)); - if (buf->i_len == len) { - memcpy(dst_bui_fmt, src_bui_fmt, len); - return 0; - } - XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, NULL); - return -EFSCORRUPTED; + for (i = 0; i < src->bui_nextents; i++) + memcpy(&dst->bui_extents[i], &src->bui_extents[i], + sizeof(struct xfs_map_extent)); } /* @@ -646,23 +636,34 @@ xlog_recover_bui_commit_pass2( struct xlog_recover_item *item, xfs_lsn_t lsn) { - int error; struct xfs_mount *mp = log->l_mp; struct xfs_bui_log_item *buip; struct xfs_bui_log_format *bui_formatp; + size_t len; bui_formatp = item->ri_buf[0].i_addr; + if (item->ri_buf[0].i_len < xfs_bui_log_format_sizeof(0)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); + return -EFSCORRUPTED; + } + if (bui_formatp->bui_nextents != XFS_BUI_MAX_FAST_EXTENTS) { - XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, log->l_mp); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); return -EFSCORRUPTED; } - buip = xfs_bui_init(mp); - error = xfs_bui_copy_format(&item->ri_buf[0], &buip->bui_format); - if (error) { - xfs_bui_item_free(buip); - return error; + + len = xfs_bui_log_format_sizeof(bui_formatp->bui_nextents); + if (item->ri_buf[0].i_len != len) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); + return -EFSCORRUPTED; } + + buip = xfs_bui_init(mp); + xfs_bui_copy_format(&buip->bui_format, bui_formatp); atomic_set(&buip->bui_next_extent, bui_formatp->bui_nextents); /* * Insert the intent into the AIL directly and drop one reference so @@ -696,7 +697,8 @@ xlog_recover_bud_commit_pass2( bud_formatp = item->ri_buf[0].i_addr; if (item->ri_buf[0].i_len != sizeof(struct xfs_bud_log_format)) { - XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, log->l_mp); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, log->l_mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); return -EFSCORRUPTED; } diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c index 7db588ed0be597b9329e856a726795a1d1da6893..c6b2aabd6f1879716301e5129e607c54cc764ea6 100644 --- a/fs/xfs/xfs_error.c +++ b/fs/xfs/xfs_error.c @@ -234,13 +234,18 @@ int xfs_errortag_init( struct xfs_mount *mp) { + int ret; + mp->m_errortag = kmem_zalloc(sizeof(unsigned int) * XFS_ERRTAG_MAX, KM_MAYFAIL); if (!mp->m_errortag) return -ENOMEM; - return xfs_sysfs_init(&mp->m_errortag_kobj, &xfs_errortag_ktype, - &mp->m_kobj, "errortag"); + ret = xfs_sysfs_init(&mp->m_errortag_kobj, &xfs_errortag_ktype, + &mp->m_kobj, "errortag"); + if (ret) + kmem_free(mp->m_errortag); + return ret; } void diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c index 27ccfcd82f042420f197fa32c4857f49a9bf179e..d5130d1fcfaeaf17a61531077512027dc64449ce 100644 --- a/fs/xfs/xfs_extfree_item.c +++ b/fs/xfs/xfs_extfree_item.c @@ -66,27 +66,16 @@ xfs_efi_release( xfs_efi_item_free(efip); } -/* - * This returns the number of iovecs needed to log the given efi item. - * We only need 1 iovec for an efi item. It just logs the efi_log_format - * structure. - */ -static inline int -xfs_efi_item_sizeof( - struct xfs_efi_log_item *efip) -{ - return sizeof(struct xfs_efi_log_format) + - (efip->efi_format.efi_nextents - 1) * sizeof(xfs_extent_t); -} - STATIC void xfs_efi_item_size( struct xfs_log_item *lip, int *nvecs, int *nbytes) { + struct xfs_efi_log_item *efip = EFI_ITEM(lip); + *nvecs += 1; - *nbytes += xfs_efi_item_sizeof(EFI_ITEM(lip)); + *nbytes += xfs_efi_log_format_sizeof(efip->efi_format.efi_nextents); } /* @@ -112,7 +101,7 @@ xfs_efi_item_format( xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_EFI_FORMAT, &efip->efi_format, - xfs_efi_item_sizeof(efip)); + xfs_efi_log_format_sizeof(efip->efi_format.efi_nextents)); } @@ -155,13 +144,11 @@ xfs_efi_init( { struct xfs_efi_log_item *efip; - uint size; ASSERT(nextents > 0); if (nextents > XFS_EFI_MAX_FAST_EXTENTS) { - size = (uint)(sizeof(struct xfs_efi_log_item) + - ((nextents - 1) * sizeof(xfs_extent_t))); - efip = kmem_zalloc(size, 0); + efip = kzalloc(xfs_efi_log_item_sizeof(nextents), + GFP_KERNEL | __GFP_NOFAIL); } else { efip = kmem_cache_zalloc(xfs_efi_cache, GFP_KERNEL | __GFP_NOFAIL); @@ -188,15 +175,17 @@ xfs_efi_copy_format(xfs_log_iovec_t *buf, xfs_efi_log_format_t *dst_efi_fmt) { xfs_efi_log_format_t *src_efi_fmt = buf->i_addr; uint i; - uint len = sizeof(xfs_efi_log_format_t) + - (src_efi_fmt->efi_nextents - 1) * sizeof(xfs_extent_t); - uint len32 = sizeof(xfs_efi_log_format_32_t) + - (src_efi_fmt->efi_nextents - 1) * sizeof(xfs_extent_32_t); - uint len64 = sizeof(xfs_efi_log_format_64_t) + - (src_efi_fmt->efi_nextents - 1) * sizeof(xfs_extent_64_t); + uint len = xfs_efi_log_format_sizeof(src_efi_fmt->efi_nextents); + uint len32 = xfs_efi_log_format32_sizeof(src_efi_fmt->efi_nextents); + uint len64 = xfs_efi_log_format64_sizeof(src_efi_fmt->efi_nextents); if (buf->i_len == len) { - memcpy((char *)dst_efi_fmt, (char*)src_efi_fmt, len); + memcpy(dst_efi_fmt, src_efi_fmt, + offsetof(struct xfs_efi_log_format, efi_extents)); + for (i = 0; i < src_efi_fmt->efi_nextents; i++) + memcpy(&dst_efi_fmt->efi_extents[i], + &src_efi_fmt->efi_extents[i], + sizeof(struct xfs_extent)); return 0; } else if (buf->i_len == len32) { xfs_efi_log_format_32_t *src_efi_fmt_32 = buf->i_addr; @@ -227,7 +216,8 @@ xfs_efi_copy_format(xfs_log_iovec_t *buf, xfs_efi_log_format_t *dst_efi_fmt) } return 0; } - XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, NULL); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, NULL, buf->i_addr, + buf->i_len); return -EFSCORRUPTED; } @@ -246,27 +236,16 @@ xfs_efd_item_free(struct xfs_efd_log_item *efdp) kmem_cache_free(xfs_efd_cache, efdp); } -/* - * This returns the number of iovecs needed to log the given efd item. - * We only need 1 iovec for an efd item. It just logs the efd_log_format - * structure. - */ -static inline int -xfs_efd_item_sizeof( - struct xfs_efd_log_item *efdp) -{ - return sizeof(xfs_efd_log_format_t) + - (efdp->efd_format.efd_nextents - 1) * sizeof(xfs_extent_t); -} - STATIC void xfs_efd_item_size( struct xfs_log_item *lip, int *nvecs, int *nbytes) { + struct xfs_efd_log_item *efdp = EFD_ITEM(lip); + *nvecs += 1; - *nbytes += xfs_efd_item_sizeof(EFD_ITEM(lip)); + *nbytes += xfs_efd_log_format_sizeof(efdp->efd_format.efd_nextents); } /* @@ -291,7 +270,7 @@ xfs_efd_item_format( xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_EFD_FORMAT, &efdp->efd_format, - xfs_efd_item_sizeof(efdp)); + xfs_efd_log_format_sizeof(efdp->efd_format.efd_nextents)); } /* @@ -340,9 +319,8 @@ xfs_trans_get_efd( ASSERT(nextents > 0); if (nextents > XFS_EFD_MAX_FAST_EXTENTS) { - efdp = kmem_zalloc(sizeof(struct xfs_efd_log_item) + - (nextents - 1) * sizeof(struct xfs_extent), - 0); + efdp = kzalloc(xfs_efd_log_item_sizeof(nextents), + GFP_KERNEL | __GFP_NOFAIL); } else { efdp = kmem_cache_zalloc(xfs_efd_cache, GFP_KERNEL | __GFP_NOFAIL); @@ -733,6 +711,12 @@ xlog_recover_efi_commit_pass2( efi_formatp = item->ri_buf[0].i_addr; + if (item->ri_buf[0].i_len < xfs_efi_log_format_sizeof(0)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); + return -EFSCORRUPTED; + } + efip = xfs_efi_init(mp, efi_formatp->efi_nextents); error = xfs_efi_copy_format(&item->ri_buf[0], &efip->efi_format); if (error) { @@ -769,12 +753,24 @@ xlog_recover_efd_commit_pass2( xfs_lsn_t lsn) { struct xfs_efd_log_format *efd_formatp; + int buflen = item->ri_buf[0].i_len; efd_formatp = item->ri_buf[0].i_addr; - ASSERT((item->ri_buf[0].i_len == (sizeof(xfs_efd_log_format_32_t) + - ((efd_formatp->efd_nextents - 1) * sizeof(xfs_extent_32_t)))) || - (item->ri_buf[0].i_len == (sizeof(xfs_efd_log_format_64_t) + - ((efd_formatp->efd_nextents - 1) * sizeof(xfs_extent_64_t))))); + + if (buflen < sizeof(struct xfs_efd_log_format)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, log->l_mp, + efd_formatp, buflen); + return -EFSCORRUPTED; + } + + if (item->ri_buf[0].i_len != xfs_efd_log_format32_sizeof( + efd_formatp->efd_nextents) && + item->ri_buf[0].i_len != xfs_efd_log_format64_sizeof( + efd_formatp->efd_nextents)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, log->l_mp, + efd_formatp, buflen); + return -EFSCORRUPTED; + } xlog_recover_release_intent(log, XFS_LI_EFI, efd_formatp->efd_efi_id); return 0; diff --git a/fs/xfs/xfs_extfree_item.h b/fs/xfs/xfs_extfree_item.h index 186d0f2137f1f5c68068693dbfd4ccd0c2f70525..da6a5afa607cf4ed70770a80f35dfc1b1e4a5715 100644 --- a/fs/xfs/xfs_extfree_item.h +++ b/fs/xfs/xfs_extfree_item.h @@ -52,6 +52,14 @@ struct xfs_efi_log_item { xfs_efi_log_format_t efi_format; }; +static inline size_t +xfs_efi_log_item_sizeof( + unsigned int nr) +{ + return offsetof(struct xfs_efi_log_item, efi_format) + + xfs_efi_log_format_sizeof(nr); +} + /* * This is the "extent free done" log item. It is used to log * the fact that some extents earlier mentioned in an efi item @@ -64,6 +72,14 @@ struct xfs_efd_log_item { xfs_efd_log_format_t efd_format; }; +static inline size_t +xfs_efd_log_item_sizeof( + unsigned int nr) +{ + return offsetof(struct xfs_efd_log_item, efd_format) + + xfs_efd_log_format_sizeof(nr); +} + /* * Max number of extents in fast allocation path. */ diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index c6c80265c0b25db0360c6bb6f840a77b11a18063..e462d39c840e62911242e1e157756b81d8737c9d 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -1261,7 +1261,7 @@ xfs_file_llseek( } #ifdef CONFIG_FS_DAX -static int +static inline vm_fault_t xfs_dax_fault( struct vm_fault *vmf, enum page_entry_size pe_size, @@ -1274,14 +1274,15 @@ xfs_dax_fault( &xfs_read_iomap_ops); } #else -static int +static inline vm_fault_t xfs_dax_fault( struct vm_fault *vmf, enum page_entry_size pe_size, bool write_fault, pfn_t *pfn) { - return 0; + ASSERT(0); + return VM_FAULT_SIGBUS; } #endif diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index c000b74dd203582517081fe253d770b8205493fb..aa303be11576ffb04b31a29a187529b38d533f04 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -2818,7 +2818,7 @@ xfs_rename( * Lock all the participating inodes. Depending upon whether * the target_name exists in the target directory, and * whether the target directory is the same as the source - * directory, we can lock from 2 to 4 inodes. + * directory, we can lock from 2 to 5 inodes. */ xfs_lock_inodes(inodes, num_inodes, XFS_ILOCK_EXCL); diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 17e923b9c5fa208c8d959a7653baae17372bf9b5..322eb2ee6c5506b6d048d548d11f1f7594b0c670 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -2552,6 +2552,8 @@ xlog_recover_process_intents( for (lip = xfs_trans_ail_cursor_first(ailp, &cur, 0); lip != NULL; lip = xfs_trans_ail_cursor_next(ailp, &cur)) { + const struct xfs_item_ops *ops; + if (!xlog_item_is_intent(lip)) break; @@ -2567,13 +2569,17 @@ xlog_recover_process_intents( * deferred ops, you /must/ attach them to the capture list in * the recover routine or else those subsequent intents will be * replayed in the wrong order! + * + * The recovery function can free the log item, so we must not + * access lip after it returns. */ spin_unlock(&ailp->ail_lock); - error = lip->li_ops->iop_recover(lip, &capture_list); + ops = lip->li_ops; + error = ops->iop_recover(lip, &capture_list); spin_lock(&ailp->ail_lock); if (error) { trace_xlog_intent_recovery_failed(log->l_mp, error, - lip->li_ops->iop_recover); + ops->iop_recover); break; } } diff --git a/fs/xfs/xfs_ondisk.h b/fs/xfs/xfs_ondisk.h index 758702b9495ff89ca90f758f53b2743da9b6c08b..9737b5a9f405e03717d2ae2f4cc68c4bb77e921f 100644 --- a/fs/xfs/xfs_ondisk.h +++ b/fs/xfs/xfs_ondisk.h @@ -118,10 +118,10 @@ xfs_check_ondisk_structs(void) /* log structures */ XFS_CHECK_STRUCT_SIZE(struct xfs_buf_log_format, 88); XFS_CHECK_STRUCT_SIZE(struct xfs_dq_logformat, 24); - XFS_CHECK_STRUCT_SIZE(struct xfs_efd_log_format_32, 28); - XFS_CHECK_STRUCT_SIZE(struct xfs_efd_log_format_64, 32); - XFS_CHECK_STRUCT_SIZE(struct xfs_efi_log_format_32, 28); - XFS_CHECK_STRUCT_SIZE(struct xfs_efi_log_format_64, 32); + XFS_CHECK_STRUCT_SIZE(struct xfs_efd_log_format_32, 16); + XFS_CHECK_STRUCT_SIZE(struct xfs_efd_log_format_64, 16); + XFS_CHECK_STRUCT_SIZE(struct xfs_efi_log_format_32, 16); + XFS_CHECK_STRUCT_SIZE(struct xfs_efi_log_format_64, 16); XFS_CHECK_STRUCT_SIZE(struct xfs_extent_32, 12); XFS_CHECK_STRUCT_SIZE(struct xfs_extent_64, 16); XFS_CHECK_STRUCT_SIZE(struct xfs_log_dinode, 176); @@ -134,6 +134,21 @@ xfs_check_ondisk_structs(void) XFS_CHECK_STRUCT_SIZE(struct xfs_trans_header, 16); XFS_CHECK_STRUCT_SIZE(struct xfs_attri_log_format, 40); XFS_CHECK_STRUCT_SIZE(struct xfs_attrd_log_format, 16); + XFS_CHECK_STRUCT_SIZE(struct xfs_bui_log_format, 16); + XFS_CHECK_STRUCT_SIZE(struct xfs_bud_log_format, 16); + XFS_CHECK_STRUCT_SIZE(struct xfs_cui_log_format, 16); + XFS_CHECK_STRUCT_SIZE(struct xfs_cud_log_format, 16); + XFS_CHECK_STRUCT_SIZE(struct xfs_rui_log_format, 16); + XFS_CHECK_STRUCT_SIZE(struct xfs_rud_log_format, 16); + XFS_CHECK_STRUCT_SIZE(struct xfs_map_extent, 32); + XFS_CHECK_STRUCT_SIZE(struct xfs_phys_extent, 16); + + XFS_CHECK_OFFSET(struct xfs_bui_log_format, bui_extents, 16); + XFS_CHECK_OFFSET(struct xfs_cui_log_format, cui_extents, 16); + XFS_CHECK_OFFSET(struct xfs_rui_log_format, rui_extents, 16); + XFS_CHECK_OFFSET(struct xfs_efi_log_format, efi_extents, 16); + XFS_CHECK_OFFSET(struct xfs_efi_log_format_32, efi_extents, 16); + XFS_CHECK_OFFSET(struct xfs_efi_log_format_64, efi_extents, 16); /* * The v5 superblock format extended several v4 header structures with diff --git a/fs/xfs/xfs_refcount_item.c b/fs/xfs/xfs_refcount_item.c index 7e97bf19793dfed86108e126def0c33a0634324e..858e3e9eb4a857eca3d06c307d18bee54f4acd68 100644 --- a/fs/xfs/xfs_refcount_item.c +++ b/fs/xfs/xfs_refcount_item.c @@ -523,7 +523,9 @@ xfs_cui_item_recover( type = refc_type; break; default: - XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, mp); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + &cuip->cui_format, + sizeof(cuip->cui_format)); error = -EFSCORRUPTED; goto abort_error; } @@ -536,7 +538,8 @@ xfs_cui_item_recover( &new_fsb, &new_len, &rcur); if (error == -EFSCORRUPTED) XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, - refc, sizeof(*refc)); + &cuip->cui_format, + sizeof(cuip->cui_format)); if (error) goto abort_error; @@ -622,28 +625,18 @@ static const struct xfs_item_ops xfs_cui_item_ops = { .iop_relog = xfs_cui_item_relog, }; -/* - * Copy an CUI format buffer from the given buf, and into the destination - * CUI format structure. The CUI/CUD items were designed not to need any - * special alignment handling. - */ -static int +static inline void xfs_cui_copy_format( - struct xfs_log_iovec *buf, - struct xfs_cui_log_format *dst_cui_fmt) + struct xfs_cui_log_format *dst, + const struct xfs_cui_log_format *src) { - struct xfs_cui_log_format *src_cui_fmt; - uint len; + unsigned int i; - src_cui_fmt = buf->i_addr; - len = xfs_cui_log_format_sizeof(src_cui_fmt->cui_nextents); + memcpy(dst, src, offsetof(struct xfs_cui_log_format, cui_extents)); - if (buf->i_len == len) { - memcpy(dst_cui_fmt, src_cui_fmt, len); - return 0; - } - XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, NULL); - return -EFSCORRUPTED; + for (i = 0; i < src->cui_nextents; i++) + memcpy(&dst->cui_extents[i], &src->cui_extents[i], + sizeof(struct xfs_phys_extent)); } /* @@ -660,19 +653,28 @@ xlog_recover_cui_commit_pass2( struct xlog_recover_item *item, xfs_lsn_t lsn) { - int error; struct xfs_mount *mp = log->l_mp; struct xfs_cui_log_item *cuip; struct xfs_cui_log_format *cui_formatp; + size_t len; cui_formatp = item->ri_buf[0].i_addr; - cuip = xfs_cui_init(mp, cui_formatp->cui_nextents); - error = xfs_cui_copy_format(&item->ri_buf[0], &cuip->cui_format); - if (error) { - xfs_cui_item_free(cuip); - return error; + if (item->ri_buf[0].i_len < xfs_cui_log_format_sizeof(0)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); + return -EFSCORRUPTED; } + + len = xfs_cui_log_format_sizeof(cui_formatp->cui_nextents); + if (item->ri_buf[0].i_len != len) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); + return -EFSCORRUPTED; + } + + cuip = xfs_cui_init(mp, cui_formatp->cui_nextents); + xfs_cui_copy_format(&cuip->cui_format, cui_formatp); atomic_set(&cuip->cui_next_extent, cui_formatp->cui_nextents); /* * Insert the intent into the AIL directly and drop one reference so @@ -706,7 +708,8 @@ xlog_recover_cud_commit_pass2( cud_formatp = item->ri_buf[0].i_addr; if (item->ri_buf[0].i_len != sizeof(struct xfs_cud_log_format)) { - XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, log->l_mp); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, log->l_mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); return -EFSCORRUPTED; } diff --git a/fs/xfs/xfs_rmap_item.c b/fs/xfs/xfs_rmap_item.c index fef92e02f3bb6dda3694a669631ef6665fb17fd5..534504ede1a338cc2bcf59418c292970979c98bc 100644 --- a/fs/xfs/xfs_rmap_item.c +++ b/fs/xfs/xfs_rmap_item.c @@ -155,31 +155,6 @@ xfs_rui_init( return ruip; } -/* - * Copy an RUI format buffer from the given buf, and into the destination - * RUI format structure. The RUI/RUD items were designed not to need any - * special alignment handling. - */ -STATIC int -xfs_rui_copy_format( - struct xfs_log_iovec *buf, - struct xfs_rui_log_format *dst_rui_fmt) -{ - struct xfs_rui_log_format *src_rui_fmt; - uint len; - - src_rui_fmt = buf->i_addr; - len = xfs_rui_log_format_sizeof(src_rui_fmt->rui_nextents); - - if (buf->i_len != len) { - XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, NULL); - return -EFSCORRUPTED; - } - - memcpy(dst_rui_fmt, src_rui_fmt, len); - return 0; -} - static inline struct xfs_rud_log_item *RUD_ITEM(struct xfs_log_item *lip) { return container_of(lip, struct xfs_rud_log_item, rud_item); @@ -582,7 +557,9 @@ xfs_rui_item_recover( type = XFS_RMAP_FREE; break; default: - XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, NULL); + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + &ruip->rui_format, + sizeof(ruip->rui_format)); error = -EFSCORRUPTED; goto abort_error; } @@ -652,6 +629,20 @@ static const struct xfs_item_ops xfs_rui_item_ops = { .iop_relog = xfs_rui_item_relog, }; +static inline void +xfs_rui_copy_format( + struct xfs_rui_log_format *dst, + const struct xfs_rui_log_format *src) +{ + unsigned int i; + + memcpy(dst, src, offsetof(struct xfs_rui_log_format, rui_extents)); + + for (i = 0; i < src->rui_nextents; i++) + memcpy(&dst->rui_extents[i], &src->rui_extents[i], + sizeof(struct xfs_map_extent)); +} + /* * This routine is called to create an in-core extent rmap update * item from the rui format structure which was logged on disk. @@ -666,19 +657,28 @@ xlog_recover_rui_commit_pass2( struct xlog_recover_item *item, xfs_lsn_t lsn) { - int error; struct xfs_mount *mp = log->l_mp; struct xfs_rui_log_item *ruip; struct xfs_rui_log_format *rui_formatp; + size_t len; rui_formatp = item->ri_buf[0].i_addr; - ruip = xfs_rui_init(mp, rui_formatp->rui_nextents); - error = xfs_rui_copy_format(&item->ri_buf[0], &ruip->rui_format); - if (error) { - xfs_rui_item_free(ruip); - return error; + if (item->ri_buf[0].i_len < xfs_rui_log_format_sizeof(0)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); + return -EFSCORRUPTED; + } + + len = xfs_rui_log_format_sizeof(rui_formatp->rui_nextents); + if (item->ri_buf[0].i_len != len) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, + item->ri_buf[0].i_addr, item->ri_buf[0].i_len); + return -EFSCORRUPTED; } + + ruip = xfs_rui_init(mp, rui_formatp->rui_nextents); + xfs_rui_copy_format(&ruip->rui_format, rui_formatp); atomic_set(&ruip->rui_next_extent, rui_formatp->rui_nextents); /* * Insert the intent into the AIL directly and drop one reference so @@ -711,7 +711,11 @@ xlog_recover_rud_commit_pass2( struct xfs_rud_log_format *rud_formatp; rud_formatp = item->ri_buf[0].i_addr; - ASSERT(item->ri_buf[0].i_len == sizeof(struct xfs_rud_log_format)); + if (item->ri_buf[0].i_len != sizeof(struct xfs_rud_log_format)) { + XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, log->l_mp, + rud_formatp, item->ri_buf[0].i_len); + return -EFSCORRUPTED; + } xlog_recover_release_intent(log, XFS_LI_RUI, rud_formatp->rud_rui_id); return 0; diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index f029c6702dda149c025fcc8231a2fc13ac864df9..ee4b429a2f2c962cb1a6b22746d5d1913fded4ac 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -2028,18 +2028,14 @@ xfs_init_caches(void) goto out_destroy_trans_cache; xfs_efd_cache = kmem_cache_create("xfs_efd_item", - (sizeof(struct xfs_efd_log_item) + - (XFS_EFD_MAX_FAST_EXTENTS - 1) * - sizeof(struct xfs_extent)), - 0, 0, NULL); + xfs_efd_log_item_sizeof(XFS_EFD_MAX_FAST_EXTENTS), + 0, 0, NULL); if (!xfs_efd_cache) goto out_destroy_buf_item_cache; xfs_efi_cache = kmem_cache_create("xfs_efi_item", - (sizeof(struct xfs_efi_log_item) + - (XFS_EFI_MAX_FAST_EXTENTS - 1) * - sizeof(struct xfs_extent)), - 0, 0, NULL); + xfs_efi_log_item_sizeof(XFS_EFI_MAX_FAST_EXTENTS), + 0, 0, NULL); if (!xfs_efi_cache) goto out_destroy_efd_cache; diff --git a/fs/xfs/xfs_sysfs.h b/fs/xfs/xfs_sysfs.h index 43585850f1546a6dc74f144d274584706f53ca03..513095e353a5b3bebae5a04d16152a053d6b1056 100644 --- a/fs/xfs/xfs_sysfs.h +++ b/fs/xfs/xfs_sysfs.h @@ -33,10 +33,15 @@ xfs_sysfs_init( const char *name) { struct kobject *parent; + int err; parent = parent_kobj ? &parent_kobj->kobject : NULL; init_completion(&kobj->complete); - return kobject_init_and_add(&kobj->kobject, ktype, parent, "%s", name); + err = kobject_init_and_add(&kobj->kobject, ktype, parent, "%s", name); + if (err) + kobject_put(&kobj->kobject); + + return err; } static inline void diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h index cb7c81ba7fa38bcd4d89dedfc215aa78ba4fd091..372d871bccc5eba84881e8b2b5e22078f05c45ac 100644 --- a/fs/xfs/xfs_trace.h +++ b/fs/xfs/xfs_trace.h @@ -799,6 +799,9 @@ TRACE_DEFINE_ENUM(PE_SIZE_PTE); TRACE_DEFINE_ENUM(PE_SIZE_PMD); TRACE_DEFINE_ENUM(PE_SIZE_PUD); +TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_SHARED); +TRACE_DEFINE_ENUM(XFS_REFC_DOMAIN_COW); + TRACE_EVENT(xfs_filemap_fault, TP_PROTO(struct xfs_inode *ip, enum page_entry_size pe_size, bool write_fault), @@ -2925,6 +2928,7 @@ DECLARE_EVENT_CLASS(xfs_refcount_extent_class, TP_STRUCT__entry( __field(dev_t, dev) __field(xfs_agnumber_t, agno) + __field(enum xfs_refc_domain, domain) __field(xfs_agblock_t, startblock) __field(xfs_extlen_t, blockcount) __field(xfs_nlink_t, refcount) @@ -2932,13 +2936,15 @@ DECLARE_EVENT_CLASS(xfs_refcount_extent_class, TP_fast_assign( __entry->dev = mp->m_super->s_dev; __entry->agno = agno; + __entry->domain = irec->rc_domain; __entry->startblock = irec->rc_startblock; __entry->blockcount = irec->rc_blockcount; __entry->refcount = irec->rc_refcount; ), - TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x refcount %u", + TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno, + __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS), __entry->startblock, __entry->blockcount, __entry->refcount) @@ -2958,6 +2964,7 @@ DECLARE_EVENT_CLASS(xfs_refcount_extent_at_class, TP_STRUCT__entry( __field(dev_t, dev) __field(xfs_agnumber_t, agno) + __field(enum xfs_refc_domain, domain) __field(xfs_agblock_t, startblock) __field(xfs_extlen_t, blockcount) __field(xfs_nlink_t, refcount) @@ -2966,14 +2973,16 @@ DECLARE_EVENT_CLASS(xfs_refcount_extent_at_class, TP_fast_assign( __entry->dev = mp->m_super->s_dev; __entry->agno = agno; + __entry->domain = irec->rc_domain; __entry->startblock = irec->rc_startblock; __entry->blockcount = irec->rc_blockcount; __entry->refcount = irec->rc_refcount; __entry->agbno = agbno; ), - TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x refcount %u @ agbno 0x%x", + TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u @ agbno 0x%x", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno, + __print_symbolic(__entry->domain, XFS_REFC_DOMAIN_STRINGS), __entry->startblock, __entry->blockcount, __entry->refcount, @@ -2994,9 +3003,11 @@ DECLARE_EVENT_CLASS(xfs_refcount_double_extent_class, TP_STRUCT__entry( __field(dev_t, dev) __field(xfs_agnumber_t, agno) + __field(enum xfs_refc_domain, i1_domain) __field(xfs_agblock_t, i1_startblock) __field(xfs_extlen_t, i1_blockcount) __field(xfs_nlink_t, i1_refcount) + __field(enum xfs_refc_domain, i2_domain) __field(xfs_agblock_t, i2_startblock) __field(xfs_extlen_t, i2_blockcount) __field(xfs_nlink_t, i2_refcount) @@ -3004,20 +3015,24 @@ DECLARE_EVENT_CLASS(xfs_refcount_double_extent_class, TP_fast_assign( __entry->dev = mp->m_super->s_dev; __entry->agno = agno; + __entry->i1_domain = i1->rc_domain; __entry->i1_startblock = i1->rc_startblock; __entry->i1_blockcount = i1->rc_blockcount; __entry->i1_refcount = i1->rc_refcount; + __entry->i2_domain = i2->rc_domain; __entry->i2_startblock = i2->rc_startblock; __entry->i2_blockcount = i2->rc_blockcount; __entry->i2_refcount = i2->rc_refcount; ), - TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x refcount %u -- " - "agbno 0x%x fsbcount 0x%x refcount %u", + TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u -- " + "dom %s agbno 0x%x fsbcount 0x%x refcount %u", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno, + __print_symbolic(__entry->i1_domain, XFS_REFC_DOMAIN_STRINGS), __entry->i1_startblock, __entry->i1_blockcount, __entry->i1_refcount, + __print_symbolic(__entry->i2_domain, XFS_REFC_DOMAIN_STRINGS), __entry->i2_startblock, __entry->i2_blockcount, __entry->i2_refcount) @@ -3038,9 +3053,11 @@ DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class, TP_STRUCT__entry( __field(dev_t, dev) __field(xfs_agnumber_t, agno) + __field(enum xfs_refc_domain, i1_domain) __field(xfs_agblock_t, i1_startblock) __field(xfs_extlen_t, i1_blockcount) __field(xfs_nlink_t, i1_refcount) + __field(enum xfs_refc_domain, i2_domain) __field(xfs_agblock_t, i2_startblock) __field(xfs_extlen_t, i2_blockcount) __field(xfs_nlink_t, i2_refcount) @@ -3049,21 +3066,25 @@ DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class, TP_fast_assign( __entry->dev = mp->m_super->s_dev; __entry->agno = agno; + __entry->i1_domain = i1->rc_domain; __entry->i1_startblock = i1->rc_startblock; __entry->i1_blockcount = i1->rc_blockcount; __entry->i1_refcount = i1->rc_refcount; + __entry->i2_domain = i2->rc_domain; __entry->i2_startblock = i2->rc_startblock; __entry->i2_blockcount = i2->rc_blockcount; __entry->i2_refcount = i2->rc_refcount; __entry->agbno = agbno; ), - TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x refcount %u -- " - "agbno 0x%x fsbcount 0x%x refcount %u @ agbno 0x%x", + TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u -- " + "dom %s agbno 0x%x fsbcount 0x%x refcount %u @ agbno 0x%x", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno, + __print_symbolic(__entry->i1_domain, XFS_REFC_DOMAIN_STRINGS), __entry->i1_startblock, __entry->i1_blockcount, __entry->i1_refcount, + __print_symbolic(__entry->i2_domain, XFS_REFC_DOMAIN_STRINGS), __entry->i2_startblock, __entry->i2_blockcount, __entry->i2_refcount, @@ -3086,12 +3107,15 @@ DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class, TP_STRUCT__entry( __field(dev_t, dev) __field(xfs_agnumber_t, agno) + __field(enum xfs_refc_domain, i1_domain) __field(xfs_agblock_t, i1_startblock) __field(xfs_extlen_t, i1_blockcount) __field(xfs_nlink_t, i1_refcount) + __field(enum xfs_refc_domain, i2_domain) __field(xfs_agblock_t, i2_startblock) __field(xfs_extlen_t, i2_blockcount) __field(xfs_nlink_t, i2_refcount) + __field(enum xfs_refc_domain, i3_domain) __field(xfs_agblock_t, i3_startblock) __field(xfs_extlen_t, i3_blockcount) __field(xfs_nlink_t, i3_refcount) @@ -3099,27 +3123,33 @@ DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class, TP_fast_assign( __entry->dev = mp->m_super->s_dev; __entry->agno = agno; + __entry->i1_domain = i1->rc_domain; __entry->i1_startblock = i1->rc_startblock; __entry->i1_blockcount = i1->rc_blockcount; __entry->i1_refcount = i1->rc_refcount; + __entry->i2_domain = i2->rc_domain; __entry->i2_startblock = i2->rc_startblock; __entry->i2_blockcount = i2->rc_blockcount; __entry->i2_refcount = i2->rc_refcount; + __entry->i3_domain = i3->rc_domain; __entry->i3_startblock = i3->rc_startblock; __entry->i3_blockcount = i3->rc_blockcount; __entry->i3_refcount = i3->rc_refcount; ), - TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x refcount %u -- " - "agbno 0x%x fsbcount 0x%x refcount %u -- " - "agbno 0x%x fsbcount 0x%x refcount %u", + TP_printk("dev %d:%d agno 0x%x dom %s agbno 0x%x fsbcount 0x%x refcount %u -- " + "dom %s agbno 0x%x fsbcount 0x%x refcount %u -- " + "dom %s agbno 0x%x fsbcount 0x%x refcount %u", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->agno, + __print_symbolic(__entry->i1_domain, XFS_REFC_DOMAIN_STRINGS), __entry->i1_startblock, __entry->i1_blockcount, __entry->i1_refcount, + __print_symbolic(__entry->i2_domain, XFS_REFC_DOMAIN_STRINGS), __entry->i2_startblock, __entry->i2_blockcount, __entry->i2_refcount, + __print_symbolic(__entry->i3_domain, XFS_REFC_DOMAIN_STRINGS), __entry->i3_startblock, __entry->i3_blockcount, __entry->i3_refcount) diff --git a/fs/xfs/xfs_trans_ail.c b/fs/xfs/xfs_trans_ail.c index 16fbf2a1144c17603921cea2af838e2b1c9bdf5b..f51df7d94ef74ca8e069f1ceec5eedacde3191df 100644 --- a/fs/xfs/xfs_trans_ail.c +++ b/fs/xfs/xfs_trans_ail.c @@ -730,11 +730,10 @@ void xfs_ail_push_all_sync( struct xfs_ail *ailp) { - struct xfs_log_item *lip; DEFINE_WAIT(wait); spin_lock(&ailp->ail_lock); - while ((lip = xfs_ail_max(ailp)) != NULL) { + while (xfs_ail_max(ailp) != NULL) { prepare_to_wait(&ailp->ail_empty, &wait, TASK_UNINTERRUPTIBLE); wake_up_process(ailp->ail_task); spin_unlock(&ailp->ail_lock); diff --git a/fs/zonefs/super.c b/fs/zonefs/super.c index 860f0b1032c65c633d401e5f3652bb76600380c5..2c53fbb8d918e5ca63ab3a620455b1f173883251 100644 --- a/fs/zonefs/super.c +++ b/fs/zonefs/super.c @@ -40,6 +40,13 @@ static void zonefs_account_active(struct inode *inode) if (zi->i_ztype != ZONEFS_ZTYPE_SEQ) return; + /* + * For zones that transitioned to the offline or readonly condition, + * we only need to clear the active state. + */ + if (zi->i_flags & (ZONEFS_ZONE_OFFLINE | ZONEFS_ZONE_READONLY)) + goto out; + /* * If the zone is active, that is, if it is explicitly open or * partially written, check if it was already accounted as active. @@ -53,6 +60,7 @@ static void zonefs_account_active(struct inode *inode) return; } +out: /* The zone is not active. If it was, update the active count */ if (zi->i_flags & ZONEFS_ZONE_ACTIVE) { zi->i_flags &= ~ZONEFS_ZONE_ACTIVE; @@ -324,6 +332,7 @@ static loff_t zonefs_check_zone_condition(struct inode *inode, inode->i_flags |= S_IMMUTABLE; inode->i_mode &= ~0777; zone->wp = zone->start; + zi->i_flags |= ZONEFS_ZONE_OFFLINE; return 0; case BLK_ZONE_COND_READONLY: /* @@ -342,8 +351,10 @@ static loff_t zonefs_check_zone_condition(struct inode *inode, zone->cond = BLK_ZONE_COND_OFFLINE; inode->i_mode &= ~0777; zone->wp = zone->start; + zi->i_flags |= ZONEFS_ZONE_OFFLINE; return 0; } + zi->i_flags |= ZONEFS_ZONE_READONLY; inode->i_mode &= ~0222; return i_size_read(inode); case BLK_ZONE_COND_FULL: @@ -478,14 +489,22 @@ static void __zonefs_io_error(struct inode *inode, bool write) struct super_block *sb = inode->i_sb; struct zonefs_sb_info *sbi = ZONEFS_SB(sb); unsigned int noio_flag; - unsigned int nr_zones = - zi->i_zone_size >> (sbi->s_zone_sectors_shift + SECTOR_SHIFT); + unsigned int nr_zones = 1; struct zonefs_ioerr_data err = { .inode = inode, .write = write, }; int ret; + /* + * The only files that have more than one zone are conventional zone + * files with aggregated conventional zones, for which the inode zone + * size is always larger than the device zone size. + */ + if (zi->i_zone_size > bdev_zone_sectors(sb->s_bdev)) + nr_zones = zi->i_zone_size >> + (sbi->s_zone_sectors_shift + SECTOR_SHIFT); + /* * Memory allocations in blkdev_report_zones() can trigger a memory * reclaim which may in turn cause a recursion into zonefs as well as @@ -1407,6 +1426,14 @@ static int zonefs_init_file_inode(struct inode *inode, struct blk_zone *zone, zi->i_ztype = type; zi->i_zsector = zone->start; zi->i_zone_size = zone->len << SECTOR_SHIFT; + if (zi->i_zone_size > bdev_zone_sectors(sb->s_bdev) << SECTOR_SHIFT && + !(sbi->s_features & ZONEFS_F_AGGRCNV)) { + zonefs_err(sb, + "zone size %llu doesn't match device's zone sectors %llu\n", + zi->i_zone_size, + bdev_zone_sectors(sb->s_bdev) << SECTOR_SHIFT); + return -EINVAL; + } zi->i_max_size = min_t(loff_t, MAX_LFS_FILESIZE, zone->capacity << SECTOR_SHIFT); @@ -1456,11 +1483,11 @@ static struct dentry *zonefs_create_inode(struct dentry *parent, struct inode *dir = d_inode(parent); struct dentry *dentry; struct inode *inode; - int ret; + int ret = -ENOMEM; dentry = d_alloc_name(parent, name); if (!dentry) - return NULL; + return ERR_PTR(ret); inode = new_inode(parent->d_sb); if (!inode) @@ -1485,7 +1512,7 @@ static struct dentry *zonefs_create_inode(struct dentry *parent, dput: dput(dentry); - return NULL; + return ERR_PTR(ret); } struct zonefs_zone_data { @@ -1505,7 +1532,7 @@ static int zonefs_create_zgroup(struct zonefs_zone_data *zd, struct blk_zone *zone, *next, *end; const char *zgroup_name; char *file_name; - struct dentry *dir; + struct dentry *dir, *dent; unsigned int n = 0; int ret; @@ -1523,8 +1550,8 @@ static int zonefs_create_zgroup(struct zonefs_zone_data *zd, zgroup_name = "seq"; dir = zonefs_create_inode(sb->s_root, zgroup_name, NULL, type); - if (!dir) { - ret = -ENOMEM; + if (IS_ERR(dir)) { + ret = PTR_ERR(dir); goto free; } @@ -1570,8 +1597,9 @@ static int zonefs_create_zgroup(struct zonefs_zone_data *zd, * Use the file number within its group as file name. */ snprintf(file_name, ZONEFS_NAME_MAX - 1, "%u", n); - if (!zonefs_create_inode(dir, file_name, zone, type)) { - ret = -ENOMEM; + dent = zonefs_create_inode(dir, file_name, zone, type); + if (IS_ERR(dent)) { + ret = PTR_ERR(dent); goto free; } @@ -1905,18 +1933,18 @@ static int __init zonefs_init(void) if (ret) return ret; - ret = register_filesystem(&zonefs_type); + ret = zonefs_sysfs_init(); if (ret) goto destroy_inodecache; - ret = zonefs_sysfs_init(); + ret = register_filesystem(&zonefs_type); if (ret) - goto unregister_fs; + goto sysfs_exit; return 0; -unregister_fs: - unregister_filesystem(&zonefs_type); +sysfs_exit: + zonefs_sysfs_exit(); destroy_inodecache: zonefs_destroy_inodecache(); @@ -1925,9 +1953,9 @@ static int __init zonefs_init(void) static void __exit zonefs_exit(void) { + unregister_filesystem(&zonefs_type); zonefs_sysfs_exit(); zonefs_destroy_inodecache(); - unregister_filesystem(&zonefs_type); } MODULE_AUTHOR("Damien Le Moal"); diff --git a/fs/zonefs/sysfs.c b/fs/zonefs/sysfs.c index 9cb6755ce39a9054296c0d48c340237c841a8401..9920689dc098d93832491b1b3827c9f57909e1cc 100644 --- a/fs/zonefs/sysfs.c +++ b/fs/zonefs/sysfs.c @@ -15,11 +15,6 @@ struct zonefs_sysfs_attr { ssize_t (*show)(struct zonefs_sb_info *sbi, char *buf); }; -static inline struct zonefs_sysfs_attr *to_attr(struct attribute *attr) -{ - return container_of(attr, struct zonefs_sysfs_attr, attr); -} - #define ZONEFS_SYSFS_ATTR_RO(name) \ static struct zonefs_sysfs_attr zonefs_sysfs_attr_##name = __ATTR_RO(name) diff --git a/fs/zonefs/zonefs.h b/fs/zonefs/zonefs.h index 4b3de66c323342ab8ac10f4691e492197e7e6998..1dbe78119ff163fcd5b63243299735767e51576f 100644 --- a/fs/zonefs/zonefs.h +++ b/fs/zonefs/zonefs.h @@ -39,8 +39,10 @@ static inline enum zonefs_ztype zonefs_zone_type(struct blk_zone *zone) return ZONEFS_ZTYPE_SEQ; } -#define ZONEFS_ZONE_OPEN (1 << 0) -#define ZONEFS_ZONE_ACTIVE (1 << 1) +#define ZONEFS_ZONE_OPEN (1U << 0) +#define ZONEFS_ZONE_ACTIVE (1U << 1) +#define ZONEFS_ZONE_OFFLINE (1U << 2) +#define ZONEFS_ZONE_READONLY (1U << 3) /* * In-memory inode data. diff --git a/include/asm-generic/compat.h b/include/asm-generic/compat.h index aeb257ad3d1a6d43d79075d02d4973ef7da2d20b..8392caea398f41c1a9c45446d8f7fe30e192dc4a 100644 --- a/include/asm-generic/compat.h +++ b/include/asm-generic/compat.h @@ -15,7 +15,7 @@ #endif #ifndef compat_arg_u64 -#ifdef CONFIG_CPU_BIG_ENDIAN +#ifndef CONFIG_CPU_BIG_ENDIAN #define compat_arg_u64(name) u32 name##_lo, u32 name##_hi #define compat_arg_u64_dual(name) u32, name##_lo, u32, name##_hi #else diff --git a/include/asm-generic/hyperv-tlfs.h b/include/asm-generic/hyperv-tlfs.h index fdce7a4cfc6ffca0115bb08053dd2961c0fea50b..b17c6eeb9afa2e3ada6021ee6453913814383b51 100644 --- a/include/asm-generic/hyperv-tlfs.h +++ b/include/asm-generic/hyperv-tlfs.h @@ -102,6 +102,15 @@ struct ms_hyperv_tsc_page { volatile s64 tsc_offset; } __packed; +union hv_reference_tsc_msr { + u64 as_uint64; + struct { + u64 enable:1; + u64 reserved:11; + u64 pfn:52; + } __packed; +}; + /* * The guest OS needs to register the guest ID with the hypervisor. * The guest ID is a 64 bit entity and the structure of this ID is diff --git a/include/asm-generic/tlb.h b/include/asm-generic/tlb.h index 492dce43236eacd41b5f822a5a34ca56623be237..cab7cfebf40bd9c3aa666bb8d28fb3c1dc5c67d7 100644 --- a/include/asm-generic/tlb.h +++ b/include/asm-generic/tlb.h @@ -222,12 +222,16 @@ extern void tlb_remove_table(struct mmu_gather *tlb, void *table); #define tlb_needs_table_invalidate() (true) #endif +void tlb_remove_table_sync_one(void); + #else #ifdef tlb_needs_table_invalidate #error tlb_needs_table_invalidate() requires MMU_GATHER_RCU_TABLE_FREE #endif +static inline void tlb_remove_table_sync_one(void) { } + #endif /* CONFIG_MMU_GATHER_RCU_TABLE_FREE */ diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index d06ada2341cb9e2fdcdbd07a846646b8d94856f9..3dc5824141cd229a55962dc55c9e0613a1b9aa9f 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -347,6 +347,7 @@ #define DATA_DATA \ *(.xiptext) \ *(DATA_MAIN) \ + *(.data..decrypted) \ *(.ref.data) \ *(.data..shared_aligned) /* percpu related */ \ MEM_KEEP(init.data*) \ @@ -995,7 +996,6 @@ #ifdef CONFIG_AMD_MEM_ENCRYPT #define PERCPU_DECRYPTED_SECTION \ . = ALIGN(PAGE_SIZE); \ - *(.data..decrypted) \ *(.data..percpu..decrypted) \ . = ALIGN(PAGE_SIZE); #else diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 50e358a19d98643b2bc927372cb2c46b6d4ca52c..891f8cbcd0436a4c81a60e82f0364546f1b2c0f9 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -311,6 +311,13 @@ struct queue_limits { unsigned char discard_misaligned; unsigned char raid_partial_stripes_expensive; enum blk_zoned_model zoned; + + /* + * Drivers that set dma_alignment to less than 511 must be prepared to + * handle individual bvec's that are not a multiple of a SECTOR_SIZE + * due to possible offsets. + */ + unsigned int dma_alignment; }; typedef int (*report_zones_cb)(struct blk_zone *zone, unsigned int idx, @@ -456,12 +463,6 @@ struct request_queue { unsigned long nr_requests; /* Max # of requests */ unsigned int dma_pad_mask; - /* - * Drivers that set dma_alignment to less than 511 must be prepared to - * handle individual bvec's that are not a multiple of a SECTOR_SIZE - * due to possible offsets. - */ - unsigned int dma_alignment; #ifdef CONFIG_BLK_INLINE_ENCRYPTION struct blk_crypto_profile *crypto_profile; @@ -944,7 +945,6 @@ extern void blk_queue_io_min(struct request_queue *q, unsigned int min); extern void blk_limits_io_opt(struct queue_limits *limits, unsigned int opt); extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt); extern void blk_set_queue_depth(struct request_queue *q, unsigned int depth); -extern void blk_set_default_limits(struct queue_limits *lim); extern void blk_set_stacking_limits(struct queue_limits *lim); extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b, sector_t offset); @@ -1324,7 +1324,7 @@ static inline sector_t bdev_zone_sectors(struct block_device *bdev) static inline int queue_dma_alignment(const struct request_queue *q) { - return q ? q->dma_alignment : 511; + return q ? q->limits.dma_alignment : 511; } static inline unsigned int bdev_dma_alignment(struct block_device *bdev) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 0566705c1d4eadd64ce87ec26d9ed4492feccef4..c1bd1bd105067e575aafbf1f9e03b8280f81910d 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -27,7 +27,7 @@ #include #include #include -#include +#include struct bpf_verifier_env; struct bpf_verifier_log; @@ -315,7 +315,7 @@ static inline void __copy_map_value(struct bpf_map *map, void *dst, void *src, b u32 next_off = map->off_arr->field_off[i]; memcpy(dst + curr_off, src + curr_off, next_off - curr_off); - curr_off += map->off_arr->field_sz[i]; + curr_off = next_off + map->off_arr->field_sz[i]; } memcpy(dst + curr_off, src + curr_off, map->value_size - curr_off); } @@ -344,7 +344,7 @@ static inline void zero_map_value(struct bpf_map *map, void *dst) u32 next_off = map->off_arr->field_off[i]; memset(dst + curr_off, 0, next_off - curr_off); - curr_off += map->off_arr->field_sz[i]; + curr_off = next_off + map->off_arr->field_sz[i]; } memset(dst + curr_off, 0, map->value_size - curr_off); } @@ -954,6 +954,10 @@ struct bpf_dispatcher { void *rw_image; u32 image_off; struct bpf_ksym ksym; +#ifdef CONFIG_HAVE_STATIC_CALL + struct static_call_key *sc_key; + void *sc_tramp; +#endif }; static __always_inline __nocfi unsigned int bpf_dispatcher_nop_func( @@ -971,7 +975,33 @@ struct bpf_trampoline *bpf_trampoline_get(u64 key, struct bpf_attach_target_info *tgt_info); void bpf_trampoline_put(struct bpf_trampoline *tr); int arch_prepare_bpf_dispatcher(void *image, void *buf, s64 *funcs, int num_funcs); -int __init bpf_arch_init_dispatcher_early(void *ip); + +/* + * When the architecture supports STATIC_CALL replace the bpf_dispatcher_fn + * indirection with a direct call to the bpf program. If the architecture does + * not have STATIC_CALL, avoid a double-indirection. + */ +#ifdef CONFIG_HAVE_STATIC_CALL + +#define __BPF_DISPATCHER_SC_INIT(_name) \ + .sc_key = &STATIC_CALL_KEY(_name), \ + .sc_tramp = STATIC_CALL_TRAMP_ADDR(_name), + +#define __BPF_DISPATCHER_SC(name) \ + DEFINE_STATIC_CALL(bpf_dispatcher_##name##_call, bpf_dispatcher_nop_func) + +#define __BPF_DISPATCHER_CALL(name) \ + static_call(bpf_dispatcher_##name##_call)(ctx, insnsi, bpf_func) + +#define __BPF_DISPATCHER_UPDATE(_d, _new) \ + __static_call_update((_d)->sc_key, (_d)->sc_tramp, (_new)) + +#else +#define __BPF_DISPATCHER_SC_INIT(name) +#define __BPF_DISPATCHER_SC(name) +#define __BPF_DISPATCHER_CALL(name) bpf_func(ctx, insnsi) +#define __BPF_DISPATCHER_UPDATE(_d, _new) +#endif #define BPF_DISPATCHER_INIT(_name) { \ .mutex = __MUTEX_INITIALIZER(_name.mutex), \ @@ -984,34 +1014,21 @@ int __init bpf_arch_init_dispatcher_early(void *ip); .name = #_name, \ .lnode = LIST_HEAD_INIT(_name.ksym.lnode), \ }, \ + __BPF_DISPATCHER_SC_INIT(_name##_call) \ } -#define BPF_DISPATCHER_INIT_CALL(_name) \ - static int __init _name##_init(void) \ - { \ - return bpf_arch_init_dispatcher_early(_name##_func); \ - } \ - early_initcall(_name##_init) - -#ifdef CONFIG_X86_64 -#define BPF_DISPATCHER_ATTRIBUTES __attribute__((patchable_function_entry(5))) -#else -#define BPF_DISPATCHER_ATTRIBUTES -#endif - #define DEFINE_BPF_DISPATCHER(name) \ - notrace BPF_DISPATCHER_ATTRIBUTES \ + __BPF_DISPATCHER_SC(name); \ noinline __nocfi unsigned int bpf_dispatcher_##name##_func( \ const void *ctx, \ const struct bpf_insn *insnsi, \ bpf_func_t bpf_func) \ { \ - return bpf_func(ctx, insnsi); \ + return __BPF_DISPATCHER_CALL(name); \ } \ EXPORT_SYMBOL(bpf_dispatcher_##name##_func); \ struct bpf_dispatcher bpf_dispatcher_##name = \ - BPF_DISPATCHER_INIT(bpf_dispatcher_##name); \ - BPF_DISPATCHER_INIT_CALL(bpf_dispatcher_##name); + BPF_DISPATCHER_INIT(bpf_dispatcher_##name); #define DECLARE_BPF_DISPATCHER(name) \ unsigned int bpf_dispatcher_##name##_func( \ @@ -1019,6 +1036,7 @@ int __init bpf_arch_init_dispatcher_early(void *ip); const struct bpf_insn *insnsi, \ bpf_func_t bpf_func); \ extern struct bpf_dispatcher bpf_dispatcher_##name; + #define BPF_DISPATCHER_FUNC(name) bpf_dispatcher_##name##_func #define BPF_DISPATCHER_PTR(name) (&bpf_dispatcher_##name) void bpf_dispatcher_change_prog(struct bpf_dispatcher *d, struct bpf_prog *from, diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 58f5431a555984a1683f70ddea5c63d40517322a..982ba245eb41ce701f529a4fa0fd95ec85da914a 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h @@ -152,6 +152,22 @@ static inline bool can_is_canxl_dev_mtu(unsigned int mtu) return (mtu >= CANXL_MIN_MTU && mtu <= CANXL_MAX_MTU); } +/* drop skb if it does not contain a valid CAN frame for sending */ +static inline bool can_dev_dropped_skb(struct net_device *dev, struct sk_buff *skb) +{ + struct can_priv *priv = netdev_priv(dev); + + if (priv->ctrlmode & CAN_CTRLMODE_LISTENONLY) { + netdev_info_once(dev, + "interface in listen only mode, dropping skb\n"); + kfree_skb(skb); + dev->stats.tx_dropped++; + return true; + } + + return can_dropped_invalid_skb(dev, skb); +} + void can_setup(struct net_device *dev); struct net_device *alloc_candev_mqs(int sizeof_priv, unsigned int echo_skb_max, diff --git a/include/linux/can/platform/sja1000.h b/include/linux/can/platform/sja1000.h index 5755ae5a47122b553d9de4d6b80a7d9aeeecd120..6a869682c12079ca2b1e9b566fc908c0bd9afe88 100644 --- a/include/linux/can/platform/sja1000.h +++ b/include/linux/can/platform/sja1000.h @@ -14,7 +14,7 @@ #define OCR_MODE_TEST 0x01 #define OCR_MODE_NORMAL 0x02 #define OCR_MODE_CLOCK 0x03 -#define OCR_MODE_MASK 0x07 +#define OCR_MODE_MASK 0x03 #define OCR_TX0_INVERT 0x04 #define OCR_TX0_PULLDOWN 0x08 #define OCR_TX0_PULLUP 0x10 diff --git a/include/linux/efi.h b/include/linux/efi.h index 80f3c1c7827dd2d66a1d9f2abe5b683978df643b..7603fc58c47cd4f3189d465fc6311d960eafae9f 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -389,6 +389,7 @@ void efi_native_runtime_setup(void); #define EFI_LOAD_FILE2_PROTOCOL_GUID EFI_GUID(0x4006c0c1, 0xfcb3, 0x403e, 0x99, 0x6d, 0x4a, 0x6c, 0x87, 0x24, 0xe0, 0x6d) #define EFI_RT_PROPERTIES_TABLE_GUID EFI_GUID(0xeb66918a, 0x7eef, 0x402a, 0x84, 0x2e, 0x93, 0x1d, 0x21, 0xc3, 0x8a, 0xe9) #define EFI_DXE_SERVICES_TABLE_GUID EFI_GUID(0x05ad34ba, 0x6f02, 0x4214, 0x95, 0x2e, 0x4d, 0xa0, 0x39, 0x8e, 0x2b, 0xb9) +#define EFI_SMBIOS_PROTOCOL_GUID EFI_GUID(0x03583ff6, 0xcb36, 0x4940, 0x94, 0x7e, 0xb9, 0xb3, 0x9f, 0x4a, 0xfa, 0xf7) #define EFI_IMAGE_SECURITY_DATABASE_GUID EFI_GUID(0xd719b2cb, 0x3d3a, 0x4596, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f) #define EFI_SHIM_LOCK_GUID EFI_GUID(0x605dab50, 0xe046, 0x4300, 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23) @@ -1222,7 +1223,7 @@ efi_status_t efi_random_get_seed(void); arch_efi_call_virt_teardown(); \ }) -#define EFI_RANDOM_SEED_SIZE 64U +#define EFI_RANDOM_SEED_SIZE 32U // BLAKE2S_HASH_SIZE struct linux_efi_random_seed { u32 size; diff --git a/include/linux/fault-inject.h b/include/linux/fault-inject.h index 9f6e25467844ae1ac708a955cebbff254abf0f3c..444236dadcf0853d525d8fe99af7da2a73ad6640 100644 --- a/include/linux/fault-inject.h +++ b/include/linux/fault-inject.h @@ -20,7 +20,6 @@ struct fault_attr { atomic_t space; unsigned long verbose; bool task_filter; - bool no_warn; unsigned long stacktrace_depth; unsigned long require_start; unsigned long require_end; @@ -32,6 +31,10 @@ struct fault_attr { struct dentry *dname; }; +enum fault_flags { + FAULT_NOWARN = 1 << 0, +}; + #define FAULT_ATTR_INITIALIZER { \ .interval = 1, \ .times = ATOMIC_INIT(1), \ @@ -40,11 +43,11 @@ struct fault_attr { .ratelimit_state = RATELIMIT_STATE_INIT_DISABLED, \ .verbose = 2, \ .dname = NULL, \ - .no_warn = false, \ } #define DECLARE_FAULT_ATTR(name) struct fault_attr name = FAULT_ATTR_INITIALIZER int setup_fault_attr(struct fault_attr *attr, char *str); +bool should_fail_ex(struct fault_attr *attr, ssize_t size, int flags); bool should_fail(struct fault_attr *attr, ssize_t size); #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS diff --git a/include/linux/fortify-string.h b/include/linux/fortify-string.h index 18a31b125f9d6861a85cde59f4887968399e9ea8..1067a8450826bbf034e6fa947c2d987f39e2262f 100644 --- a/include/linux/fortify-string.h +++ b/include/linux/fortify-string.h @@ -454,13 +454,18 @@ __FORTIFY_INLINE bool fortify_memcpy_chk(__kernel_size_t size, #define __fortify_memcpy_chk(p, q, size, p_size, q_size, \ p_size_field, q_size_field, op) ({ \ - size_t __fortify_size = (size_t)(size); \ - WARN_ONCE(fortify_memcpy_chk(__fortify_size, p_size, q_size, \ - p_size_field, q_size_field, #op), \ + const size_t __fortify_size = (size_t)(size); \ + const size_t __p_size = (p_size); \ + const size_t __q_size = (q_size); \ + const size_t __p_size_field = (p_size_field); \ + const size_t __q_size_field = (q_size_field); \ + WARN_ONCE(fortify_memcpy_chk(__fortify_size, __p_size, \ + __q_size, __p_size_field, \ + __q_size_field, #op), \ #op ": detected field-spanning write (size %zu) of single %s (size %zu)\n", \ __fortify_size, \ "field \"" #p "\" at " __FILE__ ":" __stringify(__LINE__), \ - p_size_field); \ + __p_size_field); \ __underlying_##op(p, q, __fortify_size); \ }) diff --git a/include/linux/fs.h b/include/linux/fs.h index e654435f16512c122f176d0ab447925ae94f75fc..59ae95ddb6793588b1be1ae9af3ab07c8f762ffa 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -2089,6 +2089,14 @@ struct dir_context { */ #define REMAP_FILE_ADVISORY (REMAP_FILE_CAN_SHORTEN) +/* + * These flags control the behavior of vfs_copy_file_range(). + * They are not available to the user via syscall. + * + * COPY_FILE_SPLICE: call splice direct instead of fs clone/copy ops + */ +#define COPY_FILE_SPLICE (1 << 0) + struct iov_iter; struct io_uring_cmd; diff --git a/include/linux/fscache.h b/include/linux/fscache.h index 36e5dd84cf5996b1dba6f47a15e1023c4b64e80f..8e312c8323a8e5048d0780401659d2dbe7d90948 100644 --- a/include/linux/fscache.h +++ b/include/linux/fscache.h @@ -75,7 +75,7 @@ struct fscache_volume { atomic_t n_accesses; /* Number of cache accesses in progress */ unsigned int debug_id; unsigned int key_hash; /* Hash of key string */ - char *key; /* Volume ID, eg. "afs@example.com@1234" */ + u8 *key; /* Volume ID, eg. "afs@example.com@1234" */ struct list_head proc_link; /* Link in /proc/fs/fscache/volumes */ struct hlist_bl_node hash_link; /* Link in hash table */ struct work_struct work; diff --git a/include/linux/gfp.h b/include/linux/gfp.h index ef4aea3b356e76965b3d92fcc59bfcb2744e5c0e..65a78773dccad281ed8a6e4b5fe881868fb5ff08 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -210,6 +210,20 @@ alloc_pages_bulk_array_node(gfp_t gfp, int nid, unsigned long nr_pages, struct p return __alloc_pages_bulk(gfp, nid, NULL, nr_pages, NULL, page_array); } +static inline void warn_if_node_offline(int this_node, gfp_t gfp_mask) +{ + gfp_t warn_gfp = gfp_mask & (__GFP_THISNODE|__GFP_NOWARN); + + if (warn_gfp != (__GFP_THISNODE|__GFP_NOWARN)) + return; + + if (node_online(this_node)) + return; + + pr_warn("%pGg allocation from offline node %d\n", &gfp_mask, this_node); + dump_stack(); +} + /* * Allocate pages, preferring the node given as nid. The node must be valid and * online. For more general interface, see alloc_pages_node(). @@ -218,7 +232,7 @@ static inline struct page * __alloc_pages_node(int nid, gfp_t gfp_mask, unsigned int order) { VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES); - VM_WARN_ON((gfp_mask & __GFP_THISNODE) && !node_online(nid)); + warn_if_node_offline(nid, gfp_mask); return __alloc_pages(gfp_mask, order, nid, NULL); } @@ -227,7 +241,7 @@ static inline struct folio *__folio_alloc_node(gfp_t gfp, unsigned int order, int nid) { VM_BUG_ON(nid < 0 || nid >= MAX_NUMNODES); - VM_WARN_ON((gfp & __GFP_THISNODE) && !node_online(nid)); + warn_if_node_offline(nid, gfp); return __folio_alloc(gfp, order, nid, NULL); } diff --git a/include/linux/io_uring.h b/include/linux/io_uring.h index 43bc8a2edccf5aa347142fb05029a49241d2b97c..0ded9e271523fa08a8749cc1d3f5810dcfd22549 100644 --- a/include/linux/io_uring.h +++ b/include/linux/io_uring.h @@ -16,6 +16,9 @@ enum io_uring_cmd_flags { IO_URING_F_SQE128 = 4, IO_URING_F_CQE32 = 8, IO_URING_F_IOPOLL = 16, + + /* the request is executed from poll, it should not be freed */ + IO_URING_F_MULTISHOT = 32, }; struct io_uring_cmd { diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 00c3448ba7f8b96fb4e8c643636c5d82f720412d..637a60607c7d3a6172463fc8be2523bc8fe6ae30 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -776,6 +776,7 @@ struct kvm { struct srcu_struct srcu; struct srcu_struct irq_srcu; pid_t userspace_pid; + bool override_halt_poll_ns; unsigned int max_halt_poll_ns; u32 dirty_ring_size; bool vm_bugged; @@ -1240,8 +1241,18 @@ int kvm_vcpu_write_guest(struct kvm_vcpu *vcpu, gpa_t gpa, const void *data, void kvm_vcpu_mark_page_dirty(struct kvm_vcpu *vcpu, gfn_t gfn); /** - * kvm_gfn_to_pfn_cache_init - prepare a cached kernel mapping and HPA for a - * given guest physical address. + * kvm_gpc_init - initialize gfn_to_pfn_cache. + * + * @gpc: struct gfn_to_pfn_cache object. + * + * This sets up a gfn_to_pfn_cache by initializing locks. Note, the cache must + * be zero-allocated (or zeroed by the caller before init). + */ +void kvm_gpc_init(struct gfn_to_pfn_cache *gpc); + +/** + * kvm_gpc_activate - prepare a cached kernel mapping and HPA for a given guest + * physical address. * * @kvm: pointer to kvm instance. * @gpc: struct gfn_to_pfn_cache object. @@ -1265,9 +1276,9 @@ void kvm_vcpu_mark_page_dirty(struct kvm_vcpu *vcpu, gfn_t gfn); * kvm_gfn_to_pfn_cache_check() to ensure that the cache is valid before * accessing the target page. */ -int kvm_gfn_to_pfn_cache_init(struct kvm *kvm, struct gfn_to_pfn_cache *gpc, - struct kvm_vcpu *vcpu, enum pfn_cache_usage usage, - gpa_t gpa, unsigned long len); +int kvm_gpc_activate(struct kvm *kvm, struct gfn_to_pfn_cache *gpc, + struct kvm_vcpu *vcpu, enum pfn_cache_usage usage, + gpa_t gpa, unsigned long len); /** * kvm_gfn_to_pfn_cache_check - check validity of a gfn_to_pfn_cache. @@ -1324,7 +1335,7 @@ int kvm_gfn_to_pfn_cache_refresh(struct kvm *kvm, struct gfn_to_pfn_cache *gpc, void kvm_gfn_to_pfn_cache_unmap(struct kvm *kvm, struct gfn_to_pfn_cache *gpc); /** - * kvm_gfn_to_pfn_cache_destroy - destroy and unlink a gfn_to_pfn_cache. + * kvm_gpc_deactivate - deactivate and unlink a gfn_to_pfn_cache. * * @kvm: pointer to kvm instance. * @gpc: struct gfn_to_pfn_cache object. @@ -1332,7 +1343,7 @@ void kvm_gfn_to_pfn_cache_unmap(struct kvm *kvm, struct gfn_to_pfn_cache *gpc); * This removes a cache from the @kvm's list to be processed on MMU notifier * invocation. */ -void kvm_gfn_to_pfn_cache_destroy(struct kvm *kvm, struct gfn_to_pfn_cache *gpc); +void kvm_gpc_deactivate(struct kvm *kvm, struct gfn_to_pfn_cache *gpc); void kvm_sigset_activate(struct kvm_vcpu *vcpu); void kvm_sigset_deactivate(struct kvm_vcpu *vcpu); diff --git a/include/linux/maple_tree.h b/include/linux/maple_tree.h index 2effab72add10e1030757948328f460cba9389d2..e594db58a0f147c8fec83ea398e4c81e263e8aac 100644 --- a/include/linux/maple_tree.h +++ b/include/linux/maple_tree.h @@ -638,6 +638,12 @@ static inline void mt_set_in_rcu(struct maple_tree *mt) } } +static inline unsigned int mt_height(const struct maple_tree *mt) + +{ + return (mt->ma_flags & MT_FLAGS_HEIGHT_MASK) >> MT_FLAGS_HEIGHT_OFFSET; +} + void *mt_find(struct maple_tree *mt, unsigned long *index, unsigned long max); void *mt_find_after(struct maple_tree *mt, unsigned long *index, unsigned long max); @@ -664,6 +670,7 @@ extern atomic_t maple_tree_tests_passed; void mt_dump(const struct maple_tree *mt); void mt_validate(struct maple_tree *mt); +void mt_cache_shrink(void); #define MT_BUG_ON(__tree, __x) do { \ atomic_inc(&maple_tree_tests_run); \ if (__x) { \ diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h index af2ceb4160bcd7245cf223a25685778ee3c69e41..06cbad166225a317cfc4838e3e53f19bd9d610e1 100644 --- a/include/linux/mlx5/driver.h +++ b/include/linux/mlx5/driver.h @@ -981,6 +981,7 @@ struct mlx5_async_work { struct mlx5_async_ctx *ctx; mlx5_async_cbk_t user_callback; u16 opcode; /* cmd opcode */ + u16 op_mod; /* cmd op_mod */ void *out; /* pointer to the cmd output buffer */ }; diff --git a/include/linux/mm.h b/include/linux/mm.h index 8bbcccbc55654341c4d2b361549e1da4da6d65cb..974ccca609d2c4b9c2016f5dd4f342c310b4d2a9 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1852,6 +1852,25 @@ static void __maybe_unused show_free_areas(unsigned int flags, nodemask_t *nodem __show_free_areas(flags, nodemask, MAX_NR_ZONES - 1); } +/* + * Parameter block passed down to zap_pte_range in exceptional cases. + */ +struct zap_details { + struct folio *single_folio; /* Locked folio to be unmapped */ + bool even_cows; /* Zap COWed private pages too? */ + zap_flags_t zap_flags; /* Extra flags for zapping */ +}; + +/* + * Whether to drop the pte markers, for example, the uffd-wp information for + * file-backed memory. This should only be specified when we will completely + * drop the page in the mm, either by truncation or unmapping of the vma. By + * default, the flag is not set. + */ +#define ZAP_FLAG_DROP_MARKER ((__force zap_flags_t) BIT(0)) +/* Set in unmap_vmas() to indicate a final unmap call. Only used by hugetlb */ +#define ZAP_FLAG_UNMAP ((__force zap_flags_t) BIT(1)) + #ifdef CONFIG_MMU extern bool can_do_mlock(void); #else @@ -1869,6 +1888,8 @@ void zap_vma_ptes(struct vm_area_struct *vma, unsigned long address, unsigned long size); void zap_page_range(struct vm_area_struct *vma, unsigned long address, unsigned long size); +void zap_page_range_single(struct vm_area_struct *vma, unsigned long address, + unsigned long size, struct zap_details *details); void unmap_vmas(struct mmu_gather *tlb, struct maple_tree *mt, struct vm_area_struct *start_vma, unsigned long start, unsigned long end); @@ -3467,12 +3488,4 @@ madvise_set_anon_name(struct mm_struct *mm, unsigned long start, } #endif -/* - * Whether to drop the pte markers, for example, the uffd-wp information for - * file-backed memory. This should only be specified when we will completely - * drop the page in the mm, either by truncation or unmapping of the vma. By - * default, the flag is not set. - */ -#define ZAP_FLAG_DROP_MARKER ((__force zap_flags_t) BIT(0)) - #endif /* _LINUX_MM_H */ diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h index 9c50bc40f8ff385a19bdde003b9897d220107ad4..6f7993803ee783634467387ea54a017b16b784c8 100644 --- a/include/linux/mmc/mmc.h +++ b/include/linux/mmc/mmc.h @@ -451,7 +451,7 @@ static inline bool mmc_ready_for_data(u32 status) #define MMC_SECURE_TRIM1_ARG 0x80000001 #define MMC_SECURE_TRIM2_ARG 0x80008000 #define MMC_SECURE_ARGS 0x80000000 -#define MMC_TRIM_ARGS 0x00008001 +#define MMC_TRIM_OR_DISCARD_ARGS 0x00008003 #define mmc_driver_type_mask(n) (1 << (n)) diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h index a108b60a6962b343d5569b05388d6e8d5af14254..5f0d7d0b9471bef422549a8a77a49b35413a25a4 100644 --- a/include/linux/pgtable.h +++ b/include/linux/pgtable.h @@ -165,6 +165,13 @@ static inline pte_t *virt_to_kpte(unsigned long vaddr) return pmd_none(*pmd) ? NULL : pte_offset_kernel(pmd, vaddr); } +#ifndef pmd_young +static inline int pmd_young(pmd_t pmd) +{ + return 0; +} +#endif + #ifndef __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS extern int ptep_set_access_flags(struct vm_area_struct *vma, unsigned long address, pte_t *ptep, @@ -260,6 +267,17 @@ static inline int pmdp_clear_flush_young(struct vm_area_struct *vma, #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ #endif +#ifndef arch_has_hw_nonleaf_pmd_young +/* + * Return whether the accessed bit in non-leaf PMD entries is supported on the + * local CPU. + */ +static inline bool arch_has_hw_nonleaf_pmd_young(void) +{ + return IS_ENABLED(CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG); +} +#endif + #ifndef arch_has_hw_pte_young /* * Return whether the accessed bit is supported on the local CPU. diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h index 2504df9a0453e6cfdcec454db7d56728b329cb23..3c7d295746f67e050d6b9296204ec56d7892ff72 100644 --- a/include/linux/ring_buffer.h +++ b/include/linux/ring_buffer.h @@ -100,7 +100,7 @@ __ring_buffer_alloc(unsigned long size, unsigned flags, struct lock_class_key *k int ring_buffer_wait(struct trace_buffer *buffer, int cpu, int full); __poll_t ring_buffer_poll_wait(struct trace_buffer *buffer, int cpu, - struct file *filp, poll_table *poll_table); + struct file *filp, poll_table *poll_table, int full); void ring_buffer_wake_waiters(struct trace_buffer *buffer, int cpu); #define RING_BUFFER_ALL_CPUS -1 diff --git a/include/linux/skmsg.h b/include/linux/skmsg.h index 48f4b645193b7d8ec3882bbc73ddb07e212a069c..70d6cb94e5802d17f160f8383e7e38cae17dcfa1 100644 --- a/include/linux/skmsg.h +++ b/include/linux/skmsg.h @@ -376,7 +376,7 @@ static inline void sk_psock_report_error(struct sk_psock *psock, int err) } struct sk_psock *sk_psock_init(struct sock *sk, int node); -void sk_psock_stop(struct sk_psock *psock, bool wait); +void sk_psock_stop(struct sk_psock *psock); #if IS_ENABLED(CONFIG_BPF_STREAM_PARSER) int sk_psock_init_strp(struct sock *sk, struct sk_psock *psock); diff --git a/include/linux/slab.h b/include/linux/slab.h index 90877fcde70bd615ab059b57f7ee44a31a67d6f7..45efc6c553b826101da7855a4573dfe66c845ae4 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h @@ -470,35 +470,12 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node) __assume_kmalloc_alignm void *kmem_cache_alloc_node(struct kmem_cache *s, gfp_t flags, int node) __assume_slab_alignment __malloc; -#ifdef CONFIG_TRACING void *kmalloc_trace(struct kmem_cache *s, gfp_t flags, size_t size) __assume_kmalloc_alignment __alloc_size(3); void *kmalloc_node_trace(struct kmem_cache *s, gfp_t gfpflags, int node, size_t size) __assume_kmalloc_alignment __alloc_size(4); -#else /* CONFIG_TRACING */ -/* Save a function call when CONFIG_TRACING=n */ -static __always_inline __alloc_size(3) -void *kmalloc_trace(struct kmem_cache *s, gfp_t flags, size_t size) -{ - void *ret = kmem_cache_alloc(s, flags); - - ret = kasan_kmalloc(s, ret, size, flags); - return ret; -} - -static __always_inline __alloc_size(4) -void *kmalloc_node_trace(struct kmem_cache *s, gfp_t gfpflags, - int node, size_t size) -{ - void *ret = kmem_cache_alloc_node(s, gfpflags, node); - - ret = kasan_kmalloc(s, ret, size, gfpflags); - return ret; -} -#endif /* CONFIG_TRACING */ - void *kmalloc_large(size_t size, gfp_t flags) __assume_page_alignment __alloc_size(1); diff --git a/include/linux/trace.h b/include/linux/trace.h index b5e16e438448f26bbba255b11f610835ad9a671b..80ffda8717491a94ef15e86d17fc6be290d17a22 100644 --- a/include/linux/trace.h +++ b/include/linux/trace.h @@ -26,13 +26,13 @@ struct trace_export { int flags; }; +struct trace_array; + #ifdef CONFIG_TRACING int register_ftrace_export(struct trace_export *export); int unregister_ftrace_export(struct trace_export *export); -struct trace_array; - void trace_printk_init_buffers(void); __printf(3, 4) int trace_array_printk(struct trace_array *tr, unsigned long ip, diff --git a/include/linux/vfio.h b/include/linux/vfio.h index e7cebeb875dd1abdc2a9ed969532f2be5f5b2029..fdd393f70b19816e503b366b9b87337e4f8cb978 100644 --- a/include/linux/vfio.h +++ b/include/linux/vfio.h @@ -189,6 +189,7 @@ int vfio_register_emulated_iommu_dev(struct vfio_device *device); void vfio_unregister_group_dev(struct vfio_device *device); int vfio_assign_device_set(struct vfio_device *device, void *set_id); +unsigned int vfio_device_set_open_count(struct vfio_device_set *dev_set); int vfio_mig_get_next_state(struct vfio_device *device, enum vfio_device_mig_state cur_fsm, diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h index 3af1e927247dbf99651e5fd3b8c0f10a383713a6..69174093078f02cbcf592c1ca1532f51d393f29a 100644 --- a/include/net/inet_hashtables.h +++ b/include/net/inet_hashtables.h @@ -281,7 +281,8 @@ inet_bhash2_addr_any_hashbucket(const struct sock *sk, const struct net *net, in * sk_v6_rcv_saddr (ipv6) changes after it has been binded. The socket's * rcv_saddr field should already have been updated when this is called. */ -int inet_bhash2_update_saddr(struct inet_bind_hashbucket *prev_saddr, struct sock *sk); +int inet_bhash2_update_saddr(struct sock *sk, void *saddr, int family); +void inet_bhash2_reset_saddr(struct sock *sk); void inet_bind_hash(struct sock *sk, struct inet_bind_bucket *tb, struct inet_bind2_bucket *tb2, unsigned short port); diff --git a/include/net/ip.h b/include/net/ip.h index 038097c2a1520e4ee85a4574c16521460852f940..144bdfbb25afe0869edf1cfc436d957428685319 100644 --- a/include/net/ip.h +++ b/include/net/ip.h @@ -563,7 +563,7 @@ static inline void iph_to_flow_copy_v4addrs(struct flow_keys *flow, BUILD_BUG_ON(offsetof(typeof(flow->addrs), v4addrs.dst) != offsetof(typeof(flow->addrs), v4addrs.src) + sizeof(flow->addrs.v4addrs.src)); - memcpy(&flow->addrs.v4addrs, &iph->saddr, sizeof(flow->addrs.v4addrs)); + memcpy(&flow->addrs.v4addrs, &iph->addrs, sizeof(flow->addrs.v4addrs)); flow->control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS; } diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 37943ba3a73c5c6a5124fa6cf2199c7987abb11d..d383c895592a9ef2db644db72931ecf5d2d2fb52 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h @@ -897,7 +897,7 @@ static inline void iph_to_flow_copy_v6addrs(struct flow_keys *flow, BUILD_BUG_ON(offsetof(typeof(flow->addrs), v6addrs.dst) != offsetof(typeof(flow->addrs), v6addrs.src) + sizeof(flow->addrs.v6addrs.src)); - memcpy(&flow->addrs.v6addrs, &iph->saddr, sizeof(flow->addrs.v6addrs)); + memcpy(&flow->addrs.v6addrs, &iph->addrs, sizeof(flow->addrs.v6addrs)); flow->control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS; } diff --git a/include/net/neighbour.h b/include/net/neighbour.h index 20745cf7ae1adcedbaf11521c5e418ae766b131a..2f2a6023fb0e578e2be1aa4263d601b83575acaa 100644 --- a/include/net/neighbour.h +++ b/include/net/neighbour.h @@ -83,7 +83,7 @@ struct neigh_parms { struct rcu_head rcu_head; int reachable_time; - int qlen; + u32 qlen; int data[NEIGH_VAR_DATA_MAX]; DECLARE_BITMAP(data_state, NEIGH_VAR_DATA_MAX); }; diff --git a/include/net/netlink.h b/include/net/netlink.h index 4418b1981e318d7dd9118091004c1e760b660f7e..6bfa972f2fbf251cbc570d5cfe64414f70d9f5d1 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h @@ -181,6 +181,8 @@ enum { NLA_S64, NLA_BITFIELD32, NLA_REJECT, + NLA_BE16, + NLA_BE32, __NLA_TYPE_MAX, }; @@ -231,6 +233,7 @@ enum nla_policy_validation { * NLA_U32, NLA_U64, * NLA_S8, NLA_S16, * NLA_S32, NLA_S64, + * NLA_BE16, NLA_BE32, * NLA_MSECS Leaving the length field zero will verify the * given type fits, using it verifies minimum length * just like "All other" @@ -261,6 +264,8 @@ enum nla_policy_validation { * NLA_U16, * NLA_U32, * NLA_U64, + * NLA_BE16, + * NLA_BE32, * NLA_S8, * NLA_S16, * NLA_S32, @@ -317,19 +322,10 @@ struct nla_policy { u8 validation_type; u16 len; union { - const u32 bitfield32_valid; - const u32 mask; - const char *reject_message; - const struct nla_policy *nested_policy; - struct netlink_range_validation *range; - struct netlink_range_validation_signed *range_signed; - struct { - s16 min, max; - u8 network_byte_order:1; - }; - int (*validate)(const struct nlattr *attr, - struct netlink_ext_ack *extack); - /* This entry is special, and used for the attribute at index 0 + /** + * @strict_start_type: first attribute to validate strictly + * + * This entry is special, and used for the attribute at index 0 * only, and specifies special data about the policy, namely it * specifies the "boundary type" where strict length validation * starts for any attribute types >= this value, also, strict @@ -348,6 +344,19 @@ struct nla_policy { * was added to enforce strict validation from thereon. */ u16 strict_start_type; + + /* private: use NLA_POLICY_*() to set */ + const u32 bitfield32_valid; + const u32 mask; + const char *reject_message; + const struct nla_policy *nested_policy; + struct netlink_range_validation *range; + struct netlink_range_validation_signed *range_signed; + struct { + s16 min, max; + }; + int (*validate)(const struct nlattr *attr, + struct netlink_ext_ack *extack); }; }; @@ -369,6 +378,8 @@ struct nla_policy { (tp == NLA_U8 || tp == NLA_U16 || tp == NLA_U32 || tp == NLA_U64) #define __NLA_IS_SINT_TYPE(tp) \ (tp == NLA_S8 || tp == NLA_S16 || tp == NLA_S32 || tp == NLA_S64) +#define __NLA_IS_BEINT_TYPE(tp) \ + (tp == NLA_BE16 || tp == NLA_BE32) #define __NLA_ENSURE(condition) BUILD_BUG_ON_ZERO(!(condition)) #define NLA_ENSURE_UINT_TYPE(tp) \ @@ -382,6 +393,7 @@ struct nla_policy { #define NLA_ENSURE_INT_OR_BINARY_TYPE(tp) \ (__NLA_ENSURE(__NLA_IS_UINT_TYPE(tp) || \ __NLA_IS_SINT_TYPE(tp) || \ + __NLA_IS_BEINT_TYPE(tp) || \ tp == NLA_MSECS || \ tp == NLA_BINARY) + tp) #define NLA_ENSURE_NO_VALIDATION_PTR(tp) \ @@ -389,6 +401,8 @@ struct nla_policy { tp != NLA_REJECT && \ tp != NLA_NESTED && \ tp != NLA_NESTED_ARRAY) + tp) +#define NLA_ENSURE_BEINT_TYPE(tp) \ + (__NLA_ENSURE(__NLA_IS_BEINT_TYPE(tp)) + tp) #define NLA_POLICY_RANGE(tp, _min, _max) { \ .type = NLA_ENSURE_INT_OR_BINARY_TYPE(tp), \ @@ -419,14 +433,6 @@ struct nla_policy { .type = NLA_ENSURE_INT_OR_BINARY_TYPE(tp), \ .validation_type = NLA_VALIDATE_MAX, \ .max = _max, \ - .network_byte_order = 0, \ -} - -#define NLA_POLICY_MAX_BE(tp, _max) { \ - .type = NLA_ENSURE_UINT_TYPE(tp), \ - .validation_type = NLA_VALIDATE_MAX, \ - .max = _max, \ - .network_byte_order = 1, \ } #define NLA_POLICY_MASK(tp, _mask) { \ diff --git a/include/net/sctp/stream_sched.h b/include/net/sctp/stream_sched.h index 01a70b27e026b4f5f09d417d3252a686ce78e105..65058faea4db1c92164a2a1434193ae3d6bd05a1 100644 --- a/include/net/sctp/stream_sched.h +++ b/include/net/sctp/stream_sched.h @@ -26,6 +26,8 @@ struct sctp_sched_ops { int (*init)(struct sctp_stream *stream); /* Init a stream */ int (*init_sid)(struct sctp_stream *stream, __u16 sid, gfp_t gfp); + /* free a stream */ + void (*free_sid)(struct sctp_stream *stream, __u16 sid); /* Frees the entire thing */ void (*free)(struct sctp_stream *stream); diff --git a/include/net/sock.h b/include/net/sock.h index 22f8bab583ddd8bb53bf88cf93c2e6a8b174d1dc..e0517ecc6531571f05568029408a49fa472dc9be 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -323,7 +323,7 @@ struct sk_filter; * @sk_tskey: counter to disambiguate concurrent tstamp requests * @sk_zckey: counter to order MSG_ZEROCOPY notifications * @sk_socket: Identd and reporting IO signals - * @sk_user_data: RPC layer private data + * @sk_user_data: RPC layer private data. Write-protected by @sk_callback_lock. * @sk_frag: cached page frag * @sk_peek_off: current peek_offset value * @sk_send_head: front of stuff to transmit @@ -1889,6 +1889,13 @@ void sock_kfree_s(struct sock *sk, void *mem, int size); void sock_kzfree_s(struct sock *sk, void *mem, int size); void sk_send_sigurg(struct sock *sk); +static inline void sock_replace_proto(struct sock *sk, struct proto *proto) +{ + if (sk->sk_socket) + clear_bit(SOCK_SUPPORT_ZC, &sk->sk_socket->flags); + WRITE_ONCE(sk->sk_prot, proto); +} + struct sockcm_cookie { u64 transmit_time; u32 mark; diff --git a/include/soc/at91/sama7-ddr.h b/include/soc/at91/sama7-ddr.h index 6ce3bd22f6c693240c0592479f4ddc2ab5d1ffc4..5ad7ac2e3a7ce9d654d64b27805e7f42db18f5e3 100644 --- a/include/soc/at91/sama7-ddr.h +++ b/include/soc/at91/sama7-ddr.h @@ -26,7 +26,10 @@ #define DDR3PHY_PGSR (0x0C) /* DDR3PHY PHY General Status Register */ #define DDR3PHY_PGSR_IDONE (1 << 0) /* Initialization Done */ -#define DDR3PHY_ACIOCR (0x24) /* DDR3PHY AC I/O Configuration Register */ +#define DDR3PHY_ACDLLCR (0x14) /* DDR3PHY AC DLL Control Register */ +#define DDR3PHY_ACDLLCR_DLLSRST (1 << 30) /* DLL Soft Reset */ + +#define DDR3PHY_ACIOCR (0x24) /* DDR3PHY AC I/O Configuration Register */ #define DDR3PHY_ACIOCR_CSPDD_CS0 (1 << 18) /* CS#[0] Power Down Driver */ #define DDR3PHY_ACIOCR_CKPDD_CK0 (1 << 8) /* CK[0] Power Down Driver */ #define DDR3PHY_ACIORC_ACPDD (1 << 3) /* AC Power Down Driver */ diff --git a/include/sound/sof/dai.h b/include/sound/sof/dai.h index 83fd81c82e4c1c4ea5d36550d8073670609da208..9fbd3832bcdc7ab937c5bc049efa110774a2285e 100644 --- a/include/sound/sof/dai.h +++ b/include/sound/sof/dai.h @@ -84,8 +84,8 @@ enum sof_ipc_dai_type { SOF_DAI_AMD_BT, /**< AMD ACP BT*/ SOF_DAI_AMD_SP, /**< AMD ACP SP */ SOF_DAI_AMD_DMIC, /**< AMD ACP DMIC */ - SOF_DAI_AMD_HS, /**< Amd HS */ SOF_DAI_MEDIATEK_AFE, /**< Mediatek AFE */ + SOF_DAI_AMD_HS, /**< Amd HS */ }; /* general purpose DAI configuration */ diff --git a/include/sound/sof/info.h b/include/sound/sof/info.h index 65e86e4e9fd8e718e2ea1020b75bada961c29604..75193850ead0c2a85ca5d0d22bf1f6f6b5a1d58a 100644 --- a/include/sound/sof/info.h +++ b/include/sound/sof/info.h @@ -36,6 +36,10 @@ enum sof_ipc_ext_data { SOF_IPC_EXT_USER_ABI_INFO = 4, }; +/* Build u32 number in format MMmmmppp */ +#define SOF_FW_VER(MAJOR, MINOR, PATCH) ((uint32_t)( \ + ((MAJOR) << 24) | ((MINOR) << 12) | (PATCH))) + /* FW version - SOF_IPC_GLB_VERSION */ struct sof_ipc_fw_version { struct sof_ipc_hdr hdr; diff --git a/include/trace/events/huge_memory.h b/include/trace/events/huge_memory.h index 935af4947917345d3651a2771827ec115a64df1c..760455dfa860029f68776b1668fdbdb11e989a11 100644 --- a/include/trace/events/huge_memory.h +++ b/include/trace/events/huge_memory.h @@ -171,15 +171,15 @@ TRACE_EVENT(mm_collapse_huge_page_swapin, TRACE_EVENT(mm_khugepaged_scan_file, - TP_PROTO(struct mm_struct *mm, struct page *page, const char *filename, + TP_PROTO(struct mm_struct *mm, struct page *page, struct file *file, int present, int swap, int result), - TP_ARGS(mm, page, filename, present, swap, result), + TP_ARGS(mm, page, file, present, swap, result), TP_STRUCT__entry( __field(struct mm_struct *, mm) __field(unsigned long, pfn) - __string(filename, filename) + __string(filename, file->f_path.dentry->d_iname) __field(int, present) __field(int, swap) __field(int, result) @@ -188,7 +188,7 @@ TRACE_EVENT(mm_khugepaged_scan_file, TP_fast_assign( __entry->mm = mm; __entry->pfn = page ? page_to_pfn(page) : -1; - __assign_str(filename, filename); + __assign_str(filename, file->f_path.dentry->d_iname); __entry->present = present; __entry->swap = swap; __entry->result = result; diff --git a/include/uapi/drm/panfrost_drm.h b/include/uapi/drm/panfrost_drm.h index 6f93c915cc88a740e14b59fed951a82291e9ed18..9f231d40a146a91aec18bacd8f8915b94dd8ed30 100644 --- a/include/uapi/drm/panfrost_drm.h +++ b/include/uapi/drm/panfrost_drm.h @@ -254,7 +254,7 @@ struct panfrost_dump_object_header { __u64 nbos; } reghdr; - struct pan_bomap_hdr { + struct { __u32 valid; __u64 iova; __u32 data[2]; diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h index 7c1dc818b1d569adae807ffffd04971e7fd2f167..d676ed2b246ec269a23f005e4b89c46dfb4504b4 100644 --- a/include/uapi/linux/audit.h +++ b/include/uapi/linux/audit.h @@ -187,7 +187,7 @@ #define AUDIT_MAX_KEY_LEN 256 #define AUDIT_BITMASK_SIZE 64 #define AUDIT_WORD(nr) ((__u32)((nr)/32)) -#define AUDIT_BIT(nr) (1 << ((nr) - AUDIT_WORD(nr)*32)) +#define AUDIT_BIT(nr) (1U << ((nr) - AUDIT_WORD(nr)*32)) #define AUDIT_SYSCALL_CLASSES 16 #define AUDIT_CLASS_DIR_WRITE 0 diff --git a/include/uapi/linux/capability.h b/include/uapi/linux/capability.h index 463d1ba2232ac3e3c17fcaecad08bb46751f28f8..3d61a0ae055d42fe8661621766c3c8b198507ea6 100644 --- a/include/uapi/linux/capability.h +++ b/include/uapi/linux/capability.h @@ -426,7 +426,7 @@ struct vfs_ns_cap_data { */ #define CAP_TO_INDEX(x) ((x) >> 5) /* 1 << 5 == bits in __u32 */ -#define CAP_TO_MASK(x) (1 << ((x) & 31)) /* mask for indexed __u32 */ +#define CAP_TO_MASK(x) (1U << ((x) & 31)) /* mask for indexed __u32 */ #endif /* _UAPI_LINUX_CAPABILITY_H */ diff --git a/include/uapi/linux/idxd.h b/include/uapi/linux/idxd.h index 095299c75828cc99c37732c28814cf9b50d9eeb7..2b9e7feba3f32ed84dcc0bdbc1d85128298f4ec7 100644 --- a/include/uapi/linux/idxd.h +++ b/include/uapi/linux/idxd.h @@ -29,6 +29,7 @@ enum idxd_scmd_stat { IDXD_SCMD_WQ_NO_SIZE = 0x800e0000, IDXD_SCMD_WQ_NO_PRIV = 0x800f0000, IDXD_SCMD_WQ_IRQ_ERR = 0x80100000, + IDXD_SCMD_WQ_USER_NO_IOMMU = 0x80110000, }; #define IDXD_SCMD_SOFTERR_MASK 0x80000000 diff --git a/include/uapi/linux/in.h b/include/uapi/linux/in.h index f243ce665f74f82d51b14d27df362292844ab9e0..07a4cb149305be99b1b661887abf5e37c2affc9a 100644 --- a/include/uapi/linux/in.h +++ b/include/uapi/linux/in.h @@ -20,6 +20,7 @@ #define _UAPI_LINUX_IN_H #include +#include #include #include diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h index ab7458033ee3b3dd4105d4086ae41e3efec39568..2df3225b562fa4d4db4cc3ed1e8d08d16cf50454 100644 --- a/include/uapi/linux/io_uring.h +++ b/include/uapi/linux/io_uring.h @@ -222,7 +222,7 @@ enum io_uring_op { /* * sqe->uring_cmd_flags - * IORING_URING_CMD_FIXED use registered buffer; pass thig flag + * IORING_URING_CMD_FIXED use registered buffer; pass this flag * along with setting sqe->buf_index. */ #define IORING_URING_CMD_FIXED (1U << 0) diff --git a/include/uapi/linux/ip.h b/include/uapi/linux/ip.h index 961ec16a26b8b4a44069da9c49894b7614953ec9..874a92349bf5baa8e90522cdae45634dc67f4c5c 100644 --- a/include/uapi/linux/ip.h +++ b/include/uapi/linux/ip.h @@ -100,8 +100,10 @@ struct iphdr { __u8 ttl; __u8 protocol; __sum16 check; - __be32 saddr; - __be32 daddr; + __struct_group(/* no tag */, addrs, /* no attrs */, + __be32 saddr; + __be32 daddr; + ); /*The options start here. */ }; diff --git a/include/uapi/linux/ipv6.h b/include/uapi/linux/ipv6.h index 03cdbe798fe3c3ed9e6bbeefd4c14b945420bd59..81f4243bebb1c8fb7231886239ecdb4b2d6f613e 100644 --- a/include/uapi/linux/ipv6.h +++ b/include/uapi/linux/ipv6.h @@ -130,8 +130,10 @@ struct ipv6hdr { __u8 nexthdr; __u8 hop_limit; - struct in6_addr saddr; - struct in6_addr daddr; + __struct_group(/* no tag */, addrs, /* no attrs */, + struct in6_addr saddr; + struct in6_addr daddr; + ); }; diff --git a/init/Kconfig b/init/Kconfig index abf65098f1b6bf1c70725a8d72de970a69efaced..94125d3b6893c7b49e22980021cae305522db2ae 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -87,7 +87,7 @@ config CC_HAS_ASM_GOTO_OUTPUT config CC_HAS_ASM_GOTO_TIED_OUTPUT depends on CC_HAS_ASM_GOTO_OUTPUT # Detect buggy gcc and clang, fixed in gcc-11 clang-14. - def_bool $(success,echo 'int foo(int *x) { asm goto (".long (%l[bar]) - .\n": "+m"(*x) ::: bar); return *x; bar: return 0; }' | $CC -x c - -c -o /dev/null) + def_bool $(success,echo 'int foo(int *x) { asm goto (".long (%l[bar]) - .": "+m"(*x) ::: bar); return *x; bar: return 0; }' | $CC -x c - -c -o /dev/null) config TOOLS_SUPPORT_RELR def_bool $(success,env "CC=$(CC)" "LD=$(LD)" "NM=$(NM)" "OBJCOPY=$(OBJCOPY)" $(srctree)/scripts/tools-support-relr.sh) diff --git a/io_uring/filetable.c b/io_uring/filetable.c index 7b473259f3f45ad90f5a42c8f579a32f65ccc670..68dfc6936aa7250181a981dba6bb58e1ba6115d3 100644 --- a/io_uring/filetable.c +++ b/io_uring/filetable.c @@ -101,8 +101,6 @@ static int io_install_fixed_file(struct io_ring_ctx *ctx, struct file *file, err: if (needs_switch) io_rsrc_node_switch(ctx, ctx->file_data); - if (ret) - fput(file); return ret; } diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index ac8c488e3077d9e1fb88cb9fd91063a4dc1c4b52..8840cf3e20f2c622a345952aaa24716654fd579d 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -176,6 +176,11 @@ static inline unsigned int __io_cqring_events(struct io_ring_ctx *ctx) return ctx->cached_cq_tail - READ_ONCE(ctx->rings->cq.head); } +static inline unsigned int __io_cqring_events_user(struct io_ring_ctx *ctx) +{ + return READ_ONCE(ctx->rings->cq.tail) - READ_ONCE(ctx->rings->cq.head); +} + static bool io_match_linked(struct io_kiocb *head) { struct io_kiocb *req; @@ -1763,7 +1768,7 @@ int io_poll_issue(struct io_kiocb *req, bool *locked) io_tw_lock(req->ctx, locked); if (unlikely(req->task->flags & PF_EXITING)) return -EFAULT; - return io_issue_sqe(req, IO_URING_F_NONBLOCK); + return io_issue_sqe(req, IO_URING_F_NONBLOCK|IO_URING_F_MULTISHOT); } struct io_wq_work *io_wq_free_work(struct io_wq_work *work) @@ -2315,7 +2320,7 @@ static inline bool io_has_work(struct io_ring_ctx *ctx) static inline bool io_should_wake(struct io_wait_queue *iowq) { struct io_ring_ctx *ctx = iowq->ctx; - int dist = ctx->cached_cq_tail - (int) iowq->cq_tail; + int dist = READ_ONCE(ctx->rings->cq.tail) - (int) iowq->cq_tail; /* * Wake up if we have enough events, or if a timeout occurred since we @@ -2399,7 +2404,8 @@ static int io_cqring_wait(struct io_ring_ctx *ctx, int min_events, return ret; io_cqring_overflow_flush(ctx); - if (io_cqring_events(ctx) >= min_events) + /* if user messes with these they will just get an early return */ + if (__io_cqring_events_user(ctx) >= min_events) return 0; } while (ret > 0); diff --git a/io_uring/io_uring.h b/io_uring/io_uring.h index e99a79f2df9b18365559d6623133f77fdb60e3a6..50bc3af449534ca8cf7b02957c09e3acb224541e 100644 --- a/io_uring/io_uring.h +++ b/io_uring/io_uring.h @@ -17,8 +17,8 @@ enum { IOU_ISSUE_SKIP_COMPLETE = -EIOCBQUEUED, /* - * Intended only when both REQ_F_POLLED and REQ_F_APOLL_MULTISHOT - * are set to indicate to the poll runner that multishot should be + * Intended only when both IO_URING_F_MULTISHOT is passed + * to indicate to the poll runner that multishot should be * removed and the result is set on req->cqe.res. */ IOU_STOP_MULTISHOT = -ECANCELED, @@ -238,9 +238,14 @@ static inline unsigned int io_sqring_entries(struct io_ring_ctx *ctx) static inline int io_run_task_work(void) { + /* + * Always check-and-clear the task_work notification signal. With how + * signaling works for task_work, we can find it set with nothing to + * run. We need to clear it for that case, like get_signal() does. + */ + if (test_thread_flag(TIF_NOTIFY_SIGNAL)) + clear_notify_signal(); if (task_work_pending(current)) { - if (test_thread_flag(TIF_NOTIFY_SIGNAL)) - clear_notify_signal(); __set_current_state(TASK_RUNNING); task_work_run(); return 1; diff --git a/io_uring/kbuf.c b/io_uring/kbuf.c index 25cd724ade184ac452463d18e134d7e3ae469503..e2c46889d5fab614dbeb6b26a8a696d778709b8d 100644 --- a/io_uring/kbuf.c +++ b/io_uring/kbuf.c @@ -346,6 +346,8 @@ int io_provide_buffers_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe tmp = READ_ONCE(sqe->off); if (tmp > USHRT_MAX) return -E2BIG; + if (tmp + p->nbufs >= USHRT_MAX) + return -EINVAL; p->bid = tmp; return 0; } diff --git a/io_uring/net.c b/io_uring/net.c index 15dea91625e21d58d902d3be7c2a1dc188e30cc2..ab83da7e80f041f0001e5c8376ffaf521b1c2aac 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -67,8 +67,6 @@ struct io_sr_msg { struct io_kiocb *notif; }; -#define IO_APOLL_MULTI_POLLED (REQ_F_APOLL_MULTISHOT | REQ_F_POLLED) - int io_shutdown_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) { struct io_shutdown *shutdown = io_kiocb_to_cmd(req, struct io_shutdown); @@ -591,7 +589,8 @@ static inline void io_recv_prep_retry(struct io_kiocb *req) * again (for multishot). */ static inline bool io_recv_finish(struct io_kiocb *req, int *ret, - unsigned int cflags, bool mshot_finished) + unsigned int cflags, bool mshot_finished, + unsigned issue_flags) { if (!(req->flags & REQ_F_APOLL_MULTISHOT)) { io_req_set_res(req, *ret, cflags); @@ -614,7 +613,7 @@ static inline bool io_recv_finish(struct io_kiocb *req, int *ret, io_req_set_res(req, *ret, cflags); - if (req->flags & REQ_F_POLLED) + if (issue_flags & IO_URING_F_MULTISHOT) *ret = IOU_STOP_MULTISHOT; else *ret = IOU_OK; @@ -773,8 +772,7 @@ int io_recvmsg(struct io_kiocb *req, unsigned int issue_flags) if (ret < min_ret) { if (ret == -EAGAIN && force_nonblock) { ret = io_setup_async_msg(req, kmsg, issue_flags); - if (ret == -EAGAIN && (req->flags & IO_APOLL_MULTI_POLLED) == - IO_APOLL_MULTI_POLLED) { + if (ret == -EAGAIN && (issue_flags & IO_URING_F_MULTISHOT)) { io_kbuf_recycle(req, issue_flags); return IOU_ISSUE_SKIP_COMPLETE; } @@ -803,7 +801,7 @@ int io_recvmsg(struct io_kiocb *req, unsigned int issue_flags) if (kmsg->msg.msg_inq) cflags |= IORING_CQE_F_SOCK_NONEMPTY; - if (!io_recv_finish(req, &ret, cflags, mshot_finished)) + if (!io_recv_finish(req, &ret, cflags, mshot_finished, issue_flags)) goto retry_multishot; if (mshot_finished) { @@ -869,7 +867,7 @@ int io_recv(struct io_kiocb *req, unsigned int issue_flags) ret = sock_recvmsg(sock, &msg, flags); if (ret < min_ret) { if (ret == -EAGAIN && force_nonblock) { - if ((req->flags & IO_APOLL_MULTI_POLLED) == IO_APOLL_MULTI_POLLED) { + if (issue_flags & IO_URING_F_MULTISHOT) { io_kbuf_recycle(req, issue_flags); return IOU_ISSUE_SKIP_COMPLETE; } @@ -902,7 +900,7 @@ int io_recv(struct io_kiocb *req, unsigned int issue_flags) if (msg.msg_inq) cflags |= IORING_CQE_F_SOCK_NONEMPTY; - if (!io_recv_finish(req, &ret, cflags, ret <= 0)) + if (!io_recv_finish(req, &ret, cflags, ret <= 0, issue_flags)) goto retry_multishot; return ret; @@ -1289,8 +1287,7 @@ int io_accept(struct io_kiocb *req, unsigned int issue_flags) * return EAGAIN to arm the poll infra since it * has already been done */ - if ((req->flags & IO_APOLL_MULTI_POLLED) == - IO_APOLL_MULTI_POLLED) + if (issue_flags & IO_URING_F_MULTISHOT) ret = IOU_ISSUE_SKIP_COMPLETE; return ret; } @@ -1315,9 +1312,7 @@ int io_accept(struct io_kiocb *req, unsigned int issue_flags) goto retry; io_req_set_res(req, ret, 0); - if (req->flags & REQ_F_POLLED) - return IOU_STOP_MULTISHOT; - return IOU_OK; + return (issue_flags & IO_URING_F_MULTISHOT) ? IOU_STOP_MULTISHOT : IOU_OK; } int io_socket_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) diff --git a/io_uring/poll.c b/io_uring/poll.c index 0d9f49c575e0f5e5e8ae4014884769f26d4e3beb..d9bf1767867e6a6407232d110e8be4d85f5f84d4 100644 --- a/io_uring/poll.c +++ b/io_uring/poll.c @@ -40,7 +40,14 @@ struct io_poll_table { }; #define IO_POLL_CANCEL_FLAG BIT(31) -#define IO_POLL_REF_MASK GENMASK(30, 0) +#define IO_POLL_RETRY_FLAG BIT(30) +#define IO_POLL_REF_MASK GENMASK(29, 0) + +/* + * We usually have 1-2 refs taken, 128 is more than enough and we want to + * maximise the margin between this amount and the moment when it overflows. + */ +#define IO_POLL_REF_BIAS 128 #define IO_WQE_F_DOUBLE 1 @@ -58,6 +65,21 @@ static inline bool wqe_is_double(struct wait_queue_entry *wqe) return priv & IO_WQE_F_DOUBLE; } +static bool io_poll_get_ownership_slowpath(struct io_kiocb *req) +{ + int v; + + /* + * poll_refs are already elevated and we don't have much hope for + * grabbing the ownership. Instead of incrementing set a retry flag + * to notify the loop that there might have been some change. + */ + v = atomic_fetch_or(IO_POLL_RETRY_FLAG, &req->poll_refs); + if (v & IO_POLL_REF_MASK) + return false; + return !(atomic_fetch_inc(&req->poll_refs) & IO_POLL_REF_MASK); +} + /* * If refs part of ->poll_refs (see IO_POLL_REF_MASK) is 0, it's free. We can * bump it and acquire ownership. It's disallowed to modify requests while not @@ -66,6 +88,8 @@ static inline bool wqe_is_double(struct wait_queue_entry *wqe) */ static inline bool io_poll_get_ownership(struct io_kiocb *req) { + if (unlikely(atomic_read(&req->poll_refs) >= IO_POLL_REF_BIAS)) + return io_poll_get_ownership_slowpath(req); return !(atomic_fetch_inc(&req->poll_refs) & IO_POLL_REF_MASK); } @@ -116,6 +140,8 @@ static void io_poll_req_insert_locked(struct io_kiocb *req) struct io_hash_table *table = &req->ctx->cancel_table_locked; u32 index = hash_long(req->cqe.user_data, table->hash_bits); + lockdep_assert_held(&req->ctx->uring_lock); + hlist_add_head(&req->hash_node, &table->hbs[index].list); } @@ -226,6 +252,23 @@ static int io_poll_check_events(struct io_kiocb *req, bool *locked) return IOU_POLL_DONE; if (v & IO_POLL_CANCEL_FLAG) return -ECANCELED; + /* + * cqe.res contains only events of the first wake up + * and all others are be lost. Redo vfs_poll() to get + * up to date state. + */ + if ((v & IO_POLL_REF_MASK) != 1) + req->cqe.res = 0; + if (v & IO_POLL_RETRY_FLAG) { + req->cqe.res = 0; + /* + * We won't find new events that came in between + * vfs_poll and the ref put unless we clear the flag + * in advance. + */ + atomic_andnot(IO_POLL_RETRY_FLAG, &req->poll_refs); + v &= ~IO_POLL_RETRY_FLAG; + } /* the mask was stashed in __io_poll_execute */ if (!req->cqe.res) { @@ -237,6 +280,8 @@ static int io_poll_check_events(struct io_kiocb *req, bool *locked) continue; if (req->apoll_events & EPOLLONESHOT) return IOU_POLL_DONE; + if (io_is_uring_fops(req->file)) + return IOU_POLL_DONE; /* multishot, just fill a CQE and proceed */ if (!(req->flags & REQ_F_APOLL_MULTISHOT)) { @@ -256,11 +301,15 @@ static int io_poll_check_events(struct io_kiocb *req, bool *locked) return ret; } + /* force the next iteration to vfs_poll() */ + req->cqe.res = 0; + /* * Release all references, retry if someone tried to restart * task_work while we were executing it. */ - } while (atomic_sub_return(v & IO_POLL_REF_MASK, &req->poll_refs)); + } while (atomic_sub_return(v & IO_POLL_REF_MASK, &req->poll_refs) & + IO_POLL_REF_MASK); return IOU_POLL_NO_ACTION; } @@ -394,7 +443,8 @@ static int io_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync, return 1; } -static void io_poll_double_prepare(struct io_kiocb *req) +/* fails only when polling is already completing by the first entry */ +static bool io_poll_double_prepare(struct io_kiocb *req) { struct wait_queue_head *head; struct io_poll *poll = io_poll_get_single(req); @@ -403,20 +453,20 @@ static void io_poll_double_prepare(struct io_kiocb *req) rcu_read_lock(); head = smp_load_acquire(&poll->head); /* - * poll arm may not hold ownership and so race with - * io_poll_wake() by modifying req->flags. There is only one - * poll entry queued, serialise with it by taking its head lock. + * poll arm might not hold ownership and so race for req->flags with + * io_poll_wake(). There is only one poll entry queued, serialise with + * it by taking its head lock. As we're still arming the tw hanlder + * is not going to be run, so there are no races with it. */ - if (head) + if (head) { spin_lock_irq(&head->lock); - - req->flags |= REQ_F_DOUBLE_POLL; - if (req->opcode == IORING_OP_POLL_ADD) - req->flags |= REQ_F_ASYNC_DATA; - - if (head) + req->flags |= REQ_F_DOUBLE_POLL; + if (req->opcode == IORING_OP_POLL_ADD) + req->flags |= REQ_F_ASYNC_DATA; spin_unlock_irq(&head->lock); + } rcu_read_unlock(); + return !!head; } static void __io_queue_proc(struct io_poll *poll, struct io_poll_table *pt, @@ -454,7 +504,11 @@ static void __io_queue_proc(struct io_poll *poll, struct io_poll_table *pt, /* mark as double wq entry */ wqe_private |= IO_WQE_F_DOUBLE; io_init_poll_iocb(poll, first->events, first->wait.func); - io_poll_double_prepare(req); + if (!io_poll_double_prepare(req)) { + /* the request is completing, just back off */ + kfree(poll); + return; + } *poll_ptr = poll; } else { /* fine to modify, there is no poll queued to race with us */ @@ -499,7 +553,6 @@ static int __io_arm_poll_handler(struct io_kiocb *req, unsigned issue_flags) { struct io_ring_ctx *ctx = req->ctx; - int v; INIT_HLIST_NODE(&req->hash_node); req->work.cancel_seq = atomic_read(&ctx->cancel_seq); @@ -567,11 +620,10 @@ static int __io_arm_poll_handler(struct io_kiocb *req, if (ipt->owning) { /* - * Release ownership. If someone tried to queue a tw while it was - * locked, kick it off for them. + * Try to release ownership. If we see a change of state, e.g. + * poll was waken up, queue up a tw, it'll deal with it. */ - v = atomic_dec_return(&req->poll_refs); - if (unlikely(v & IO_POLL_REF_MASK)) + if (atomic_cmpxchg(&req->poll_refs, 1, 0) != 1) __io_poll_execute(req, 0); } return 0; diff --git a/ipc/shm.c b/ipc/shm.c index 7d86f058fb861b8331faa0edd20fa890424561e7..bd2fcc4d454e0680a00a0a328f98c0b7ed6accf4 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -275,10 +275,8 @@ static inline void shm_rmid(struct shmid_kernel *s) } -static int __shm_open(struct vm_area_struct *vma) +static int __shm_open(struct shm_file_data *sfd) { - struct file *file = vma->vm_file; - struct shm_file_data *sfd = shm_file_data(file); struct shmid_kernel *shp; shp = shm_lock(sfd->ns, sfd->id); @@ -302,7 +300,15 @@ static int __shm_open(struct vm_area_struct *vma) /* This is called by fork, once for every shm attach. */ static void shm_open(struct vm_area_struct *vma) { - int err = __shm_open(vma); + struct file *file = vma->vm_file; + struct shm_file_data *sfd = shm_file_data(file); + int err; + + /* Always call underlying open if present */ + if (sfd->vm_ops->open) + sfd->vm_ops->open(vma); + + err = __shm_open(sfd); /* * We raced in the idr lookup or with shm_destroy(). * Either way, the ID is busted. @@ -359,10 +365,8 @@ static bool shm_may_destroy(struct shmid_kernel *shp) * The descriptor has already been removed from the current->mm->mmap list * and will later be kfree()d. */ -static void shm_close(struct vm_area_struct *vma) +static void __shm_close(struct shm_file_data *sfd) { - struct file *file = vma->vm_file; - struct shm_file_data *sfd = shm_file_data(file); struct shmid_kernel *shp; struct ipc_namespace *ns = sfd->ns; @@ -388,6 +392,18 @@ static void shm_close(struct vm_area_struct *vma) up_write(&shm_ids(ns).rwsem); } +static void shm_close(struct vm_area_struct *vma) +{ + struct file *file = vma->vm_file; + struct shm_file_data *sfd = shm_file_data(file); + + /* Always call underlying close if present */ + if (sfd->vm_ops->close) + sfd->vm_ops->close(vma); + + __shm_close(sfd); +} + /* Called with ns->shm_ids(ns).rwsem locked */ static int shm_try_destroy_orphaned(int id, void *p, void *data) { @@ -583,13 +599,13 @@ static int shm_mmap(struct file *file, struct vm_area_struct *vma) * IPC ID that was removed, and possibly even reused by another shm * segment already. Propagate this case as an error to caller. */ - ret = __shm_open(vma); + ret = __shm_open(sfd); if (ret) return ret; ret = call_mmap(sfd->file, vma); if (ret) { - shm_close(vma); + __shm_close(sfd); return ret; } sfd->vm_ops = vma->vm_ops; diff --git a/kernel/bpf/bpf_local_storage.c b/kernel/bpf/bpf_local_storage.c index 802fc15b0d73cd9ecfe5bf66f7f4d5a8576006f7..f27fa5ba7d722c12869e45b1340579fd46247139 100644 --- a/kernel/bpf/bpf_local_storage.c +++ b/kernel/bpf/bpf_local_storage.c @@ -74,7 +74,7 @@ bpf_selem_alloc(struct bpf_local_storage_map *smap, void *owner, gfp_flags | __GFP_NOWARN); if (selem) { if (value) - memcpy(SDATA(selem)->data, value, smap->map.value_size); + copy_map_value(&smap->map, SDATA(selem)->data, value); return selem; } diff --git a/kernel/bpf/dispatcher.c b/kernel/bpf/dispatcher.c index 04f0a045dcaa61203ed5e53a5ff2e448092c7b38..c19719f48ce064484a621866470d760aea23d29e 100644 --- a/kernel/bpf/dispatcher.c +++ b/kernel/bpf/dispatcher.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include /* The BPF dispatcher is a multiway branch code generator. The * dispatcher is a mechanism to avoid the performance penalty of an @@ -91,11 +91,6 @@ int __weak arch_prepare_bpf_dispatcher(void *image, void *buf, s64 *funcs, int n return -ENOTSUPP; } -int __weak __init bpf_arch_init_dispatcher_early(void *ip) -{ - return -ENOTSUPP; -} - static int bpf_dispatcher_prepare(struct bpf_dispatcher *d, void *image, void *buf) { s64 ips[BPF_DISPATCHER_MAX] = {}, *ipsp = &ips[0]; @@ -110,17 +105,11 @@ static int bpf_dispatcher_prepare(struct bpf_dispatcher *d, void *image, void *b static void bpf_dispatcher_update(struct bpf_dispatcher *d, int prev_num_progs) { - void *old, *new, *tmp; - u32 noff; - int err; - - if (!prev_num_progs) { - old = NULL; - noff = 0; - } else { - old = d->image + d->image_off; + void *new, *tmp; + u32 noff = 0; + + if (prev_num_progs) noff = d->image_off ^ (PAGE_SIZE / 2); - } new = d->num_progs ? d->image + noff : NULL; tmp = d->num_progs ? d->rw_image + noff : NULL; @@ -134,11 +123,10 @@ static void bpf_dispatcher_update(struct bpf_dispatcher *d, int prev_num_progs) return; } - err = bpf_arch_text_poke(d->func, BPF_MOD_JUMP, old, new); - if (err || !new) - return; + __BPF_DISPATCHER_UPDATE(d, new ?: (void *)&bpf_dispatcher_nop_func); - d->image_off = noff; + if (new) + d->image_off = noff; } void bpf_dispatcher_change_prog(struct bpf_dispatcher *d, struct bpf_prog *from, diff --git a/kernel/bpf/percpu_freelist.c b/kernel/bpf/percpu_freelist.c index b6e7f5c5b9ab5712783b3c7875f6d78994daa038..034cf87b54e9f0777ed9584b4768d5bf9a803b59 100644 --- a/kernel/bpf/percpu_freelist.c +++ b/kernel/bpf/percpu_freelist.c @@ -100,22 +100,21 @@ void pcpu_freelist_populate(struct pcpu_freelist *s, void *buf, u32 elem_size, u32 nr_elems) { struct pcpu_freelist_head *head; - int i, cpu, pcpu_entries; + unsigned int cpu, cpu_idx, i, j, n, m; - pcpu_entries = nr_elems / num_possible_cpus() + 1; - i = 0; + n = nr_elems / num_possible_cpus(); + m = nr_elems % num_possible_cpus(); + cpu_idx = 0; for_each_possible_cpu(cpu) { -again: head = per_cpu_ptr(s->freelist, cpu); - /* No locking required as this is not visible yet. */ - pcpu_freelist_push_node(head, buf); - i++; - buf += elem_size; - if (i == nr_elems) - break; - if (i % pcpu_entries) - goto again; + j = n + (cpu_idx < m ? 1 : 0); + for (i = 0; i < j; i++) { + /* No locking required as this is not visible yet. */ + pcpu_freelist_push_node(head, buf); + buf += elem_size; + } + cpu_idx++; } } diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 7f0a9f6cb8897848e713d3192d27c2f499a4a014..264b3dc714cc48789b5a7a92955793a140b68989 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -1027,12 +1027,17 @@ static void *copy_array(void *dst, const void *src, size_t n, size_t size, gfp_t */ static void *realloc_array(void *arr, size_t old_n, size_t new_n, size_t size) { + void *new_arr; + if (!new_n || old_n == new_n) goto out; - arr = krealloc_array(arr, new_n, size, GFP_KERNEL); - if (!arr) + new_arr = krealloc_array(arr, new_n, size, GFP_KERNEL); + if (!new_arr) { + kfree(arr); return NULL; + } + arr = new_arr; if (new_n > old_n) memset(arr + old_n * size, 0, (new_n - old_n) * size); @@ -6618,8 +6623,12 @@ static int release_reference(struct bpf_verifier_env *env, return err; bpf_for_each_reg_in_vstate(env->cur_state, state, reg, ({ - if (reg->ref_obj_id == ref_obj_id) - __mark_reg_unknown(env, reg); + if (reg->ref_obj_id == ref_obj_id) { + if (!env->allow_ptr_leaks) + __mark_reg_not_init(env, reg); + else + __mark_reg_unknown(env, reg); + } })); return 0; @@ -6736,11 +6745,11 @@ static int __check_func_call(struct bpf_verifier_env *env, struct bpf_insn *insn /* Transfer references to the callee */ err = copy_reference_state(callee, caller); if (err) - return err; + goto err_out; err = set_callee_state_cb(env, caller, callee, *insn_idx); if (err) - return err; + goto err_out; clear_caller_saved_regs(env, caller->regs); @@ -6757,6 +6766,11 @@ static int __check_func_call(struct bpf_verifier_env *env, struct bpf_insn *insn print_verifier_state(env, callee, true); } return 0; + +err_out: + free_func_state(callee); + state->frame[state->curframe + 1] = NULL; + return err; } int map_set_for_each_callback_args(struct bpf_verifier_env *env, @@ -6970,8 +6984,7 @@ static int prepare_func_exit(struct bpf_verifier_env *env, int *insn_idx) return -EINVAL; } - state->curframe--; - caller = state->frame[state->curframe]; + caller = state->frame[state->curframe - 1]; if (callee->in_callback_fn) { /* enforce R0 return value range [0, 1]. */ struct tnum range = callee->callback_ret_range; @@ -7010,7 +7023,7 @@ static int prepare_func_exit(struct bpf_verifier_env *env, int *insn_idx) } /* clear everything in the callee */ free_func_state(callee); - state->frame[state->curframe + 1] = NULL; + state->frame[state->curframe--] = NULL; return 0; } diff --git a/kernel/events/core.c b/kernel/events/core.c index 4ec3717003d5519f1a86f0c9f82ea93d2bb5f900..7f04f995c9754891042abf3d0f695d0ba0cc890f 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -2291,6 +2291,7 @@ event_sched_out(struct perf_event *event, !event->pending_work) { event->pending_work = 1; dec = false; + WARN_ON_ONCE(!atomic_long_inc_not_zero(&event->refcount)); task_work_add(current, &event->pending_task, TWA_RESUME); } if (dec) @@ -2336,6 +2337,7 @@ group_sched_out(struct perf_event *group_event, #define DETACH_GROUP 0x01UL #define DETACH_CHILD 0x02UL +#define DETACH_DEAD 0x04UL /* * Cross CPU call to remove a performance event @@ -2356,12 +2358,20 @@ __perf_remove_from_context(struct perf_event *event, update_cgrp_time_from_cpuctx(cpuctx, false); } + /* + * Ensure event_sched_out() switches to OFF, at the very least + * this avoids raising perf_pending_task() at this time. + */ + if (flags & DETACH_DEAD) + event->pending_disable = 1; event_sched_out(event, cpuctx, ctx); if (flags & DETACH_GROUP) perf_group_detach(event); if (flags & DETACH_CHILD) perf_child_detach(event); list_del_event(event, ctx); + if (flags & DETACH_DEAD) + event->state = PERF_EVENT_STATE_DEAD; if (!ctx->nr_events && ctx->is_active) { if (ctx == &cpuctx->ctx) @@ -5121,9 +5131,7 @@ int perf_event_release_kernel(struct perf_event *event) ctx = perf_event_ctx_lock(event); WARN_ON_ONCE(ctx->parent_ctx); - perf_remove_from_context(event, DETACH_GROUP); - raw_spin_lock_irq(&ctx->lock); /* * Mark this event as STATE_DEAD, there is no external reference to it * anymore. @@ -5135,8 +5143,7 @@ int perf_event_release_kernel(struct perf_event *event) * Thus this guarantees that we will in fact observe and kill _ALL_ * child events. */ - event->state = PERF_EVENT_STATE_DEAD; - raw_spin_unlock_irq(&ctx->lock); + perf_remove_from_context(event, DETACH_GROUP|DETACH_DEAD); perf_event_ctx_unlock(event, ctx); @@ -6577,6 +6584,8 @@ static void perf_pending_task(struct callback_head *head) if (rctx >= 0) perf_swevent_put_recursion_context(rctx); preempt_enable_notrace(); + + put_event(event); } #ifdef CONFIG_GUEST_PERF_EVENTS @@ -9030,7 +9039,7 @@ static void perf_event_bpf_emit_ksymbols(struct bpf_prog *prog, PERF_RECORD_KSYMBOL_TYPE_BPF, (u64)(unsigned long)subprog->bpf_func, subprog->jited_len, unregister, - prog->aux->ksym.name); + subprog->aux->ksym.name); } } } @@ -9273,6 +9282,19 @@ int perf_event_account_interrupt(struct perf_event *event) return __perf_event_account_interrupt(event, 1); } +static inline bool sample_is_allowed(struct perf_event *event, struct pt_regs *regs) +{ + /* + * Due to interrupt latency (AKA "skid"), we may enter the + * kernel before taking an overflow, even if the PMU is only + * counting user events. + */ + if (event->attr.exclude_kernel && !user_mode(regs)) + return false; + + return true; +} + /* * Generic event overflow handling, sampling. */ @@ -9307,15 +9329,38 @@ static int __perf_event_overflow(struct perf_event *event, if (event->attr.sigtrap) { /* - * Should not be able to return to user space without processing - * pending_sigtrap (kernel events can overflow multiple times). + * The desired behaviour of sigtrap vs invalid samples is a bit + * tricky; on the one hand, one should not loose the SIGTRAP if + * it is the first event, on the other hand, we should also not + * trigger the WARN or override the data address. */ - WARN_ON_ONCE(event->pending_sigtrap && event->attr.exclude_kernel); + bool valid_sample = sample_is_allowed(event, regs); + unsigned int pending_id = 1; + + if (regs) + pending_id = hash32_ptr((void *)instruction_pointer(regs)) ?: 1; if (!event->pending_sigtrap) { - event->pending_sigtrap = 1; + event->pending_sigtrap = pending_id; local_inc(&event->ctx->nr_pending); + } else if (event->attr.exclude_kernel && valid_sample) { + /* + * Should not be able to return to user space without + * consuming pending_sigtrap; with exceptions: + * + * 1. Where !exclude_kernel, events can overflow again + * in the kernel without returning to user space. + * + * 2. Events that can overflow again before the IRQ- + * work without user space progress (e.g. hrtimer). + * To approximate progress (with false negatives), + * check 32-bit hash of the current IP. + */ + WARN_ON_ONCE(event->pending_sigtrap != pending_id); } - event->pending_addr = data->addr; + + event->pending_addr = 0; + if (valid_sample && (data->sample_flags & PERF_SAMPLE_ADDR)) + event->pending_addr = data->addr; irq_work_queue(&event->pending_irq); } diff --git a/kernel/events/hw_breakpoint_test.c b/kernel/events/hw_breakpoint_test.c index 5ced822df788943ba3c483d24ede8f052f7dde2f..c57610f52bb4d591495a8ea2d6b99698e9bd5f71 100644 --- a/kernel/events/hw_breakpoint_test.c +++ b/kernel/events/hw_breakpoint_test.c @@ -295,11 +295,11 @@ static int test_init(struct kunit *test) { /* Most test cases want 2 distinct CPUs. */ if (num_online_cpus() < 2) - return -EINVAL; + kunit_skip(test, "not enough cpus"); /* Want the system to not use breakpoints elsewhere. */ if (hw_breakpoint_is_used()) - return -EBUSY; + kunit_skip(test, "hw breakpoint already in use"); return 0; } diff --git a/kernel/gcov/clang.c b/kernel/gcov/clang.c index cbb0bed958abdc15cfc26f58845fe50188193105..7670a811a56575273a4651d977726947054ea043 100644 --- a/kernel/gcov/clang.c +++ b/kernel/gcov/clang.c @@ -280,6 +280,8 @@ void gcov_info_add(struct gcov_info *dst, struct gcov_info *src) for (i = 0; i < sfn_ptr->num_counters; i++) dfn_ptr->counters[i] += sfn_ptr->counters[i]; + + sfn_ptr = list_next_entry(sfn_ptr, head); } } diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 3220b0a2fb4a318d4d10d8dda288a082d0499b2f..3050631e528d9924c5b4574e528db98b0a2f9f03 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -1766,7 +1766,13 @@ static int __unregister_kprobe_top(struct kprobe *p) if ((list_p != p) && (list_p->post_handler)) goto noclean; } - ap->post_handler = NULL; + /* + * For the kprobe-on-ftrace case, we keep the + * post_handler setting to identify this aggrprobe + * armed with kprobe_ipmodify_ops. + */ + if (!kprobe_ftrace(ap)) + ap->post_handler = NULL; } noclean: /* @@ -2429,8 +2435,11 @@ int enable_kprobe(struct kprobe *kp) if (!kprobes_all_disarmed && kprobe_disabled(p)) { p->flags &= ~KPROBE_FLAG_DISABLED; ret = arm_kprobe(p); - if (ret) + if (ret) { p->flags |= KPROBE_FLAG_DISABLED; + if (p != kp) + kp->flags |= KPROBE_FLAG_DISABLED; + } } out: mutex_unlock(&kprobe_mutex); diff --git a/kernel/rseq.c b/kernel/rseq.c index bda8175f8f9932979ab5d41a08ea5cf4fa3916e4..d38ab944105d7ff919c8dce46f31499f393f0a51 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -171,12 +171,27 @@ static int rseq_get_rseq_cs(struct task_struct *t, struct rseq_cs *rseq_cs) return 0; } +static bool rseq_warn_flags(const char *str, u32 flags) +{ + u32 test_flags; + + if (!flags) + return false; + test_flags = flags & RSEQ_CS_NO_RESTART_FLAGS; + if (test_flags) + pr_warn_once("Deprecated flags (%u) in %s ABI structure", test_flags, str); + test_flags = flags & ~RSEQ_CS_NO_RESTART_FLAGS; + if (test_flags) + pr_warn_once("Unknown flags (%u) in %s ABI structure", test_flags, str); + return true; +} + static int rseq_need_restart(struct task_struct *t, u32 cs_flags) { u32 flags, event_mask; int ret; - if (WARN_ON_ONCE(cs_flags & RSEQ_CS_NO_RESTART_FLAGS) || cs_flags) + if (rseq_warn_flags("rseq_cs", cs_flags)) return -EINVAL; /* Get thread flags. */ @@ -184,7 +199,7 @@ static int rseq_need_restart(struct task_struct *t, u32 cs_flags) if (ret) return ret; - if (WARN_ON_ONCE(flags & RSEQ_CS_NO_RESTART_FLAGS) || flags) + if (rseq_warn_flags("rseq", flags)) return -EINVAL; /* diff --git a/kernel/sched/core.c b/kernel/sched/core.c index cb2aa2b54c7a4cfb9b7648e4ff1a6f621131623f..daff72f003858da0f82669794ec444614c32bfdd 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -4200,6 +4200,40 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) return success; } +static bool __task_needs_rq_lock(struct task_struct *p) +{ + unsigned int state = READ_ONCE(p->__state); + + /* + * Since pi->lock blocks try_to_wake_up(), we don't need rq->lock when + * the task is blocked. Make sure to check @state since ttwu() can drop + * locks at the end, see ttwu_queue_wakelist(). + */ + if (state == TASK_RUNNING || state == TASK_WAKING) + return true; + + /* + * Ensure we load p->on_rq after p->__state, otherwise it would be + * possible to, falsely, observe p->on_rq == 0. + * + * See try_to_wake_up() for a longer comment. + */ + smp_rmb(); + if (p->on_rq) + return true; + +#ifdef CONFIG_SMP + /* + * Ensure the task has finished __schedule() and will not be referenced + * anymore. Again, see try_to_wake_up() for a longer comment. + */ + smp_rmb(); + smp_cond_load_acquire(&p->on_cpu, !VAL); +#endif + + return false; +} + /** * task_call_func - Invoke a function on task in fixed state * @p: Process for which the function is to be invoked, can be @current. @@ -4217,28 +4251,12 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) int task_call_func(struct task_struct *p, task_call_f func, void *arg) { struct rq *rq = NULL; - unsigned int state; struct rq_flags rf; int ret; raw_spin_lock_irqsave(&p->pi_lock, rf.flags); - state = READ_ONCE(p->__state); - - /* - * Ensure we load p->on_rq after p->__state, otherwise it would be - * possible to, falsely, observe p->on_rq == 0. - * - * See try_to_wake_up() for a longer comment. - */ - smp_rmb(); - - /* - * Since pi->lock blocks try_to_wake_up(), we don't need rq->lock when - * the task is blocked. Make sure to check @state since ttwu() can drop - * locks at the end, see ttwu_queue_wakelist(). - */ - if (state == TASK_RUNNING || state == TASK_WAKING || p->on_rq) + if (__task_needs_rq_lock(p)) rq = __task_rq_lock(p, &rf); /* diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index 9161d1136d01c290c237c1a8f1126deb9c48fb4e..1207c78f85c11fab5ac211098ae175d14c66526d 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c @@ -25,9 +25,6 @@ struct sugov_policy { unsigned int next_freq; unsigned int cached_raw_freq; - /* max CPU capacity, which is equal for all CPUs in freq. domain */ - unsigned long max; - /* The next fields are only needed if fast switch cannot be used: */ struct irq_work irq_work; struct kthread_work work; @@ -51,6 +48,7 @@ struct sugov_cpu { unsigned long util; unsigned long bw_dl; + unsigned long max; /* The field below is for single-CPU policies only: */ #ifdef CONFIG_NO_HZ_COMMON @@ -160,6 +158,7 @@ static void sugov_get_util(struct sugov_cpu *sg_cpu) { struct rq *rq = cpu_rq(sg_cpu->cpu); + sg_cpu->max = arch_scale_cpu_capacity(sg_cpu->cpu); sg_cpu->bw_dl = cpu_bw_dl(rq); sg_cpu->util = effective_cpu_util(sg_cpu->cpu, cpu_util_cfs(sg_cpu->cpu), FREQUENCY_UTIL, NULL); @@ -254,7 +253,6 @@ static void sugov_iowait_boost(struct sugov_cpu *sg_cpu, u64 time, */ static void sugov_iowait_apply(struct sugov_cpu *sg_cpu, u64 time) { - struct sugov_policy *sg_policy = sg_cpu->sg_policy; unsigned long boost; /* No boost currently required */ @@ -282,8 +280,7 @@ static void sugov_iowait_apply(struct sugov_cpu *sg_cpu, u64 time) * sg_cpu->util is already in capacity scale; convert iowait_boost * into the same scale so we can compare. */ - boost = sg_cpu->iowait_boost * sg_policy->max; - boost >>= SCHED_CAPACITY_SHIFT; + boost = (sg_cpu->iowait_boost * sg_cpu->max) >> SCHED_CAPACITY_SHIFT; boost = uclamp_rq_util_with(cpu_rq(sg_cpu->cpu), boost, NULL); if (sg_cpu->util < boost) sg_cpu->util = boost; @@ -340,7 +337,7 @@ static void sugov_update_single_freq(struct update_util_data *hook, u64 time, if (!sugov_update_single_common(sg_cpu, time, flags)) return; - next_f = get_next_freq(sg_policy, sg_cpu->util, sg_policy->max); + next_f = get_next_freq(sg_policy, sg_cpu->util, sg_cpu->max); /* * Do not reduce the frequency if the CPU has not been idle * recently, as the reduction is likely to be premature then. @@ -376,7 +373,6 @@ static void sugov_update_single_perf(struct update_util_data *hook, u64 time, unsigned int flags) { struct sugov_cpu *sg_cpu = container_of(hook, struct sugov_cpu, update_util); - struct sugov_policy *sg_policy = sg_cpu->sg_policy; unsigned long prev_util = sg_cpu->util; /* @@ -403,8 +399,7 @@ static void sugov_update_single_perf(struct update_util_data *hook, u64 time, sg_cpu->util = prev_util; cpufreq_driver_adjust_perf(sg_cpu->cpu, map_util_perf(sg_cpu->bw_dl), - map_util_perf(sg_cpu->util), - sg_policy->max); + map_util_perf(sg_cpu->util), sg_cpu->max); sg_cpu->sg_policy->last_freq_update_time = time; } @@ -413,19 +408,25 @@ static unsigned int sugov_next_freq_shared(struct sugov_cpu *sg_cpu, u64 time) { struct sugov_policy *sg_policy = sg_cpu->sg_policy; struct cpufreq_policy *policy = sg_policy->policy; - unsigned long util = 0; + unsigned long util = 0, max = 1; unsigned int j; for_each_cpu(j, policy->cpus) { struct sugov_cpu *j_sg_cpu = &per_cpu(sugov_cpu, j); + unsigned long j_util, j_max; sugov_get_util(j_sg_cpu); sugov_iowait_apply(j_sg_cpu, time); + j_util = j_sg_cpu->util; + j_max = j_sg_cpu->max; - util = max(j_sg_cpu->util, util); + if (j_util * max > j_max * util) { + util = j_util; + max = j_max; + } } - return get_next_freq(sg_policy, util, sg_policy->max); + return get_next_freq(sg_policy, util, max); } static void @@ -751,7 +752,7 @@ static int sugov_start(struct cpufreq_policy *policy) { struct sugov_policy *sg_policy = policy->governor_data; void (*uu)(struct update_util_data *data, u64 time, unsigned int flags); - unsigned int cpu = cpumask_first(policy->cpus); + unsigned int cpu; sg_policy->freq_update_delay_ns = sg_policy->tunables->rate_limit_us * NSEC_PER_USEC; sg_policy->last_freq_update_time = 0; @@ -759,7 +760,6 @@ static int sugov_start(struct cpufreq_policy *policy) sg_policy->work_in_progress = false; sg_policy->limits_changed = false; sg_policy->cached_raw_freq = 0; - sg_policy->max = arch_scale_cpu_capacity(cpu); sg_policy->need_freq_update = cpufreq_driver_test_flags(CPUFREQ_NEED_UPDATE_LIMITS); diff --git a/kernel/trace/fprobe.c b/kernel/trace/fprobe.c index aac63ca9c3d1efd210c87511faf3c630ae4fdb70..e8143e3680744aa54e65b3061a9479661b3da1ce 100644 --- a/kernel/trace/fprobe.c +++ b/kernel/trace/fprobe.c @@ -141,6 +141,8 @@ static int fprobe_init_rethook(struct fprobe *fp, int num) return -E2BIG; fp->rethook = rethook_alloc((void *)fp, fprobe_exit_handler); + if (!fp->rethook) + return -ENOMEM; for (i = 0; i < size; i++) { struct fprobe_rethook_node *node; @@ -301,7 +303,8 @@ int unregister_fprobe(struct fprobe *fp) { int ret; - if (!fp || fp->ops.func != fprobe_handler) + if (!fp || (fp->ops.saved_func != fprobe_handler && + fp->ops.saved_func != fprobe_kprobe_handler)) return -EINVAL; /* diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index fbf2543111c05c2ffcb2be47b8497e723b6724ff..33236241f23646f960378c833506b6cdc5e65d78 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -1289,6 +1289,7 @@ static int ftrace_add_mod(struct trace_array *tr, if (!ftrace_mod) return -ENOMEM; + INIT_LIST_HEAD(&ftrace_mod->list); ftrace_mod->func = kstrdup(func, GFP_KERNEL); ftrace_mod->module = kstrdup(module, GFP_KERNEL); ftrace_mod->enable = enable; @@ -3028,18 +3029,8 @@ int ftrace_shutdown(struct ftrace_ops *ops, int command) command |= FTRACE_UPDATE_TRACE_FUNC; } - if (!command || !ftrace_enabled) { - /* - * If these are dynamic or per_cpu ops, they still - * need their data freed. Since, function tracing is - * not currently active, we can just free them - * without synchronizing all CPUs. - */ - if (ops->flags & FTRACE_OPS_FL_DYNAMIC) - goto free_ops; - - return 0; - } + if (!command || !ftrace_enabled) + goto out; /* * If the ops uses a trampoline, then it needs to be @@ -3076,6 +3067,7 @@ int ftrace_shutdown(struct ftrace_ops *ops, int command) removed_ops = NULL; ops->flags &= ~FTRACE_OPS_FL_REMOVING; +out: /* * Dynamic ops may be freed, we must make sure that all * callers are done before leaving this function. @@ -3103,7 +3095,6 @@ int ftrace_shutdown(struct ftrace_ops *ops, int command) if (IS_ENABLED(CONFIG_PREEMPTION)) synchronize_rcu_tasks(); - free_ops: ftrace_trampoline_free(ops); } @@ -3200,7 +3191,7 @@ static int ftrace_allocate_records(struct ftrace_page *pg, int count) /* if we can't allocate this size, try something smaller */ if (!order) return -ENOMEM; - order >>= 1; + order--; goto again; } @@ -7401,7 +7392,7 @@ void __init ftrace_init(void) } pr_info("ftrace: allocating %ld entries in %ld pages\n", - count, count / ENTRIES_PER_PAGE + 1); + count, DIV_ROUND_UP(count, ENTRIES_PER_PAGE)); ret = ftrace_process_locs(NULL, __start_mcount_loc, diff --git a/kernel/trace/kprobe_event_gen_test.c b/kernel/trace/kprobe_event_gen_test.c index 80e04a1e19772ae7cd4cecdc544f9ebaa1fd0e6b..c736487fc0e48ab40ef4113185a071ef7b167f6d 100644 --- a/kernel/trace/kprobe_event_gen_test.c +++ b/kernel/trace/kprobe_event_gen_test.c @@ -73,6 +73,10 @@ static struct trace_event_file *gen_kretprobe_test; #define KPROBE_GEN_TEST_ARG3 NULL #endif +static bool trace_event_file_is_valid(struct trace_event_file *input) +{ + return input && !IS_ERR(input); +} /* * Test to make sure we can create a kprobe event, then add more @@ -100,20 +104,20 @@ static int __init test_gen_kprobe_cmd(void) KPROBE_GEN_TEST_FUNC, KPROBE_GEN_TEST_ARG0, KPROBE_GEN_TEST_ARG1); if (ret) - goto free; + goto out; /* Use kprobe_event_add_fields to add the rest of the fields */ ret = kprobe_event_add_fields(&cmd, KPROBE_GEN_TEST_ARG2, KPROBE_GEN_TEST_ARG3); if (ret) - goto free; + goto out; /* * This actually creates the event. */ ret = kprobe_event_gen_cmd_end(&cmd); if (ret) - goto free; + goto out; /* * Now get the gen_kprobe_test event file. We need to prevent @@ -136,13 +140,13 @@ static int __init test_gen_kprobe_cmd(void) goto delete; } out: + kfree(buf); return ret; delete: + if (trace_event_file_is_valid(gen_kprobe_test)) + gen_kprobe_test = NULL; /* We got an error after creating the event, delete it */ ret = kprobe_event_delete("gen_kprobe_test"); - free: - kfree(buf); - goto out; } @@ -170,14 +174,14 @@ static int __init test_gen_kretprobe_cmd(void) KPROBE_GEN_TEST_FUNC, "$retval"); if (ret) - goto free; + goto out; /* * This actually creates the event. */ ret = kretprobe_event_gen_cmd_end(&cmd); if (ret) - goto free; + goto out; /* * Now get the gen_kretprobe_test event file. We need to @@ -201,13 +205,13 @@ static int __init test_gen_kretprobe_cmd(void) goto delete; } out: + kfree(buf); return ret; delete: + if (trace_event_file_is_valid(gen_kretprobe_test)) + gen_kretprobe_test = NULL; /* We got an error after creating the event, delete it */ ret = kprobe_event_delete("gen_kretprobe_test"); - free: - kfree(buf); - goto out; } @@ -221,10 +225,12 @@ static int __init kprobe_event_gen_test_init(void) ret = test_gen_kretprobe_cmd(); if (ret) { - WARN_ON(trace_array_set_clr_event(gen_kretprobe_test->tr, - "kprobes", - "gen_kretprobe_test", false)); - trace_put_event_file(gen_kretprobe_test); + if (trace_event_file_is_valid(gen_kretprobe_test)) { + WARN_ON(trace_array_set_clr_event(gen_kretprobe_test->tr, + "kprobes", + "gen_kretprobe_test", false)); + trace_put_event_file(gen_kretprobe_test); + } WARN_ON(kprobe_event_delete("gen_kretprobe_test")); } @@ -233,24 +239,30 @@ static int __init kprobe_event_gen_test_init(void) static void __exit kprobe_event_gen_test_exit(void) { - /* Disable the event or you can't remove it */ - WARN_ON(trace_array_set_clr_event(gen_kprobe_test->tr, - "kprobes", - "gen_kprobe_test", false)); + if (trace_event_file_is_valid(gen_kprobe_test)) { + /* Disable the event or you can't remove it */ + WARN_ON(trace_array_set_clr_event(gen_kprobe_test->tr, + "kprobes", + "gen_kprobe_test", false)); + + /* Now give the file and instance back */ + trace_put_event_file(gen_kprobe_test); + } - /* Now give the file and instance back */ - trace_put_event_file(gen_kprobe_test); /* Now unregister and free the event */ WARN_ON(kprobe_event_delete("gen_kprobe_test")); - /* Disable the event or you can't remove it */ - WARN_ON(trace_array_set_clr_event(gen_kretprobe_test->tr, - "kprobes", - "gen_kretprobe_test", false)); + if (trace_event_file_is_valid(gen_kretprobe_test)) { + /* Disable the event or you can't remove it */ + WARN_ON(trace_array_set_clr_event(gen_kretprobe_test->tr, + "kprobes", + "gen_kretprobe_test", false)); + + /* Now give the file and instance back */ + trace_put_event_file(gen_kretprobe_test); + } - /* Now give the file and instance back */ - trace_put_event_file(gen_kretprobe_test); /* Now unregister and free the event */ WARN_ON(kprobe_event_delete("gen_kretprobe_test")); diff --git a/kernel/trace/rethook.c b/kernel/trace/rethook.c index c69d82273ce782e101203e9f04639004a7e14db9..32c3dfdb4d6a74b9bba4dffb57914f9d71e5a591 100644 --- a/kernel/trace/rethook.c +++ b/kernel/trace/rethook.c @@ -83,8 +83,10 @@ struct rethook *rethook_alloc(void *data, rethook_handler_t handler) { struct rethook *rh = kzalloc(sizeof(struct rethook), GFP_KERNEL); - if (!rh || !handler) + if (!rh || !handler) { + kfree(rh); return NULL; + } rh->data = data; rh->handler = handler; diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 199759c735196a03086d1a6b3a31d1c5d358f7a6..b21bf14bae9bd5d519d0d0b864386003cb243fdb 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -519,6 +519,7 @@ struct ring_buffer_per_cpu { local_t committing; local_t commits; local_t pages_touched; + local_t pages_lost; local_t pages_read; long last_pages_touch; size_t shortest_full; @@ -894,10 +895,18 @@ size_t ring_buffer_nr_pages(struct trace_buffer *buffer, int cpu) size_t ring_buffer_nr_dirty_pages(struct trace_buffer *buffer, int cpu) { size_t read; + size_t lost; size_t cnt; read = local_read(&buffer->buffers[cpu]->pages_read); + lost = local_read(&buffer->buffers[cpu]->pages_lost); cnt = local_read(&buffer->buffers[cpu]->pages_touched); + + if (WARN_ON_ONCE(cnt < lost)) + return 0; + + cnt -= lost; + /* The reader can read an empty page, but not more than that */ if (cnt < read) { WARN_ON_ONCE(read > cnt + 1); @@ -907,6 +916,21 @@ size_t ring_buffer_nr_dirty_pages(struct trace_buffer *buffer, int cpu) return cnt - read; } +static __always_inline bool full_hit(struct trace_buffer *buffer, int cpu, int full) +{ + struct ring_buffer_per_cpu *cpu_buffer = buffer->buffers[cpu]; + size_t nr_pages; + size_t dirty; + + nr_pages = cpu_buffer->nr_pages; + if (!nr_pages || !full) + return true; + + dirty = ring_buffer_nr_dirty_pages(buffer, cpu); + + return (dirty * 100) > (full * nr_pages); +} + /* * rb_wake_up_waiters - wake up tasks waiting for ring buffer input * @@ -937,6 +961,9 @@ void ring_buffer_wake_waiters(struct trace_buffer *buffer, int cpu) struct ring_buffer_per_cpu *cpu_buffer; struct rb_irq_work *rbwork; + if (!buffer) + return; + if (cpu == RING_BUFFER_ALL_CPUS) { /* Wake up individual ones too. One level recursion */ @@ -945,7 +972,15 @@ void ring_buffer_wake_waiters(struct trace_buffer *buffer, int cpu) rbwork = &buffer->irq_work; } else { + if (WARN_ON_ONCE(!buffer->buffers)) + return; + if (WARN_ON_ONCE(cpu >= nr_cpu_ids)) + return; + cpu_buffer = buffer->buffers[cpu]; + /* The CPU buffer may not have been initialized yet */ + if (!cpu_buffer) + return; rbwork = &cpu_buffer->irq_work; } @@ -1035,22 +1070,20 @@ int ring_buffer_wait(struct trace_buffer *buffer, int cpu, int full) !ring_buffer_empty_cpu(buffer, cpu)) { unsigned long flags; bool pagebusy; - size_t nr_pages; - size_t dirty; + bool done; if (!full) break; raw_spin_lock_irqsave(&cpu_buffer->reader_lock, flags); pagebusy = cpu_buffer->reader_page == cpu_buffer->commit_page; - nr_pages = cpu_buffer->nr_pages; - dirty = ring_buffer_nr_dirty_pages(buffer, cpu); + done = !pagebusy && full_hit(buffer, cpu, full); + if (!cpu_buffer->shortest_full || cpu_buffer->shortest_full > full) cpu_buffer->shortest_full = full; raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags); - if (!pagebusy && - (!nr_pages || (dirty * 100) > full * nr_pages)) + if (done) break; } @@ -1076,6 +1109,7 @@ int ring_buffer_wait(struct trace_buffer *buffer, int cpu, int full) * @cpu: the cpu buffer to wait on * @filp: the file descriptor * @poll_table: The poll descriptor + * @full: wait until the percentage of pages are available, if @cpu != RING_BUFFER_ALL_CPUS * * If @cpu == RING_BUFFER_ALL_CPUS then the task will wake up as soon * as data is added to any of the @buffer's cpu buffers. Otherwise @@ -1085,14 +1119,15 @@ int ring_buffer_wait(struct trace_buffer *buffer, int cpu, int full) * zero otherwise. */ __poll_t ring_buffer_poll_wait(struct trace_buffer *buffer, int cpu, - struct file *filp, poll_table *poll_table) + struct file *filp, poll_table *poll_table, int full) { struct ring_buffer_per_cpu *cpu_buffer; struct rb_irq_work *work; - if (cpu == RING_BUFFER_ALL_CPUS) + if (cpu == RING_BUFFER_ALL_CPUS) { work = &buffer->irq_work; - else { + full = 0; + } else { if (!cpumask_test_cpu(cpu, buffer->cpumask)) return -EINVAL; @@ -1100,8 +1135,14 @@ __poll_t ring_buffer_poll_wait(struct trace_buffer *buffer, int cpu, work = &cpu_buffer->irq_work; } - poll_wait(filp, &work->waiters, poll_table); - work->waiters_pending = true; + if (full) { + poll_wait(filp, &work->full_waiters, poll_table); + work->full_waiters_pending = true; + } else { + poll_wait(filp, &work->waiters, poll_table); + work->waiters_pending = true; + } + /* * There's a tight race between setting the waiters_pending and * checking if the ring buffer is empty. Once the waiters_pending bit @@ -1117,6 +1158,9 @@ __poll_t ring_buffer_poll_wait(struct trace_buffer *buffer, int cpu, */ smp_mb(); + if (full) + return full_hit(buffer, cpu, full) ? EPOLLIN | EPOLLRDNORM : 0; + if ((cpu == RING_BUFFER_ALL_CPUS && !ring_buffer_empty(buffer)) || (cpu != RING_BUFFER_ALL_CPUS && !ring_buffer_empty_cpu(buffer, cpu))) return EPOLLIN | EPOLLRDNORM; @@ -1758,9 +1802,9 @@ static void rb_free_cpu_buffer(struct ring_buffer_per_cpu *cpu_buffer) free_buffer_page(cpu_buffer->reader_page); - rb_head_page_deactivate(cpu_buffer); - if (head) { + rb_head_page_deactivate(cpu_buffer); + list_for_each_entry_safe(bpage, tmp, head, list) { list_del_init(&bpage->list); free_buffer_page(bpage); @@ -1996,6 +2040,7 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned long nr_pages) */ local_add(page_entries, &cpu_buffer->overrun); local_sub(BUF_PAGE_SIZE, &cpu_buffer->entries_bytes); + local_inc(&cpu_buffer->pages_lost); } /* @@ -2480,6 +2525,7 @@ rb_handle_head_page(struct ring_buffer_per_cpu *cpu_buffer, */ local_add(entries, &cpu_buffer->overrun); local_sub(BUF_PAGE_SIZE, &cpu_buffer->entries_bytes); + local_inc(&cpu_buffer->pages_lost); /* * The entries will be zeroed out when we move the @@ -3144,10 +3190,6 @@ static void rb_commit(struct ring_buffer_per_cpu *cpu_buffer, static __always_inline void rb_wakeups(struct trace_buffer *buffer, struct ring_buffer_per_cpu *cpu_buffer) { - size_t nr_pages; - size_t dirty; - size_t full; - if (buffer->irq_work.waiters_pending) { buffer->irq_work.waiters_pending = false; /* irq_work_queue() supplies it's own memory barriers */ @@ -3171,10 +3213,7 @@ rb_wakeups(struct trace_buffer *buffer, struct ring_buffer_per_cpu *cpu_buffer) cpu_buffer->last_pages_touch = local_read(&cpu_buffer->pages_touched); - full = cpu_buffer->shortest_full; - nr_pages = cpu_buffer->nr_pages; - dirty = ring_buffer_nr_dirty_pages(buffer, cpu_buffer->cpu); - if (full && nr_pages && (dirty * 100) <= full * nr_pages) + if (!full_hit(buffer, cpu_buffer->cpu, cpu_buffer->shortest_full)) return; cpu_buffer->irq_work.wakeup_full = true; @@ -5237,6 +5276,7 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer) local_set(&cpu_buffer->committing, 0); local_set(&cpu_buffer->commits, 0); local_set(&cpu_buffer->pages_touched, 0); + local_set(&cpu_buffer->pages_lost, 0); local_set(&cpu_buffer->pages_read, 0); cpu_buffer->last_pages_touch = 0; cpu_buffer->shortest_full = 0; diff --git a/kernel/trace/synth_event_gen_test.c b/kernel/trace/synth_event_gen_test.c index 0b15e975d2c2c39ce9b674da627bc9326abe9c50..8d77526892f45f913ba7cbbbf31aa8b5b0b4a0f7 100644 --- a/kernel/trace/synth_event_gen_test.c +++ b/kernel/trace/synth_event_gen_test.c @@ -120,15 +120,13 @@ static int __init test_gen_synth_cmd(void) /* Now generate a gen_synth_test event */ ret = synth_event_trace_array(gen_synth_test, vals, ARRAY_SIZE(vals)); - out: + free: + kfree(buf); return ret; delete: /* We got an error after creating the event, delete it */ synth_event_delete("gen_synth_test"); - free: - kfree(buf); - - goto out; + goto free; } /* @@ -227,15 +225,13 @@ static int __init test_empty_synth_event(void) /* Now trace an empty_synth_test event */ ret = synth_event_trace_array(empty_synth_test, vals, ARRAY_SIZE(vals)); - out: + free: + kfree(buf); return ret; delete: /* We got an error after creating the event, delete it */ synth_event_delete("empty_synth_test"); - free: - kfree(buf); - - goto out; + goto free; } static struct synth_field_desc create_synth_test_fields[] = { diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 47a44b055a1d4821e1f738ebe56b4240ae30e157..5cfc95a52bc37876ca4d930e8ff8ecd76c307d68 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -2180,10 +2180,12 @@ void tracing_reset_online_cpus(struct array_buffer *buf) } /* Must have trace_types_lock held */ -void tracing_reset_all_online_cpus(void) +void tracing_reset_all_online_cpus_unlocked(void) { struct trace_array *tr; + lockdep_assert_held(&trace_types_lock); + list_for_each_entry(tr, &ftrace_trace_arrays, list) { if (!tr->clear_trace) continue; @@ -2195,6 +2197,13 @@ void tracing_reset_all_online_cpus(void) } } +void tracing_reset_all_online_cpus(void) +{ + mutex_lock(&trace_types_lock); + tracing_reset_all_online_cpus_unlocked(); + mutex_unlock(&trace_types_lock); +} + /* * The tgid_map array maps from pid to tgid; i.e. the value stored at index i * is the tgid last observed corresponding to pid=i. @@ -6657,6 +6666,7 @@ static int tracing_release_pipe(struct inode *inode, struct file *file) mutex_unlock(&trace_types_lock); free_cpumask_var(iter->started); + kfree(iter->fmt); mutex_destroy(&iter->mutex); kfree(iter); @@ -6681,7 +6691,7 @@ trace_poll(struct trace_iterator *iter, struct file *filp, poll_table *poll_tabl return EPOLLIN | EPOLLRDNORM; else return ring_buffer_poll_wait(iter->array_buffer->buffer, iter->cpu_file, - filp, poll_table); + filp, poll_table, iter->tr->buffer_percent); } static __poll_t @@ -7802,6 +7812,7 @@ static struct tracing_log_err *get_tracing_log_err(struct trace_array *tr, int len) { struct tracing_log_err *err; + char *cmd; if (tr->n_err_log_entries < TRACING_LOG_ERRS_MAX) { err = alloc_tracing_log_err(len); @@ -7810,12 +7821,12 @@ static struct tracing_log_err *get_tracing_log_err(struct trace_array *tr, return err; } - + cmd = kzalloc(len, GFP_KERNEL); + if (!cmd) + return ERR_PTR(-ENOMEM); err = list_first_entry(&tr->err_log, struct tracing_log_err, list); kfree(err->cmd); - err->cmd = kzalloc(len, GFP_KERNEL); - if (!err->cmd) - return ERR_PTR(-ENOMEM); + err->cmd = cmd; list_del(&err->list); return err; diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 54ee5711c72995c9dd1e926c010d30dd90c38f0c..d42e2450715255dc8a804bcb0e37ebda232095df 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -580,6 +580,7 @@ int tracing_is_enabled(void); void tracing_reset_online_cpus(struct array_buffer *buf); void tracing_reset_current(int cpu); void tracing_reset_all_online_cpus(void); +void tracing_reset_all_online_cpus_unlocked(void); int tracing_open_generic(struct inode *inode, struct file *filp); int tracing_open_generic_tr(struct inode *inode, struct file *filp); bool tracing_is_disabled(void); diff --git a/kernel/trace/trace_dynevent.c b/kernel/trace/trace_dynevent.c index 154996684fb548db7b2060682e87d94c6836e5a2..4376887e0d8aabea0b3ac9fe96282e42cd853c61 100644 --- a/kernel/trace/trace_dynevent.c +++ b/kernel/trace/trace_dynevent.c @@ -118,6 +118,7 @@ int dyn_event_release(const char *raw_command, struct dyn_event_operations *type if (ret) break; } + tracing_reset_all_online_cpus(); mutex_unlock(&event_mutex); out: argv_free(argv); @@ -214,6 +215,7 @@ int dyn_events_release_all(struct dyn_event_operations *type) break; } out: + tracing_reset_all_online_cpus(); mutex_unlock(&event_mutex); return ret; diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c index 5dd0617e5df6dbf36798d1c7b243ea52ae9f6ba2..352b65e2b91059a91ddde1d9a297f74d3a48fef3 100644 --- a/kernel/trace/trace_eprobe.c +++ b/kernel/trace/trace_eprobe.c @@ -52,6 +52,7 @@ static void trace_event_probe_cleanup(struct trace_eprobe *ep) kfree(ep->event_system); if (ep->event) trace_event_put_ref(ep->event); + kfree(ep->filter_str); kfree(ep); } @@ -563,6 +564,9 @@ static void eprobe_trigger_func(struct event_trigger_data *data, { struct eprobe_data *edata = data->private_data; + if (unlikely(!rec)) + return; + __eprobe_trace_func(edata, rec); } @@ -642,7 +646,7 @@ new_eprobe_trigger(struct trace_eprobe *ep, struct trace_event_file *file) INIT_LIST_HEAD(&trigger->list); if (ep->filter_str) { - ret = create_event_filter(file->tr, file->event_call, + ret = create_event_filter(file->tr, ep->event, ep->filter_str, false, &filter); if (ret) goto error; @@ -900,7 +904,7 @@ static int trace_eprobe_tp_update_arg(struct trace_eprobe *ep, const char *argv[ static int trace_eprobe_parse_filter(struct trace_eprobe *ep, int argc, const char *argv[]) { - struct event_filter *dummy; + struct event_filter *dummy = NULL; int i, ret, len = 0; char *p; diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 0356cae0cf74e79075f607bc841df05568688baa..f71ea6e79b3c8ed87952b427de9fcd47fde75454 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -2880,7 +2880,10 @@ static int probe_remove_event_call(struct trace_event_call *call) * TRACE_REG_UNREGISTER. */ if (file->flags & EVENT_FILE_FL_ENABLED) - return -EBUSY; + goto busy; + + if (file->flags & EVENT_FILE_FL_WAS_ENABLED) + tr->clear_trace = true; /* * The do_for_each_event_file_safe() is * a double loop. After finding the call for this @@ -2893,6 +2896,12 @@ static int probe_remove_event_call(struct trace_event_call *call) __trace_remove_event_call(call); return 0; + busy: + /* No need to clear the trace now */ + list_for_each_entry(tr, &ftrace_trace_arrays, list) { + tr->clear_trace = false; + } + return -EBUSY; } /* Remove an event_call */ @@ -2972,7 +2981,7 @@ static void trace_module_remove_events(struct module *mod) * over from this module may be passed to the new module events and * unexpected results may occur. */ - tracing_reset_all_online_cpus(); + tracing_reset_all_online_cpus_unlocked(); } static int trace_module_notify(struct notifier_block *self, diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index 48465f7e97b42b215cb3c72d779da6279a3acfe5..1c82478e8dffe732eac72dc496cc5394e4563fe8 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -983,7 +983,7 @@ static struct hist_field *find_any_var_ref(struct hist_trigger_data *hist_data, * A trigger can define one or more variables. If any one of them is * currently referenced by any other trigger, this function will * determine that. - + * * Typically used to determine whether or not a trigger can be removed * - if there are any references to a trigger's variables, it cannot. * @@ -3226,7 +3226,7 @@ static struct field_var *create_field_var(struct hist_trigger_data *hist_data, * events. However, for convenience, users are allowed to directly * specify an event field in an action, which will be automatically * converted into a variable on their behalf. - + * * This function creates a field variable with the name var_name on * the hist trigger currently being defined on the target event. If * subsys_name and event_name are specified, this function simply @@ -5143,6 +5143,9 @@ static void event_hist_trigger(struct event_trigger_data *data, void *key = NULL; unsigned int i; + if (unlikely(!rbe)) + return; + memset(compound_key, 0, hist_data->key_size); for_each_hist_key_field(i, hist_data) { diff --git a/kernel/trace/trace_events_synth.c b/kernel/trace/trace_events_synth.c index e310052dc83ce4bc680c6d14e799cdc8bbee9019..c3b582d19b620dca92e278e96192de87756bb5e3 100644 --- a/kernel/trace/trace_events_synth.c +++ b/kernel/trace/trace_events_synth.c @@ -828,10 +828,9 @@ static int register_synth_event(struct synth_event *event) } ret = set_synth_event_print_fmt(call); - if (ret < 0) { + /* unregister_trace_event() will be called inside */ + if (ret < 0) trace_remove_event_call(call); - goto err; - } out: return ret; err: @@ -1426,7 +1425,6 @@ int synth_event_delete(const char *event_name) mutex_unlock(&event_mutex); if (mod) { - mutex_lock(&trace_types_lock); /* * It is safest to reset the ring buffer if the module * being unloaded registered any events that were @@ -1438,7 +1436,6 @@ int synth_event_delete(const char *event_name) * occur. */ tracing_reset_all_online_cpus(); - mutex_unlock(&trace_types_lock); } return ret; diff --git a/kernel/trace/trace_events_user.c b/kernel/trace/trace_events_user.c index ae78c2d53c8ad621027f98d057a27248f9ccbe2c..539b08ae70207cb6a3fb778ee7c2dbda49c1c330 100644 --- a/kernel/trace/trace_events_user.c +++ b/kernel/trace/trace_events_user.c @@ -1100,8 +1100,10 @@ static int user_event_create(const char *raw_command) group = current_user_event_group(); - if (!group) + if (!group) { + kfree(name); return -ENOENT; + } mutex_lock(&group->reg_mutex); diff --git a/kernel/trace/trace_osnoise.c b/kernel/trace/trace_osnoise.c index 78d536d3ff3dbc7737c322cb80371b668d2cf06d..4300c5dc4e5db1f08a714e1c2b5e676af2164447 100644 --- a/kernel/trace/trace_osnoise.c +++ b/kernel/trace/trace_osnoise.c @@ -917,7 +917,7 @@ void osnoise_trace_irq_entry(int id) void osnoise_trace_irq_exit(int id, const char *desc) { struct osnoise_variables *osn_var = this_cpu_osn_var(); - int duration; + s64 duration; if (!osn_var->sampling) return; @@ -1048,7 +1048,7 @@ static void trace_softirq_entry_callback(void *data, unsigned int vec_nr) static void trace_softirq_exit_callback(void *data, unsigned int vec_nr) { struct osnoise_variables *osn_var = this_cpu_osn_var(); - int duration; + s64 duration; if (!osn_var->sampling) return; @@ -1144,7 +1144,7 @@ thread_entry(struct osnoise_variables *osn_var, struct task_struct *t) static void thread_exit(struct osnoise_variables *osn_var, struct task_struct *t) { - int duration; + s64 duration; if (!osn_var->sampling) return; diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c index b69e207012c99080f510da221639573da45d82cd..942ddbdace4a485a248fab99c52c7b32be98b9bf 100644 --- a/kernel/trace/trace_syscalls.c +++ b/kernel/trace/trace_syscalls.c @@ -201,8 +201,6 @@ print_syscall_exit(struct trace_iterator *iter, int flags, return trace_handle_return(s); } -extern char *__bad_type_size(void); - #define SYSCALL_FIELD(_type, _name) { \ .type = #_type, .name = #_name, \ .size = sizeof(_type), .align = __alignof__(_type), \ diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 29280072dc0e41a4dc8f893cdafadd5c9a3e36ca..3638b3424be531d3d9593c4703a42aa5355ae6c7 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -395,12 +395,13 @@ endif # DEBUG_INFO config FRAME_WARN int "Warn for stack frames larger than" range 0 8192 + default 0 if KMSAN default 2048 if GCC_PLUGIN_LATENT_ENTROPY default 2048 if PARISC default 1536 if (!64BIT && XTENSA) + default 1280 if KASAN && !64BIT default 1024 if !64BIT default 2048 if 64BIT - default 0 if KMSAN help Tell the compiler to warn at build time for stack frames larger than this. Setting this too low will cause a lot of warnings. @@ -1874,8 +1875,14 @@ config NETDEV_NOTIFIER_ERROR_INJECT If unsure, say N. config FUNCTION_ERROR_INJECTION - def_bool y + bool "Fault-injections of functions" depends on HAVE_FUNCTION_ERROR_INJECTION && KPROBES + help + Add fault injections into various functions that are annotated with + ALLOW_ERROR_INJECTION() in the kernel. BPF may also modify the return + value of theses functions. This is useful to test error paths of code. + + If unsure, say N config FAULT_INJECTION bool "Fault-injection framework" @@ -2107,6 +2114,7 @@ config KPROBES_SANITY_TEST depends on DEBUG_KERNEL depends on KPROBES depends on KUNIT + select STACKTRACE if ARCH_CORRECT_STACKTRACE_ON_KRETPROBE default KUNIT_ALL_TESTS help This option provides for testing basic kprobes functionality on @@ -2241,6 +2249,10 @@ config TEST_UUID config TEST_XARRAY tristate "Test the XArray code at runtime" +config TEST_MAPLE_TREE + select DEBUG_MAPLE_TREE + tristate "Test the Maple Tree code at runtime" + config TEST_RHASHTABLE tristate "Perform selftest on resizable hash table" help diff --git a/lib/Kconfig.kmsan b/lib/Kconfig.kmsan index b2489dd6503fac7bd1ee4418004e2747920e527a..ef2c8f256c57dac3c2575249c91382707cd63a83 100644 --- a/lib/Kconfig.kmsan +++ b/lib/Kconfig.kmsan @@ -12,6 +12,7 @@ config KMSAN bool "KMSAN: detector of uninitialized values use" depends on HAVE_ARCH_KMSAN && HAVE_KMSAN_COMPILER depends on SLUB && DEBUG_KERNEL && !KASAN && !KCSAN + depends on !PREEMPT_RT select STACKDEPOT select STACKDEPOT_ALWAYS_INIT help diff --git a/lib/Makefile b/lib/Makefile index 161d6a724ff710bdb1ac5475354c36c8257660cb..59bd7c2f793a7e937c815019181a2105f1cf5f2f 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -85,6 +85,7 @@ obj-$(CONFIG_TEST_BITMAP) += test_bitmap.o obj-$(CONFIG_TEST_STRSCPY) += test_strscpy.o obj-$(CONFIG_TEST_UUID) += test_uuid.o obj-$(CONFIG_TEST_XARRAY) += test_xarray.o +obj-$(CONFIG_TEST_MAPLE_TREE) += test_maple_tree.o obj-$(CONFIG_TEST_PARMAN) += test_parman.o obj-$(CONFIG_TEST_KMOD) += test_kmod.o obj-$(CONFIG_TEST_DEBUG_VIRTUAL) += test_debug_virtual.o diff --git a/lib/fault-inject.c b/lib/fault-inject.c index 96e092de5b72364205085aedba1e30909a3046d6..adb2f9355ee621ed68a84f0c0bd018501e399305 100644 --- a/lib/fault-inject.c +++ b/lib/fault-inject.c @@ -41,9 +41,6 @@ EXPORT_SYMBOL_GPL(setup_fault_attr); static void fail_dump(struct fault_attr *attr) { - if (attr->no_warn) - return; - if (attr->verbose > 0 && __ratelimit(&attr->ratelimit_state)) { printk(KERN_NOTICE "FAULT_INJECTION: forcing a failure.\n" "name %pd, interval %lu, probability %lu, " @@ -103,7 +100,7 @@ static inline bool fail_stacktrace(struct fault_attr *attr) * http://www.nongnu.org/failmalloc/ */ -bool should_fail(struct fault_attr *attr, ssize_t size) +bool should_fail_ex(struct fault_attr *attr, ssize_t size, int flags) { if (in_task()) { unsigned int fail_nth = READ_ONCE(current->fail_nth); @@ -146,13 +143,19 @@ bool should_fail(struct fault_attr *attr, ssize_t size) return false; fail: - fail_dump(attr); + if (!(flags & FAULT_NOWARN)) + fail_dump(attr); if (atomic_read(&attr->times) != -1) atomic_dec_not_zero(&attr->times); return true; } + +bool should_fail(struct fault_attr *attr, ssize_t size) +{ + return should_fail_ex(attr, size, 0); +} EXPORT_SYMBOL_GPL(should_fail); #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS diff --git a/lib/maple_tree.c b/lib/maple_tree.c index fbde494444b8918cc34fc7f38a79da5d84ad84d8..df352f6ccc240979f2fb03b9f096e4afc579a8cc 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -183,10 +183,6 @@ static void ma_free_rcu(struct maple_node *node) call_rcu(&node->rcu, mt_free_rcu); } -static unsigned int mt_height(const struct maple_tree *mt) -{ - return (mt->ma_flags & MT_FLAGS_HEIGHT_MASK) >> MT_FLAGS_HEIGHT_OFFSET; -} static void mas_set_height(struct ma_state *mas) { @@ -1209,7 +1205,6 @@ static inline void mas_push_node(struct ma_state *mas, struct maple_node *used) static inline void mas_alloc_nodes(struct ma_state *mas, gfp_t gfp) { struct maple_alloc *node; - struct maple_alloc **nodep = &mas->alloc; unsigned long allocated = mas_allocated(mas); unsigned long success = allocated; unsigned int requested = mas_alloc_req(mas); @@ -1263,8 +1258,7 @@ static inline void mas_alloc_nodes(struct ma_state *mas, gfp_t gfp) node->node_count--; success += count; - nodep = &node->slot[0]; - node = *nodep; + node = node->slot[0]; requested -= count; } mas->alloc->total = success; @@ -1357,6 +1351,7 @@ static inline struct maple_enode *mas_start(struct ma_state *mas) root = mas_root(mas); /* Tree with nodes */ if (likely(xa_is_node(root))) { + mas->depth = 1; mas->node = mte_safe_root(root); return NULL; } @@ -3608,8 +3603,7 @@ static inline int mas_commit_b_node(struct ma_wr_state *wr_mas, node = mas_pop_node(wr_mas->mas); node->parent = mas_mn(wr_mas->mas)->parent; wr_mas->mas->node = mt_mk_node(node, b_type); - mab_mas_cp(b_node, 0, b_end, wr_mas->mas, true); - + mab_mas_cp(b_node, 0, b_end, wr_mas->mas, false); mas_replace(wr_mas->mas, false); reuse_node: mas_update_gap(wr_mas->mas); @@ -3733,7 +3727,6 @@ static bool mas_is_span_wr(struct ma_wr_state *wr_mas) static inline void mas_wr_walk_descend(struct ma_wr_state *wr_mas) { - wr_mas->mas->depth++; wr_mas->type = mte_node_type(wr_mas->mas->node); mas_wr_node_walk(wr_mas); wr_mas->slots = ma_slots(wr_mas->node, wr_mas->type); @@ -3745,6 +3738,7 @@ static inline void mas_wr_walk_traverse(struct ma_wr_state *wr_mas) wr_mas->mas->min = wr_mas->r_min; wr_mas->mas->node = wr_mas->content; wr_mas->mas->offset = 0; + wr_mas->mas->depth++; } /* * mas_wr_walk() - Walk the tree for a write. @@ -4970,8 +4964,9 @@ static inline bool mas_anode_descend(struct ma_state *mas, unsigned long size) { enum maple_type type = mte_node_type(mas->node); unsigned long pivot, min, gap = 0; - unsigned char count, offset; - unsigned long *gaps = NULL, *pivots = ma_pivots(mas_mn(mas), type); + unsigned char offset; + unsigned long *gaps; + unsigned long *pivots = ma_pivots(mas_mn(mas), type); void __rcu **slots = ma_slots(mas_mn(mas), type); bool found = false; @@ -4982,9 +4977,8 @@ static inline bool mas_anode_descend(struct ma_state *mas, unsigned long size) gaps = ma_gaps(mte_to_node(mas->node), type); offset = mas->offset; - count = mt_slots[type]; min = mas_safe_min(mas, pivots, offset); - for (; offset < count; offset++) { + for (; offset < mt_slots[type]; offset++) { pivot = mas_safe_pivot(mas, pivots, offset, type); if (offset && !pivot) break; @@ -5010,8 +5004,6 @@ static inline bool mas_anode_descend(struct ma_state *mas, unsigned long size) mas->min = min; mas->max = pivot; offset = 0; - type = mte_node_type(mas->node); - count = mt_slots[type]; break; } } @@ -5065,6 +5057,7 @@ void *mas_walk(struct ma_state *mas) return entry; } +EXPORT_SYMBOL_GPL(mas_walk); static inline bool mas_rewind_node(struct ma_state *mas) { @@ -5276,6 +5269,7 @@ int mas_empty_area(struct ma_state *mas, unsigned long min, mas->last = mas->index + size - 1; return 0; } +EXPORT_SYMBOL_GPL(mas_empty_area); /* * mas_empty_area_rev() - Get the highest address within the range that is @@ -5339,6 +5333,7 @@ int mas_empty_area_rev(struct ma_state *mas, unsigned long min, mas->index = mas->last - size + 1; return 0; } +EXPORT_SYMBOL_GPL(mas_empty_area_rev); static inline int mas_alloc(struct ma_state *mas, void *entry, unsigned long size, unsigned long *index) @@ -5660,6 +5655,7 @@ void *mas_store(struct ma_state *mas, void *entry) mas_wr_store_entry(&wr_mas); return wr_mas.content; } +EXPORT_SYMBOL_GPL(mas_store); /** * mas_store_gfp() - Store a value into the tree. @@ -5686,6 +5682,7 @@ int mas_store_gfp(struct ma_state *mas, void *entry, gfp_t gfp) return 0; } +EXPORT_SYMBOL_GPL(mas_store_gfp); /** * mas_store_prealloc() - Store a value into the tree using memory @@ -5703,6 +5700,7 @@ void mas_store_prealloc(struct ma_state *mas, void *entry) BUG_ON(mas_is_err(mas)); mas_destroy(mas); } +EXPORT_SYMBOL_GPL(mas_store_prealloc); /** * mas_preallocate() - Preallocate enough nodes for a store operation @@ -5772,6 +5770,7 @@ void mas_destroy(struct ma_state *mas) } mas->alloc = NULL; } +EXPORT_SYMBOL_GPL(mas_destroy); /* * mas_expected_entries() - Set the expected number of entries that will be inserted. @@ -5833,6 +5832,7 @@ int mas_expected_entries(struct ma_state *mas, unsigned long nr_entries) return ret; } +EXPORT_SYMBOL_GPL(mas_expected_entries); /** * mas_next() - Get the next entry. @@ -6013,6 +6013,7 @@ void *mas_find(struct ma_state *mas, unsigned long max) /* Retries on dead nodes handled by mas_next_entry */ return mas_next_entry(mas, max); } +EXPORT_SYMBOL_GPL(mas_find); /** * mas_find_rev: On the first call, find the first non-null entry at or below @@ -6059,7 +6060,7 @@ void *mas_find_rev(struct ma_state *mas, unsigned long min) /* Retries on dead nodes handled by mas_next_entry */ return mas_prev_entry(mas, min); } -EXPORT_SYMBOL_GPL(mas_find); +EXPORT_SYMBOL_GPL(mas_find_rev); /** * mas_erase() - Find the range in which index resides and erase the entire @@ -6541,8 +6542,27 @@ static inline int mas_dead_node(struct ma_state *mas, unsigned long index) mas_rewalk(mas, index); return 1; } -#endif /* not defined __KERNEL__ */ +void mt_cache_shrink(void) +{ +} +#else +/* + * mt_cache_shrink() - For testing, don't use this. + * + * Certain testcases can trigger an OOM when combined with other memory + * debugging configuration options. This function is used to reduce the + * possibility of an out of memory even due to kmem_cache objects remaining + * around for longer than usual. + */ +void mt_cache_shrink(void) +{ + kmem_cache_shrink(maple_node_cache); + +} +EXPORT_SYMBOL_GPL(mt_cache_shrink); + +#endif /* not defined __KERNEL__ */ /* * mas_get_slot() - Get the entry in the maple state node stored at @offset. * @mas: The maple state @@ -6816,6 +6836,7 @@ void mt_dump(const struct maple_tree *mt) else if (entry) mt_dump_node(mt, entry, 0, mt_max[mte_node_type(entry)], 0); } +EXPORT_SYMBOL_GPL(mt_dump); /* * Calculate the maximum gap in a node and check if that's what is reported in @@ -7126,5 +7147,6 @@ void mt_validate(struct maple_tree *mt) rcu_read_unlock(); } +EXPORT_SYMBOL_GPL(mt_validate); #endif /* CONFIG_DEBUG_MAPLE_TREE */ diff --git a/lib/nlattr.c b/lib/nlattr.c index 40f22b177d690c360362530d98f3f4bcaf30bf08..b67a53e29b8fe4dda05a22f72f2bd3ae83a14bc9 100644 --- a/lib/nlattr.c +++ b/lib/nlattr.c @@ -124,10 +124,12 @@ void nla_get_range_unsigned(const struct nla_policy *pt, range->max = U8_MAX; break; case NLA_U16: + case NLA_BE16: case NLA_BINARY: range->max = U16_MAX; break; case NLA_U32: + case NLA_BE32: range->max = U32_MAX; break; case NLA_U64: @@ -159,31 +161,6 @@ void nla_get_range_unsigned(const struct nla_policy *pt, } } -static u64 nla_get_attr_bo(const struct nla_policy *pt, - const struct nlattr *nla) -{ - switch (pt->type) { - case NLA_U16: - if (pt->network_byte_order) - return ntohs(nla_get_be16(nla)); - - return nla_get_u16(nla); - case NLA_U32: - if (pt->network_byte_order) - return ntohl(nla_get_be32(nla)); - - return nla_get_u32(nla); - case NLA_U64: - if (pt->network_byte_order) - return be64_to_cpu(nla_get_be64(nla)); - - return nla_get_u64(nla); - } - - WARN_ON_ONCE(1); - return 0; -} - static int nla_validate_range_unsigned(const struct nla_policy *pt, const struct nlattr *nla, struct netlink_ext_ack *extack, @@ -197,9 +174,13 @@ static int nla_validate_range_unsigned(const struct nla_policy *pt, value = nla_get_u8(nla); break; case NLA_U16: + value = nla_get_u16(nla); + break; case NLA_U32: + value = nla_get_u32(nla); + break; case NLA_U64: - value = nla_get_attr_bo(pt, nla); + value = nla_get_u64(nla); break; case NLA_MSECS: value = nla_get_u64(nla); @@ -207,6 +188,12 @@ static int nla_validate_range_unsigned(const struct nla_policy *pt, case NLA_BINARY: value = nla_len(nla); break; + case NLA_BE16: + value = ntohs(nla_get_be16(nla)); + break; + case NLA_BE32: + value = ntohl(nla_get_be32(nla)); + break; default: return -EINVAL; } @@ -334,6 +321,8 @@ static int nla_validate_int_range(const struct nla_policy *pt, case NLA_U64: case NLA_MSECS: case NLA_BINARY: + case NLA_BE16: + case NLA_BE32: return nla_validate_range_unsigned(pt, nla, extack, validate); case NLA_S8: case NLA_S16: diff --git a/lib/test_maple_tree.c b/lib/test_maple_tree.c index 4f69e009a015d4e8e6e8f6dbe5034d4228fc08be..f425f169ef08910149b6f845d770f73118dbef30 100644 --- a/lib/test_maple_tree.c +++ b/lib/test_maple_tree.c @@ -1,24 +1,35 @@ // SPDX-License-Identifier: GPL-2.0+ /* * test_maple_tree.c: Test the maple tree API - * Copyright (c) 2018 Liam R. Howlett + * Copyright (c) 2018-2022 Oracle Corporation * Author: Liam R. Howlett + * + * Any tests that only require the interface of the tree. */ #include #include -#include -#include #define MTREE_ALLOC_MAX 0x2000000000000Ul +#ifndef CONFIG_DEBUG_MAPLE_TREE #define CONFIG_DEBUG_MAPLE_TREE +#endif #define CONFIG_MAPLE_SEARCH +#define MAPLE_32BIT (MAPLE_NODE_SLOTS > 31) + /* #define BENCH_SLOT_STORE */ /* #define BENCH_NODE_STORE */ /* #define BENCH_AWALK */ /* #define BENCH_WALK */ /* #define BENCH_MT_FOR_EACH */ /* #define BENCH_FORK */ + +#ifdef __KERNEL__ +#define mt_set_non_kernel(x) do {} while (0) +#define mt_zero_nr_tallocated(x) do {} while (0) +#else +#define cond_resched() do {} while (0) +#endif static int mtree_insert_index(struct maple_tree *mt, unsigned long index, gfp_t gfp) { @@ -65,6 +76,7 @@ static void *mtree_test_erase(struct maple_tree *mt, unsigned long index) return mtree_erase(mt, index); } +#if defined(CONFIG_64BIT) static noinline void check_mtree_alloc_range(struct maple_tree *mt, unsigned long start, unsigned long end, unsigned long size, unsigned long expected, int eret, void *ptr) @@ -98,6 +110,7 @@ static noinline void check_mtree_alloc_rrange(struct maple_tree *mt, MT_BUG_ON(mt, result != expected); } +#endif static noinline void check_load(struct maple_tree *mt, unsigned long index, void *ptr) @@ -150,12 +163,6 @@ static noinline void check_insert(struct maple_tree *mt, unsigned long index, MT_BUG_ON(mt, ret != 0); } -static noinline void check_erase(struct maple_tree *mt, unsigned long index, - void *ptr) -{ - MT_BUG_ON(mt, mtree_test_erase(mt, index) != ptr); -} - static noinline void check_dup_insert(struct maple_tree *mt, unsigned long index, void *ptr) { @@ -172,41 +179,6 @@ void check_index_load(struct maple_tree *mt, unsigned long index) return check_load(mt, index, xa_mk_value(index & LONG_MAX)); } -static noinline void check_nomem(struct maple_tree *mt) -{ - MA_STATE(ms, mt, 1, 1); - - MT_BUG_ON(mt, !mtree_empty(mt)); - /* Ensure no bypassing of allocation failures */ - mt_set_non_kernel(0); - - /* Storing something at 1 requires memory allocation */ - MT_BUG_ON(mt, mtree_insert(mt, 1, &ms, GFP_ATOMIC) != -ENOMEM); - /* Storing something at 0 does not */ - MT_BUG_ON(mt, mtree_insert(mt, 0, &ms, GFP_ATOMIC) != 0); - - /* - * Simulate two threads racing; the first one fails to allocate - * memory to insert an entry at 1, then the second one succeeds - * in allocating memory to insert an entry at 2. The first one - * then needs to free the node it allocated. LeakSanitizer will - * notice this, as will the 'nr_allocated' debugging aid in the - * userspace test suite. - */ - mtree_lock(mt); - mas_store(&ms, &ms); /* insert 1 -> &ms, fails. */ - MT_BUG_ON(mt, ms.node != MA_ERROR(-ENOMEM)); - mas_nomem(&ms, GFP_KERNEL); /* Node allocated in here. */ - MT_BUG_ON(mt, ms.node != MAS_START); - mtree_unlock(mt); - MT_BUG_ON(mt, mtree_insert(mt, 2, mt, GFP_KERNEL) != 0); - mtree_lock(mt); - mas_store(&ms, &ms); /* insert 1 -> &ms */ - mas_nomem(&ms, GFP_KERNEL); /* Node allocated in here. */ - mtree_unlock(mt); - mtree_destroy(mt); -} - static inline int not_empty(struct maple_node *node) { int i; @@ -221,350 +193,6 @@ static inline int not_empty(struct maple_node *node) return 0; } -static noinline void check_new_node(struct maple_tree *mt) -{ - - struct maple_node *mn, *mn2, *mn3; - struct maple_alloc *smn; - struct maple_node *nodes[100]; - int i, j, total; - - MA_STATE(mas, mt, 0, 0); - - /* Try allocating 3 nodes */ - mtree_lock(mt); - /* request 3 nodes to be allocated. */ - mas_node_count(&mas, 3); - /* Allocation request of 3. */ - MT_BUG_ON(mt, mas_alloc_req(&mas) != 3); - /* Allocate failed. */ - MT_BUG_ON(mt, mas.node != MA_ERROR(-ENOMEM)); - MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); - - MT_BUG_ON(mt, mas_allocated(&mas) != 3); - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, not_empty(mn)); - MT_BUG_ON(mt, mn == NULL); - MT_BUG_ON(mt, mas.alloc == NULL); - MT_BUG_ON(mt, mas.alloc->slot[0] == NULL); - mas_push_node(&mas, mn); - mas_nomem(&mas, GFP_KERNEL); /* free */ - mtree_unlock(mt); - - - /* Try allocating 1 node, then 2 more */ - mtree_lock(mt); - /* Set allocation request to 1. */ - mas_set_alloc_req(&mas, 1); - /* Check Allocation request of 1. */ - MT_BUG_ON(mt, mas_alloc_req(&mas) != 1); - mas_set_err(&mas, -ENOMEM); - /* Validate allocation request. */ - MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); - /* Eat the requested node. */ - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, not_empty(mn)); - MT_BUG_ON(mt, mn == NULL); - MT_BUG_ON(mt, mn->slot[0] != NULL); - MT_BUG_ON(mt, mn->slot[1] != NULL); - MT_BUG_ON(mt, mas_allocated(&mas) != 0); - - ma_free_rcu(mn); - mas.node = MAS_START; - mas_nomem(&mas, GFP_KERNEL); - /* Allocate 3 nodes, will fail. */ - mas_node_count(&mas, 3); - /* Drop the lock and allocate 3 nodes. */ - mas_nomem(&mas, GFP_KERNEL); - /* Ensure 3 are allocated. */ - MT_BUG_ON(mt, mas_allocated(&mas) != 3); - /* Allocation request of 0. */ - MT_BUG_ON(mt, mas_alloc_req(&mas) != 0); - - MT_BUG_ON(mt, mas.alloc == NULL); - MT_BUG_ON(mt, mas.alloc->slot[0] == NULL); - MT_BUG_ON(mt, mas.alloc->slot[1] == NULL); - /* Ensure we counted 3. */ - MT_BUG_ON(mt, mas_allocated(&mas) != 3); - /* Free. */ - mas_nomem(&mas, GFP_KERNEL); - - /* Set allocation request to 1. */ - mas_set_alloc_req(&mas, 1); - MT_BUG_ON(mt, mas_alloc_req(&mas) != 1); - mas_set_err(&mas, -ENOMEM); - /* Validate allocation request. */ - MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); - MT_BUG_ON(mt, mas_allocated(&mas) != 1); - /* Check the node is only one node. */ - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, not_empty(mn)); - MT_BUG_ON(mt, mas_allocated(&mas) != 0); - MT_BUG_ON(mt, mn == NULL); - MT_BUG_ON(mt, mn->slot[0] != NULL); - MT_BUG_ON(mt, mn->slot[1] != NULL); - MT_BUG_ON(mt, mas_allocated(&mas) != 0); - mas_push_node(&mas, mn); - MT_BUG_ON(mt, mas_allocated(&mas) != 1); - MT_BUG_ON(mt, mas.alloc->node_count); - - mas_set_alloc_req(&mas, 2); /* request 2 more. */ - MT_BUG_ON(mt, mas_alloc_req(&mas) != 2); - mas_set_err(&mas, -ENOMEM); - MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); - MT_BUG_ON(mt, mas_allocated(&mas) != 3); - MT_BUG_ON(mt, mas.alloc == NULL); - MT_BUG_ON(mt, mas.alloc->slot[0] == NULL); - MT_BUG_ON(mt, mas.alloc->slot[1] == NULL); - for (i = 2; i >= 0; i--) { - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, mas_allocated(&mas) != i); - MT_BUG_ON(mt, !mn); - MT_BUG_ON(mt, not_empty(mn)); - ma_free_rcu(mn); - } - - total = 64; - mas_set_alloc_req(&mas, total); /* request 2 more. */ - MT_BUG_ON(mt, mas_alloc_req(&mas) != total); - mas_set_err(&mas, -ENOMEM); - MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); - for (i = total; i > 0; i--) { - unsigned int e = 0; /* expected node_count */ - - if (i >= 35) - e = i - 35; - else if (i >= 5) - e = i - 5; - else if (i >= 2) - e = i - 2; - MT_BUG_ON(mt, mas.alloc->node_count != e); - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, not_empty(mn)); - MT_BUG_ON(mt, mas_allocated(&mas) != i - 1); - MT_BUG_ON(mt, !mn); - ma_free_rcu(mn); - } - - total = 100; - for (i = 1; i < total; i++) { - mas_set_alloc_req(&mas, i); - mas_set_err(&mas, -ENOMEM); - MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); - for (j = i; j > 0; j--) { - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, mas_allocated(&mas) != j - 1); - MT_BUG_ON(mt, !mn); - MT_BUG_ON(mt, not_empty(mn)); - mas_push_node(&mas, mn); - MT_BUG_ON(mt, mas_allocated(&mas) != j); - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, not_empty(mn)); - MT_BUG_ON(mt, mas_allocated(&mas) != j - 1); - ma_free_rcu(mn); - } - MT_BUG_ON(mt, mas_allocated(&mas) != 0); - - mas_set_alloc_req(&mas, i); - mas_set_err(&mas, -ENOMEM); - MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); - for (j = 0; j <= i/2; j++) { - MT_BUG_ON(mt, mas_allocated(&mas) != i - j); - nodes[j] = mas_pop_node(&mas); - MT_BUG_ON(mt, mas_allocated(&mas) != i - j - 1); - } - - while (j) { - j--; - mas_push_node(&mas, nodes[j]); - MT_BUG_ON(mt, mas_allocated(&mas) != i - j); - } - MT_BUG_ON(mt, mas_allocated(&mas) != i); - for (j = 0; j <= i/2; j++) { - MT_BUG_ON(mt, mas_allocated(&mas) != i - j); - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, not_empty(mn)); - ma_free_rcu(mn); - MT_BUG_ON(mt, mas_allocated(&mas) != i - j - 1); - } - MT_BUG_ON(mt, mas_nomem(&mas, GFP_KERNEL)); - - } - - /* Set allocation request. */ - total = 500; - mas_node_count(&mas, total); - /* Drop the lock and allocate the nodes. */ - mas_nomem(&mas, GFP_KERNEL); - MT_BUG_ON(mt, !mas.alloc); - i = 1; - smn = mas.alloc; - while (i < total) { - for (j = 0; j < MAPLE_ALLOC_SLOTS; j++) { - i++; - MT_BUG_ON(mt, !smn->slot[j]); - if (i == total) - break; - } - smn = smn->slot[0]; /* next. */ - } - MT_BUG_ON(mt, mas_allocated(&mas) != total); - mas_nomem(&mas, GFP_KERNEL); /* Free. */ - - MT_BUG_ON(mt, mas_allocated(&mas) != 0); - for (i = 1; i < 128; i++) { - mas_node_count(&mas, i); /* Request */ - mas_nomem(&mas, GFP_KERNEL); /* Fill request */ - MT_BUG_ON(mt, mas_allocated(&mas) != i); /* check request filled */ - for (j = i; j > 0; j--) { /*Free the requests */ - mn = mas_pop_node(&mas); /* get the next node. */ - MT_BUG_ON(mt, mn == NULL); - MT_BUG_ON(mt, not_empty(mn)); - ma_free_rcu(mn); - } - MT_BUG_ON(mt, mas_allocated(&mas) != 0); - } - - for (i = 1; i < MAPLE_NODE_MASK + 1; i++) { - MA_STATE(mas2, mt, 0, 0); - mas_node_count(&mas, i); /* Request */ - mas_nomem(&mas, GFP_KERNEL); /* Fill request */ - MT_BUG_ON(mt, mas_allocated(&mas) != i); /* check request filled */ - for (j = 1; j <= i; j++) { /* Move the allocations to mas2 */ - mn = mas_pop_node(&mas); /* get the next node. */ - MT_BUG_ON(mt, mn == NULL); - MT_BUG_ON(mt, not_empty(mn)); - mas_push_node(&mas2, mn); - MT_BUG_ON(mt, mas_allocated(&mas2) != j); - } - MT_BUG_ON(mt, mas_allocated(&mas) != 0); - MT_BUG_ON(mt, mas_allocated(&mas2) != i); - - for (j = i; j > 0; j--) { /*Free the requests */ - MT_BUG_ON(mt, mas_allocated(&mas2) != j); - mn = mas_pop_node(&mas2); /* get the next node. */ - MT_BUG_ON(mt, mn == NULL); - MT_BUG_ON(mt, not_empty(mn)); - ma_free_rcu(mn); - } - MT_BUG_ON(mt, mas_allocated(&mas2) != 0); - } - - - MT_BUG_ON(mt, mas_allocated(&mas) != 0); - mas_node_count(&mas, MAPLE_ALLOC_SLOTS + 1); /* Request */ - MT_BUG_ON(mt, mas.node != MA_ERROR(-ENOMEM)); - MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); - MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 1); - MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS - 1); - - mn = mas_pop_node(&mas); /* get the next node. */ - MT_BUG_ON(mt, mn == NULL); - MT_BUG_ON(mt, not_empty(mn)); - MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS); - MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS - 2); - - mas_push_node(&mas, mn); - MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 1); - MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS - 1); - - /* Check the limit of pop/push/pop */ - mas_node_count(&mas, MAPLE_ALLOC_SLOTS + 2); /* Request */ - MT_BUG_ON(mt, mas_alloc_req(&mas) != 1); - MT_BUG_ON(mt, mas.node != MA_ERROR(-ENOMEM)); - MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); - MT_BUG_ON(mt, mas_alloc_req(&mas)); - MT_BUG_ON(mt, mas.alloc->node_count); - MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 2); - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, not_empty(mn)); - MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 1); - MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS - 1); - mas_push_node(&mas, mn); - MT_BUG_ON(mt, mas.alloc->node_count); - MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 2); - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, not_empty(mn)); - ma_free_rcu(mn); - for (i = 1; i <= MAPLE_ALLOC_SLOTS + 1; i++) { - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, not_empty(mn)); - ma_free_rcu(mn); - } - MT_BUG_ON(mt, mas_allocated(&mas) != 0); - - - for (i = 3; i < MAPLE_NODE_MASK * 3; i++) { - mas.node = MA_ERROR(-ENOMEM); - mas_node_count(&mas, i); /* Request */ - mas_nomem(&mas, GFP_KERNEL); /* Fill request */ - mn = mas_pop_node(&mas); /* get the next node. */ - mas_push_node(&mas, mn); /* put it back */ - mas_destroy(&mas); - - mas.node = MA_ERROR(-ENOMEM); - mas_node_count(&mas, i); /* Request */ - mas_nomem(&mas, GFP_KERNEL); /* Fill request */ - mn = mas_pop_node(&mas); /* get the next node. */ - mn2 = mas_pop_node(&mas); /* get the next node. */ - mas_push_node(&mas, mn); /* put them back */ - mas_push_node(&mas, mn2); - mas_destroy(&mas); - - mas.node = MA_ERROR(-ENOMEM); - mas_node_count(&mas, i); /* Request */ - mas_nomem(&mas, GFP_KERNEL); /* Fill request */ - mn = mas_pop_node(&mas); /* get the next node. */ - mn2 = mas_pop_node(&mas); /* get the next node. */ - mn3 = mas_pop_node(&mas); /* get the next node. */ - mas_push_node(&mas, mn); /* put them back */ - mas_push_node(&mas, mn2); - mas_push_node(&mas, mn3); - mas_destroy(&mas); - - mas.node = MA_ERROR(-ENOMEM); - mas_node_count(&mas, i); /* Request */ - mas_nomem(&mas, GFP_KERNEL); /* Fill request */ - mn = mas_pop_node(&mas); /* get the next node. */ - ma_free_rcu(mn); - mas_destroy(&mas); - - mas.node = MA_ERROR(-ENOMEM); - mas_node_count(&mas, i); /* Request */ - mas_nomem(&mas, GFP_KERNEL); /* Fill request */ - mn = mas_pop_node(&mas); /* get the next node. */ - ma_free_rcu(mn); - mn = mas_pop_node(&mas); /* get the next node. */ - ma_free_rcu(mn); - mn = mas_pop_node(&mas); /* get the next node. */ - ma_free_rcu(mn); - mas_destroy(&mas); - } - - mas.node = MA_ERROR(-ENOMEM); - mas_node_count(&mas, 5); /* Request */ - mas_nomem(&mas, GFP_KERNEL); /* Fill request */ - MT_BUG_ON(mt, mas_allocated(&mas) != 5); - mas.node = MA_ERROR(-ENOMEM); - mas_node_count(&mas, 10); /* Request */ - mas_nomem(&mas, GFP_KERNEL); /* Fill request */ - mas.node = MAS_START; - MT_BUG_ON(mt, mas_allocated(&mas) != 10); - mas_destroy(&mas); - - mas.node = MA_ERROR(-ENOMEM); - mas_node_count(&mas, MAPLE_ALLOC_SLOTS - 1); /* Request */ - mas_nomem(&mas, GFP_KERNEL); /* Fill request */ - MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS - 1); - mas.node = MA_ERROR(-ENOMEM); - mas_node_count(&mas, 10 + MAPLE_ALLOC_SLOTS - 1); /* Request */ - mas_nomem(&mas, GFP_KERNEL); /* Fill request */ - mas.node = MAS_START; - MT_BUG_ON(mt, mas_allocated(&mas) != 10 + MAPLE_ALLOC_SLOTS - 1); - mas_destroy(&mas); - - mtree_unlock(mt); -} static noinline void check_rev_seq(struct maple_tree *mt, unsigned long max, bool verbose) @@ -588,6 +216,7 @@ static noinline void check_rev_seq(struct maple_tree *mt, unsigned long max, } check_load(mt, max + 1, NULL); +#ifndef __KERNEL__ if (verbose) { rcu_barrier(); mt_dump(mt); @@ -595,6 +224,7 @@ static noinline void check_rev_seq(struct maple_tree *mt, unsigned long max, __func__, max, mt_get_alloc_size()/1024, mt_nr_allocated(), mt_nr_tallocated()); } +#endif } static noinline void check_seq(struct maple_tree *mt, unsigned long max, @@ -614,6 +244,8 @@ static noinline void check_seq(struct maple_tree *mt, unsigned long max, MT_BUG_ON(mt, !mt_height(mt)); check_load(mt, i + 1, NULL); } + +#ifndef __KERNEL__ if (verbose) { rcu_barrier(); mt_dump(mt); @@ -621,6 +253,7 @@ static noinline void check_seq(struct maple_tree *mt, unsigned long max, max, mt_get_alloc_size()/1024, mt_nr_allocated(), mt_nr_tallocated()); } +#endif } static noinline void check_lb_not_empty(struct maple_tree *mt) @@ -651,10 +284,15 @@ static noinline void check_lower_bound_split(struct maple_tree *mt) static noinline void check_upper_bound_split(struct maple_tree *mt) { unsigned long i, j; - unsigned long huge = 4000UL * 1000 * 1000; + unsigned long huge; MT_BUG_ON(mt, !mtree_empty(mt)); + if (MAPLE_32BIT) + huge = 2147483647UL; + else + huge = 4000UL * 1000 * 1000; + i = 4096; while (i < huge) { check_insert(mt, i, (void *) i); @@ -687,6 +325,7 @@ static noinline void check_rev_find(struct maple_tree *mt) mtree_store_range(mt, i*10, i*10 + 5, xa_mk_value(i), GFP_KERNEL); + rcu_read_lock(); mas_set(&mas, 1000); val = mas_find_rev(&mas, 1000); MT_BUG_ON(mt, val != xa_mk_value(100)); @@ -712,13 +351,15 @@ static noinline void check_rev_find(struct maple_tree *mt) MT_BUG_ON(mt, val != xa_mk_value(0)); val = mas_find_rev(&mas, 0); MT_BUG_ON(mt, val != NULL); + rcu_read_unlock(); } static noinline void check_find(struct maple_tree *mt) { unsigned long val = 0; - unsigned long count = 20; + unsigned long count; unsigned long max; + unsigned long top; unsigned long last = 0, index = 0; void *entry, *entry2; @@ -727,6 +368,18 @@ static noinline void check_find(struct maple_tree *mt) /* Insert 0. */ MT_BUG_ON(mt, mtree_insert_index(mt, val++, GFP_KERNEL)); +#if defined(CONFIG_64BIT) + top = 4398046511104UL; +#else + top = ULONG_MAX; +#endif + + if (MAPLE_32BIT) { + count = 15; + } else { + count = 20; + } + for (int i = 0; i <= count; i++) { if (val != 64) MT_BUG_ON(mt, mtree_insert_index(mt, val, GFP_KERNEL)); @@ -805,12 +458,17 @@ static noinline void check_find(struct maple_tree *mt) index = 0; MT_BUG_ON(mt, mtree_insert_index(mt, ULONG_MAX, GFP_KERNEL)); mt_for_each(mt, entry, index, ULONG_MAX) { - if (val == 4398046511104) - MT_BUG_ON(mt, entry != - xa_mk_value(ULONG_MAX & LONG_MAX)); + if (val == top) + MT_BUG_ON(mt, entry != xa_mk_value(LONG_MAX)); else MT_BUG_ON(mt, xa_mk_value(val) != entry); - val <<= 2; + + /* Workaround for 32bit */ + if ((val << 2) < val) + val = ULONG_MAX; + else + val <<= 2; + if (val == 64) /* Skip zero entry. */ val <<= 2; /* For zero check. */ @@ -842,11 +500,16 @@ static noinline void check_find(struct maple_tree *mt) mas_for_each(&mas, entry, ULONG_MAX) { if (val == 64) MT_BUG_ON(mt, entry != XA_ZERO_ENTRY); - else if (val == 4398046511104) - MT_BUG_ON(mt, entry != xa_mk_value(ULONG_MAX & LONG_MAX)); + else if (val == top) + MT_BUG_ON(mt, entry != xa_mk_value(LONG_MAX)); else MT_BUG_ON(mt, xa_mk_value(val) != entry); - val <<= 2; + + /* Workaround for 32bit */ + if ((val << 2) < val) + val = ULONG_MAX; + else + val <<= 2; /* For zero check. */ if (!val) @@ -951,36548 +614,1350 @@ static noinline void check_find_2(struct maple_tree *mt) /*MT_BUG_ON(mt, !mtree_empty(mt)); */ } -#define erase_ptr(i) entry[i%2] -#define erase_check_load(mt, i) check_load(mt, set[i], entry[i%2]) -#define erase_check_insert(mt, i) check_insert(mt, set[i], entry[i%2]) -#define erase_check_erase(mt, i) check_erase(mt, set[i], entry[i%2]) -static noinline void check_erase_testset(struct maple_tree *mt) +#if defined(CONFIG_64BIT) +static noinline void check_alloc_rev_range(struct maple_tree *mt) { - unsigned long set[] = { 5015, 5014, 5017, 25, 1000, - 1001, 1002, 1003, 1005, 0, - 6003, 6002, 6008, 6012, 6015, - 7003, 7002, 7008, 7012, 7015, - 8003, 8002, 8008, 8012, 8015, - 9003, 9002, 9008, 9012, 9015, - 10003, 10002, 10008, 10012, 10015, - 11003, 11002, 11008, 11012, 11015, - 12003, 12002, 12008, 12012, 12015, - 13003, 13002, 13008, 13012, 13015, - 14003, 14002, 14008, 14012, 14015, - 15003, 15002, 15008, 15012, 15015, - }; - - - void *ptr = &set; - void *entry[2] = { ptr, mt }; - void *root_node; - - - rcu_register_thread(); - mt_set_in_rcu(mt); - for (int i = 0; i < 4; i++) - erase_check_insert(mt, i); - for (int i = 0; i < 4; i++) - erase_check_load(mt, i); - - mt_set_non_kernel(2); - erase_check_erase(mt, 1); - erase_check_load(mt, 0); - check_load(mt, set[1], NULL); - for (int i = 2; i < 4; i++) - erase_check_load(mt, i); - - - erase_check_erase(mt, 2); - erase_check_load(mt, 0); - check_load(mt, set[1], NULL); - check_load(mt, set[2], NULL); - - erase_check_insert(mt, 1); - erase_check_insert(mt, 2); - - for (int i = 0; i < 4; i++) - erase_check_load(mt, i); - - /* Check erase and load without an allocation. */ - erase_check_load(mt, 3); - erase_check_erase(mt, 1); - erase_check_load(mt, 0); - check_load(mt, set[1], NULL); - for (int i = 2; i < 4; i++) - erase_check_load(mt, i); - /* - * Set the newly erased node. This will produce a different allocated - * node to avoid busy slots. + * Generated by: + * cat /proc/self/maps | awk '{print $1}'| + * awk -F "-" '{printf "0x%s, 0x%s, ", $1, $2}' */ - root_node = mt->ma_root; - erase_check_insert(mt, 1); - - erase_check_load(mt, 0); - check_load(mt, 5016, NULL); - erase_check_load(mt, 1); - check_load(mt, 5013, NULL); - erase_check_load(mt, 2); - check_load(mt, 5018, NULL); - erase_check_load(mt, 3); - - erase_check_erase(mt, 2); /* erase 5017 to check append */ - erase_check_load(mt, 0); - check_load(mt, 5016, NULL); - erase_check_load(mt, 1); - check_load(mt, 5013, NULL); - check_load(mt, set[2], NULL); - check_load(mt, 5018, NULL); - - erase_check_load(mt, 3); - - root_node = mt->ma_root; - erase_check_insert(mt, 2); - - erase_check_load(mt, 0); - check_load(mt, 5016, NULL); - erase_check_load(mt, 1); - check_load(mt, 5013, NULL); - erase_check_load(mt, 2); - check_load(mt, 5018, NULL); - erase_check_load(mt, 3); - mt_set_non_kernel(1); - erase_check_erase(mt, 2); /* erase 5017 to check append */ - erase_check_load(mt, 0); - check_load(mt, 5016, NULL); - check_load(mt, set[2], NULL); - erase_check_erase(mt, 0); /* erase 5015 to check append */ - check_load(mt, set[0], NULL); - check_load(mt, 5016, NULL); - erase_check_insert(mt, 4); /* 1000 < Should not split. */ - check_load(mt, set[0], NULL); - check_load(mt, 5016, NULL); - erase_check_load(mt, 1); - check_load(mt, 5013, NULL); - check_load(mt, set[2], NULL); - check_load(mt, 5018, NULL); - erase_check_load(mt, 4); - check_load(mt, 999, NULL); - check_load(mt, 1001, NULL); - erase_check_load(mt, 4); - if (mt_in_rcu(mt)) - MT_BUG_ON(mt, root_node == mt->ma_root); - else - MT_BUG_ON(mt, root_node != mt->ma_root); + unsigned long range[] = { + /* Inclusive , Exclusive. */ + 0x565234af2000, 0x565234af4000, + 0x565234af4000, 0x565234af9000, + 0x565234af9000, 0x565234afb000, + 0x565234afc000, 0x565234afd000, + 0x565234afd000, 0x565234afe000, + 0x565235def000, 0x565235e10000, + 0x7f36d4bfd000, 0x7f36d4ee2000, + 0x7f36d4ee2000, 0x7f36d4f04000, + 0x7f36d4f04000, 0x7f36d504c000, + 0x7f36d504c000, 0x7f36d5098000, + 0x7f36d5098000, 0x7f36d5099000, + 0x7f36d5099000, 0x7f36d509d000, + 0x7f36d509d000, 0x7f36d509f000, + 0x7f36d509f000, 0x7f36d50a5000, + 0x7f36d50b9000, 0x7f36d50db000, + 0x7f36d50db000, 0x7f36d50dc000, + 0x7f36d50dc000, 0x7f36d50fa000, + 0x7f36d50fa000, 0x7f36d5102000, + 0x7f36d5102000, 0x7f36d5103000, + 0x7f36d5103000, 0x7f36d5104000, + 0x7f36d5104000, 0x7f36d5105000, + 0x7fff5876b000, 0x7fff5878d000, + 0x7fff5878e000, 0x7fff58791000, + 0x7fff58791000, 0x7fff58793000, + }; - /* Should not have split. */ - MT_BUG_ON(mt, !mte_is_leaf(mt->ma_root)); + unsigned long holes[] = { + /* + * Note: start of hole is INCLUSIVE + * end of hole is EXCLUSIVE + * (opposite of the above table.) + * Start of hole, end of hole, size of hole (+1) + */ + 0x565234afb000, 0x565234afc000, 0x1000, + 0x565234afe000, 0x565235def000, 0x12F1000, + 0x565235e10000, 0x7f36d4bfd000, 0x28E49EDED000, + }; + /* + * req_range consists of 4 values. + * 1. min index + * 2. max index + * 3. size + * 4. number that should be returned. + * 5. return value + */ + unsigned long req_range[] = { + 0x565234af9000, /* Min */ + 0x7fff58791000, /* Max */ + 0x1000, /* Size */ + 0x7fff5878d << 12, /* First rev hole of size 0x1000 */ + 0, /* Return value success. */ - /* Coalesce testing */ - erase_check_insert(mt, 0); - erase_check_insert(mt, 2); + 0x0, /* Min */ + 0x565234AF1 << 12, /* Max */ + 0x3000, /* Size */ + 0x565234AEE << 12, /* max - 3. */ + 0, /* Return value success. */ - for (int i = 5; i < 25; i++) { - erase_check_insert(mt, i); - for (int j = i; j >= 0; j--) - erase_check_load(mt, j); - } + 0x0, /* Min */ + -1, /* Max */ + 0x1000, /* Size */ + 562949953421311 << 12,/* First rev hole of size 0x1000 */ + 0, /* Return value success. */ - erase_check_erase(mt, 14); /*6015 */ - for (int i = 0; i < 25; i++) { - if (i == 14) - check_load(mt, set[i], NULL); - else - erase_check_load(mt, i); - } - erase_check_erase(mt, 16); /*7002 */ - for (int i = 0; i < 25; i++) { - if (i == 16 || i == 14) - check_load(mt, set[i], NULL); - else - erase_check_load(mt, i); - } + 0x0, /* Min */ + 0x7F36D510A << 12, /* Max */ + 0x4000, /* Size */ + 0x7F36D5106 << 12, /* First rev hole of size 0x4000 */ + 0, /* Return value success. */ + /* Ascend test. */ + 0x0, + 34148798629 << 12, + 19 << 12, + 34148797418 << 12, + 0x0, - mt_set_non_kernel(1); - erase_check_erase(mt, 13); /*6012 */ - for (int i = 0; i < 25; i++) { - if (i == 16 || i == 14 || i == 13) - check_load(mt, set[i], NULL); - else - erase_check_load(mt, i); - } + /* Too big test. */ + 0x0, + 18446744073709551615UL, + 562915594369134UL << 12, + 0x0, + -EBUSY, - erase_check_erase(mt, 15); /*7003 */ - for (int i = 0; i < 25; i++) { - if (i <= 16 && i >= 13) - check_load(mt, set[i], NULL); - else - erase_check_load(mt, i); - } + }; - mt_set_non_kernel(2); - erase_check_erase(mt, 17); /*7008 *should* cause coalesce. */ - for (int i = 0; i < 25; i++) { - if (i <= 17 && i >= 13) - check_load(mt, set[i], NULL); - else - erase_check_load(mt, i); - } + int i, range_count = ARRAY_SIZE(range); + int req_range_count = ARRAY_SIZE(req_range); + unsigned long min = 0; - erase_check_erase(mt, 18); /*7012 */ - for (int i = 0; i < 25; i++) { - if (i <= 18 && i >= 13) - check_load(mt, set[i], NULL); - else - erase_check_load(mt, i); - } + MA_STATE(mas, mt, 0, 0); - mt_set_non_kernel(2); - erase_check_erase(mt, 19); /*7015 */ - for (int i = 0; i < 25; i++) { - if (i <= 19 && i >= 13) - check_load(mt, set[i], NULL); - else - erase_check_load(mt, i); - } + mtree_store_range(mt, MTREE_ALLOC_MAX, ULONG_MAX, XA_ZERO_ENTRY, + GFP_KERNEL); +#define DEBUG_REV_RANGE 0 + for (i = 0; i < range_count; i += 2) { + /* Inclusive, Inclusive (with the -1) */ - erase_check_erase(mt, 20); /*8003 */ - for (int i = 0; i < 25; i++) { - if (i <= 20 && i >= 13) - check_load(mt, set[i], NULL); - else - erase_check_load(mt, i); +#if DEBUG_REV_RANGE + pr_debug("\t%s: Insert %lu-%lu\n", __func__, range[i] >> 12, + (range[i + 1] >> 12) - 1); +#endif + check_insert_range(mt, range[i] >> 12, (range[i + 1] >> 12) - 1, + xa_mk_value(range[i] >> 12), 0); + mt_validate(mt); } - erase_check_erase(mt, 21); /*8002 */ - for (int i = 0; i < 25; i++) { - if (i <= 21 && i >= 13) - check_load(mt, set[i], NULL); - else - erase_check_load(mt, i); - } - mt_set_non_kernel(2); - erase_check_erase(mt, 22); /*8008 */ - for (int i = 0; i < 25; i++) { - if (i <= 22 && i >= 13) - check_load(mt, set[i], NULL); - else - erase_check_load(mt, i); + mas_lock(&mas); + for (i = 0; i < ARRAY_SIZE(holes); i += 3) { +#if DEBUG_REV_RANGE + pr_debug("Search from %lu-%lu for gap %lu should be at %lu\n", + min, holes[i+1]>>12, holes[i+2]>>12, + holes[i] >> 12); +#endif + MT_BUG_ON(mt, mas_empty_area_rev(&mas, min, + holes[i+1] >> 12, + holes[i+2] >> 12)); +#if DEBUG_REV_RANGE + pr_debug("Found %lu %lu\n", mas.index, mas.last); + pr_debug("gap %lu %lu\n", (holes[i] >> 12), + (holes[i+1] >> 12)); +#endif + MT_BUG_ON(mt, mas.last + 1 != (holes[i+1] >> 12)); + MT_BUG_ON(mt, mas.index != (holes[i+1] >> 12) - (holes[i+2] >> 12)); + min = holes[i+1] >> 12; + mas_reset(&mas); } - for (int i = 23; i < 25; i++) - erase_check_erase(mt, i); - for (int i = 0; i < 25; i++) { - if (i <= 25 && i >= 13) - check_load(mt, set[i], NULL); - else - erase_check_load(mt, i); + mas_unlock(&mas); + for (i = 0; i < req_range_count; i += 5) { +#if DEBUG_REV_RANGE + pr_debug("\tReverse request between %lu-%lu size %lu, should get %lu\n", + req_range[i] >> 12, + (req_range[i + 1] >> 12) - 1, + req_range[i+2] >> 12, + req_range[i+3] >> 12); +#endif + check_mtree_alloc_rrange(mt, + req_range[i] >> 12, /* start */ + req_range[i+1] >> 12, /* end */ + req_range[i+2] >> 12, /* size */ + req_range[i+3] >> 12, /* expected address */ + req_range[i+4], /* expected return */ + xa_mk_value(req_range[i] >> 12)); /* pointer */ + mt_validate(mt); } - /* Shrinking tree test. */ + mt_set_non_kernel(1); + mtree_erase(mt, 34148798727); /* create a deleted range. */ + check_mtree_alloc_rrange(mt, 0, 34359052173, 210253414, + 34148798725, 0, mt); - for (int i = 13; i < ARRAY_SIZE(set); i++) - erase_check_insert(mt, i); + mtree_destroy(mt); +} - mt_set_non_kernel(99); - for (int i = 18; i < ARRAY_SIZE(set); i++) { - erase_check_erase(mt, i); - for (int j = 0; j < ARRAY_SIZE(set); j++) { - if (j < 18 || j > i) - erase_check_load(mt, j); - else - check_load(mt, set[j], NULL); - } - } - mt_set_non_kernel(35); - for (int i = 0; i < 18; i++) { - erase_check_erase(mt, i); - for (int j = 0; j < ARRAY_SIZE(set); j++) { - if (j < 18 && j > i) - erase_check_load(mt, j); - else - check_load(mt, set[j], NULL); - } - } - erase_check_insert(mt, 8); - erase_check_insert(mt, 9); - erase_check_erase(mt, 8); - rcu_unregister_thread(); -} - -#define erase_check_store_range(mt, a, i, ptr) mtree_test_store_range(mt, \ - a[(i)], a[(i + 1)], ptr) -#define STORE 1 -#define SNULL 2 -#define ERASE 3 -#define ec_type_str(x) \ - (((x) == STORE) ? \ - "STORE" : \ - (((x) == SNULL) ? \ - "SNULL" : "ERASE") \ - ) -#define check_erase2_debug 0 -void *mas_next(struct ma_state *mas, unsigned long max); - -/* Calculate the overwritten entries. */ -int mas_ce2_over_count(struct ma_state *mas_start, struct ma_state *mas_end, - void *s_entry, unsigned long s_min, - void *e_entry, unsigned long e_max, - unsigned long *set, int i, bool null_entry) -{ - int count = 0, span = 0; - unsigned long retry = 0; - void *entry; - struct ma_state tmp; - - - /* count slots */ - memcpy(&tmp, mas_start, sizeof(tmp)); - entry = mas_next(&tmp, mas_end->last); - while (entry) { - BUG_ON(retry > 50); /* stop infinite retry on testing. */ - if (xa_is_zero(s_entry)) { - retry++; - continue; - } - count++; - span++; - entry = mas_next(&tmp, mas_end->last); - } - - if (null_entry) { - /* Check splitting end. */ - if (e_entry && (e_max > mas_end->last)) - count--; - - /* check overwrite of entire start */ - if (s_entry && (s_min == mas_start->index)) - count++; - } else { /* !null_entry (store) */ - bool esplit = e_max > mas_end->last; - bool ssplit = s_min != mas_start->index; - - if (s_entry && e_entry) { - if (esplit && ssplit) - count--; - else if (ssplit) - count--; - else if (esplit) { - if (span) - count--; - } - } else if (s_entry && !e_entry) { - if (ssplit) - count--; - } else if (!s_entry && e_entry) { - if (esplit) - count--; - count--; - } else { - count--; - } - } - return count; -} - -/* - * mas_node_walk() - Walk a maple node to offset of the index. - * @mas: The maple state - * @type: The maple node type - * @*range_min: Pointer to store the minimum range of the offset - * @*range_max: Pointer to store the maximum range of the offset - * - * The offset will be stored in the maple state. - * - */ -static inline void mas_node_walk(struct ma_state *mas, struct maple_node *node, - enum maple_type type, unsigned long *range_min, - unsigned long *range_max) - -{ - unsigned long *pivots; - unsigned char count; - unsigned long prev, max; - unsigned char offset; - unsigned long index; - - if (unlikely(ma_is_dense(type))) { - (*range_max) = (*range_min) = mas->index; - if (unlikely(ma_dead_node(node))) - return; - - mas->offset = mas->index = mas->min; - return; - } - - pivots = ma_pivots(node, type); - max = pivots[0]; - if (unlikely(ma_dead_node(node))) - return; - - offset = 0; - prev = mas->min; - index = mas->index; - if (unlikely(index <= max)) - goto offset_zero; - - count = mt_pivots[type]; - while (++offset < count) { - prev = max; - max = pivots[offset]; - if (unlikely(ma_dead_node(node))) - return; - - if (index <= max) - goto offset_found; - else if (unlikely(!max)) - goto mas_max; - } - - prev = max; -mas_max: - max = mas->max; -offset_found: - prev++; -offset_zero: - mas->offset = offset; - if (ma_is_leaf(type)) { - *range_max = max; - *range_min = prev; - } else { - mas->max = max; - mas->min = prev; - } -} - -/* - * mas_descend_walk(): Locates a value and sets the mas->node and slot - * accordingly. range_min and range_max are set to the range which the entry is - * valid. - * @mas: The maple state - * @*range_min: A pointer to store the minimum of the range - * @*range_max: A pointer to store the maximum of the range - * - * Check mas->node is still valid on return of any value. - * - * Return: true if pointing to a valid node and offset. False otherwise. - */ -static inline bool mas_descend_walk(struct ma_state *mas, - unsigned long *range_min, unsigned long *range_max) -{ - struct maple_enode *next; - struct maple_node *node; - enum maple_type type; - - next = mas->node; - while (true) { - node = mte_to_node(next); - type = mte_node_type(next); - mas_node_walk(mas, node, type, range_min, range_max); - next = mas_slot(mas, ma_slots(node, type), mas->offset); - if (unlikely(ma_dead_node(node))) - return false; - - if (unlikely(ma_is_leaf(type))) - return true; - - /* Descend. */ - mas->node = next; - } - return false; -} - -/* - * mas_tree_walk() - Walk to @mas->index and set the range values. - * @mas: The maple state. - * @*range_min: The minimum range to be set. - * @*range_max: The maximum range to be set. - * - * Ranges are only valid if there is a valid entry at @mas->index. - * - * Return: True if a value exists, false otherwise. - */ -static inline bool mas_tree_walk(struct ma_state *mas, unsigned long *range_min, - unsigned long *range_max) +static noinline void check_alloc_range(struct maple_tree *mt) { - bool ret; - -retry: - ret = false; - mas_start(mas); - if (mas_is_none(mas)) - goto not_found; - - if (mas_is_ptr(mas)) { - *range_min = *range_max = 0; - if (!mas->index) - return true; - - goto not_found; - } - - ret = mas_descend_walk(mas, range_min, range_max); - if (unlikely(mte_dead_node(mas->node))) { - mas->node = MAS_START; - goto retry; - } - - return ret; + /* + * Generated by: + * cat /proc/self/maps|awk '{print $1}'| + * awk -F "-" '{printf "0x%s, 0x%s, ", $1, $2}' + */ -not_found: - mas->offset = MAPLE_NODE_SLOTS; - return false; -} + unsigned long range[] = { + /* Inclusive , Exclusive. */ + 0x565234af2000, 0x565234af4000, + 0x565234af4000, 0x565234af9000, + 0x565234af9000, 0x565234afb000, + 0x565234afc000, 0x565234afd000, + 0x565234afd000, 0x565234afe000, + 0x565235def000, 0x565235e10000, + 0x7f36d4bfd000, 0x7f36d4ee2000, + 0x7f36d4ee2000, 0x7f36d4f04000, + 0x7f36d4f04000, 0x7f36d504c000, + 0x7f36d504c000, 0x7f36d5098000, + 0x7f36d5098000, 0x7f36d5099000, + 0x7f36d5099000, 0x7f36d509d000, + 0x7f36d509d000, 0x7f36d509f000, + 0x7f36d509f000, 0x7f36d50a5000, + 0x7f36d50b9000, 0x7f36d50db000, + 0x7f36d50db000, 0x7f36d50dc000, + 0x7f36d50dc000, 0x7f36d50fa000, + 0x7f36d50fa000, 0x7f36d5102000, + 0x7f36d5102000, 0x7f36d5103000, + 0x7f36d5103000, 0x7f36d5104000, + 0x7f36d5104000, 0x7f36d5105000, + 0x7fff5876b000, 0x7fff5878d000, + 0x7fff5878e000, 0x7fff58791000, + 0x7fff58791000, 0x7fff58793000, + }; + unsigned long holes[] = { + /* Start of hole, end of hole, size of hole (+1) */ + 0x565234afb000, 0x565234afc000, 0x1000, + 0x565234afe000, 0x565235def000, 0x12F1000, + 0x565235e10000, 0x7f36d4bfd000, 0x28E49EDED000, + }; -static inline void *mas_range_load(struct ma_state *mas, - unsigned long *range_min, unsigned long *range_max) + /* + * req_range consists of 4 values. + * 1. min index + * 2. max index + * 3. size + * 4. number that should be returned. + * 5. return value + */ + unsigned long req_range[] = { + 0x565234af9000, /* Min */ + 0x7fff58791000, /* Max */ + 0x1000, /* Size */ + 0x565234afb000, /* First hole in our data of size 1000. */ + 0, /* Return value success. */ -{ - void *entry = NULL; - unsigned long index = mas->index; + 0x0, /* Min */ + 0x7fff58791000, /* Max */ + 0x1F00, /* Size */ + 0x0, /* First hole in our data of size 2000. */ + 0, /* Return value success. */ - if (mas_is_none(mas) || mas_is_paused(mas)) - mas->node = MAS_START; -retry: - if (mas_tree_walk(mas, range_min, range_max)) - if (unlikely(mas->node == MAS_ROOT)) - return mas_root(mas); + /* Test ascend. */ + 34148797436 << 12, /* Min */ + 0x7fff587AF000, /* Max */ + 0x3000, /* Size */ + 34148798629 << 12, /* Expected location */ + 0, /* Return value success. */ - if (likely(mas->offset != MAPLE_NODE_SLOTS)) - entry = mas_get_slot(mas, mas->offset); + /* Test failing. */ + 34148798623 << 12, /* Min */ + 34148798683 << 12, /* Max */ + 0x15000, /* Size */ + 0, /* Expected location */ + -EBUSY, /* Return value failed. */ - if (mas_dead_node(mas, index)) - goto retry; + /* Test filling entire gap. */ + 34148798623 << 12, /* Min */ + 0x7fff587AF000, /* Max */ + 0x10000, /* Size */ + 34148798632 << 12, /* Expected location */ + 0, /* Return value success. */ - return entry; -} -static noinline void check_erase2_testset(struct maple_tree *mt, - unsigned long *set, unsigned long size) -{ - int entry_count = 0; - int check = 0; - void *foo; - unsigned long addr = 0; - void *s_entry = NULL, *e_entry = NULL; + /* Test walking off the end of root. */ + 0, /* Min */ + -1, /* Max */ + -1, /* Size */ + 0, /* Expected location */ + -EBUSY, /* Return value failure. */ + /* Test looking for too large a hole across entire range. */ + 0, /* Min */ + -1, /* Max */ + 4503599618982063UL << 12, /* Size */ + 34359052178 << 12, /* Expected location */ + -EBUSY, /* Return failure. */ + }; + int i, range_count = ARRAY_SIZE(range); + int req_range_count = ARRAY_SIZE(req_range); + unsigned long min = 0x565234af2000; MA_STATE(mas, mt, 0, 0); - for (int i = 0; i < size; i += 3) { - unsigned long s_min, s_max; - unsigned long e_min, e_max; - void *value = NULL; - - MA_STATE(mas_start, mt, set[i+1], set[i+1]); - MA_STATE(mas_end, mt, set[i+2], set[i+2]); - mt_set_non_kernel(127); -#if check_erase2_debug - pr_err("%s: %d %s %lu - %lu\n", __func__, i, - ec_type_str(set[i]), - set[i+1], set[i+2]); -#endif - s_entry = mas_range_load(&mas_start, &s_min, &s_max); - e_entry = mas_range_load(&mas_end, &e_min, &e_max); - - switch (set[i]) { - case SNULL: - if ((s_min == set[i+1]) && (s_max == set[i+2])) { - if (s_entry) - entry_count--; - } else if ((s_min != set[i+1]) && (s_max != set[i+2])) { - entry_count++; - } else if ((mas_start.node != mas_end.node) || - (mas_start.offset != mas_end.offset)) { - entry_count -= - mas_ce2_over_count(&mas_start, &mas_end, - s_entry, s_min, - e_entry, e_max, set, i, - true); - } - - - erase_check_store_range(mt, set, i + 1, value); - break; - case STORE: - value = xa_mk_value(set[i + 1]); - if (mas_start.offset > mt_slot_count(mas_start.node)) { - entry_count++; /* appending an entry. */ - } else if ((s_min == e_min) && (s_max == e_max)) { - if (!entry_count) - entry_count++; - - else if (s_entry) { - if (e_max > mas_end.last) - entry_count++; - - if (s_min < mas_start.index) - entry_count++; - - } else { - entry_count++; - } - } else { - entry_count -= - mas_ce2_over_count(&mas_start, &mas_end, - s_entry, s_min, - e_entry, e_max, set, i, - false); - } - - erase_check_store_range(mt, set, i + 1, value); - break; - case ERASE: - if (!s_entry) - break; - check_erase(mt, set[i+1], xa_mk_value(set[i+1])); - entry_count--; - break; - } - mt_validate(mt); - if (entry_count) - MT_BUG_ON(mt, !mt_height(mt)); -#if check_erase2_debug > 1 + mtree_store_range(mt, MTREE_ALLOC_MAX, ULONG_MAX, XA_ZERO_ENTRY, + GFP_KERNEL); + for (i = 0; i < range_count; i += 2) { +#define DEBUG_ALLOC_RANGE 0 +#if DEBUG_ALLOC_RANGE + pr_debug("\tInsert %lu-%lu\n", range[i] >> 12, + (range[i + 1] >> 12) - 1); mt_dump(mt); #endif -#if check_erase2_debug - pr_err("Done\n"); -#endif + check_insert_range(mt, range[i] >> 12, (range[i + 1] >> 12) - 1, + xa_mk_value(range[i] >> 12), 0); + mt_validate(mt); + } - check = 0; - addr = 0; - mt_for_each(mt, foo, addr, ULONG_MAX) { - check++; -#if check_erase2_debug > 2 - pr_err("mt: %lu -> %p (%d)\n", addr+1, foo, check); -#endif - if (check > entry_count) - break; - } -#if check_erase2_debug > 2 - pr_err("mt_for_each %d and count %d\n", check, entry_count); -#endif - MT_BUG_ON(mt, check != entry_count); + mas_lock(&mas); + for (i = 0; i < ARRAY_SIZE(holes); i += 3) { - check = 0; - addr = 0; +#if DEBUG_ALLOC_RANGE + pr_debug("\tGet empty %lu-%lu size %lu (%lx-%lx)\n", min >> 12, + holes[i+1] >> 12, holes[i+2] >> 12, + min, holes[i+1]); +#endif + MT_BUG_ON(mt, mas_empty_area(&mas, min >> 12, + holes[i+1] >> 12, + holes[i+2] >> 12)); + MT_BUG_ON(mt, mas.index != holes[i] >> 12); + min = holes[i+1]; mas_reset(&mas); - mas.index = 0; - rcu_read_lock(); - mas_for_each(&mas, foo, ULONG_MAX) { - if (xa_is_zero(foo)) { - if (addr == mas.index) { - mt_dump(mas.tree); - pr_err("retry failed %lu - %lu\n", - mas.index, mas.last); - MT_BUG_ON(mt, 1); - } - addr = mas.index; - continue; - } -#if check_erase2_debug > 2 - pr_err("mas: %lu -> %p\n", mas.index, foo); + } + mas_unlock(&mas); + for (i = 0; i < req_range_count; i += 5) { +#if DEBUG_ALLOC_RANGE + pr_debug("\tTest %d: %lu-%lu size %lu expected %lu (%lu-%lu)\n", + i/5, req_range[i] >> 12, req_range[i + 1] >> 12, + req_range[i + 2] >> 12, req_range[i + 3] >> 12, + req_range[i], req_range[i+1]); #endif - check++; - if (check > entry_count) - break; - } - rcu_read_unlock(); -#if check_erase2_debug > 2 - pr_err("mas_for_each %d and count %d\n", check, entry_count); + check_mtree_alloc_range(mt, + req_range[i] >> 12, /* start */ + req_range[i+1] >> 12, /* end */ + req_range[i+2] >> 12, /* size */ + req_range[i+3] >> 12, /* expected address */ + req_range[i+4], /* expected return */ + xa_mk_value(req_range[i] >> 12)); /* pointer */ mt_validate(mt); +#if DEBUG_ALLOC_RANGE + mt_dump(mt); #endif - - MT_BUG_ON(mt, check != entry_count); - - MT_BUG_ON(mt, mtree_load(mas.tree, 0) != NULL); } -} + mtree_destroy(mt); +} +#endif -/* These tests were pulled from kvm tests. */ -static noinline void check_erase2_sets(struct maple_tree *mt) +static noinline void check_ranges(struct maple_tree *mt) { - void *entry; - unsigned long start = 0; - unsigned long set[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140721266458624, 140737488351231, -ERASE, 140721266458624, 140737488351231, -STORE, 140721266458624, 140721266462719, -STORE, 94735788949504, 94735789121535, -ERASE, 94735788949504, 94735789121535, -STORE, 94735788949504, 94735788965887, -STORE, 94735788965888, 94735789121535, -ERASE, 94735788965888, 94735789121535, -STORE, 94735788965888, 94735789068287, -STORE, 94735789068288, 94735789109247, -STORE, 94735789109248, 94735789121535, -STORE, 140253902692352, 140253902864383, -ERASE, 140253902692352, 140253902864383, -STORE, 140253902692352, 140253902696447, -STORE, 140253902696448, 140253902864383, - }; - unsigned long set2[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140735933583360, 140737488351231, -ERASE, 140735933583360, 140737488351231, -STORE, 140735933583360, 140735933587455, -STORE, 94811003260928, 94811003432959, -ERASE, 94811003260928, 94811003432959, -STORE, 94811003260928, 94811003277311, -STORE, 94811003277312, 94811003432959, -ERASE, 94811003277312, 94811003432959, -STORE, 94811003277312, 94811003379711, -STORE, 94811003379712, 94811003420671, -STORE, 94811003420672, 94811003432959, -STORE, 140277094653952, 140277094825983, -ERASE, 140277094653952, 140277094825983, -STORE, 140277094653952, 140277094658047, -STORE, 140277094658048, 140277094825983, -ERASE, 140277094658048, 140277094825983, -STORE, 140277094658048, 140277094780927, -STORE, 140277094780928, 140277094813695, -STORE, 140277094813696, 140277094821887, -STORE, 140277094821888, 140277094825983, -STORE, 140735933906944, 140735933911039, - }; - unsigned long set3[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140735790264320, 140737488351231, -ERASE, 140735790264320, 140737488351231, -STORE, 140735790264320, 140735790268415, -STORE, 94016597282816, 94016597454847, -ERASE, 94016597282816, 94016597454847, -STORE, 94016597282816, 94016597299199, -STORE, 94016597299200, 94016597454847, -ERASE, 94016597299200, 94016597454847, -STORE, 94016597299200, 94016597401599, -STORE, 94016597401600, 94016597442559, -STORE, 94016597442560, 94016597454847, -STORE, 140496959283200, 140496959455231, -ERASE, 140496959283200, 140496959455231, -STORE, 140496959283200, 140496959287295, -STORE, 140496959287296, 140496959455231, -ERASE, 140496959287296, 140496959455231, -STORE, 140496959287296, 140496959410175, -STORE, 140496959410176, 140496959442943, -STORE, 140496959442944, 140496959451135, -STORE, 140496959451136, 140496959455231, -STORE, 140735791718400, 140735791722495, -STORE, 140735791706112, 140735791718399, -STORE, 47135835713536, 47135835721727, -STORE, 47135835721728, 47135835729919, -STORE, 47135835729920, 47135835893759, -ERASE, 47135835729920, 47135835893759, -STORE, 47135835729920, 47135835742207, -STORE, 47135835742208, 47135835893759, -STORE, 47135835840512, 47135835893759, -STORE, 47135835742208, 47135835840511, -ERASE, 47135835742208, 47135835840511, -STORE, 47135835742208, 47135835840511, -STORE, 47135835885568, 47135835893759, -STORE, 47135835840512, 47135835885567, -ERASE, 47135835840512, 47135835885567, -STORE, 47135835840512, 47135835893759, -ERASE, 47135835840512, 47135835893759, -STORE, 47135835840512, 47135835885567, -STORE, 47135835885568, 47135835893759, - }; - - unsigned long set4[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140728251703296, 140737488351231, -ERASE, 140728251703296, 140737488351231, -STORE, 140728251703296, 140728251707391, -STORE, 94668429205504, 94668429377535, -ERASE, 94668429205504, 94668429377535, -STORE, 94668429205504, 94668429221887, -STORE, 94668429221888, 94668429377535, -ERASE, 94668429221888, 94668429377535, -STORE, 94668429221888, 94668429324287, -STORE, 94668429324288, 94668429365247, -STORE, 94668429365248, 94668429377535, -STORE, 47646523273216, 47646523445247, -ERASE, 47646523273216, 47646523445247, -STORE, 47646523273216, 47646523277311, -STORE, 47646523277312, 47646523445247, -ERASE, 47646523277312, 47646523445247, -STORE, 47646523277312, 47646523400191, - }; - - unsigned long set5[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140726874062848, 140737488351231, -ERASE, 140726874062848, 140737488351231, -STORE, 140726874062848, 140726874066943, -STORE, 94248892870656, 94248893042687, -ERASE, 94248892870656, 94248893042687, -STORE, 94248892870656, 94248892887039, -STORE, 94248892887040, 94248893042687, -ERASE, 94248892887040, 94248893042687, -STORE, 94248892887040, 94248892989439, -STORE, 94248892989440, 94248893030399, -STORE, 94248893030400, 94248893042687, -STORE, 47884786266112, 47884786438143, -ERASE, 47884786266112, 47884786438143, -STORE, 47884786266112, 47884786270207, -STORE, 47884786270208, 47884786438143, -ERASE, 47884786270208, 47884786438143, -STORE, 47884786270208, 47884786393087, -STORE, 47884786393088, 47884786425855, -STORE, 47884786425856, 47884786434047, -STORE, 47884786434048, 47884786438143, -STORE, 140726874513408, 140726874517503, -STORE, 140726874501120, 140726874513407, -STORE, 47884786438144, 47884786446335, -STORE, 47884786446336, 47884786454527, -STORE, 47884786454528, 47884786618367, -ERASE, 47884786454528, 47884786618367, -STORE, 47884786454528, 47884786466815, -STORE, 47884786466816, 47884786618367, -STORE, 47884786565120, 47884786618367, -STORE, 47884786466816, 47884786565119, -ERASE, 47884786466816, 47884786565119, -STORE, 47884786466816, 47884786565119, -STORE, 47884786610176, 47884786618367, -STORE, 47884786565120, 47884786610175, -ERASE, 47884786565120, 47884786610175, -STORE, 47884786565120, 47884786618367, -ERASE, 47884786565120, 47884786618367, -STORE, 47884786565120, 47884786610175, -STORE, 47884786610176, 47884786618367, -ERASE, 47884786610176, 47884786618367, -STORE, 47884786610176, 47884786618367, -STORE, 47884786618368, 47884789669887, -STORE, 47884787163136, 47884789669887, -STORE, 47884786618368, 47884787163135, -ERASE, 47884787163136, 47884789669887, -STORE, 47884787163136, 47884789448703, -STORE, 47884789448704, 47884789669887, -STORE, 47884788858880, 47884789448703, -STORE, 47884787163136, 47884788858879, -ERASE, 47884787163136, 47884788858879, -STORE, 47884787163136, 47884788858879, -STORE, 47884789444608, 47884789448703, -STORE, 47884788858880, 47884789444607, -ERASE, 47884788858880, 47884789444607, -STORE, 47884788858880, 47884789444607, -STORE, 47884789653504, 47884789669887, -STORE, 47884789448704, 47884789653503, -ERASE, 47884789448704, 47884789653503, -STORE, 47884789448704, 47884789653503, -ERASE, 47884789653504, 47884789669887, -STORE, 47884789653504, 47884789669887, -STORE, 47884789669888, 47884791508991, -STORE, 47884789809152, 47884791508991, -STORE, 47884789669888, 47884789809151, -ERASE, 47884789809152, 47884791508991, -STORE, 47884789809152, 47884791468031, -STORE, 47884791468032, 47884791508991, -STORE, 47884791152640, 47884791468031, -STORE, 47884789809152, 47884791152639, -ERASE, 47884789809152, 47884791152639, -STORE, 47884789809152, 47884791152639, -STORE, 47884791463936, 47884791468031, -STORE, 47884791152640, 47884791463935, -ERASE, 47884791152640, 47884791463935, -STORE, 47884791152640, 47884791463935, -STORE, 47884791492608, 47884791508991, -STORE, 47884791468032, 47884791492607, -ERASE, 47884791468032, 47884791492607, -STORE, 47884791468032, 47884791492607, -ERASE, 47884791492608, 47884791508991, -STORE, 47884791492608, 47884791508991, -STORE, 47884791508992, 47884791644159, -ERASE, 47884791508992, 47884791644159, -STORE, 47884791508992, 47884791533567, -STORE, 47884791533568, 47884791644159, -STORE, 47884791595008, 47884791644159, -STORE, 47884791533568, 47884791595007, -ERASE, 47884791533568, 47884791595007, -STORE, 47884791533568, 47884791595007, -STORE, 47884791619584, 47884791644159, -STORE, 47884791595008, 47884791619583, -ERASE, 47884791595008, 47884791619583, -STORE, 47884791595008, 47884791644159, -ERASE, 47884791595008, 47884791644159, -STORE, 47884791595008, 47884791619583, -STORE, 47884791619584, 47884791644159, -STORE, 47884791627776, 47884791644159, -STORE, 47884791619584, 47884791627775, -ERASE, 47884791619584, 47884791627775, -STORE, 47884791619584, 47884791627775, -ERASE, 47884791627776, 47884791644159, -STORE, 47884791627776, 47884791644159, -STORE, 47884791644160, 47884791664639, -ERASE, 47884791644160, 47884791664639, -STORE, 47884791644160, 47884791648255, -STORE, 47884791648256, 47884791664639, -STORE, 47884791652352, 47884791664639, -STORE, 47884791648256, 47884791652351, -ERASE, 47884791648256, 47884791652351, -STORE, 47884791648256, 47884791652351, -STORE, 47884791656448, 47884791664639, -STORE, 47884791652352, 47884791656447, -ERASE, 47884791652352, 47884791656447, -STORE, 47884791652352, 47884791664639, -ERASE, 47884791652352, 47884791664639, -STORE, 47884791652352, 47884791656447, -STORE, 47884791656448, 47884791664639, -ERASE, 47884791656448, 47884791664639, -STORE, 47884791656448, 47884791664639, -STORE, 47884791664640, 47884791672831, -ERASE, 47884791468032, 47884791492607, -STORE, 47884791468032, 47884791484415, -STORE, 47884791484416, 47884791492607, -ERASE, 47884791656448, 47884791664639, -STORE, 47884791656448, 47884791660543, -STORE, 47884791660544, 47884791664639, -ERASE, 47884791619584, 47884791627775, -STORE, 47884791619584, 47884791623679, -STORE, 47884791623680, 47884791627775, - }; + int i, val, val2; + unsigned long r[] = { + 10, 15, + 20, 25, + 17, 22, /* Overlaps previous range. */ + 9, 1000, /* Huge. */ + 100, 200, + 45, 168, + 118, 128, + }; - unsigned long set6[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140722999021568, 140737488351231, -ERASE, 140722999021568, 140737488351231, -STORE, 140722999021568, 140722999025663, -STORE, 94901500268544, 94901500440575, -ERASE, 94901500268544, 94901500440575, -STORE, 94901500268544, 94901500284927, -STORE, 94901500284928, 94901500440575, -ERASE, 94901500284928, 94901500440575, -STORE, 94901500284928, 94901500387327, -STORE, 94901500387328, 94901500428287, -STORE, 94901500428288, 94901500440575, -STORE, 47430426660864, 47430426832895, -ERASE, 47430426660864, 47430426832895, -STORE, 47430426660864, 47430426664959, -STORE, 47430426664960, 47430426832895, -ERASE, 47430426664960, 47430426832895, -STORE, 47430426664960, 47430426787839, -STORE, 47430426787840, 47430426820607, -STORE, 47430426820608, 47430426828799, -STORE, 47430426828800, 47430426832895, -STORE, 140722999115776, 140722999119871, -STORE, 140722999103488, 140722999115775, -STORE, 47430426832896, 47430426841087, -STORE, 47430426841088, 47430426849279, -STORE, 47430426849280, 47430427013119, -ERASE, 47430426849280, 47430427013119, -STORE, 47430426849280, 47430426861567, -STORE, 47430426861568, 47430427013119, -STORE, 47430426959872, 47430427013119, -STORE, 47430426861568, 47430426959871, -ERASE, 47430426861568, 47430426959871, -STORE, 47430426861568, 47430426959871, -STORE, 47430427004928, 47430427013119, -STORE, 47430426959872, 47430427004927, -ERASE, 47430426959872, 47430427004927, -STORE, 47430426959872, 47430427013119, -ERASE, 47430426959872, 47430427013119, -STORE, 47430426959872, 47430427004927, -STORE, 47430427004928, 47430427013119, -ERASE, 47430427004928, 47430427013119, -STORE, 47430427004928, 47430427013119, -STORE, 47430427013120, 47430430064639, -STORE, 47430427557888, 47430430064639, -STORE, 47430427013120, 47430427557887, -ERASE, 47430427557888, 47430430064639, -STORE, 47430427557888, 47430429843455, -STORE, 47430429843456, 47430430064639, -STORE, 47430429253632, 47430429843455, -STORE, 47430427557888, 47430429253631, -ERASE, 47430427557888, 47430429253631, -STORE, 47430427557888, 47430429253631, -STORE, 47430429839360, 47430429843455, -STORE, 47430429253632, 47430429839359, -ERASE, 47430429253632, 47430429839359, -STORE, 47430429253632, 47430429839359, -STORE, 47430430048256, 47430430064639, -STORE, 47430429843456, 47430430048255, -ERASE, 47430429843456, 47430430048255, -STORE, 47430429843456, 47430430048255, -ERASE, 47430430048256, 47430430064639, -STORE, 47430430048256, 47430430064639, -STORE, 47430430064640, 47430431903743, -STORE, 47430430203904, 47430431903743, -STORE, 47430430064640, 47430430203903, -ERASE, 47430430203904, 47430431903743, -STORE, 47430430203904, 47430431862783, -STORE, 47430431862784, 47430431903743, -STORE, 47430431547392, 47430431862783, -STORE, 47430430203904, 47430431547391, -ERASE, 47430430203904, 47430431547391, -STORE, 47430430203904, 47430431547391, -STORE, 47430431858688, 47430431862783, -STORE, 47430431547392, 47430431858687, -ERASE, 47430431547392, 47430431858687, -STORE, 47430431547392, 47430431858687, -STORE, 47430431887360, 47430431903743, -STORE, 47430431862784, 47430431887359, -ERASE, 47430431862784, 47430431887359, -STORE, 47430431862784, 47430431887359, -ERASE, 47430431887360, 47430431903743, -STORE, 47430431887360, 47430431903743, -STORE, 47430431903744, 47430432038911, -ERASE, 47430431903744, 47430432038911, -STORE, 47430431903744, 47430431928319, -STORE, 47430431928320, 47430432038911, -STORE, 47430431989760, 47430432038911, -STORE, 47430431928320, 47430431989759, -ERASE, 47430431928320, 47430431989759, -STORE, 47430431928320, 47430431989759, -STORE, 47430432014336, 47430432038911, -STORE, 47430431989760, 47430432014335, -ERASE, 47430431989760, 47430432014335, -STORE, 47430431989760, 47430432038911, -ERASE, 47430431989760, 47430432038911, -STORE, 47430431989760, 47430432014335, -STORE, 47430432014336, 47430432038911, -STORE, 47430432022528, 47430432038911, -STORE, 47430432014336, 47430432022527, -ERASE, 47430432014336, 47430432022527, -STORE, 47430432014336, 47430432022527, -ERASE, 47430432022528, 47430432038911, -STORE, 47430432022528, 47430432038911, -STORE, 47430432038912, 47430432059391, -ERASE, 47430432038912, 47430432059391, -STORE, 47430432038912, 47430432043007, -STORE, 47430432043008, 47430432059391, -STORE, 47430432047104, 47430432059391, -STORE, 47430432043008, 47430432047103, -ERASE, 47430432043008, 47430432047103, -STORE, 47430432043008, 47430432047103, -STORE, 47430432051200, 47430432059391, -STORE, 47430432047104, 47430432051199, -ERASE, 47430432047104, 47430432051199, -STORE, 47430432047104, 47430432059391, -ERASE, 47430432047104, 47430432059391, -STORE, 47430432047104, 47430432051199, -STORE, 47430432051200, 47430432059391, -ERASE, 47430432051200, 47430432059391, -STORE, 47430432051200, 47430432059391, -STORE, 47430432059392, 47430432067583, -ERASE, 47430431862784, 47430431887359, -STORE, 47430431862784, 47430431879167, -STORE, 47430431879168, 47430431887359, -ERASE, 47430432051200, 47430432059391, -STORE, 47430432051200, 47430432055295, -STORE, 47430432055296, 47430432059391, -ERASE, 47430432014336, 47430432022527, -STORE, 47430432014336, 47430432018431, -STORE, 47430432018432, 47430432022527, - }; - unsigned long set7[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140729808330752, 140737488351231, -ERASE, 140729808330752, 140737488351231, -STORE, 140729808330752, 140729808334847, -STORE, 94629632020480, 94629632192511, -ERASE, 94629632020480, 94629632192511, -STORE, 94629632020480, 94629632036863, -STORE, 94629632036864, 94629632192511, -ERASE, 94629632036864, 94629632192511, -STORE, 94629632036864, 94629632139263, -STORE, 94629632139264, 94629632180223, -STORE, 94629632180224, 94629632192511, -STORE, 47439981776896, 47439981948927, -ERASE, 47439981776896, 47439981948927, -STORE, 47439981776896, 47439981780991, -STORE, 47439981780992, 47439981948927, -ERASE, 47439981780992, 47439981948927, -STORE, 47439981780992, 47439981903871, -STORE, 47439981903872, 47439981936639, -STORE, 47439981936640, 47439981944831, -STORE, 47439981944832, 47439981948927, -STORE, 140729808474112, 140729808478207, -STORE, 140729808461824, 140729808474111, -STORE, 47439981948928, 47439981957119, -STORE, 47439981957120, 47439981965311, -STORE, 47439981965312, 47439982129151, -ERASE, 47439981965312, 47439982129151, -STORE, 47439981965312, 47439981977599, -STORE, 47439981977600, 47439982129151, -STORE, 47439982075904, 47439982129151, -STORE, 47439981977600, 47439982075903, -ERASE, 47439981977600, 47439982075903, -STORE, 47439981977600, 47439982075903, -STORE, 47439982120960, 47439982129151, -STORE, 47439982075904, 47439982120959, -ERASE, 47439982075904, 47439982120959, -STORE, 47439982075904, 47439982129151, -ERASE, 47439982075904, 47439982129151, -STORE, 47439982075904, 47439982120959, -STORE, 47439982120960, 47439982129151, -ERASE, 47439982120960, 47439982129151, -STORE, 47439982120960, 47439982129151, -STORE, 47439982129152, 47439985180671, -STORE, 47439982673920, 47439985180671, -STORE, 47439982129152, 47439982673919, -ERASE, 47439982673920, 47439985180671, -STORE, 47439982673920, 47439984959487, -STORE, 47439984959488, 47439985180671, -STORE, 47439984369664, 47439984959487, -STORE, 47439982673920, 47439984369663, -ERASE, 47439982673920, 47439984369663, -STORE, 47439982673920, 47439984369663, -STORE, 47439984955392, 47439984959487, -STORE, 47439984369664, 47439984955391, -ERASE, 47439984369664, 47439984955391, -STORE, 47439984369664, 47439984955391, -STORE, 47439985164288, 47439985180671, -STORE, 47439984959488, 47439985164287, -ERASE, 47439984959488, 47439985164287, -STORE, 47439984959488, 47439985164287, -ERASE, 47439985164288, 47439985180671, -STORE, 47439985164288, 47439985180671, -STORE, 47439985180672, 47439987019775, -STORE, 47439985319936, 47439987019775, -STORE, 47439985180672, 47439985319935, -ERASE, 47439985319936, 47439987019775, -STORE, 47439985319936, 47439986978815, -STORE, 47439986978816, 47439987019775, -STORE, 47439986663424, 47439986978815, -STORE, 47439985319936, 47439986663423, -ERASE, 47439985319936, 47439986663423, -STORE, 47439985319936, 47439986663423, -STORE, 47439986974720, 47439986978815, -STORE, 47439986663424, 47439986974719, -ERASE, 47439986663424, 47439986974719, -STORE, 47439986663424, 47439986974719, -STORE, 47439987003392, 47439987019775, -STORE, 47439986978816, 47439987003391, -ERASE, 47439986978816, 47439987003391, -STORE, 47439986978816, 47439987003391, -ERASE, 47439987003392, 47439987019775, -STORE, 47439987003392, 47439987019775, -STORE, 47439987019776, 47439987154943, -ERASE, 47439987019776, 47439987154943, -STORE, 47439987019776, 47439987044351, -STORE, 47439987044352, 47439987154943, -STORE, 47439987105792, 47439987154943, -STORE, 47439987044352, 47439987105791, -ERASE, 47439987044352, 47439987105791, -STORE, 47439987044352, 47439987105791, -STORE, 47439987130368, 47439987154943, -STORE, 47439987105792, 47439987130367, -ERASE, 47439987105792, 47439987130367, -STORE, 47439987105792, 47439987154943, -ERASE, 47439987105792, 47439987154943, -STORE, 47439987105792, 47439987130367, -STORE, 47439987130368, 47439987154943, -STORE, 47439987138560, 47439987154943, -STORE, 47439987130368, 47439987138559, -ERASE, 47439987130368, 47439987138559, -STORE, 47439987130368, 47439987138559, -ERASE, 47439987138560, 47439987154943, -STORE, 47439987138560, 47439987154943, -STORE, 47439987154944, 47439987175423, -ERASE, 47439987154944, 47439987175423, -STORE, 47439987154944, 47439987159039, -STORE, 47439987159040, 47439987175423, -STORE, 47439987163136, 47439987175423, -STORE, 47439987159040, 47439987163135, -ERASE, 47439987159040, 47439987163135, -STORE, 47439987159040, 47439987163135, -STORE, 47439987167232, 47439987175423, -STORE, 47439987163136, 47439987167231, -ERASE, 47439987163136, 47439987167231, -STORE, 47439987163136, 47439987175423, -ERASE, 47439987163136, 47439987175423, -STORE, 47439987163136, 47439987167231, -STORE, 47439987167232, 47439987175423, -ERASE, 47439987167232, 47439987175423, -STORE, 47439987167232, 47439987175423, -STORE, 47439987175424, 47439987183615, -ERASE, 47439986978816, 47439987003391, -STORE, 47439986978816, 47439986995199, -STORE, 47439986995200, 47439987003391, -ERASE, 47439987167232, 47439987175423, -STORE, 47439987167232, 47439987171327, -STORE, 47439987171328, 47439987175423, -ERASE, 47439987130368, 47439987138559, -STORE, 47439987130368, 47439987134463, -STORE, 47439987134464, 47439987138559, - }; - unsigned long set8[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140722482974720, 140737488351231, -ERASE, 140722482974720, 140737488351231, -STORE, 140722482974720, 140722482978815, -STORE, 94121505034240, 94121505206271, -ERASE, 94121505034240, 94121505206271, -STORE, 94121505034240, 94121505050623, -STORE, 94121505050624, 94121505206271, -ERASE, 94121505050624, 94121505206271, -STORE, 94121505050624, 94121505153023, -STORE, 94121505153024, 94121505193983, -STORE, 94121505193984, 94121505206271, -STORE, 47708483284992, 47708483457023, -ERASE, 47708483284992, 47708483457023, -STORE, 47708483284992, 47708483289087, -STORE, 47708483289088, 47708483457023, -ERASE, 47708483289088, 47708483457023, -STORE, 47708483289088, 47708483411967, -STORE, 47708483411968, 47708483444735, -STORE, 47708483444736, 47708483452927, -STORE, 47708483452928, 47708483457023, -STORE, 140722483142656, 140722483146751, -STORE, 140722483130368, 140722483142655, -STORE, 47708483457024, 47708483465215, -STORE, 47708483465216, 47708483473407, -STORE, 47708483473408, 47708483637247, -ERASE, 47708483473408, 47708483637247, -STORE, 47708483473408, 47708483485695, -STORE, 47708483485696, 47708483637247, -STORE, 47708483584000, 47708483637247, -STORE, 47708483485696, 47708483583999, -ERASE, 47708483485696, 47708483583999, -STORE, 47708483485696, 47708483583999, -STORE, 47708483629056, 47708483637247, -STORE, 47708483584000, 47708483629055, -ERASE, 47708483584000, 47708483629055, -STORE, 47708483584000, 47708483637247, -ERASE, 47708483584000, 47708483637247, -STORE, 47708483584000, 47708483629055, -STORE, 47708483629056, 47708483637247, -ERASE, 47708483629056, 47708483637247, -STORE, 47708483629056, 47708483637247, -STORE, 47708483637248, 47708486688767, -STORE, 47708484182016, 47708486688767, -STORE, 47708483637248, 47708484182015, -ERASE, 47708484182016, 47708486688767, -STORE, 47708484182016, 47708486467583, -STORE, 47708486467584, 47708486688767, -STORE, 47708485877760, 47708486467583, -STORE, 47708484182016, 47708485877759, -ERASE, 47708484182016, 47708485877759, -STORE, 47708484182016, 47708485877759, -STORE, 47708486463488, 47708486467583, -STORE, 47708485877760, 47708486463487, -ERASE, 47708485877760, 47708486463487, -STORE, 47708485877760, 47708486463487, -STORE, 47708486672384, 47708486688767, -STORE, 47708486467584, 47708486672383, -ERASE, 47708486467584, 47708486672383, -STORE, 47708486467584, 47708486672383, -ERASE, 47708486672384, 47708486688767, -STORE, 47708486672384, 47708486688767, -STORE, 47708486688768, 47708488527871, -STORE, 47708486828032, 47708488527871, -STORE, 47708486688768, 47708486828031, -ERASE, 47708486828032, 47708488527871, -STORE, 47708486828032, 47708488486911, -STORE, 47708488486912, 47708488527871, -STORE, 47708488171520, 47708488486911, -STORE, 47708486828032, 47708488171519, -ERASE, 47708486828032, 47708488171519, -STORE, 47708486828032, 47708488171519, -STORE, 47708488482816, 47708488486911, -STORE, 47708488171520, 47708488482815, -ERASE, 47708488171520, 47708488482815, -STORE, 47708488171520, 47708488482815, -STORE, 47708488511488, 47708488527871, -STORE, 47708488486912, 47708488511487, -ERASE, 47708488486912, 47708488511487, -STORE, 47708488486912, 47708488511487, -ERASE, 47708488511488, 47708488527871, -STORE, 47708488511488, 47708488527871, -STORE, 47708488527872, 47708488663039, -ERASE, 47708488527872, 47708488663039, -STORE, 47708488527872, 47708488552447, -STORE, 47708488552448, 47708488663039, -STORE, 47708488613888, 47708488663039, -STORE, 47708488552448, 47708488613887, -ERASE, 47708488552448, 47708488613887, -STORE, 47708488552448, 47708488613887, -STORE, 47708488638464, 47708488663039, -STORE, 47708488613888, 47708488638463, -ERASE, 47708488613888, 47708488638463, -STORE, 47708488613888, 47708488663039, -ERASE, 47708488613888, 47708488663039, -STORE, 47708488613888, 47708488638463, -STORE, 47708488638464, 47708488663039, -STORE, 47708488646656, 47708488663039, -STORE, 47708488638464, 47708488646655, -ERASE, 47708488638464, 47708488646655, -STORE, 47708488638464, 47708488646655, -ERASE, 47708488646656, 47708488663039, -STORE, 47708488646656, 47708488663039, -STORE, 47708488663040, 47708488683519, -ERASE, 47708488663040, 47708488683519, -STORE, 47708488663040, 47708488667135, -STORE, 47708488667136, 47708488683519, -STORE, 47708488671232, 47708488683519, -STORE, 47708488667136, 47708488671231, -ERASE, 47708488667136, 47708488671231, -STORE, 47708488667136, 47708488671231, -STORE, 47708488675328, 47708488683519, -STORE, 47708488671232, 47708488675327, -ERASE, 47708488671232, 47708488675327, -STORE, 47708488671232, 47708488683519, -ERASE, 47708488671232, 47708488683519, -STORE, 47708488671232, 47708488675327, -STORE, 47708488675328, 47708488683519, -ERASE, 47708488675328, 47708488683519, -STORE, 47708488675328, 47708488683519, -STORE, 47708488683520, 47708488691711, -ERASE, 47708488486912, 47708488511487, -STORE, 47708488486912, 47708488503295, -STORE, 47708488503296, 47708488511487, -ERASE, 47708488675328, 47708488683519, -STORE, 47708488675328, 47708488679423, -STORE, 47708488679424, 47708488683519, -ERASE, 47708488638464, 47708488646655, -STORE, 47708488638464, 47708488642559, -STORE, 47708488642560, 47708488646655, - }; + MT_BUG_ON(mt, !mtree_empty(mt)); + check_insert_range(mt, r[0], r[1], xa_mk_value(r[0]), 0); + check_insert_range(mt, r[2], r[3], xa_mk_value(r[2]), 0); + check_insert_range(mt, r[4], r[5], xa_mk_value(r[4]), -EEXIST); + MT_BUG_ON(mt, !mt_height(mt)); + /* Store */ + check_store_range(mt, r[4], r[5], xa_mk_value(r[4]), 0); + check_store_range(mt, r[6], r[7], xa_mk_value(r[6]), 0); + check_store_range(mt, r[8], r[9], xa_mk_value(r[8]), 0); + MT_BUG_ON(mt, !mt_height(mt)); + mtree_destroy(mt); + MT_BUG_ON(mt, mt_height(mt)); - unsigned long set9[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140736427839488, 140737488351231, -ERASE, 140736427839488, 140736427839488, -STORE, 140736427839488, 140736427843583, -STORE, 94071213395968, 94071213567999, -ERASE, 94071213395968, 94071213395968, -STORE, 94071213395968, 94071213412351, -STORE, 94071213412352, 94071213567999, -ERASE, 94071213412352, 94071213412352, -STORE, 94071213412352, 94071213514751, -STORE, 94071213514752, 94071213555711, -STORE, 94071213555712, 94071213567999, -STORE, 139968410644480, 139968410816511, -ERASE, 139968410644480, 139968410644480, -STORE, 139968410644480, 139968410648575, -STORE, 139968410648576, 139968410816511, -ERASE, 139968410648576, 139968410648576, -STORE, 139968410648576, 139968410771455, -STORE, 139968410771456, 139968410804223, -STORE, 139968410804224, 139968410812415, -STORE, 139968410812416, 139968410816511, -STORE, 140736429277184, 140736429281279, -STORE, 140736429264896, 140736429277183, -STORE, 47664384352256, 47664384360447, -STORE, 47664384360448, 47664384368639, -STORE, 47664384368640, 47664384532479, -ERASE, 47664384368640, 47664384368640, -STORE, 47664384368640, 47664384380927, -STORE, 47664384380928, 47664384532479, -STORE, 47664384479232, 47664384532479, -STORE, 47664384380928, 47664384479231, -ERASE, 47664384380928, 47664384380928, -STORE, 47664384380928, 47664384479231, -STORE, 47664384524288, 47664384532479, -STORE, 47664384479232, 47664384524287, -ERASE, 47664384479232, 47664384479232, -STORE, 47664384479232, 47664384532479, -ERASE, 47664384479232, 47664384479232, -STORE, 47664384479232, 47664384524287, -STORE, 47664384524288, 47664384532479, -ERASE, 47664384524288, 47664384524288, -STORE, 47664384524288, 47664384532479, -STORE, 47664384532480, 47664387583999, -STORE, 47664385077248, 47664387583999, -STORE, 47664384532480, 47664385077247, -ERASE, 47664385077248, 47664385077248, -STORE, 47664385077248, 47664387362815, -STORE, 47664387362816, 47664387583999, -STORE, 47664386772992, 47664387362815, -STORE, 47664385077248, 47664386772991, -ERASE, 47664385077248, 47664385077248, -STORE, 47664385077248, 47664386772991, -STORE, 47664387358720, 47664387362815, -STORE, 47664386772992, 47664387358719, -ERASE, 47664386772992, 47664386772992, -STORE, 47664386772992, 47664387358719, -STORE, 47664387567616, 47664387583999, -STORE, 47664387362816, 47664387567615, -ERASE, 47664387362816, 47664387362816, -STORE, 47664387362816, 47664387567615, -ERASE, 47664387567616, 47664387567616, -STORE, 47664387567616, 47664387583999, -STORE, 47664387584000, 47664389423103, -STORE, 47664387723264, 47664389423103, -STORE, 47664387584000, 47664387723263, -ERASE, 47664387723264, 47664387723264, -STORE, 47664387723264, 47664389382143, -STORE, 47664389382144, 47664389423103, -STORE, 47664389066752, 47664389382143, -STORE, 47664387723264, 47664389066751, -ERASE, 47664387723264, 47664387723264, -STORE, 47664387723264, 47664389066751, -STORE, 47664389378048, 47664389382143, -STORE, 47664389066752, 47664389378047, -ERASE, 47664389066752, 47664389066752, -STORE, 47664389066752, 47664389378047, -STORE, 47664389406720, 47664389423103, -STORE, 47664389382144, 47664389406719, -ERASE, 47664389382144, 47664389382144, -STORE, 47664389382144, 47664389406719, -ERASE, 47664389406720, 47664389406720, -STORE, 47664389406720, 47664389423103, -STORE, 47664389423104, 47664389558271, -ERASE, 47664389423104, 47664389423104, -STORE, 47664389423104, 47664389447679, -STORE, 47664389447680, 47664389558271, -STORE, 47664389509120, 47664389558271, -STORE, 47664389447680, 47664389509119, -ERASE, 47664389447680, 47664389447680, -STORE, 47664389447680, 47664389509119, -STORE, 47664389533696, 47664389558271, -STORE, 47664389509120, 47664389533695, -ERASE, 47664389509120, 47664389509120, -STORE, 47664389509120, 47664389558271, -ERASE, 47664389509120, 47664389509120, -STORE, 47664389509120, 47664389533695, -STORE, 47664389533696, 47664389558271, -STORE, 47664389541888, 47664389558271, -STORE, 47664389533696, 47664389541887, -ERASE, 47664389533696, 47664389533696, -STORE, 47664389533696, 47664389541887, -ERASE, 47664389541888, 47664389541888, -STORE, 47664389541888, 47664389558271, -STORE, 47664389558272, 47664389578751, -ERASE, 47664389558272, 47664389558272, -STORE, 47664389558272, 47664389562367, -STORE, 47664389562368, 47664389578751, -STORE, 47664389566464, 47664389578751, -STORE, 47664389562368, 47664389566463, -ERASE, 47664389562368, 47664389562368, -STORE, 47664389562368, 47664389566463, -STORE, 47664389570560, 47664389578751, -STORE, 47664389566464, 47664389570559, -ERASE, 47664389566464, 47664389566464, -STORE, 47664389566464, 47664389578751, -ERASE, 47664389566464, 47664389566464, -STORE, 47664389566464, 47664389570559, -STORE, 47664389570560, 47664389578751, -ERASE, 47664389570560, 47664389570560, -STORE, 47664389570560, 47664389578751, -STORE, 47664389578752, 47664389586943, -ERASE, 47664389382144, 47664389382144, -STORE, 47664389382144, 47664389398527, -STORE, 47664389398528, 47664389406719, -ERASE, 47664389570560, 47664389570560, -STORE, 47664389570560, 47664389574655, -STORE, 47664389574656, 47664389578751, -ERASE, 47664389533696, 47664389533696, -STORE, 47664389533696, 47664389537791, -STORE, 47664389537792, 47664389541887, -ERASE, 47664387362816, 47664387362816, -STORE, 47664387362816, 47664387559423, -STORE, 47664387559424, 47664387567615, -ERASE, 47664384524288, 47664384524288, -STORE, 47664384524288, 47664384528383, -STORE, 47664384528384, 47664384532479, -ERASE, 94071213555712, 94071213555712, -STORE, 94071213555712, 94071213563903, -STORE, 94071213563904, 94071213567999, -ERASE, 139968410804224, 139968410804224, -STORE, 139968410804224, 139968410808319, -STORE, 139968410808320, 139968410812415, -ERASE, 47664384352256, 47664384352256, -STORE, 94071244402688, 94071244537855, -STORE, 140737488347136, 140737488351231, -STORE, 140728271503360, 140737488351231, -ERASE, 140728271503360, 140728271503360, -STORE, 140728271503360, 140728271507455, -STORE, 94410361982976, 94410362155007, -ERASE, 94410361982976, 94410361982976, -STORE, 94410361982976, 94410361999359, -STORE, 94410361999360, 94410362155007, -ERASE, 94410361999360, 94410361999360, -STORE, 94410361999360, 94410362101759, -STORE, 94410362101760, 94410362142719, -STORE, 94410362142720, 94410362155007, -STORE, 140351953997824, 140351954169855, -ERASE, 140351953997824, 140351953997824, -STORE, 140351953997824, 140351954001919, -STORE, 140351954001920, 140351954169855, -ERASE, 140351954001920, 140351954001920, -STORE, 140351954001920, 140351954124799, -STORE, 140351954124800, 140351954157567, -STORE, 140351954157568, 140351954165759, -STORE, 140351954165760, 140351954169855, -STORE, 140728272429056, 140728272433151, -STORE, 140728272416768, 140728272429055, -STORE, 47280840998912, 47280841007103, -STORE, 47280841007104, 47280841015295, -STORE, 47280841015296, 47280841179135, -ERASE, 47280841015296, 47280841015296, -STORE, 47280841015296, 47280841027583, -STORE, 47280841027584, 47280841179135, -STORE, 47280841125888, 47280841179135, -STORE, 47280841027584, 47280841125887, -ERASE, 47280841027584, 47280841027584, -STORE, 47280841027584, 47280841125887, -STORE, 47280841170944, 47280841179135, -STORE, 47280841125888, 47280841170943, -ERASE, 47280841125888, 47280841125888, -STORE, 47280841125888, 47280841179135, -ERASE, 47280841125888, 47280841125888, -STORE, 47280841125888, 47280841170943, -STORE, 47280841170944, 47280841179135, -ERASE, 47280841170944, 47280841170944, -STORE, 47280841170944, 47280841179135, -STORE, 47280841179136, 47280844230655, -STORE, 47280841723904, 47280844230655, -STORE, 47280841179136, 47280841723903, -ERASE, 47280841723904, 47280841723904, -STORE, 47280841723904, 47280844009471, -STORE, 47280844009472, 47280844230655, -STORE, 47280843419648, 47280844009471, -STORE, 47280841723904, 47280843419647, -ERASE, 47280841723904, 47280841723904, -STORE, 47280841723904, 47280843419647, -STORE, 47280844005376, 47280844009471, -STORE, 47280843419648, 47280844005375, -ERASE, 47280843419648, 47280843419648, -STORE, 47280843419648, 47280844005375, -STORE, 47280844214272, 47280844230655, -STORE, 47280844009472, 47280844214271, -ERASE, 47280844009472, 47280844009472, -STORE, 47280844009472, 47280844214271, -ERASE, 47280844214272, 47280844214272, -STORE, 47280844214272, 47280844230655, -STORE, 47280844230656, 47280846069759, -STORE, 47280844369920, 47280846069759, -STORE, 47280844230656, 47280844369919, -ERASE, 47280844369920, 47280844369920, -STORE, 47280844369920, 47280846028799, -STORE, 47280846028800, 47280846069759, -STORE, 47280845713408, 47280846028799, -STORE, 47280844369920, 47280845713407, -ERASE, 47280844369920, 47280844369920, -STORE, 47280844369920, 47280845713407, -STORE, 47280846024704, 47280846028799, -STORE, 47280845713408, 47280846024703, -ERASE, 47280845713408, 47280845713408, -STORE, 47280845713408, 47280846024703, -STORE, 47280846053376, 47280846069759, -STORE, 47280846028800, 47280846053375, -ERASE, 47280846028800, 47280846028800, -STORE, 47280846028800, 47280846053375, -ERASE, 47280846053376, 47280846053376, -STORE, 47280846053376, 47280846069759, -STORE, 47280846069760, 47280846204927, -ERASE, 47280846069760, 47280846069760, -STORE, 47280846069760, 47280846094335, -STORE, 47280846094336, 47280846204927, -STORE, 47280846155776, 47280846204927, -STORE, 47280846094336, 47280846155775, -ERASE, 47280846094336, 47280846094336, -STORE, 47280846094336, 47280846155775, -STORE, 47280846180352, 47280846204927, -STORE, 47280846155776, 47280846180351, -ERASE, 47280846155776, 47280846155776, -STORE, 47280846155776, 47280846204927, -ERASE, 47280846155776, 47280846155776, -STORE, 47280846155776, 47280846180351, -STORE, 47280846180352, 47280846204927, -STORE, 47280846188544, 47280846204927, -STORE, 47280846180352, 47280846188543, -ERASE, 47280846180352, 47280846180352, -STORE, 47280846180352, 47280846188543, -ERASE, 47280846188544, 47280846188544, -STORE, 47280846188544, 47280846204927, -STORE, 47280846204928, 47280846225407, -ERASE, 47280846204928, 47280846204928, -STORE, 47280846204928, 47280846209023, -STORE, 47280846209024, 47280846225407, -STORE, 47280846213120, 47280846225407, -STORE, 47280846209024, 47280846213119, -ERASE, 47280846209024, 47280846209024, -STORE, 47280846209024, 47280846213119, -STORE, 47280846217216, 47280846225407, -STORE, 47280846213120, 47280846217215, -ERASE, 47280846213120, 47280846213120, -STORE, 47280846213120, 47280846225407, -ERASE, 47280846213120, 47280846213120, -STORE, 47280846213120, 47280846217215, -STORE, 47280846217216, 47280846225407, -ERASE, 47280846217216, 47280846217216, -STORE, 47280846217216, 47280846225407, -STORE, 47280846225408, 47280846233599, -ERASE, 47280846028800, 47280846028800, -STORE, 47280846028800, 47280846045183, -STORE, 47280846045184, 47280846053375, -ERASE, 47280846217216, 47280846217216, -STORE, 47280846217216, 47280846221311, -STORE, 47280846221312, 47280846225407, -ERASE, 47280846180352, 47280846180352, -STORE, 47280846180352, 47280846184447, -STORE, 47280846184448, 47280846188543, -ERASE, 47280844009472, 47280844009472, -STORE, 47280844009472, 47280844206079, -STORE, 47280844206080, 47280844214271, -ERASE, 47280841170944, 47280841170944, -STORE, 47280841170944, 47280841175039, -STORE, 47280841175040, 47280841179135, -ERASE, 94410362142720, 94410362142720, -STORE, 94410362142720, 94410362150911, -STORE, 94410362150912, 94410362155007, -ERASE, 140351954157568, 140351954157568, -STORE, 140351954157568, 140351954161663, -STORE, 140351954161664, 140351954165759, -ERASE, 47280840998912, 47280840998912, -STORE, 94410379456512, 94410379591679, -STORE, 140737488347136, 140737488351231, -STORE, 140732946362368, 140737488351231, -ERASE, 140732946362368, 140732946362368, -STORE, 140732946362368, 140732946366463, -STORE, 94352937934848, 94352938106879, -ERASE, 94352937934848, 94352937934848, -STORE, 94352937934848, 94352937951231, -STORE, 94352937951232, 94352938106879, -ERASE, 94352937951232, 94352937951232, -STORE, 94352937951232, 94352938053631, -STORE, 94352938053632, 94352938094591, -STORE, 94352938094592, 94352938106879, -STORE, 140595518742528, 140595518914559, -ERASE, 140595518742528, 140595518742528, -STORE, 140595518742528, 140595518746623, -STORE, 140595518746624, 140595518914559, -ERASE, 140595518746624, 140595518746624, -STORE, 140595518746624, 140595518869503, -STORE, 140595518869504, 140595518902271, -STORE, 140595518902272, 140595518910463, -STORE, 140595518910464, 140595518914559, -STORE, 140732947468288, 140732947472383, -STORE, 140732947456000, 140732947468287, -STORE, 47037276254208, 47037276262399, -STORE, 47037276262400, 47037276270591, -STORE, 47037276270592, 47037276434431, -ERASE, 47037276270592, 47037276270592, -STORE, 47037276270592, 47037276282879, -STORE, 47037276282880, 47037276434431, -STORE, 47037276381184, 47037276434431, -STORE, 47037276282880, 47037276381183, -ERASE, 47037276282880, 47037276282880, -STORE, 47037276282880, 47037276381183, -STORE, 47037276426240, 47037276434431, -STORE, 47037276381184, 47037276426239, -ERASE, 47037276381184, 47037276381184, -STORE, 47037276381184, 47037276434431, -ERASE, 47037276381184, 47037276381184, -STORE, 47037276381184, 47037276426239, -STORE, 47037276426240, 47037276434431, -ERASE, 47037276426240, 47037276426240, -STORE, 47037276426240, 47037276434431, -STORE, 47037276434432, 47037279485951, -STORE, 47037276979200, 47037279485951, -STORE, 47037276434432, 47037276979199, -ERASE, 47037276979200, 47037276979200, -STORE, 47037276979200, 47037279264767, -STORE, 47037279264768, 47037279485951, -STORE, 47037278674944, 47037279264767, -STORE, 47037276979200, 47037278674943, -ERASE, 47037276979200, 47037276979200, -STORE, 47037276979200, 47037278674943, -STORE, 47037279260672, 47037279264767, -STORE, 47037278674944, 47037279260671, -ERASE, 47037278674944, 47037278674944, -STORE, 47037278674944, 47037279260671, -STORE, 47037279469568, 47037279485951, -STORE, 47037279264768, 47037279469567, -ERASE, 47037279264768, 47037279264768, -STORE, 47037279264768, 47037279469567, -ERASE, 47037279469568, 47037279469568, -STORE, 47037279469568, 47037279485951, -STORE, 47037279485952, 47037281325055, -STORE, 47037279625216, 47037281325055, -STORE, 47037279485952, 47037279625215, -ERASE, 47037279625216, 47037279625216, -STORE, 47037279625216, 47037281284095, -STORE, 47037281284096, 47037281325055, -STORE, 47037280968704, 47037281284095, -STORE, 47037279625216, 47037280968703, -ERASE, 47037279625216, 47037279625216, -STORE, 47037279625216, 47037280968703, -STORE, 47037281280000, 47037281284095, -STORE, 47037280968704, 47037281279999, -ERASE, 47037280968704, 47037280968704, -STORE, 47037280968704, 47037281279999, -STORE, 47037281308672, 47037281325055, -STORE, 47037281284096, 47037281308671, -ERASE, 47037281284096, 47037281284096, -STORE, 47037281284096, 47037281308671, -ERASE, 47037281308672, 47037281308672, -STORE, 47037281308672, 47037281325055, -STORE, 47037281325056, 47037281460223, -ERASE, 47037281325056, 47037281325056, -STORE, 47037281325056, 47037281349631, -STORE, 47037281349632, 47037281460223, -STORE, 47037281411072, 47037281460223, -STORE, 47037281349632, 47037281411071, -ERASE, 47037281349632, 47037281349632, -STORE, 47037281349632, 47037281411071, -STORE, 47037281435648, 47037281460223, -STORE, 47037281411072, 47037281435647, -ERASE, 47037281411072, 47037281411072, -STORE, 47037281411072, 47037281460223, -ERASE, 47037281411072, 47037281411072, -STORE, 47037281411072, 47037281435647, -STORE, 47037281435648, 47037281460223, -STORE, 47037281443840, 47037281460223, -STORE, 47037281435648, 47037281443839, -ERASE, 47037281435648, 47037281435648, -STORE, 47037281435648, 47037281443839, -ERASE, 47037281443840, 47037281443840, -STORE, 47037281443840, 47037281460223, -STORE, 47037281460224, 47037281480703, -ERASE, 47037281460224, 47037281460224, -STORE, 47037281460224, 47037281464319, -STORE, 47037281464320, 47037281480703, -STORE, 47037281468416, 47037281480703, -STORE, 47037281464320, 47037281468415, -ERASE, 47037281464320, 47037281464320, -STORE, 47037281464320, 47037281468415, -STORE, 47037281472512, 47037281480703, -STORE, 47037281468416, 47037281472511, -ERASE, 47037281468416, 47037281468416, -STORE, 47037281468416, 47037281480703, -ERASE, 47037281468416, 47037281468416, -STORE, 47037281468416, 47037281472511, -STORE, 47037281472512, 47037281480703, -ERASE, 47037281472512, 47037281472512, -STORE, 47037281472512, 47037281480703, -STORE, 47037281480704, 47037281488895, -ERASE, 47037281284096, 47037281284096, -STORE, 47037281284096, 47037281300479, -STORE, 47037281300480, 47037281308671, -ERASE, 47037281472512, 47037281472512, -STORE, 47037281472512, 47037281476607, -STORE, 47037281476608, 47037281480703, -ERASE, 47037281435648, 47037281435648, -STORE, 47037281435648, 47037281439743, -STORE, 47037281439744, 47037281443839, -ERASE, 47037279264768, 47037279264768, -STORE, 47037279264768, 47037279461375, -STORE, 47037279461376, 47037279469567, -ERASE, 47037276426240, 47037276426240, -STORE, 47037276426240, 47037276430335, -STORE, 47037276430336, 47037276434431, -ERASE, 94352938094592, 94352938094592, -STORE, 94352938094592, 94352938102783, -STORE, 94352938102784, 94352938106879, -ERASE, 140595518902272, 140595518902272, -STORE, 140595518902272, 140595518906367, -STORE, 140595518906368, 140595518910463, -ERASE, 47037276254208, 47037276254208, -STORE, 94352938438656, 94352938573823, -STORE, 140737488347136, 140737488351231, -STORE, 140733506027520, 140737488351231, -ERASE, 140733506027520, 140733506027520, -STORE, 140733506027520, 140733506031615, -STORE, 94150123073536, 94150123245567, -ERASE, 94150123073536, 94150123073536, -STORE, 94150123073536, 94150123089919, -STORE, 94150123089920, 94150123245567, -ERASE, 94150123089920, 94150123089920, -STORE, 94150123089920, 94150123192319, -STORE, 94150123192320, 94150123233279, -STORE, 94150123233280, 94150123245567, -STORE, 140081290375168, 140081290547199, -ERASE, 140081290375168, 140081290375168, -STORE, 140081290375168, 140081290379263, -STORE, 140081290379264, 140081290547199, -ERASE, 140081290379264, 140081290379264, -STORE, 140081290379264, 140081290502143, -STORE, 140081290502144, 140081290534911, -STORE, 140081290534912, 140081290543103, -STORE, 140081290543104, 140081290547199, -STORE, 140733506707456, 140733506711551, -STORE, 140733506695168, 140733506707455, -STORE, 47551504621568, 47551504629759, -STORE, 47551504629760, 47551504637951, -STORE, 47551504637952, 47551504801791, -ERASE, 47551504637952, 47551504637952, -STORE, 47551504637952, 47551504650239, -STORE, 47551504650240, 47551504801791, -STORE, 47551504748544, 47551504801791, -STORE, 47551504650240, 47551504748543, -ERASE, 47551504650240, 47551504650240, -STORE, 47551504650240, 47551504748543, -STORE, 47551504793600, 47551504801791, -STORE, 47551504748544, 47551504793599, -ERASE, 47551504748544, 47551504748544, -STORE, 47551504748544, 47551504801791, -ERASE, 47551504748544, 47551504748544, -STORE, 47551504748544, 47551504793599, -STORE, 47551504793600, 47551504801791, -ERASE, 47551504793600, 47551504793600, -STORE, 47551504793600, 47551504801791, -STORE, 47551504801792, 47551507853311, -STORE, 47551505346560, 47551507853311, -STORE, 47551504801792, 47551505346559, -ERASE, 47551505346560, 47551505346560, -STORE, 47551505346560, 47551507632127, -STORE, 47551507632128, 47551507853311, -STORE, 47551507042304, 47551507632127, -STORE, 47551505346560, 47551507042303, -ERASE, 47551505346560, 47551505346560, -STORE, 47551505346560, 47551507042303, -STORE, 47551507628032, 47551507632127, -STORE, 47551507042304, 47551507628031, -ERASE, 47551507042304, 47551507042304, -STORE, 47551507042304, 47551507628031, -STORE, 47551507836928, 47551507853311, -STORE, 47551507632128, 47551507836927, -ERASE, 47551507632128, 47551507632128, -STORE, 47551507632128, 47551507836927, -ERASE, 47551507836928, 47551507836928, -STORE, 47551507836928, 47551507853311, -STORE, 47551507853312, 47551509692415, -STORE, 47551507992576, 47551509692415, -STORE, 47551507853312, 47551507992575, -ERASE, 47551507992576, 47551507992576, -STORE, 47551507992576, 47551509651455, -STORE, 47551509651456, 47551509692415, -STORE, 47551509336064, 47551509651455, -STORE, 47551507992576, 47551509336063, -ERASE, 47551507992576, 47551507992576, -STORE, 47551507992576, 47551509336063, -STORE, 47551509647360, 47551509651455, -STORE, 47551509336064, 47551509647359, -ERASE, 47551509336064, 47551509336064, -STORE, 47551509336064, 47551509647359, -STORE, 47551509676032, 47551509692415, -STORE, 47551509651456, 47551509676031, -ERASE, 47551509651456, 47551509651456, -STORE, 47551509651456, 47551509676031, -ERASE, 47551509676032, 47551509676032, -STORE, 47551509676032, 47551509692415, -STORE, 47551509692416, 47551509827583, -ERASE, 47551509692416, 47551509692416, -STORE, 47551509692416, 47551509716991, -STORE, 47551509716992, 47551509827583, -STORE, 47551509778432, 47551509827583, -STORE, 47551509716992, 47551509778431, -ERASE, 47551509716992, 47551509716992, -STORE, 47551509716992, 47551509778431, -STORE, 47551509803008, 47551509827583, -STORE, 47551509778432, 47551509803007, -ERASE, 47551509778432, 47551509778432, -STORE, 47551509778432, 47551509827583, -ERASE, 47551509778432, 47551509778432, -STORE, 47551509778432, 47551509803007, -STORE, 47551509803008, 47551509827583, -STORE, 47551509811200, 47551509827583, -STORE, 47551509803008, 47551509811199, -ERASE, 47551509803008, 47551509803008, -STORE, 47551509803008, 47551509811199, -ERASE, 47551509811200, 47551509811200, -STORE, 47551509811200, 47551509827583, -STORE, 47551509827584, 47551509848063, -ERASE, 47551509827584, 47551509827584, -STORE, 47551509827584, 47551509831679, -STORE, 47551509831680, 47551509848063, -STORE, 47551509835776, 47551509848063, -STORE, 47551509831680, 47551509835775, -ERASE, 47551509831680, 47551509831680, -STORE, 47551509831680, 47551509835775, -STORE, 47551509839872, 47551509848063, -STORE, 47551509835776, 47551509839871, -ERASE, 47551509835776, 47551509835776, -STORE, 47551509835776, 47551509848063, -ERASE, 47551509835776, 47551509835776, -STORE, 47551509835776, 47551509839871, -STORE, 47551509839872, 47551509848063, -ERASE, 47551509839872, 47551509839872, -STORE, 47551509839872, 47551509848063, -STORE, 47551509848064, 47551509856255, -ERASE, 47551509651456, 47551509651456, -STORE, 47551509651456, 47551509667839, -STORE, 47551509667840, 47551509676031, -ERASE, 47551509839872, 47551509839872, -STORE, 47551509839872, 47551509843967, -STORE, 47551509843968, 47551509848063, -ERASE, 47551509803008, 47551509803008, -STORE, 47551509803008, 47551509807103, -STORE, 47551509807104, 47551509811199, -ERASE, 47551507632128, 47551507632128, -STORE, 47551507632128, 47551507828735, -STORE, 47551507828736, 47551507836927, -ERASE, 47551504793600, 47551504793600, -STORE, 47551504793600, 47551504797695, -STORE, 47551504797696, 47551504801791, -ERASE, 94150123233280, 94150123233280, -STORE, 94150123233280, 94150123241471, -STORE, 94150123241472, 94150123245567, -ERASE, 140081290534912, 140081290534912, -STORE, 140081290534912, 140081290539007, -STORE, 140081290539008, 140081290543103, -ERASE, 47551504621568, 47551504621568, -STORE, 94150148112384, 94150148247551, -STORE, 140737488347136, 140737488351231, -STORE, 140734389334016, 140737488351231, -ERASE, 140734389334016, 140734389334016, -STORE, 140734389334016, 140734389338111, -STORE, 94844636606464, 94844636778495, -ERASE, 94844636606464, 94844636606464, -STORE, 94844636606464, 94844636622847, -STORE, 94844636622848, 94844636778495, -ERASE, 94844636622848, 94844636622848, -STORE, 94844636622848, 94844636725247, -STORE, 94844636725248, 94844636766207, -STORE, 94844636766208, 94844636778495, -STORE, 139922765217792, 139922765389823, -ERASE, 139922765217792, 139922765217792, -STORE, 139922765217792, 139922765221887, -STORE, 139922765221888, 139922765389823, -ERASE, 139922765221888, 139922765221888, -STORE, 139922765221888, 139922765344767, -STORE, 139922765344768, 139922765377535, -STORE, 139922765377536, 139922765385727, -STORE, 139922765385728, 139922765389823, -STORE, 140734389678080, 140734389682175, -STORE, 140734389665792, 140734389678079, -STORE, 47710029778944, 47710029787135, -STORE, 47710029787136, 47710029795327, -STORE, 47710029795328, 47710029959167, -ERASE, 47710029795328, 47710029795328, -STORE, 47710029795328, 47710029807615, -STORE, 47710029807616, 47710029959167, -STORE, 47710029905920, 47710029959167, -STORE, 47710029807616, 47710029905919, -ERASE, 47710029807616, 47710029807616, -STORE, 47710029807616, 47710029905919, -STORE, 47710029950976, 47710029959167, -STORE, 47710029905920, 47710029950975, -ERASE, 47710029905920, 47710029905920, -STORE, 47710029905920, 47710029959167, -ERASE, 47710029905920, 47710029905920, -STORE, 47710029905920, 47710029950975, -STORE, 47710029950976, 47710029959167, -ERASE, 47710029950976, 47710029950976, -STORE, 47710029950976, 47710029959167, -STORE, 47710029959168, 47710033010687, -STORE, 47710030503936, 47710033010687, -STORE, 47710029959168, 47710030503935, -ERASE, 47710030503936, 47710030503936, -STORE, 47710030503936, 47710032789503, -STORE, 47710032789504, 47710033010687, -STORE, 47710032199680, 47710032789503, -STORE, 47710030503936, 47710032199679, -ERASE, 47710030503936, 47710030503936, -STORE, 47710030503936, 47710032199679, -STORE, 47710032785408, 47710032789503, -STORE, 47710032199680, 47710032785407, -ERASE, 47710032199680, 47710032199680, -STORE, 47710032199680, 47710032785407, -STORE, 47710032994304, 47710033010687, -STORE, 47710032789504, 47710032994303, -ERASE, 47710032789504, 47710032789504, -STORE, 47710032789504, 47710032994303, -ERASE, 47710032994304, 47710032994304, -STORE, 47710032994304, 47710033010687, -STORE, 47710033010688, 47710034849791, -STORE, 47710033149952, 47710034849791, -STORE, 47710033010688, 47710033149951, -ERASE, 47710033149952, 47710033149952, -STORE, 47710033149952, 47710034808831, -STORE, 47710034808832, 47710034849791, -STORE, 47710034493440, 47710034808831, -STORE, 47710033149952, 47710034493439, -ERASE, 47710033149952, 47710033149952, -STORE, 47710033149952, 47710034493439, -STORE, 47710034804736, 47710034808831, -STORE, 47710034493440, 47710034804735, -ERASE, 47710034493440, 47710034493440, -STORE, 47710034493440, 47710034804735, -STORE, 47710034833408, 47710034849791, -STORE, 47710034808832, 47710034833407, -ERASE, 47710034808832, 47710034808832, -STORE, 47710034808832, 47710034833407, -ERASE, 47710034833408, 47710034833408, -STORE, 47710034833408, 47710034849791, -STORE, 47710034849792, 47710034984959, -ERASE, 47710034849792, 47710034849792, -STORE, 47710034849792, 47710034874367, -STORE, 47710034874368, 47710034984959, -STORE, 47710034935808, 47710034984959, -STORE, 47710034874368, 47710034935807, -ERASE, 47710034874368, 47710034874368, -STORE, 47710034874368, 47710034935807, -STORE, 47710034960384, 47710034984959, -STORE, 47710034935808, 47710034960383, -ERASE, 47710034935808, 47710034935808, -STORE, 47710034935808, 47710034984959, -ERASE, 47710034935808, 47710034935808, -STORE, 47710034935808, 47710034960383, -STORE, 47710034960384, 47710034984959, -STORE, 47710034968576, 47710034984959, -STORE, 47710034960384, 47710034968575, -ERASE, 47710034960384, 47710034960384, -STORE, 47710034960384, 47710034968575, -ERASE, 47710034968576, 47710034968576, -STORE, 47710034968576, 47710034984959, -STORE, 47710034984960, 47710035005439, -ERASE, 47710034984960, 47710034984960, -STORE, 47710034984960, 47710034989055, -STORE, 47710034989056, 47710035005439, -STORE, 47710034993152, 47710035005439, -STORE, 47710034989056, 47710034993151, -ERASE, 47710034989056, 47710034989056, -STORE, 47710034989056, 47710034993151, -STORE, 47710034997248, 47710035005439, -STORE, 47710034993152, 47710034997247, -ERASE, 47710034993152, 47710034993152, -STORE, 47710034993152, 47710035005439, -ERASE, 47710034993152, 47710034993152, -STORE, 47710034993152, 47710034997247, -STORE, 47710034997248, 47710035005439, -ERASE, 47710034997248, 47710034997248, -STORE, 47710034997248, 47710035005439, -STORE, 47710035005440, 47710035013631, -ERASE, 47710034808832, 47710034808832, -STORE, 47710034808832, 47710034825215, -STORE, 47710034825216, 47710034833407, -ERASE, 47710034997248, 47710034997248, -STORE, 47710034997248, 47710035001343, -STORE, 47710035001344, 47710035005439, -ERASE, 47710034960384, 47710034960384, -STORE, 47710034960384, 47710034964479, -STORE, 47710034964480, 47710034968575, -ERASE, 47710032789504, 47710032789504, -STORE, 47710032789504, 47710032986111, -STORE, 47710032986112, 47710032994303, -ERASE, 47710029950976, 47710029950976, -STORE, 47710029950976, 47710029955071, -STORE, 47710029955072, 47710029959167, -ERASE, 94844636766208, 94844636766208, -STORE, 94844636766208, 94844636774399, -STORE, 94844636774400, 94844636778495, -ERASE, 139922765377536, 139922765377536, -STORE, 139922765377536, 139922765381631, -STORE, 139922765381632, 139922765385727, -ERASE, 47710029778944, 47710029778944, -STORE, 94844641775616, 94844641910783, -STORE, 140737488347136, 140737488351231, -STORE, 140732213886976, 140737488351231, -ERASE, 140732213886976, 140732213886976, -STORE, 140732213886976, 140732213891071, -STORE, 94240508887040, 94240509059071, -ERASE, 94240508887040, 94240508887040, -STORE, 94240508887040, 94240508903423, -STORE, 94240508903424, 94240509059071, -ERASE, 94240508903424, 94240508903424, -STORE, 94240508903424, 94240509005823, -STORE, 94240509005824, 94240509046783, -STORE, 94240509046784, 94240509059071, -STORE, 140275106516992, 140275106689023, -ERASE, 140275106516992, 140275106516992, -STORE, 140275106516992, 140275106521087, -STORE, 140275106521088, 140275106689023, -ERASE, 140275106521088, 140275106521088, -STORE, 140275106521088, 140275106643967, -STORE, 140275106643968, 140275106676735, -STORE, 140275106676736, 140275106684927, -STORE, 140275106684928, 140275106689023, -STORE, 140732213977088, 140732213981183, -STORE, 140732213964800, 140732213977087, -STORE, 47357688479744, 47357688487935, -STORE, 47357688487936, 47357688496127, -STORE, 47357688496128, 47357688659967, -ERASE, 47357688496128, 47357688496128, -STORE, 47357688496128, 47357688508415, -STORE, 47357688508416, 47357688659967, -STORE, 47357688606720, 47357688659967, -STORE, 47357688508416, 47357688606719, -ERASE, 47357688508416, 47357688508416, -STORE, 47357688508416, 47357688606719, -STORE, 47357688651776, 47357688659967, -STORE, 47357688606720, 47357688651775, -ERASE, 47357688606720, 47357688606720, -STORE, 47357688606720, 47357688659967, -ERASE, 47357688606720, 47357688606720, -STORE, 47357688606720, 47357688651775, -STORE, 47357688651776, 47357688659967, -ERASE, 47357688651776, 47357688651776, -STORE, 47357688651776, 47357688659967, -STORE, 47357688659968, 47357691711487, -STORE, 47357689204736, 47357691711487, -STORE, 47357688659968, 47357689204735, -ERASE, 47357689204736, 47357689204736, -STORE, 47357689204736, 47357691490303, -STORE, 47357691490304, 47357691711487, -STORE, 47357690900480, 47357691490303, -STORE, 47357689204736, 47357690900479, -ERASE, 47357689204736, 47357689204736, -STORE, 47357689204736, 47357690900479, -STORE, 47357691486208, 47357691490303, -STORE, 47357690900480, 47357691486207, -ERASE, 47357690900480, 47357690900480, -STORE, 47357690900480, 47357691486207, -STORE, 47357691695104, 47357691711487, -STORE, 47357691490304, 47357691695103, -ERASE, 47357691490304, 47357691490304, -STORE, 47357691490304, 47357691695103, -ERASE, 47357691695104, 47357691695104, -STORE, 47357691695104, 47357691711487, -STORE, 47357691711488, 47357693550591, -STORE, 47357691850752, 47357693550591, -STORE, 47357691711488, 47357691850751, -ERASE, 47357691850752, 47357691850752, -STORE, 47357691850752, 47357693509631, -STORE, 47357693509632, 47357693550591, -STORE, 47357693194240, 47357693509631, -STORE, 47357691850752, 47357693194239, -ERASE, 47357691850752, 47357691850752, -STORE, 47357691850752, 47357693194239, -STORE, 47357693505536, 47357693509631, -STORE, 47357693194240, 47357693505535, -ERASE, 47357693194240, 47357693194240, -STORE, 47357693194240, 47357693505535, -STORE, 47357693534208, 47357693550591, -STORE, 47357693509632, 47357693534207, -ERASE, 47357693509632, 47357693509632, -STORE, 47357693509632, 47357693534207, -ERASE, 47357693534208, 47357693534208, -STORE, 47357693534208, 47357693550591, -STORE, 47357693550592, 47357693685759, -ERASE, 47357693550592, 47357693550592, -STORE, 47357693550592, 47357693575167, -STORE, 47357693575168, 47357693685759, -STORE, 47357693636608, 47357693685759, -STORE, 47357693575168, 47357693636607, -ERASE, 47357693575168, 47357693575168, -STORE, 47357693575168, 47357693636607, -STORE, 47357693661184, 47357693685759, -STORE, 47357693636608, 47357693661183, -ERASE, 47357693636608, 47357693636608, -STORE, 47357693636608, 47357693685759, -ERASE, 47357693636608, 47357693636608, -STORE, 47357693636608, 47357693661183, -STORE, 47357693661184, 47357693685759, -STORE, 47357693669376, 47357693685759, -STORE, 47357693661184, 47357693669375, -ERASE, 47357693661184, 47357693661184, -STORE, 47357693661184, 47357693669375, -ERASE, 47357693669376, 47357693669376, -STORE, 47357693669376, 47357693685759, -STORE, 47357693685760, 47357693706239, -ERASE, 47357693685760, 47357693685760, -STORE, 47357693685760, 47357693689855, -STORE, 47357693689856, 47357693706239, -STORE, 47357693693952, 47357693706239, -STORE, 47357693689856, 47357693693951, -ERASE, 47357693689856, 47357693689856, -STORE, 47357693689856, 47357693693951, -STORE, 47357693698048, 47357693706239, -STORE, 47357693693952, 47357693698047, -ERASE, 47357693693952, 47357693693952, -STORE, 47357693693952, 47357693706239, -ERASE, 47357693693952, 47357693693952, -STORE, 47357693693952, 47357693698047, -STORE, 47357693698048, 47357693706239, -ERASE, 47357693698048, 47357693698048, -STORE, 47357693698048, 47357693706239, -STORE, 47357693706240, 47357693714431, -ERASE, 47357693509632, 47357693509632, -STORE, 47357693509632, 47357693526015, -STORE, 47357693526016, 47357693534207, -ERASE, 47357693698048, 47357693698048, -STORE, 47357693698048, 47357693702143, -STORE, 47357693702144, 47357693706239, -ERASE, 47357693661184, 47357693661184, -STORE, 47357693661184, 47357693665279, -STORE, 47357693665280, 47357693669375, -ERASE, 47357691490304, 47357691490304, -STORE, 47357691490304, 47357691686911, -STORE, 47357691686912, 47357691695103, -ERASE, 47357688651776, 47357688651776, -STORE, 47357688651776, 47357688655871, -STORE, 47357688655872, 47357688659967, -ERASE, 94240509046784, 94240509046784, -STORE, 94240509046784, 94240509054975, -STORE, 94240509054976, 94240509059071, -ERASE, 140275106676736, 140275106676736, -STORE, 140275106676736, 140275106680831, -STORE, 140275106680832, 140275106684927, -ERASE, 47357688479744, 47357688479744, -STORE, 94240518361088, 94240518496255, -STORE, 140737488347136, 140737488351231, -STORE, 140732688277504, 140737488351231, -ERASE, 140732688277504, 140732688277504, -STORE, 140732688277504, 140732688281599, -STORE, 94629171351552, 94629172064255, -ERASE, 94629171351552, 94629171351552, -STORE, 94629171351552, 94629171400703, -STORE, 94629171400704, 94629172064255, -ERASE, 94629171400704, 94629171400704, -STORE, 94629171400704, 94629171945471, -STORE, 94629171945472, 94629172043775, -STORE, 94629172043776, 94629172064255, -STORE, 139770707644416, 139770707816447, -ERASE, 139770707644416, 139770707644416, -STORE, 139770707644416, 139770707648511, -STORE, 139770707648512, 139770707816447, -ERASE, 139770707648512, 139770707648512, -STORE, 139770707648512, 139770707771391, -STORE, 139770707771392, 139770707804159, -STORE, 139770707804160, 139770707812351, -STORE, 139770707812352, 139770707816447, -STORE, 140732689121280, 140732689125375, -STORE, 140732689108992, 140732689121279, -STORE, 47862087352320, 47862087360511, -STORE, 47862087360512, 47862087368703, -STORE, 47862087368704, 47862087475199, -STORE, 47862087385088, 47862087475199, -STORE, 47862087368704, 47862087385087, -ERASE, 47862087385088, 47862087385088, -STORE, 47862087385088, 47862087458815, -STORE, 47862087458816, 47862087475199, -STORE, 47862087438336, 47862087458815, -STORE, 47862087385088, 47862087438335, -ERASE, 47862087385088, 47862087385088, -STORE, 47862087385088, 47862087438335, -STORE, 47862087454720, 47862087458815, -STORE, 47862087438336, 47862087454719, -ERASE, 47862087438336, 47862087438336, -STORE, 47862087438336, 47862087454719, -STORE, 47862087467008, 47862087475199, -STORE, 47862087458816, 47862087467007, -ERASE, 47862087458816, 47862087458816, -STORE, 47862087458816, 47862087467007, -ERASE, 47862087467008, 47862087467008, -STORE, 47862087467008, 47862087475199, -STORE, 47862087475200, 47862089314303, -STORE, 47862087614464, 47862089314303, -STORE, 47862087475200, 47862087614463, -ERASE, 47862087614464, 47862087614464, -STORE, 47862087614464, 47862089273343, -STORE, 47862089273344, 47862089314303, -STORE, 47862088957952, 47862089273343, -STORE, 47862087614464, 47862088957951, -ERASE, 47862087614464, 47862087614464, -STORE, 47862087614464, 47862088957951, -STORE, 47862089269248, 47862089273343, -STORE, 47862088957952, 47862089269247, -ERASE, 47862088957952, 47862088957952, -STORE, 47862088957952, 47862089269247, -STORE, 47862089297920, 47862089314303, -STORE, 47862089273344, 47862089297919, -ERASE, 47862089273344, 47862089273344, -STORE, 47862089273344, 47862089297919, -ERASE, 47862089297920, 47862089297920, -STORE, 47862089297920, 47862089314303, -STORE, 47862089297920, 47862089326591, -ERASE, 47862089273344, 47862089273344, -STORE, 47862089273344, 47862089289727, -STORE, 47862089289728, 47862089297919, -ERASE, 47862087458816, 47862087458816, -STORE, 47862087458816, 47862087462911, -STORE, 47862087462912, 47862087467007, -ERASE, 94629172043776, 94629172043776, -STORE, 94629172043776, 94629172060159, -STORE, 94629172060160, 94629172064255, -ERASE, 139770707804160, 139770707804160, -STORE, 139770707804160, 139770707808255, -STORE, 139770707808256, 139770707812351, -ERASE, 47862087352320, 47862087352320, -STORE, 94629197533184, 94629197668351, -STORE, 140737488347136, 140737488351231, -STORE, 140727540711424, 140737488351231, -ERASE, 140727540711424, 140727540711424, -STORE, 140727540711424, 140727540715519, -STORE, 94299865313280, 94299866025983, -ERASE, 94299865313280, 94299865313280, -STORE, 94299865313280, 94299865362431, -STORE, 94299865362432, 94299866025983, -ERASE, 94299865362432, 94299865362432, -STORE, 94299865362432, 94299865907199, -STORE, 94299865907200, 94299866005503, -STORE, 94299866005504, 94299866025983, -STORE, 140680268763136, 140680268935167, -ERASE, 140680268763136, 140680268763136, -STORE, 140680268763136, 140680268767231, -STORE, 140680268767232, 140680268935167, -ERASE, 140680268767232, 140680268767232, -STORE, 140680268767232, 140680268890111, -STORE, 140680268890112, 140680268922879, -STORE, 140680268922880, 140680268931071, -STORE, 140680268931072, 140680268935167, -STORE, 140727541424128, 140727541428223, -STORE, 140727541411840, 140727541424127, -STORE, 46952526233600, 46952526241791, -STORE, 46952526241792, 46952526249983, -STORE, 46952526249984, 46952526356479, -STORE, 46952526266368, 46952526356479, -STORE, 46952526249984, 46952526266367, -ERASE, 46952526266368, 46952526266368, -STORE, 46952526266368, 46952526340095, -STORE, 46952526340096, 46952526356479, -STORE, 46952526319616, 46952526340095, -STORE, 46952526266368, 46952526319615, -ERASE, 46952526266368, 46952526266368, -STORE, 46952526266368, 46952526319615, -STORE, 46952526336000, 46952526340095, -STORE, 46952526319616, 46952526335999, -ERASE, 46952526319616, 46952526319616, -STORE, 46952526319616, 46952526335999, -STORE, 46952526348288, 46952526356479, -STORE, 46952526340096, 46952526348287, -ERASE, 46952526340096, 46952526340096, -STORE, 46952526340096, 46952526348287, -ERASE, 46952526348288, 46952526348288, -STORE, 46952526348288, 46952526356479, -STORE, 46952526356480, 46952528195583, -STORE, 46952526495744, 46952528195583, -STORE, 46952526356480, 46952526495743, -ERASE, 46952526495744, 46952526495744, -STORE, 46952526495744, 46952528154623, -STORE, 46952528154624, 46952528195583, -STORE, 46952527839232, 46952528154623, -STORE, 46952526495744, 46952527839231, -ERASE, 46952526495744, 46952526495744, -STORE, 46952526495744, 46952527839231, -STORE, 46952528150528, 46952528154623, -STORE, 46952527839232, 46952528150527, -ERASE, 46952527839232, 46952527839232, -STORE, 46952527839232, 46952528150527, -STORE, 46952528179200, 46952528195583, -STORE, 46952528154624, 46952528179199, -ERASE, 46952528154624, 46952528154624, -STORE, 46952528154624, 46952528179199, -ERASE, 46952528179200, 46952528179200, -STORE, 46952528179200, 46952528195583, -STORE, 46952528179200, 46952528207871, -ERASE, 46952528154624, 46952528154624, -STORE, 46952528154624, 46952528171007, -STORE, 46952528171008, 46952528179199, -ERASE, 46952526340096, 46952526340096, -STORE, 46952526340096, 46952526344191, -STORE, 46952526344192, 46952526348287, -ERASE, 94299866005504, 94299866005504, -STORE, 94299866005504, 94299866021887, -STORE, 94299866021888, 94299866025983, -ERASE, 140680268922880, 140680268922880, -STORE, 140680268922880, 140680268926975, -STORE, 140680268926976, 140680268931071, -ERASE, 46952526233600, 46952526233600, -STORE, 140737488347136, 140737488351231, -STORE, 140722874793984, 140737488351231, -ERASE, 140722874793984, 140722874793984, -STORE, 140722874793984, 140722874798079, -STORE, 94448916213760, 94448916926463, -ERASE, 94448916213760, 94448916213760, -STORE, 94448916213760, 94448916262911, -STORE, 94448916262912, 94448916926463, -ERASE, 94448916262912, 94448916262912, -STORE, 94448916262912, 94448916807679, -STORE, 94448916807680, 94448916905983, -STORE, 94448916905984, 94448916926463, -STORE, 140389117046784, 140389117218815, -ERASE, 140389117046784, 140389117046784, -STORE, 140389117046784, 140389117050879, -STORE, 140389117050880, 140389117218815, -ERASE, 140389117050880, 140389117050880, -STORE, 140389117050880, 140389117173759, -STORE, 140389117173760, 140389117206527, -STORE, 140389117206528, 140389117214719, -STORE, 140389117214720, 140389117218815, -STORE, 140722875297792, 140722875301887, -STORE, 140722875285504, 140722875297791, -STORE, 47243677949952, 47243677958143, -STORE, 47243677958144, 47243677966335, -STORE, 47243677966336, 47243678072831, -STORE, 47243677982720, 47243678072831, -STORE, 47243677966336, 47243677982719, -ERASE, 47243677982720, 47243677982720, -STORE, 47243677982720, 47243678056447, -STORE, 47243678056448, 47243678072831, -STORE, 47243678035968, 47243678056447, -STORE, 47243677982720, 47243678035967, -ERASE, 47243677982720, 47243677982720, -STORE, 47243677982720, 47243678035967, -STORE, 47243678052352, 47243678056447, -STORE, 47243678035968, 47243678052351, -ERASE, 47243678035968, 47243678035968, -STORE, 47243678035968, 47243678052351, -STORE, 47243678064640, 47243678072831, -STORE, 47243678056448, 47243678064639, -ERASE, 47243678056448, 47243678056448, -STORE, 47243678056448, 47243678064639, -ERASE, 47243678064640, 47243678064640, -STORE, 47243678064640, 47243678072831, -STORE, 47243678072832, 47243679911935, -STORE, 47243678212096, 47243679911935, -STORE, 47243678072832, 47243678212095, -ERASE, 47243678212096, 47243678212096, -STORE, 47243678212096, 47243679870975, -STORE, 47243679870976, 47243679911935, -STORE, 47243679555584, 47243679870975, -STORE, 47243678212096, 47243679555583, -ERASE, 47243678212096, 47243678212096, -STORE, 47243678212096, 47243679555583, -STORE, 47243679866880, 47243679870975, -STORE, 47243679555584, 47243679866879, -ERASE, 47243679555584, 47243679555584, -STORE, 47243679555584, 47243679866879, -STORE, 47243679895552, 47243679911935, -STORE, 47243679870976, 47243679895551, -ERASE, 47243679870976, 47243679870976, -STORE, 47243679870976, 47243679895551, -ERASE, 47243679895552, 47243679895552, -STORE, 47243679895552, 47243679911935, -STORE, 47243679895552, 47243679924223, -ERASE, 47243679870976, 47243679870976, -STORE, 47243679870976, 47243679887359, -STORE, 47243679887360, 47243679895551, -ERASE, 47243678056448, 47243678056448, -STORE, 47243678056448, 47243678060543, -STORE, 47243678060544, 47243678064639, -ERASE, 94448916905984, 94448916905984, -STORE, 94448916905984, 94448916922367, -STORE, 94448916922368, 94448916926463, -ERASE, 140389117206528, 140389117206528, -STORE, 140389117206528, 140389117210623, -STORE, 140389117210624, 140389117214719, -ERASE, 47243677949952, 47243677949952, -STORE, 140737488347136, 140737488351231, -STORE, 140733068505088, 140737488351231, -ERASE, 140733068505088, 140733068505088, -STORE, 140733068505088, 140733068509183, -STORE, 94207145750528, 94207146463231, -ERASE, 94207145750528, 94207145750528, -STORE, 94207145750528, 94207145799679, -STORE, 94207145799680, 94207146463231, -ERASE, 94207145799680, 94207145799680, -STORE, 94207145799680, 94207146344447, -STORE, 94207146344448, 94207146442751, -STORE, 94207146442752, 94207146463231, -STORE, 140684504911872, 140684505083903, -ERASE, 140684504911872, 140684504911872, -STORE, 140684504911872, 140684504915967, -STORE, 140684504915968, 140684505083903, -ERASE, 140684504915968, 140684504915968, -STORE, 140684504915968, 140684505038847, -STORE, 140684505038848, 140684505071615, -STORE, 140684505071616, 140684505079807, -STORE, 140684505079808, 140684505083903, -STORE, 140733068607488, 140733068611583, -STORE, 140733068595200, 140733068607487, -STORE, 46948290084864, 46948290093055, -STORE, 46948290093056, 46948290101247, -STORE, 46948290101248, 46948290207743, -STORE, 46948290117632, 46948290207743, -STORE, 46948290101248, 46948290117631, -ERASE, 46948290117632, 46948290117632, -STORE, 46948290117632, 46948290191359, -STORE, 46948290191360, 46948290207743, -STORE, 46948290170880, 46948290191359, -STORE, 46948290117632, 46948290170879, -ERASE, 46948290117632, 46948290117632, -STORE, 46948290117632, 46948290170879, -STORE, 46948290187264, 46948290191359, -STORE, 46948290170880, 46948290187263, -ERASE, 46948290170880, 46948290170880, -STORE, 46948290170880, 46948290187263, -STORE, 46948290199552, 46948290207743, -STORE, 46948290191360, 46948290199551, -ERASE, 46948290191360, 46948290191360, -STORE, 46948290191360, 46948290199551, -ERASE, 46948290199552, 46948290199552, -STORE, 46948290199552, 46948290207743, -STORE, 46948290207744, 46948292046847, -STORE, 46948290347008, 46948292046847, -STORE, 46948290207744, 46948290347007, -ERASE, 46948290347008, 46948290347008, -STORE, 46948290347008, 46948292005887, -STORE, 46948292005888, 46948292046847, -STORE, 46948291690496, 46948292005887, -STORE, 46948290347008, 46948291690495, -ERASE, 46948290347008, 46948290347008, -STORE, 46948290347008, 46948291690495, -STORE, 46948292001792, 46948292005887, -STORE, 46948291690496, 46948292001791, -ERASE, 46948291690496, 46948291690496, -STORE, 46948291690496, 46948292001791, -STORE, 46948292030464, 46948292046847, -STORE, 46948292005888, 46948292030463, -ERASE, 46948292005888, 46948292005888, -STORE, 46948292005888, 46948292030463, -ERASE, 46948292030464, 46948292030464, -STORE, 46948292030464, 46948292046847, -STORE, 46948292030464, 46948292059135, -ERASE, 46948292005888, 46948292005888, -STORE, 46948292005888, 46948292022271, -STORE, 46948292022272, 46948292030463, -ERASE, 46948290191360, 46948290191360, -STORE, 46948290191360, 46948290195455, -STORE, 46948290195456, 46948290199551, -ERASE, 94207146442752, 94207146442752, -STORE, 94207146442752, 94207146459135, -STORE, 94207146459136, 94207146463231, -ERASE, 140684505071616, 140684505071616, -STORE, 140684505071616, 140684505075711, -STORE, 140684505075712, 140684505079807, -ERASE, 46948290084864, 46948290084864, -STORE, 140737488347136, 140737488351231, -STORE, 140726367158272, 140737488351231, -ERASE, 140726367158272, 140726367158272, -STORE, 140726367158272, 140726367162367, -STORE, 94436124106752, 94436124819455, -ERASE, 94436124106752, 94436124106752, -STORE, 94436124106752, 94436124155903, -STORE, 94436124155904, 94436124819455, -ERASE, 94436124155904, 94436124155904, -STORE, 94436124155904, 94436124700671, -STORE, 94436124700672, 94436124798975, -STORE, 94436124798976, 94436124819455, -STORE, 140049025044480, 140049025216511, -ERASE, 140049025044480, 140049025044480, -STORE, 140049025044480, 140049025048575, -STORE, 140049025048576, 140049025216511, -ERASE, 140049025048576, 140049025048576, -STORE, 140049025048576, 140049025171455, -STORE, 140049025171456, 140049025204223, -STORE, 140049025204224, 140049025212415, -STORE, 140049025212416, 140049025216511, -STORE, 140726367256576, 140726367260671, -STORE, 140726367244288, 140726367256575, -STORE, 47583769952256, 47583769960447, -STORE, 47583769960448, 47583769968639, -STORE, 47583769968640, 47583770075135, -STORE, 47583769985024, 47583770075135, -STORE, 47583769968640, 47583769985023, -ERASE, 47583769985024, 47583769985024, -STORE, 47583769985024, 47583770058751, -STORE, 47583770058752, 47583770075135, -STORE, 47583770038272, 47583770058751, -STORE, 47583769985024, 47583770038271, -ERASE, 47583769985024, 47583769985024, -STORE, 47583769985024, 47583770038271, -STORE, 47583770054656, 47583770058751, -STORE, 47583770038272, 47583770054655, -ERASE, 47583770038272, 47583770038272, -STORE, 47583770038272, 47583770054655, -STORE, 47583770066944, 47583770075135, -STORE, 47583770058752, 47583770066943, -ERASE, 47583770058752, 47583770058752, -STORE, 47583770058752, 47583770066943, -ERASE, 47583770066944, 47583770066944, -STORE, 47583770066944, 47583770075135, -STORE, 47583770075136, 47583771914239, -STORE, 47583770214400, 47583771914239, -STORE, 47583770075136, 47583770214399, -ERASE, 47583770214400, 47583770214400, -STORE, 47583770214400, 47583771873279, -STORE, 47583771873280, 47583771914239, -STORE, 47583771557888, 47583771873279, -STORE, 47583770214400, 47583771557887, -ERASE, 47583770214400, 47583770214400, -STORE, 47583770214400, 47583771557887, -STORE, 47583771869184, 47583771873279, -STORE, 47583771557888, 47583771869183, -ERASE, 47583771557888, 47583771557888, -STORE, 47583771557888, 47583771869183, -STORE, 47583771897856, 47583771914239, -STORE, 47583771873280, 47583771897855, -ERASE, 47583771873280, 47583771873280, -STORE, 47583771873280, 47583771897855, -ERASE, 47583771897856, 47583771897856, -STORE, 47583771897856, 47583771914239, -STORE, 47583771897856, 47583771926527, -ERASE, 47583771873280, 47583771873280, -STORE, 47583771873280, 47583771889663, -STORE, 47583771889664, 47583771897855, -ERASE, 47583770058752, 47583770058752, -STORE, 47583770058752, 47583770062847, -STORE, 47583770062848, 47583770066943, -ERASE, 94436124798976, 94436124798976, -STORE, 94436124798976, 94436124815359, -STORE, 94436124815360, 94436124819455, -ERASE, 140049025204224, 140049025204224, -STORE, 140049025204224, 140049025208319, -STORE, 140049025208320, 140049025212415, -ERASE, 47583769952256, 47583769952256, -STORE, 140737488347136, 140737488351231, -STORE, 140727116099584, 140737488351231, -ERASE, 140727116099584, 140727116099584, -STORE, 140727116099584, 140727116103679, -STORE, 94166319734784, 94166320447487, -ERASE, 94166319734784, 94166319734784, -STORE, 94166319734784, 94166319783935, -STORE, 94166319783936, 94166320447487, -ERASE, 94166319783936, 94166319783936, -STORE, 94166319783936, 94166320328703, -STORE, 94166320328704, 94166320427007, -STORE, 94166320427008, 94166320447487, -STORE, 139976559542272, 139976559714303, -ERASE, 139976559542272, 139976559542272, -STORE, 139976559542272, 139976559546367, -STORE, 139976559546368, 139976559714303, -ERASE, 139976559546368, 139976559546368, -STORE, 139976559546368, 139976559669247, -STORE, 139976559669248, 139976559702015, -STORE, 139976559702016, 139976559710207, -STORE, 139976559710208, 139976559714303, -STORE, 140727116222464, 140727116226559, -STORE, 140727116210176, 140727116222463, -STORE, 47656235454464, 47656235462655, -STORE, 47656235462656, 47656235470847, -STORE, 47656235470848, 47656235577343, -STORE, 47656235487232, 47656235577343, -STORE, 47656235470848, 47656235487231, -ERASE, 47656235487232, 47656235487232, -STORE, 47656235487232, 47656235560959, -STORE, 47656235560960, 47656235577343, -STORE, 47656235540480, 47656235560959, -STORE, 47656235487232, 47656235540479, -ERASE, 47656235487232, 47656235487232, -STORE, 47656235487232, 47656235540479, -STORE, 47656235556864, 47656235560959, -STORE, 47656235540480, 47656235556863, -ERASE, 47656235540480, 47656235540480, -STORE, 47656235540480, 47656235556863, -STORE, 47656235569152, 47656235577343, -STORE, 47656235560960, 47656235569151, -ERASE, 47656235560960, 47656235560960, -STORE, 47656235560960, 47656235569151, -ERASE, 47656235569152, 47656235569152, -STORE, 47656235569152, 47656235577343, -STORE, 47656235577344, 47656237416447, -STORE, 47656235716608, 47656237416447, -STORE, 47656235577344, 47656235716607, -ERASE, 47656235716608, 47656235716608, -STORE, 47656235716608, 47656237375487, -STORE, 47656237375488, 47656237416447, -STORE, 47656237060096, 47656237375487, -STORE, 47656235716608, 47656237060095, -ERASE, 47656235716608, 47656235716608, -STORE, 47656235716608, 47656237060095, -STORE, 47656237371392, 47656237375487, -STORE, 47656237060096, 47656237371391, -ERASE, 47656237060096, 47656237060096, -STORE, 47656237060096, 47656237371391, -STORE, 47656237400064, 47656237416447, -STORE, 47656237375488, 47656237400063, -ERASE, 47656237375488, 47656237375488, -STORE, 47656237375488, 47656237400063, -ERASE, 47656237400064, 47656237400064, -STORE, 47656237400064, 47656237416447, -STORE, 47656237400064, 47656237428735, -ERASE, 47656237375488, 47656237375488, -STORE, 47656237375488, 47656237391871, -STORE, 47656237391872, 47656237400063, -ERASE, 47656235560960, 47656235560960, -STORE, 47656235560960, 47656235565055, -STORE, 47656235565056, 47656235569151, -ERASE, 94166320427008, 94166320427008, -STORE, 94166320427008, 94166320443391, -STORE, 94166320443392, 94166320447487, -ERASE, 139976559702016, 139976559702016, -STORE, 139976559702016, 139976559706111, -STORE, 139976559706112, 139976559710207, -ERASE, 47656235454464, 47656235454464, -STORE, 94166332153856, 94166332289023, -STORE, 140737488347136, 140737488351231, -STORE, 140726412816384, 140737488351231, -ERASE, 140726412816384, 140726412816384, -STORE, 140726412816384, 140726412820479, -STORE, 94094884507648, 94094885220351, -ERASE, 94094884507648, 94094884507648, -STORE, 94094884507648, 94094884556799, -STORE, 94094884556800, 94094885220351, -ERASE, 94094884556800, 94094884556800, -STORE, 94094884556800, 94094885101567, -STORE, 94094885101568, 94094885199871, -STORE, 94094885199872, 94094885220351, -STORE, 139773773938688, 139773774110719, -ERASE, 139773773938688, 139773773938688, -STORE, 139773773938688, 139773773942783, -STORE, 139773773942784, 139773774110719, -ERASE, 139773773942784, 139773773942784, -STORE, 139773773942784, 139773774065663, -STORE, 139773774065664, 139773774098431, -STORE, 139773774098432, 139773774106623, -STORE, 139773774106624, 139773774110719, -STORE, 140726412963840, 140726412967935, -STORE, 140726412951552, 140726412963839, -STORE, 47859021058048, 47859021066239, -STORE, 47859021066240, 47859021074431, -STORE, 47859021074432, 47859021180927, -STORE, 47859021090816, 47859021180927, -STORE, 47859021074432, 47859021090815, -ERASE, 47859021090816, 47859021090816, -STORE, 47859021090816, 47859021164543, -STORE, 47859021164544, 47859021180927, -STORE, 47859021144064, 47859021164543, -STORE, 47859021090816, 47859021144063, -ERASE, 47859021090816, 47859021090816, -STORE, 47859021090816, 47859021144063, -STORE, 47859021160448, 47859021164543, -STORE, 47859021144064, 47859021160447, -ERASE, 47859021144064, 47859021144064, -STORE, 47859021144064, 47859021160447, -STORE, 47859021172736, 47859021180927, -STORE, 47859021164544, 47859021172735, -ERASE, 47859021164544, 47859021164544, -STORE, 47859021164544, 47859021172735, -ERASE, 47859021172736, 47859021172736, -STORE, 47859021172736, 47859021180927, -STORE, 47859021180928, 47859023020031, -STORE, 47859021320192, 47859023020031, -STORE, 47859021180928, 47859021320191, -ERASE, 47859021320192, 47859021320192, -STORE, 47859021320192, 47859022979071, -STORE, 47859022979072, 47859023020031, -STORE, 47859022663680, 47859022979071, -STORE, 47859021320192, 47859022663679, -ERASE, 47859021320192, 47859021320192, -STORE, 47859021320192, 47859022663679, -STORE, 47859022974976, 47859022979071, -STORE, 47859022663680, 47859022974975, -ERASE, 47859022663680, 47859022663680, -STORE, 47859022663680, 47859022974975, -STORE, 47859023003648, 47859023020031, -STORE, 47859022979072, 47859023003647, -ERASE, 47859022979072, 47859022979072, -STORE, 47859022979072, 47859023003647, -ERASE, 47859023003648, 47859023003648, -STORE, 47859023003648, 47859023020031, -STORE, 47859023003648, 47859023032319, -ERASE, 47859022979072, 47859022979072, -STORE, 47859022979072, 47859022995455, -STORE, 47859022995456, 47859023003647, -ERASE, 47859021164544, 47859021164544, -STORE, 47859021164544, 47859021168639, -STORE, 47859021168640, 47859021172735, -ERASE, 94094885199872, 94094885199872, -STORE, 94094885199872, 94094885216255, -STORE, 94094885216256, 94094885220351, -ERASE, 139773774098432, 139773774098432, -STORE, 139773774098432, 139773774102527, -STORE, 139773774102528, 139773774106623, -ERASE, 47859021058048, 47859021058048, -STORE, 94094901108736, 94094901243903, -STORE, 140737488347136, 140737488351231, -STORE, 140736567963648, 140737488351231, -ERASE, 140736567963648, 140736567963648, -STORE, 140736567963648, 140736567967743, -STORE, 94924425748480, 94924426461183, -ERASE, 94924425748480, 94924425748480, -STORE, 94924425748480, 94924425797631, -STORE, 94924425797632, 94924426461183, -ERASE, 94924425797632, 94924425797632, -STORE, 94924425797632, 94924426342399, -STORE, 94924426342400, 94924426440703, -STORE, 94924426440704, 94924426461183, -STORE, 140042126319616, 140042126491647, -ERASE, 140042126319616, 140042126319616, -STORE, 140042126319616, 140042126323711, -STORE, 140042126323712, 140042126491647, -ERASE, 140042126323712, 140042126323712, -STORE, 140042126323712, 140042126446591, -STORE, 140042126446592, 140042126479359, -STORE, 140042126479360, 140042126487551, -STORE, 140042126487552, 140042126491647, -STORE, 140736568672256, 140736568676351, -STORE, 140736568659968, 140736568672255, -STORE, 47590668677120, 47590668685311, -STORE, 47590668685312, 47590668693503, -STORE, 47590668693504, 47590668799999, -STORE, 47590668709888, 47590668799999, -STORE, 47590668693504, 47590668709887, -ERASE, 47590668709888, 47590668709888, -STORE, 47590668709888, 47590668783615, -STORE, 47590668783616, 47590668799999, -STORE, 47590668763136, 47590668783615, -STORE, 47590668709888, 47590668763135, -ERASE, 47590668709888, 47590668709888, -STORE, 47590668709888, 47590668763135, -STORE, 47590668779520, 47590668783615, -STORE, 47590668763136, 47590668779519, -ERASE, 47590668763136, 47590668763136, -STORE, 47590668763136, 47590668779519, -STORE, 47590668791808, 47590668799999, -STORE, 47590668783616, 47590668791807, -ERASE, 47590668783616, 47590668783616, -STORE, 47590668783616, 47590668791807, -ERASE, 47590668791808, 47590668791808, -STORE, 47590668791808, 47590668799999, -STORE, 47590668800000, 47590670639103, -STORE, 47590668939264, 47590670639103, -STORE, 47590668800000, 47590668939263, -ERASE, 47590668939264, 47590668939264, -STORE, 47590668939264, 47590670598143, -STORE, 47590670598144, 47590670639103, -STORE, 47590670282752, 47590670598143, -STORE, 47590668939264, 47590670282751, -ERASE, 47590668939264, 47590668939264, -STORE, 47590668939264, 47590670282751, -STORE, 47590670594048, 47590670598143, -STORE, 47590670282752, 47590670594047, -ERASE, 47590670282752, 47590670282752, -STORE, 47590670282752, 47590670594047, -STORE, 47590670622720, 47590670639103, -STORE, 47590670598144, 47590670622719, -ERASE, 47590670598144, 47590670598144, -STORE, 47590670598144, 47590670622719, -ERASE, 47590670622720, 47590670622720, -STORE, 47590670622720, 47590670639103, -STORE, 47590670622720, 47590670651391, -ERASE, 47590670598144, 47590670598144, -STORE, 47590670598144, 47590670614527, -STORE, 47590670614528, 47590670622719, -ERASE, 47590668783616, 47590668783616, -STORE, 47590668783616, 47590668787711, -STORE, 47590668787712, 47590668791807, -ERASE, 94924426440704, 94924426440704, -STORE, 94924426440704, 94924426457087, -STORE, 94924426457088, 94924426461183, -ERASE, 140042126479360, 140042126479360, -STORE, 140042126479360, 140042126483455, -STORE, 140042126483456, 140042126487551, -ERASE, 47590668677120, 47590668677120, -STORE, 140737488347136, 140737488351231, -STORE, 140733281439744, 140737488351231, -ERASE, 140733281439744, 140733281439744, -STORE, 140733281439744, 140733281443839, -STORE, 94490667069440, 94490667782143, -ERASE, 94490667069440, 94490667069440, -STORE, 94490667069440, 94490667118591, -STORE, 94490667118592, 94490667782143, -ERASE, 94490667118592, 94490667118592, -STORE, 94490667118592, 94490667663359, -STORE, 94490667663360, 94490667761663, -STORE, 94490667761664, 94490667782143, -STORE, 139878215118848, 139878215290879, -ERASE, 139878215118848, 139878215118848, -STORE, 139878215118848, 139878215122943, -STORE, 139878215122944, 139878215290879, -ERASE, 139878215122944, 139878215122944, -STORE, 139878215122944, 139878215245823, -STORE, 139878215245824, 139878215278591, -STORE, 139878215278592, 139878215286783, -STORE, 139878215286784, 139878215290879, -STORE, 140733281464320, 140733281468415, -STORE, 140733281452032, 140733281464319, -STORE, 47754579877888, 47754579886079, -STORE, 47754579886080, 47754579894271, -STORE, 47754579894272, 47754580000767, -STORE, 47754579910656, 47754580000767, -STORE, 47754579894272, 47754579910655, -ERASE, 47754579910656, 47754579910656, -STORE, 47754579910656, 47754579984383, -STORE, 47754579984384, 47754580000767, -STORE, 47754579963904, 47754579984383, -STORE, 47754579910656, 47754579963903, -ERASE, 47754579910656, 47754579910656, -STORE, 47754579910656, 47754579963903, -STORE, 47754579980288, 47754579984383, -STORE, 47754579963904, 47754579980287, -ERASE, 47754579963904, 47754579963904, -STORE, 47754579963904, 47754579980287, -STORE, 47754579992576, 47754580000767, -STORE, 47754579984384, 47754579992575, -ERASE, 47754579984384, 47754579984384, -STORE, 47754579984384, 47754579992575, -ERASE, 47754579992576, 47754579992576, -STORE, 47754579992576, 47754580000767, -STORE, 47754580000768, 47754581839871, -STORE, 47754580140032, 47754581839871, -STORE, 47754580000768, 47754580140031, -ERASE, 47754580140032, 47754580140032, -STORE, 47754580140032, 47754581798911, -STORE, 47754581798912, 47754581839871, -STORE, 47754581483520, 47754581798911, -STORE, 47754580140032, 47754581483519, -ERASE, 47754580140032, 47754580140032, -STORE, 47754580140032, 47754581483519, -STORE, 47754581794816, 47754581798911, -STORE, 47754581483520, 47754581794815, -ERASE, 47754581483520, 47754581483520, -STORE, 47754581483520, 47754581794815, -STORE, 47754581823488, 47754581839871, -STORE, 47754581798912, 47754581823487, -ERASE, 47754581798912, 47754581798912, -STORE, 47754581798912, 47754581823487, -ERASE, 47754581823488, 47754581823488, -STORE, 47754581823488, 47754581839871, -STORE, 47754581823488, 47754581852159, -ERASE, 47754581798912, 47754581798912, -STORE, 47754581798912, 47754581815295, -STORE, 47754581815296, 47754581823487, -ERASE, 47754579984384, 47754579984384, -STORE, 47754579984384, 47754579988479, -STORE, 47754579988480, 47754579992575, -ERASE, 94490667761664, 94490667761664, -STORE, 94490667761664, 94490667778047, -STORE, 94490667778048, 94490667782143, -ERASE, 139878215278592, 139878215278592, -STORE, 139878215278592, 139878215282687, -STORE, 139878215282688, 139878215286783, -ERASE, 47754579877888, 47754579877888, -STORE, 94490669649920, 94490669785087, -STORE, 140737488347136, 140737488351231, -STORE, 140735382188032, 140737488351231, -ERASE, 140735382188032, 140735382188032, -STORE, 140735382188032, 140735382192127, -STORE, 94150181302272, 94150182014975, -ERASE, 94150181302272, 94150181302272, -STORE, 94150181302272, 94150181351423, -STORE, 94150181351424, 94150182014975, -ERASE, 94150181351424, 94150181351424, -STORE, 94150181351424, 94150181896191, -STORE, 94150181896192, 94150181994495, -STORE, 94150181994496, 94150182014975, -STORE, 139679752458240, 139679752630271, -ERASE, 139679752458240, 139679752458240, -STORE, 139679752458240, 139679752462335, -STORE, 139679752462336, 139679752630271, -ERASE, 139679752462336, 139679752462336, -STORE, 139679752462336, 139679752585215, -STORE, 139679752585216, 139679752617983, -STORE, 139679752617984, 139679752626175, -STORE, 139679752626176, 139679752630271, -STORE, 140735382536192, 140735382540287, -STORE, 140735382523904, 140735382536191, -STORE, 47953042538496, 47953042546687, -STORE, 47953042546688, 47953042554879, -STORE, 47953042554880, 47953042661375, -STORE, 47953042571264, 47953042661375, -STORE, 47953042554880, 47953042571263, -ERASE, 47953042571264, 47953042571264, -STORE, 47953042571264, 47953042644991, -STORE, 47953042644992, 47953042661375, -STORE, 47953042624512, 47953042644991, -STORE, 47953042571264, 47953042624511, -ERASE, 47953042571264, 47953042571264, -STORE, 47953042571264, 47953042624511, -STORE, 47953042640896, 47953042644991, -STORE, 47953042624512, 47953042640895, -ERASE, 47953042624512, 47953042624512, -STORE, 47953042624512, 47953042640895, -STORE, 47953042653184, 47953042661375, -STORE, 47953042644992, 47953042653183, -ERASE, 47953042644992, 47953042644992, -STORE, 47953042644992, 47953042653183, -ERASE, 47953042653184, 47953042653184, -STORE, 47953042653184, 47953042661375, -STORE, 47953042661376, 47953044500479, -STORE, 47953042800640, 47953044500479, -STORE, 47953042661376, 47953042800639, -ERASE, 47953042800640, 47953042800640, -STORE, 47953042800640, 47953044459519, -STORE, 47953044459520, 47953044500479, -STORE, 47953044144128, 47953044459519, -STORE, 47953042800640, 47953044144127, -ERASE, 47953042800640, 47953042800640, -STORE, 47953042800640, 47953044144127, -STORE, 47953044455424, 47953044459519, -STORE, 47953044144128, 47953044455423, -ERASE, 47953044144128, 47953044144128, -STORE, 47953044144128, 47953044455423, -STORE, 47953044484096, 47953044500479, -STORE, 47953044459520, 47953044484095, -ERASE, 47953044459520, 47953044459520, -STORE, 47953044459520, 47953044484095, -ERASE, 47953044484096, 47953044484096, -STORE, 47953044484096, 47953044500479, -STORE, 47953044484096, 47953044512767, -ERASE, 47953044459520, 47953044459520, -STORE, 47953044459520, 47953044475903, -STORE, 47953044475904, 47953044484095, -ERASE, 47953042644992, 47953042644992, -STORE, 47953042644992, 47953042649087, -STORE, 47953042649088, 47953042653183, -ERASE, 94150181994496, 94150181994496, -STORE, 94150181994496, 94150182010879, -STORE, 94150182010880, 94150182014975, -ERASE, 139679752617984, 139679752617984, -STORE, 139679752617984, 139679752622079, -STORE, 139679752622080, 139679752626175, -ERASE, 47953042538496, 47953042538496, -STORE, 140737488347136, 140737488351231, -STORE, 140737044123648, 140737488351231, -ERASE, 140737044123648, 140737044123648, -STORE, 140737044123648, 140737044127743, -STORE, 94425324294144, 94425325006847, -ERASE, 94425324294144, 94425324294144, -STORE, 94425324294144, 94425324343295, -STORE, 94425324343296, 94425325006847, -ERASE, 94425324343296, 94425324343296, -STORE, 94425324343296, 94425324888063, -STORE, 94425324888064, 94425324986367, -STORE, 94425324986368, 94425325006847, -STORE, 140382015016960, 140382015188991, -ERASE, 140382015016960, 140382015016960, -STORE, 140382015016960, 140382015021055, -STORE, 140382015021056, 140382015188991, -ERASE, 140382015021056, 140382015021056, -STORE, 140382015021056, 140382015143935, -STORE, 140382015143936, 140382015176703, -STORE, 140382015176704, 140382015184895, -STORE, 140382015184896, 140382015188991, -STORE, 140737045585920, 140737045590015, -STORE, 140737045573632, 140737045585919, -STORE, 47250779979776, 47250779987967, -STORE, 47250779987968, 47250779996159, -STORE, 47250779996160, 47250780102655, -STORE, 47250780012544, 47250780102655, -STORE, 47250779996160, 47250780012543, -ERASE, 47250780012544, 47250780012544, -STORE, 47250780012544, 47250780086271, -STORE, 47250780086272, 47250780102655, -STORE, 47250780065792, 47250780086271, -STORE, 47250780012544, 47250780065791, -ERASE, 47250780012544, 47250780012544, -STORE, 47250780012544, 47250780065791, -STORE, 47250780082176, 47250780086271, -STORE, 47250780065792, 47250780082175, -ERASE, 47250780065792, 47250780065792, -STORE, 47250780065792, 47250780082175, -STORE, 47250780094464, 47250780102655, -STORE, 47250780086272, 47250780094463, -ERASE, 47250780086272, 47250780086272, -STORE, 47250780086272, 47250780094463, -ERASE, 47250780094464, 47250780094464, -STORE, 47250780094464, 47250780102655, -STORE, 47250780102656, 47250781941759, -STORE, 47250780241920, 47250781941759, -STORE, 47250780102656, 47250780241919, -ERASE, 47250780241920, 47250780241920, -STORE, 47250780241920, 47250781900799, -STORE, 47250781900800, 47250781941759, -STORE, 47250781585408, 47250781900799, -STORE, 47250780241920, 47250781585407, -ERASE, 47250780241920, 47250780241920, -STORE, 47250780241920, 47250781585407, -STORE, 47250781896704, 47250781900799, -STORE, 47250781585408, 47250781896703, -ERASE, 47250781585408, 47250781585408, -STORE, 47250781585408, 47250781896703, -STORE, 47250781925376, 47250781941759, -STORE, 47250781900800, 47250781925375, -ERASE, 47250781900800, 47250781900800, -STORE, 47250781900800, 47250781925375, -ERASE, 47250781925376, 47250781925376, -STORE, 47250781925376, 47250781941759, -STORE, 47250781925376, 47250781954047, -ERASE, 47250781900800, 47250781900800, -STORE, 47250781900800, 47250781917183, -STORE, 47250781917184, 47250781925375, -ERASE, 47250780086272, 47250780086272, -STORE, 47250780086272, 47250780090367, -STORE, 47250780090368, 47250780094463, -ERASE, 94425324986368, 94425324986368, -STORE, 94425324986368, 94425325002751, -STORE, 94425325002752, 94425325006847, -ERASE, 140382015176704, 140382015176704, -STORE, 140382015176704, 140382015180799, -STORE, 140382015180800, 140382015184895, -ERASE, 47250779979776, 47250779979776, -STORE, 94425351438336, 94425351573503, -STORE, 140737488347136, 140737488351231, -STORE, 140736801144832, 140737488351231, -ERASE, 140736801144832, 140736801144832, -STORE, 140736801144832, 140736801148927, -STORE, 94629429358592, 94629430071295, -ERASE, 94629429358592, 94629429358592, -STORE, 94629429358592, 94629429407743, -STORE, 94629429407744, 94629430071295, -ERASE, 94629429407744, 94629429407744, -STORE, 94629429407744, 94629429952511, -STORE, 94629429952512, 94629430050815, -STORE, 94629430050816, 94629430071295, -STORE, 139801685483520, 139801685655551, -ERASE, 139801685483520, 139801685483520, -STORE, 139801685483520, 139801685487615, -STORE, 139801685487616, 139801685655551, -ERASE, 139801685487616, 139801685487616, -STORE, 139801685487616, 139801685610495, -STORE, 139801685610496, 139801685643263, -STORE, 139801685643264, 139801685651455, -STORE, 139801685651456, 139801685655551, -STORE, 140736801198080, 140736801202175, -STORE, 140736801185792, 140736801198079, -STORE, 47831109513216, 47831109521407, -STORE, 47831109521408, 47831109529599, -STORE, 47831109529600, 47831109636095, -STORE, 47831109545984, 47831109636095, -STORE, 47831109529600, 47831109545983, -ERASE, 47831109545984, 47831109545984, -STORE, 47831109545984, 47831109619711, -STORE, 47831109619712, 47831109636095, -STORE, 47831109599232, 47831109619711, -STORE, 47831109545984, 47831109599231, -ERASE, 47831109545984, 47831109545984, -STORE, 47831109545984, 47831109599231, -STORE, 47831109615616, 47831109619711, -STORE, 47831109599232, 47831109615615, -ERASE, 47831109599232, 47831109599232, -STORE, 47831109599232, 47831109615615, -STORE, 47831109627904, 47831109636095, -STORE, 47831109619712, 47831109627903, -ERASE, 47831109619712, 47831109619712, -STORE, 47831109619712, 47831109627903, -ERASE, 47831109627904, 47831109627904, -STORE, 47831109627904, 47831109636095, -STORE, 47831109636096, 47831111475199, -STORE, 47831109775360, 47831111475199, -STORE, 47831109636096, 47831109775359, -ERASE, 47831109775360, 47831109775360, -STORE, 47831109775360, 47831111434239, -STORE, 47831111434240, 47831111475199, -STORE, 47831111118848, 47831111434239, -STORE, 47831109775360, 47831111118847, -ERASE, 47831109775360, 47831109775360, -STORE, 47831109775360, 47831111118847, -STORE, 47831111430144, 47831111434239, -STORE, 47831111118848, 47831111430143, -ERASE, 47831111118848, 47831111118848, -STORE, 47831111118848, 47831111430143, -STORE, 47831111458816, 47831111475199, -STORE, 47831111434240, 47831111458815, -ERASE, 47831111434240, 47831111434240, -STORE, 47831111434240, 47831111458815, -ERASE, 47831111458816, 47831111458816, -STORE, 47831111458816, 47831111475199, -STORE, 47831111458816, 47831111487487, -ERASE, 47831111434240, 47831111434240, -STORE, 47831111434240, 47831111450623, -STORE, 47831111450624, 47831111458815, -ERASE, 47831109619712, 47831109619712, -STORE, 47831109619712, 47831109623807, -STORE, 47831109623808, 47831109627903, -ERASE, 94629430050816, 94629430050816, -STORE, 94629430050816, 94629430067199, -STORE, 94629430067200, 94629430071295, -ERASE, 139801685643264, 139801685643264, -STORE, 139801685643264, 139801685647359, -STORE, 139801685647360, 139801685651455, -ERASE, 47831109513216, 47831109513216, -STORE, 140737488347136, 140737488351231, -STORE, 140729419612160, 140737488351231, -ERASE, 140729419612160, 140729419612160, -STORE, 140729419612160, 140729419616255, -STORE, 94443354148864, 94443354861567, -ERASE, 94443354148864, 94443354148864, -STORE, 94443354148864, 94443354198015, -STORE, 94443354198016, 94443354861567, -ERASE, 94443354198016, 94443354198016, -STORE, 94443354198016, 94443354742783, -STORE, 94443354742784, 94443354841087, -STORE, 94443354841088, 94443354861567, -STORE, 139741700038656, 139741700210687, -ERASE, 139741700038656, 139741700038656, -STORE, 139741700038656, 139741700042751, -STORE, 139741700042752, 139741700210687, -ERASE, 139741700042752, 139741700042752, -STORE, 139741700042752, 139741700165631, -STORE, 139741700165632, 139741700198399, -STORE, 139741700198400, 139741700206591, -STORE, 139741700206592, 139741700210687, -STORE, 140729420574720, 140729420578815, -STORE, 140729420562432, 140729420574719, -STORE, 47891094958080, 47891094966271, -STORE, 47891094966272, 47891094974463, -STORE, 47891094974464, 47891095080959, -STORE, 47891094990848, 47891095080959, -STORE, 47891094974464, 47891094990847, -ERASE, 47891094990848, 47891094990848, -STORE, 47891094990848, 47891095064575, -STORE, 47891095064576, 47891095080959, -STORE, 47891095044096, 47891095064575, -STORE, 47891094990848, 47891095044095, -ERASE, 47891094990848, 47891094990848, -STORE, 47891094990848, 47891095044095, -STORE, 47891095060480, 47891095064575, -STORE, 47891095044096, 47891095060479, -ERASE, 47891095044096, 47891095044096, -STORE, 47891095044096, 47891095060479, -STORE, 47891095072768, 47891095080959, -STORE, 47891095064576, 47891095072767, -ERASE, 47891095064576, 47891095064576, -STORE, 47891095064576, 47891095072767, -ERASE, 47891095072768, 47891095072768, -STORE, 47891095072768, 47891095080959, -STORE, 47891095080960, 47891096920063, -STORE, 47891095220224, 47891096920063, -STORE, 47891095080960, 47891095220223, -ERASE, 47891095220224, 47891095220224, -STORE, 47891095220224, 47891096879103, -STORE, 47891096879104, 47891096920063, -STORE, 47891096563712, 47891096879103, -STORE, 47891095220224, 47891096563711, -ERASE, 47891095220224, 47891095220224, -STORE, 47891095220224, 47891096563711, -STORE, 47891096875008, 47891096879103, -STORE, 47891096563712, 47891096875007, -ERASE, 47891096563712, 47891096563712, -STORE, 47891096563712, 47891096875007, -STORE, 47891096903680, 47891096920063, -STORE, 47891096879104, 47891096903679, -ERASE, 47891096879104, 47891096879104, -STORE, 47891096879104, 47891096903679, -ERASE, 47891096903680, 47891096903680, -STORE, 47891096903680, 47891096920063, -STORE, 47891096903680, 47891096932351, -ERASE, 47891096879104, 47891096879104, -STORE, 47891096879104, 47891096895487, -STORE, 47891096895488, 47891096903679, -ERASE, 47891095064576, 47891095064576, -STORE, 47891095064576, 47891095068671, -STORE, 47891095068672, 47891095072767, -ERASE, 94443354841088, 94443354841088, -STORE, 94443354841088, 94443354857471, -STORE, 94443354857472, 94443354861567, -ERASE, 139741700198400, 139741700198400, -STORE, 139741700198400, 139741700202495, -STORE, 139741700202496, 139741700206591, -ERASE, 47891094958080, 47891094958080, -STORE, 94443360825344, 94443360960511, -STORE, 140737488347136, 140737488351231, -STORE, 140722961661952, 140737488351231, -ERASE, 140722961661952, 140722961661952, -STORE, 140722961661952, 140722961666047, -STORE, 94878388944896, 94878389657599, -ERASE, 94878388944896, 94878388944896, -STORE, 94878388944896, 94878388994047, -STORE, 94878388994048, 94878389657599, -ERASE, 94878388994048, 94878388994048, -STORE, 94878388994048, 94878389538815, -STORE, 94878389538816, 94878389637119, -STORE, 94878389637120, 94878389657599, -STORE, 140210690056192, 140210690228223, -ERASE, 140210690056192, 140210690056192, -STORE, 140210690056192, 140210690060287, -STORE, 140210690060288, 140210690228223, -ERASE, 140210690060288, 140210690060288, -STORE, 140210690060288, 140210690183167, -STORE, 140210690183168, 140210690215935, -STORE, 140210690215936, 140210690224127, -STORE, 140210690224128, 140210690228223, -STORE, 140722963148800, 140722963152895, -STORE, 140722963136512, 140722963148799, -STORE, 47422104940544, 47422104948735, -STORE, 47422104948736, 47422104956927, -STORE, 47422104956928, 47422105063423, -STORE, 47422104973312, 47422105063423, -STORE, 47422104956928, 47422104973311, -ERASE, 47422104973312, 47422104973312, -STORE, 47422104973312, 47422105047039, -STORE, 47422105047040, 47422105063423, -STORE, 47422105026560, 47422105047039, -STORE, 47422104973312, 47422105026559, -ERASE, 47422104973312, 47422104973312, -STORE, 47422104973312, 47422105026559, -STORE, 47422105042944, 47422105047039, -STORE, 47422105026560, 47422105042943, -ERASE, 47422105026560, 47422105026560, -STORE, 47422105026560, 47422105042943, -STORE, 47422105055232, 47422105063423, -STORE, 47422105047040, 47422105055231, -ERASE, 47422105047040, 47422105047040, -STORE, 47422105047040, 47422105055231, -ERASE, 47422105055232, 47422105055232, -STORE, 47422105055232, 47422105063423, -STORE, 47422105063424, 47422106902527, -STORE, 47422105202688, 47422106902527, -STORE, 47422105063424, 47422105202687, -ERASE, 47422105202688, 47422105202688, -STORE, 47422105202688, 47422106861567, -STORE, 47422106861568, 47422106902527, -STORE, 47422106546176, 47422106861567, -STORE, 47422105202688, 47422106546175, -ERASE, 47422105202688, 47422105202688, -STORE, 47422105202688, 47422106546175, -STORE, 47422106857472, 47422106861567, -STORE, 47422106546176, 47422106857471, -ERASE, 47422106546176, 47422106546176, -STORE, 47422106546176, 47422106857471, -STORE, 47422106886144, 47422106902527, -STORE, 47422106861568, 47422106886143, -ERASE, 47422106861568, 47422106861568, -STORE, 47422106861568, 47422106886143, -ERASE, 47422106886144, 47422106886144, -STORE, 47422106886144, 47422106902527, -STORE, 47422106886144, 47422106914815, -ERASE, 47422106861568, 47422106861568, -STORE, 47422106861568, 47422106877951, -STORE, 47422106877952, 47422106886143, -ERASE, 47422105047040, 47422105047040, -STORE, 47422105047040, 47422105051135, -STORE, 47422105051136, 47422105055231, -ERASE, 94878389637120, 94878389637120, -STORE, 94878389637120, 94878389653503, -STORE, 94878389653504, 94878389657599, -ERASE, 140210690215936, 140210690215936, -STORE, 140210690215936, 140210690220031, -STORE, 140210690220032, 140210690224127, -ERASE, 47422104940544, 47422104940544, -STORE, 140737488347136, 140737488351231, -STORE, 140727690309632, 140737488351231, -ERASE, 140727690309632, 140727690309632, -STORE, 140727690309632, 140727690313727, -STORE, 94121892208640, 94121892921343, -ERASE, 94121892208640, 94121892208640, -STORE, 94121892208640, 94121892257791, -STORE, 94121892257792, 94121892921343, -ERASE, 94121892257792, 94121892257792, -STORE, 94121892257792, 94121892802559, -STORE, 94121892802560, 94121892900863, -STORE, 94121892900864, 94121892921343, -STORE, 140662438326272, 140662438498303, -ERASE, 140662438326272, 140662438326272, -STORE, 140662438326272, 140662438330367, -STORE, 140662438330368, 140662438498303, -ERASE, 140662438330368, 140662438330368, -STORE, 140662438330368, 140662438453247, -STORE, 140662438453248, 140662438486015, -STORE, 140662438486016, 140662438494207, -STORE, 140662438494208, 140662438498303, -STORE, 140727690379264, 140727690383359, -STORE, 140727690366976, 140727690379263, -STORE, 46970356670464, 46970356678655, -STORE, 46970356678656, 46970356686847, -STORE, 46970356686848, 46970356793343, -STORE, 46970356703232, 46970356793343, -STORE, 46970356686848, 46970356703231, -ERASE, 46970356703232, 46970356703232, -STORE, 46970356703232, 46970356776959, -STORE, 46970356776960, 46970356793343, -STORE, 46970356756480, 46970356776959, -STORE, 46970356703232, 46970356756479, -ERASE, 46970356703232, 46970356703232, -STORE, 46970356703232, 46970356756479, -STORE, 46970356772864, 46970356776959, -STORE, 46970356756480, 46970356772863, -ERASE, 46970356756480, 46970356756480, -STORE, 46970356756480, 46970356772863, -STORE, 46970356785152, 46970356793343, -STORE, 46970356776960, 46970356785151, -ERASE, 46970356776960, 46970356776960, -STORE, 46970356776960, 46970356785151, -ERASE, 46970356785152, 46970356785152, -STORE, 46970356785152, 46970356793343, -STORE, 46970356793344, 46970358632447, -STORE, 46970356932608, 46970358632447, -STORE, 46970356793344, 46970356932607, -ERASE, 46970356932608, 46970356932608, -STORE, 46970356932608, 46970358591487, -STORE, 46970358591488, 46970358632447, -STORE, 46970358276096, 46970358591487, -STORE, 46970356932608, 46970358276095, -ERASE, 46970356932608, 46970356932608, -STORE, 46970356932608, 46970358276095, -STORE, 46970358587392, 46970358591487, -STORE, 46970358276096, 46970358587391, -ERASE, 46970358276096, 46970358276096, -STORE, 46970358276096, 46970358587391, -STORE, 46970358616064, 46970358632447, -STORE, 46970358591488, 46970358616063, -ERASE, 46970358591488, 46970358591488, -STORE, 46970358591488, 46970358616063, -ERASE, 46970358616064, 46970358616064, -STORE, 46970358616064, 46970358632447, -STORE, 46970358616064, 46970358644735, -ERASE, 46970358591488, 46970358591488, -STORE, 46970358591488, 46970358607871, -STORE, 46970358607872, 46970358616063, -ERASE, 46970356776960, 46970356776960, -STORE, 46970356776960, 46970356781055, -STORE, 46970356781056, 46970356785151, -ERASE, 94121892900864, 94121892900864, -STORE, 94121892900864, 94121892917247, -STORE, 94121892917248, 94121892921343, -ERASE, 140662438486016, 140662438486016, -STORE, 140662438486016, 140662438490111, -STORE, 140662438490112, 140662438494207, -ERASE, 46970356670464, 46970356670464, -STORE, 94121898610688, 94121898745855, -STORE, 140737488347136, 140737488351231, -STORE, 140737189351424, 140737488351231, -ERASE, 140737189351424, 140737189351424, -STORE, 140737189351424, 140737189355519, -STORE, 93847948832768, 93847949545471, -ERASE, 93847948832768, 93847948832768, -STORE, 93847948832768, 93847948881919, -STORE, 93847948881920, 93847949545471, -ERASE, 93847948881920, 93847948881920, -STORE, 93847948881920, 93847949426687, -STORE, 93847949426688, 93847949524991, -STORE, 93847949524992, 93847949545471, -STORE, 139698989985792, 139698990157823, -ERASE, 139698989985792, 139698989985792, -STORE, 139698989985792, 139698989989887, -STORE, 139698989989888, 139698990157823, -ERASE, 139698989989888, 139698989989888, -STORE, 139698989989888, 139698990112767, -STORE, 139698990112768, 139698990145535, -STORE, 139698990145536, 139698990153727, -STORE, 139698990153728, 139698990157823, -STORE, 140737189744640, 140737189748735, -STORE, 140737189732352, 140737189744639, -STORE, 47933805010944, 47933805019135, -STORE, 47933805019136, 47933805027327, -STORE, 47933805027328, 47933805133823, -STORE, 47933805043712, 47933805133823, -STORE, 47933805027328, 47933805043711, -ERASE, 47933805043712, 47933805043712, -STORE, 47933805043712, 47933805117439, -STORE, 47933805117440, 47933805133823, -STORE, 47933805096960, 47933805117439, -STORE, 47933805043712, 47933805096959, -ERASE, 47933805043712, 47933805043712, -STORE, 47933805043712, 47933805096959, -STORE, 47933805113344, 47933805117439, -STORE, 47933805096960, 47933805113343, -ERASE, 47933805096960, 47933805096960, -STORE, 47933805096960, 47933805113343, -STORE, 47933805125632, 47933805133823, -STORE, 47933805117440, 47933805125631, -ERASE, 47933805117440, 47933805117440, -STORE, 47933805117440, 47933805125631, -ERASE, 47933805125632, 47933805125632, -STORE, 47933805125632, 47933805133823, -STORE, 47933805133824, 47933806972927, -STORE, 47933805273088, 47933806972927, -STORE, 47933805133824, 47933805273087, -ERASE, 47933805273088, 47933805273088, -STORE, 47933805273088, 47933806931967, -STORE, 47933806931968, 47933806972927, -STORE, 47933806616576, 47933806931967, -STORE, 47933805273088, 47933806616575, -ERASE, 47933805273088, 47933805273088, -STORE, 47933805273088, 47933806616575, -STORE, 47933806927872, 47933806931967, -STORE, 47933806616576, 47933806927871, -ERASE, 47933806616576, 47933806616576, -STORE, 47933806616576, 47933806927871, -STORE, 47933806956544, 47933806972927, -STORE, 47933806931968, 47933806956543, -ERASE, 47933806931968, 47933806931968, -STORE, 47933806931968, 47933806956543, -ERASE, 47933806956544, 47933806956544, -STORE, 47933806956544, 47933806972927, -STORE, 47933806956544, 47933806985215, -ERASE, 47933806931968, 47933806931968, -STORE, 47933806931968, 47933806948351, -STORE, 47933806948352, 47933806956543, -ERASE, 47933805117440, 47933805117440, -STORE, 47933805117440, 47933805121535, -STORE, 47933805121536, 47933805125631, -ERASE, 93847949524992, 93847949524992, -STORE, 93847949524992, 93847949541375, -STORE, 93847949541376, 93847949545471, -ERASE, 139698990145536, 139698990145536, -STORE, 139698990145536, 139698990149631, -STORE, 139698990149632, 139698990153727, -ERASE, 47933805010944, 47933805010944, -STORE, 140737488347136, 140737488351231, -STORE, 140725553991680, 140737488351231, -ERASE, 140725553991680, 140725553991680, -STORE, 140725553991680, 140725553995775, -STORE, 93980056248320, 93980056961023, -ERASE, 93980056248320, 93980056248320, -STORE, 93980056248320, 93980056297471, -STORE, 93980056297472, 93980056961023, -ERASE, 93980056297472, 93980056297472, -STORE, 93980056297472, 93980056842239, -STORE, 93980056842240, 93980056940543, -STORE, 93980056940544, 93980056961023, -STORE, 140146588971008, 140146589143039, -ERASE, 140146588971008, 140146588971008, -STORE, 140146588971008, 140146588975103, -STORE, 140146588975104, 140146589143039, -ERASE, 140146588975104, 140146588975104, -STORE, 140146588975104, 140146589097983, -STORE, 140146589097984, 140146589130751, -STORE, 140146589130752, 140146589138943, -STORE, 140146589138944, 140146589143039, -STORE, 140725554860032, 140725554864127, -STORE, 140725554847744, 140725554860031, -STORE, 47486206025728, 47486206033919, -STORE, 47486206033920, 47486206042111, -STORE, 47486206042112, 47486206148607, -STORE, 47486206058496, 47486206148607, -STORE, 47486206042112, 47486206058495, -ERASE, 47486206058496, 47486206058496, -STORE, 47486206058496, 47486206132223, -STORE, 47486206132224, 47486206148607, -STORE, 47486206111744, 47486206132223, -STORE, 47486206058496, 47486206111743, -ERASE, 47486206058496, 47486206058496, -STORE, 47486206058496, 47486206111743, -STORE, 47486206128128, 47486206132223, -STORE, 47486206111744, 47486206128127, -ERASE, 47486206111744, 47486206111744, -STORE, 47486206111744, 47486206128127, -STORE, 47486206140416, 47486206148607, -STORE, 47486206132224, 47486206140415, -ERASE, 47486206132224, 47486206132224, -STORE, 47486206132224, 47486206140415, -ERASE, 47486206140416, 47486206140416, -STORE, 47486206140416, 47486206148607, -STORE, 47486206148608, 47486207987711, -STORE, 47486206287872, 47486207987711, -STORE, 47486206148608, 47486206287871, -ERASE, 47486206287872, 47486206287872, -STORE, 47486206287872, 47486207946751, -STORE, 47486207946752, 47486207987711, -STORE, 47486207631360, 47486207946751, -STORE, 47486206287872, 47486207631359, -ERASE, 47486206287872, 47486206287872, -STORE, 47486206287872, 47486207631359, -STORE, 47486207942656, 47486207946751, -STORE, 47486207631360, 47486207942655, -ERASE, 47486207631360, 47486207631360, -STORE, 47486207631360, 47486207942655, -STORE, 47486207971328, 47486207987711, -STORE, 47486207946752, 47486207971327, -ERASE, 47486207946752, 47486207946752, -STORE, 47486207946752, 47486207971327, -ERASE, 47486207971328, 47486207971328, -STORE, 47486207971328, 47486207987711, -STORE, 47486207971328, 47486207999999, -ERASE, 47486207946752, 47486207946752, -STORE, 47486207946752, 47486207963135, -STORE, 47486207963136, 47486207971327, -ERASE, 47486206132224, 47486206132224, -STORE, 47486206132224, 47486206136319, -STORE, 47486206136320, 47486206140415, -ERASE, 93980056940544, 93980056940544, -STORE, 93980056940544, 93980056956927, -STORE, 93980056956928, 93980056961023, -ERASE, 140146589130752, 140146589130752, -STORE, 140146589130752, 140146589134847, -STORE, 140146589134848, 140146589138943, -ERASE, 47486206025728, 47486206025728, -STORE, 93980070006784, 93980070141951, -STORE, 140737488347136, 140737488351231, -STORE, 140727334776832, 140737488351231, -ERASE, 140727334776832, 140727334776832, -STORE, 140727334776832, 140727334780927, -STORE, 94049747247104, 94049747959807, -ERASE, 94049747247104, 94049747247104, -STORE, 94049747247104, 94049747296255, -STORE, 94049747296256, 94049747959807, -ERASE, 94049747296256, 94049747296256, -STORE, 94049747296256, 94049747841023, -STORE, 94049747841024, 94049747939327, -STORE, 94049747939328, 94049747959807, -STORE, 140227307216896, 140227307388927, -ERASE, 140227307216896, 140227307216896, -STORE, 140227307216896, 140227307220991, -STORE, 140227307220992, 140227307388927, -ERASE, 140227307220992, 140227307220992, -STORE, 140227307220992, 140227307343871, -STORE, 140227307343872, 140227307376639, -STORE, 140227307376640, 140227307384831, -STORE, 140227307384832, 140227307388927, -STORE, 140727335337984, 140727335342079, -STORE, 140727335325696, 140727335337983, -STORE, 47405487779840, 47405487788031, -STORE, 47405487788032, 47405487796223, -STORE, 47405487796224, 47405487902719, -STORE, 47405487812608, 47405487902719, -STORE, 47405487796224, 47405487812607, -ERASE, 47405487812608, 47405487812608, -STORE, 47405487812608, 47405487886335, -STORE, 47405487886336, 47405487902719, -STORE, 47405487865856, 47405487886335, -STORE, 47405487812608, 47405487865855, -ERASE, 47405487812608, 47405487812608, -STORE, 47405487812608, 47405487865855, -STORE, 47405487882240, 47405487886335, -STORE, 47405487865856, 47405487882239, -ERASE, 47405487865856, 47405487865856, -STORE, 47405487865856, 47405487882239, -STORE, 47405487894528, 47405487902719, -STORE, 47405487886336, 47405487894527, -ERASE, 47405487886336, 47405487886336, -STORE, 47405487886336, 47405487894527, -ERASE, 47405487894528, 47405487894528, -STORE, 47405487894528, 47405487902719, -STORE, 47405487902720, 47405489741823, -STORE, 47405488041984, 47405489741823, -STORE, 47405487902720, 47405488041983, -ERASE, 47405488041984, 47405488041984, -STORE, 47405488041984, 47405489700863, -STORE, 47405489700864, 47405489741823, -STORE, 47405489385472, 47405489700863, -STORE, 47405488041984, 47405489385471, -ERASE, 47405488041984, 47405488041984, -STORE, 47405488041984, 47405489385471, -STORE, 47405489696768, 47405489700863, -STORE, 47405489385472, 47405489696767, -ERASE, 47405489385472, 47405489385472, -STORE, 47405489385472, 47405489696767, -STORE, 47405489725440, 47405489741823, -STORE, 47405489700864, 47405489725439, -ERASE, 47405489700864, 47405489700864, -STORE, 47405489700864, 47405489725439, -ERASE, 47405489725440, 47405489725440, -STORE, 47405489725440, 47405489741823, -STORE, 47405489725440, 47405489754111, -ERASE, 47405489700864, 47405489700864, -STORE, 47405489700864, 47405489717247, -STORE, 47405489717248, 47405489725439, -ERASE, 47405487886336, 47405487886336, -STORE, 47405487886336, 47405487890431, -STORE, 47405487890432, 47405487894527, -ERASE, 94049747939328, 94049747939328, -STORE, 94049747939328, 94049747955711, -STORE, 94049747955712, 94049747959807, -ERASE, 140227307376640, 140227307376640, -STORE, 140227307376640, 140227307380735, -STORE, 140227307380736, 140227307384831, -ERASE, 47405487779840, 47405487779840, -STORE, 94049758810112, 94049758945279, -STORE, 140737488347136, 140737488351231, -STORE, 140727079718912, 140737488351231, -ERASE, 140727079718912, 140727079718912, -STORE, 140727079718912, 140727079723007, -STORE, 94250996527104, 94250997239807, -ERASE, 94250996527104, 94250996527104, -STORE, 94250996527104, 94250996576255, -STORE, 94250996576256, 94250997239807, -ERASE, 94250996576256, 94250996576256, -STORE, 94250996576256, 94250997121023, -STORE, 94250997121024, 94250997219327, -STORE, 94250997219328, 94250997239807, -STORE, 140060022587392, 140060022759423, -ERASE, 140060022587392, 140060022587392, -STORE, 140060022587392, 140060022591487, -STORE, 140060022591488, 140060022759423, -ERASE, 140060022591488, 140060022591488, -STORE, 140060022591488, 140060022714367, -STORE, 140060022714368, 140060022747135, -STORE, 140060022747136, 140060022755327, -STORE, 140060022755328, 140060022759423, -STORE, 140727079788544, 140727079792639, -STORE, 140727079776256, 140727079788543, -/* this next one caused issues when lowering the efficiency */ -STORE, 47572772409344, 47572772417535, -STORE, 47572772417536, 47572772425727, -STORE, 47572772425728, 47572772532223, -STORE, 47572772442112, 47572772532223, -STORE, 47572772425728, 47572772442111, -ERASE, 47572772442112, 47572772442112, -STORE, 47572772442112, 47572772515839, -STORE, 47572772515840, 47572772532223, -STORE, 47572772495360, 47572772515839, -STORE, 47572772442112, 47572772495359, -ERASE, 47572772442112, 47572772442112, -STORE, 47572772442112, 47572772495359, -STORE, 47572772511744, 47572772515839, -STORE, 47572772495360, 47572772511743, -ERASE, 47572772495360, 47572772495360, -STORE, 47572772495360, 47572772511743, -STORE, 47572772524032, 47572772532223, -STORE, 47572772515840, 47572772524031, -ERASE, 47572772515840, 47572772515840, -STORE, 47572772515840, 47572772524031, -ERASE, 47572772524032, 47572772524032, -STORE, 47572772524032, 47572772532223, -STORE, 47572772532224, 47572774371327, -STORE, 47572772671488, 47572774371327, -STORE, 47572772532224, 47572772671487, -ERASE, 47572772671488, 47572772671488, -STORE, 47572772671488, 47572774330367, -STORE, 47572774330368, 47572774371327, -STORE, 47572774014976, 47572774330367, -STORE, 47572772671488, 47572774014975, -ERASE, 47572772671488, 47572772671488, -STORE, 47572772671488, 47572774014975, -STORE, 47572774326272, 47572774330367, -STORE, 47572774014976, 47572774326271, -ERASE, 47572774014976, 47572774014976, -STORE, 47572774014976, 47572774326271, -STORE, 47572774354944, 47572774371327, -STORE, 47572774330368, 47572774354943, -ERASE, 47572774330368, 47572774330368, -STORE, 47572774330368, 47572774354943, -ERASE, 47572774354944, 47572774354944, -STORE, 47572774354944, 47572774371327, -STORE, 47572774354944, 47572774383615, -ERASE, 47572774330368, 47572774330368, -STORE, 47572774330368, 47572774346751, -STORE, 47572774346752, 47572774354943, -ERASE, 47572772515840, 47572772515840, -STORE, 47572772515840, 47572772519935, -STORE, 47572772519936, 47572772524031, -ERASE, 94250997219328, 94250997219328, -STORE, 94250997219328, 94250997235711, -STORE, 94250997235712, 94250997239807, -ERASE, 140060022747136, 140060022747136, -STORE, 140060022747136, 140060022751231, -STORE, 140060022751232, 140060022755327, -ERASE, 47572772409344, 47572772409344, -STORE, 94251018305536, 94251018440703, -STORE, 140737488347136, 140737488351231, -STORE, 140730012389376, 140737488351231, -ERASE, 140730012389376, 140730012389376, -STORE, 140730012389376, 140730012393471, -STORE, 94382607675392, 94382607695871, -ERASE, 94382607675392, 94382607675392, -STORE, 94382607675392, 94382607679487, -STORE, 94382607679488, 94382607695871, -ERASE, 94382607679488, 94382607679488, -STORE, 94382607679488, 94382607683583, -STORE, 94382607683584, 94382607687679, -STORE, 94382607687680, 94382607695871, -STORE, 140252451454976, 140252451627007, -ERASE, 140252451454976, 140252451454976, -STORE, 140252451454976, 140252451459071, -STORE, 140252451459072, 140252451627007, -ERASE, 140252451459072, 140252451459072, -STORE, 140252451459072, 140252451581951, -STORE, 140252451581952, 140252451614719, -STORE, 140252451614720, 140252451622911, -STORE, 140252451622912, 140252451627007, -STORE, 140730013548544, 140730013552639, -STORE, 140730013536256, 140730013548543, -STORE, 47380343541760, 47380343549951, -STORE, 47380343549952, 47380343558143, -STORE, 47380343558144, 47380345397247, -STORE, 47380343697408, 47380345397247, -STORE, 47380343558144, 47380343697407, -ERASE, 47380343697408, 47380343697408, -STORE, 47380343697408, 47380345356287, -STORE, 47380345356288, 47380345397247, -STORE, 47380345040896, 47380345356287, -STORE, 47380343697408, 47380345040895, -ERASE, 47380343697408, 47380343697408, -STORE, 47380343697408, 47380345040895, -STORE, 47380345352192, 47380345356287, -STORE, 47380345040896, 47380345352191, -ERASE, 47380345040896, 47380345040896, -STORE, 47380345040896, 47380345352191, -STORE, 47380345380864, 47380345397247, -STORE, 47380345356288, 47380345380863, -ERASE, 47380345356288, 47380345356288, -STORE, 47380345356288, 47380345380863, -ERASE, 47380345380864, 47380345380864, -STORE, 47380345380864, 47380345397247, -ERASE, 47380345356288, 47380345356288, -STORE, 47380345356288, 47380345372671, -STORE, 47380345372672, 47380345380863, -ERASE, 94382607687680, 94382607687680, -STORE, 94382607687680, 94382607691775, -STORE, 94382607691776, 94382607695871, -ERASE, 140252451614720, 140252451614720, -STORE, 140252451614720, 140252451618815, -STORE, 140252451618816, 140252451622911, -ERASE, 47380343541760, 47380343541760, -STORE, 94382626803712, 94382626938879, -STORE, 140737488347136, 140737488351231, -STORE, 140730900271104, 140737488351231, -ERASE, 140730900271104, 140730900271104, -STORE, 140730900271104, 140730900275199, -STORE, 93855478120448, 93855478337535, -ERASE, 93855478120448, 93855478120448, -STORE, 93855478120448, 93855478198271, -STORE, 93855478198272, 93855478337535, -ERASE, 93855478198272, 93855478198272, -STORE, 93855478198272, 93855478243327, -STORE, 93855478243328, 93855478288383, -STORE, 93855478288384, 93855478337535, -STORE, 140092686573568, 140092686745599, -ERASE, 140092686573568, 140092686573568, -STORE, 140092686573568, 140092686577663, -STORE, 140092686577664, 140092686745599, -ERASE, 140092686577664, 140092686577664, -STORE, 140092686577664, 140092686700543, -STORE, 140092686700544, 140092686733311, -STORE, 140092686733312, 140092686741503, -STORE, 140092686741504, 140092686745599, -STORE, 140730900537344, 140730900541439, -STORE, 140730900525056, 140730900537343, -STORE, 47540108423168, 47540108431359, -STORE, 47540108431360, 47540108439551, -STORE, 47540108439552, 47540110278655, -STORE, 47540108578816, 47540110278655, -STORE, 47540108439552, 47540108578815, -ERASE, 47540108578816, 47540108578816, -STORE, 47540108578816, 47540110237695, -STORE, 47540110237696, 47540110278655, -STORE, 47540109922304, 47540110237695, -STORE, 47540108578816, 47540109922303, -ERASE, 47540108578816, 47540108578816, -STORE, 47540108578816, 47540109922303, -STORE, 47540110233600, 47540110237695, -STORE, 47540109922304, 47540110233599, -ERASE, 47540109922304, 47540109922304, -STORE, 47540109922304, 47540110233599, -STORE, 47540110262272, 47540110278655, -STORE, 47540110237696, 47540110262271, -ERASE, 47540110237696, 47540110237696, -STORE, 47540110237696, 47540110262271, -ERASE, 47540110262272, 47540110262272, -STORE, 47540110262272, 47540110278655, -ERASE, 47540110237696, 47540110237696, -STORE, 47540110237696, 47540110254079, -STORE, 47540110254080, 47540110262271, -ERASE, 93855478288384, 93855478288384, -STORE, 93855478288384, 93855478333439, -STORE, 93855478333440, 93855478337535, -ERASE, 140092686733312, 140092686733312, -STORE, 140092686733312, 140092686737407, -STORE, 140092686737408, 140092686741503, -ERASE, 47540108423168, 47540108423168, -STORE, 93855492222976, 93855492358143, -STORE, 93855492222976, 93855492493311, -STORE, 140737488347136, 140737488351231, -STORE, 140733498146816, 140737488351231, -ERASE, 140733498146816, 140733498146816, -STORE, 140733498146816, 140733498150911, -STORE, 94170739654656, 94170740367359, -ERASE, 94170739654656, 94170739654656, -STORE, 94170739654656, 94170739703807, -STORE, 94170739703808, 94170740367359, -ERASE, 94170739703808, 94170739703808, -STORE, 94170739703808, 94170740248575, -STORE, 94170740248576, 94170740346879, -STORE, 94170740346880, 94170740367359, -STORE, 140024788877312, 140024789049343, -ERASE, 140024788877312, 140024788877312, -STORE, 140024788877312, 140024788881407, -STORE, 140024788881408, 140024789049343, -ERASE, 140024788881408, 140024788881408, -STORE, 140024788881408, 140024789004287, -STORE, 140024789004288, 140024789037055, -STORE, 140024789037056, 140024789045247, -STORE, 140024789045248, 140024789049343, -STORE, 140733499023360, 140733499027455, -STORE, 140733499011072, 140733499023359, -STORE, 47608006119424, 47608006127615, -STORE, 47608006127616, 47608006135807, -STORE, 47608006135808, 47608006242303, -STORE, 47608006152192, 47608006242303, -STORE, 47608006135808, 47608006152191, -ERASE, 47608006152192, 47608006152192, -STORE, 47608006152192, 47608006225919, -STORE, 47608006225920, 47608006242303, -STORE, 47608006205440, 47608006225919, -STORE, 47608006152192, 47608006205439, -ERASE, 47608006152192, 47608006152192, -STORE, 47608006152192, 47608006205439, -STORE, 47608006221824, 47608006225919, -STORE, 47608006205440, 47608006221823, -ERASE, 47608006205440, 47608006205440, -STORE, 47608006205440, 47608006221823, -STORE, 47608006234112, 47608006242303, -STORE, 47608006225920, 47608006234111, -ERASE, 47608006225920, 47608006225920, -STORE, 47608006225920, 47608006234111, -ERASE, 47608006234112, 47608006234112, -STORE, 47608006234112, 47608006242303, -STORE, 47608006242304, 47608008081407, -STORE, 47608006381568, 47608008081407, -STORE, 47608006242304, 47608006381567, -ERASE, 47608006381568, 47608006381568, -STORE, 47608006381568, 47608008040447, -STORE, 47608008040448, 47608008081407, -STORE, 47608007725056, 47608008040447, -STORE, 47608006381568, 47608007725055, -ERASE, 47608006381568, 47608006381568, -STORE, 47608006381568, 47608007725055, -STORE, 47608008036352, 47608008040447, -STORE, 47608007725056, 47608008036351, -ERASE, 47608007725056, 47608007725056, -STORE, 47608007725056, 47608008036351, -STORE, 47608008065024, 47608008081407, -STORE, 47608008040448, 47608008065023, -ERASE, 47608008040448, 47608008040448, -STORE, 47608008040448, 47608008065023, -ERASE, 47608008065024, 47608008065024, -STORE, 47608008065024, 47608008081407, -STORE, 47608008065024, 47608008093695, -ERASE, 47608008040448, 47608008040448, -STORE, 47608008040448, 47608008056831, -STORE, 47608008056832, 47608008065023, -ERASE, 47608006225920, 47608006225920, -STORE, 47608006225920, 47608006230015, -STORE, 47608006230016, 47608006234111, -ERASE, 94170740346880, 94170740346880, -STORE, 94170740346880, 94170740363263, -STORE, 94170740363264, 94170740367359, -ERASE, 140024789037056, 140024789037056, -STORE, 140024789037056, 140024789041151, -STORE, 140024789041152, 140024789045247, -ERASE, 47608006119424, 47608006119424, -STORE, 140737488347136, 140737488351231, -STORE, 140730264326144, 140737488351231, -ERASE, 140730264326144, 140730264326144, -STORE, 140730264326144, 140730264330239, -STORE, 94653216407552, 94653217120255, -ERASE, 94653216407552, 94653216407552, -STORE, 94653216407552, 94653216456703, -STORE, 94653216456704, 94653217120255, -ERASE, 94653216456704, 94653216456704, -STORE, 94653216456704, 94653217001471, -STORE, 94653217001472, 94653217099775, -STORE, 94653217099776, 94653217120255, -STORE, 140103617011712, 140103617183743, -ERASE, 140103617011712, 140103617011712, -STORE, 140103617011712, 140103617015807, -STORE, 140103617015808, 140103617183743, -ERASE, 140103617015808, 140103617015808, -STORE, 140103617015808, 140103617138687, -STORE, 140103617138688, 140103617171455, -STORE, 140103617171456, 140103617179647, -STORE, 140103617179648, 140103617183743, -STORE, 140730265427968, 140730265432063, -STORE, 140730265415680, 140730265427967, -STORE, 47529177985024, 47529177993215, -STORE, 47529177993216, 47529178001407, -STORE, 47529178001408, 47529178107903, -STORE, 47529178017792, 47529178107903, -STORE, 47529178001408, 47529178017791, -ERASE, 47529178017792, 47529178017792, -STORE, 47529178017792, 47529178091519, -STORE, 47529178091520, 47529178107903, -STORE, 47529178071040, 47529178091519, -STORE, 47529178017792, 47529178071039, -ERASE, 47529178017792, 47529178017792, -STORE, 47529178017792, 47529178071039, -STORE, 47529178087424, 47529178091519, -STORE, 47529178071040, 47529178087423, -ERASE, 47529178071040, 47529178071040, -STORE, 47529178071040, 47529178087423, -STORE, 47529178099712, 47529178107903, -STORE, 47529178091520, 47529178099711, -ERASE, 47529178091520, 47529178091520, -STORE, 47529178091520, 47529178099711, -ERASE, 47529178099712, 47529178099712, -STORE, 47529178099712, 47529178107903, -STORE, 47529178107904, 47529179947007, -STORE, 47529178247168, 47529179947007, -STORE, 47529178107904, 47529178247167, -ERASE, 47529178247168, 47529178247168, -STORE, 47529178247168, 47529179906047, -STORE, 47529179906048, 47529179947007, -STORE, 47529179590656, 47529179906047, -STORE, 47529178247168, 47529179590655, -ERASE, 47529178247168, 47529178247168, -STORE, 47529178247168, 47529179590655, -STORE, 47529179901952, 47529179906047, -STORE, 47529179590656, 47529179901951, -ERASE, 47529179590656, 47529179590656, -STORE, 47529179590656, 47529179901951, -STORE, 47529179930624, 47529179947007, -STORE, 47529179906048, 47529179930623, -ERASE, 47529179906048, 47529179906048, -STORE, 47529179906048, 47529179930623, -ERASE, 47529179930624, 47529179930624, -STORE, 47529179930624, 47529179947007, -STORE, 47529179930624, 47529179959295, -ERASE, 47529179906048, 47529179906048, -STORE, 47529179906048, 47529179922431, -STORE, 47529179922432, 47529179930623, -ERASE, 47529178091520, 47529178091520, -STORE, 47529178091520, 47529178095615, -STORE, 47529178095616, 47529178099711, -ERASE, 94653217099776, 94653217099776, -STORE, 94653217099776, 94653217116159, -STORE, 94653217116160, 94653217120255, -ERASE, 140103617171456, 140103617171456, -STORE, 140103617171456, 140103617175551, -STORE, 140103617175552, 140103617179647, -ERASE, 47529177985024, 47529177985024, -STORE, 94653241135104, 94653241270271, -STORE, 140737488347136, 140737488351231, -STORE, 140736284549120, 140737488351231, -ERASE, 140736284549120, 140736284549120, -STORE, 140736284549120, 140736284553215, -STORE, 93963663822848, 93963664506879, -ERASE, 93963663822848, 93963663822848, -STORE, 93963663822848, 93963663884287, -STORE, 93963663884288, 93963664506879, -ERASE, 93963663884288, 93963663884288, -STORE, 93963663884288, 93963664240639, -STORE, 93963664240640, 93963664379903, -STORE, 93963664379904, 93963664506879, -STORE, 140450188439552, 140450188611583, -ERASE, 140450188439552, 140450188439552, -STORE, 140450188439552, 140450188443647, -STORE, 140450188443648, 140450188611583, -ERASE, 140450188443648, 140450188443648, -STORE, 140450188443648, 140450188566527, -STORE, 140450188566528, 140450188599295, -STORE, 140450188599296, 140450188607487, -STORE, 140450188607488, 140450188611583, -STORE, 140736284577792, 140736284581887, -STORE, 140736284565504, 140736284577791, -STORE, 47182606557184, 47182606565375, -STORE, 47182606565376, 47182606573567, -STORE, 47182606573568, 47182608412671, -STORE, 47182606712832, 47182608412671, -STORE, 47182606573568, 47182606712831, -ERASE, 47182606712832, 47182606712832, -STORE, 47182606712832, 47182608371711, -STORE, 47182608371712, 47182608412671, -STORE, 47182608056320, 47182608371711, -STORE, 47182606712832, 47182608056319, -ERASE, 47182606712832, 47182606712832, -STORE, 47182606712832, 47182608056319, -STORE, 47182608367616, 47182608371711, -STORE, 47182608056320, 47182608367615, -ERASE, 47182608056320, 47182608056320, -STORE, 47182608056320, 47182608367615, -STORE, 47182608396288, 47182608412671, -STORE, 47182608371712, 47182608396287, -ERASE, 47182608371712, 47182608371712, -STORE, 47182608371712, 47182608396287, -ERASE, 47182608396288, 47182608396288, -STORE, 47182608396288, 47182608412671, -STORE, 47182608412672, 47182608523263, -STORE, 47182608429056, 47182608523263, -STORE, 47182608412672, 47182608429055, -ERASE, 47182608429056, 47182608429056, -STORE, 47182608429056, 47182608515071, -STORE, 47182608515072, 47182608523263, -STORE, 47182608490496, 47182608515071, -STORE, 47182608429056, 47182608490495, -ERASE, 47182608429056, 47182608429056, -STORE, 47182608429056, 47182608490495, -STORE, 47182608510976, 47182608515071, -STORE, 47182608490496, 47182608510975, -ERASE, 47182608490496, 47182608490496, -STORE, 47182608490496, 47182608510975, -ERASE, 47182608515072, 47182608515072, -STORE, 47182608515072, 47182608523263, -STORE, 47182608523264, 47182608568319, -ERASE, 47182608523264, 47182608523264, -STORE, 47182608523264, 47182608531455, -STORE, 47182608531456, 47182608568319, -STORE, 47182608551936, 47182608568319, -STORE, 47182608531456, 47182608551935, -ERASE, 47182608531456, 47182608531456, -STORE, 47182608531456, 47182608551935, -STORE, 47182608560128, 47182608568319, -STORE, 47182608551936, 47182608560127, -ERASE, 47182608551936, 47182608551936, -STORE, 47182608551936, 47182608568319, -ERASE, 47182608551936, 47182608551936, -STORE, 47182608551936, 47182608560127, -STORE, 47182608560128, 47182608568319, -ERASE, 47182608560128, 47182608560128, -STORE, 47182608560128, 47182608568319, -STORE, 47182608568320, 47182608916479, -STORE, 47182608609280, 47182608916479, -STORE, 47182608568320, 47182608609279, -ERASE, 47182608609280, 47182608609280, -STORE, 47182608609280, 47182608891903, -STORE, 47182608891904, 47182608916479, -STORE, 47182608822272, 47182608891903, -STORE, 47182608609280, 47182608822271, -ERASE, 47182608609280, 47182608609280, -STORE, 47182608609280, 47182608822271, -STORE, 47182608887808, 47182608891903, -STORE, 47182608822272, 47182608887807, -ERASE, 47182608822272, 47182608822272, -STORE, 47182608822272, 47182608887807, -ERASE, 47182608891904, 47182608891904, -STORE, 47182608891904, 47182608916479, -STORE, 47182608916480, 47182611177471, -STORE, 47182609068032, 47182611177471, -STORE, 47182608916480, 47182609068031, -ERASE, 47182609068032, 47182609068032, -STORE, 47182609068032, 47182611161087, -STORE, 47182611161088, 47182611177471, -STORE, 47182611169280, 47182611177471, -STORE, 47182611161088, 47182611169279, -ERASE, 47182611161088, 47182611161088, -STORE, 47182611161088, 47182611169279, -ERASE, 47182611169280, 47182611169280, -STORE, 47182611169280, 47182611177471, -STORE, 47182611177472, 47182611312639, -ERASE, 47182611177472, 47182611177472, -STORE, 47182611177472, 47182611202047, -STORE, 47182611202048, 47182611312639, -STORE, 47182611263488, 47182611312639, -STORE, 47182611202048, 47182611263487, -ERASE, 47182611202048, 47182611202048, -STORE, 47182611202048, 47182611263487, -STORE, 47182611288064, 47182611312639, -STORE, 47182611263488, 47182611288063, -ERASE, 47182611263488, 47182611263488, -STORE, 47182611263488, 47182611312639, -ERASE, 47182611263488, 47182611263488, -STORE, 47182611263488, 47182611288063, -STORE, 47182611288064, 47182611312639, -STORE, 47182611296256, 47182611312639, -STORE, 47182611288064, 47182611296255, -ERASE, 47182611288064, 47182611288064, -STORE, 47182611288064, 47182611296255, -ERASE, 47182611296256, 47182611296256, -STORE, 47182611296256, 47182611312639, -STORE, 47182611296256, 47182611320831, -STORE, 47182611320832, 47182611484671, -ERASE, 47182611320832, 47182611320832, -STORE, 47182611320832, 47182611333119, -STORE, 47182611333120, 47182611484671, -STORE, 47182611431424, 47182611484671, -STORE, 47182611333120, 47182611431423, -ERASE, 47182611333120, 47182611333120, -STORE, 47182611333120, 47182611431423, -STORE, 47182611476480, 47182611484671, -STORE, 47182611431424, 47182611476479, -ERASE, 47182611431424, 47182611431424, -STORE, 47182611431424, 47182611484671, -ERASE, 47182611431424, 47182611431424, -STORE, 47182611431424, 47182611476479, -STORE, 47182611476480, 47182611484671, -ERASE, 47182611476480, 47182611476480, -STORE, 47182611476480, 47182611484671, -STORE, 47182611484672, 47182612082687, -STORE, 47182611603456, 47182612082687, -STORE, 47182611484672, 47182611603455, -ERASE, 47182611603456, 47182611603456, -STORE, 47182611603456, 47182612029439, -STORE, 47182612029440, 47182612082687, -STORE, 47182611918848, 47182612029439, -STORE, 47182611603456, 47182611918847, -ERASE, 47182611603456, 47182611603456, -STORE, 47182611603456, 47182611918847, -STORE, 47182612025344, 47182612029439, -STORE, 47182611918848, 47182612025343, -ERASE, 47182611918848, 47182611918848, -STORE, 47182611918848, 47182612025343, -ERASE, 47182612029440, 47182612029440, -STORE, 47182612029440, 47182612082687, -STORE, 47182612082688, 47182615134207, -STORE, 47182612627456, 47182615134207, -STORE, 47182612082688, 47182612627455, -ERASE, 47182612627456, 47182612627456, -STORE, 47182612627456, 47182614913023, -STORE, 47182614913024, 47182615134207, -STORE, 47182614323200, 47182614913023, -STORE, 47182612627456, 47182614323199, -ERASE, 47182612627456, 47182612627456, -STORE, 47182612627456, 47182614323199, -STORE, 47182614908928, 47182614913023, -STORE, 47182614323200, 47182614908927, -ERASE, 47182614323200, 47182614323200, -STORE, 47182614323200, 47182614908927, -STORE, 47182615117824, 47182615134207, -STORE, 47182614913024, 47182615117823, -ERASE, 47182614913024, 47182614913024, -STORE, 47182614913024, 47182615117823, -ERASE, 47182615117824, 47182615117824, -STORE, 47182615117824, 47182615134207, -STORE, 47182615134208, 47182615166975, -ERASE, 47182615134208, 47182615134208, -STORE, 47182615134208, 47182615142399, -STORE, 47182615142400, 47182615166975, -STORE, 47182615154688, 47182615166975, -STORE, 47182615142400, 47182615154687, -ERASE, 47182615142400, 47182615142400, -STORE, 47182615142400, 47182615154687, -STORE, 47182615158784, 47182615166975, -STORE, 47182615154688, 47182615158783, -ERASE, 47182615154688, 47182615154688, -STORE, 47182615154688, 47182615166975, -ERASE, 47182615154688, 47182615154688, -STORE, 47182615154688, 47182615158783, -STORE, 47182615158784, 47182615166975, -ERASE, 47182615158784, 47182615158784, -STORE, 47182615158784, 47182615166975, -STORE, 47182615166976, 47182615203839, -ERASE, 47182615166976, 47182615166976, -STORE, 47182615166976, 47182615175167, -STORE, 47182615175168, 47182615203839, -STORE, 47182615191552, 47182615203839, -STORE, 47182615175168, 47182615191551, -ERASE, 47182615175168, 47182615175168, -STORE, 47182615175168, 47182615191551, -STORE, 47182615195648, 47182615203839, -STORE, 47182615191552, 47182615195647, -ERASE, 47182615191552, 47182615191552, -STORE, 47182615191552, 47182615203839, -ERASE, 47182615191552, 47182615191552, -STORE, 47182615191552, 47182615195647, -STORE, 47182615195648, 47182615203839, -ERASE, 47182615195648, 47182615195648, -STORE, 47182615195648, 47182615203839, -STORE, 47182615203840, 47182615678975, -ERASE, 47182615203840, 47182615203840, -STORE, 47182615203840, 47182615212031, -STORE, 47182615212032, 47182615678975, -STORE, 47182615547904, 47182615678975, -STORE, 47182615212032, 47182615547903, -ERASE, 47182615212032, 47182615212032, -STORE, 47182615212032, 47182615547903, -STORE, 47182615670784, 47182615678975, -STORE, 47182615547904, 47182615670783, -ERASE, 47182615547904, 47182615547904, -STORE, 47182615547904, 47182615678975, -ERASE, 47182615547904, 47182615547904, -STORE, 47182615547904, 47182615670783, -STORE, 47182615670784, 47182615678975, -ERASE, 47182615670784, 47182615670784, -STORE, 47182615670784, 47182615678975, -STORE, 47182615678976, 47182615687167, -STORE, 47182615687168, 47182615707647, -ERASE, 47182615687168, 47182615687168, -STORE, 47182615687168, 47182615691263, -STORE, 47182615691264, 47182615707647, -STORE, 47182615695360, 47182615707647, -STORE, 47182615691264, 47182615695359, -ERASE, 47182615691264, 47182615691264, -STORE, 47182615691264, 47182615695359, -STORE, 47182615699456, 47182615707647, -STORE, 47182615695360, 47182615699455, -ERASE, 47182615695360, 47182615695360, -STORE, 47182615695360, 47182615707647, -ERASE, 47182615695360, 47182615695360, -STORE, 47182615695360, 47182615699455, -STORE, 47182615699456, 47182615707647, -ERASE, 47182615699456, 47182615699456, -STORE, 47182615699456, 47182615707647, -STORE, 47182615707648, 47182615715839, -ERASE, 47182608371712, 47182608371712, -STORE, 47182608371712, 47182608388095, -STORE, 47182608388096, 47182608396287, -ERASE, 47182615699456, 47182615699456, -STORE, 47182615699456, 47182615703551, -STORE, 47182615703552, 47182615707647, -ERASE, 47182611288064, 47182611288064, -STORE, 47182611288064, 47182611292159, -STORE, 47182611292160, 47182611296255, -ERASE, 47182615670784, 47182615670784, -STORE, 47182615670784, 47182615674879, -STORE, 47182615674880, 47182615678975, -ERASE, 47182615195648, 47182615195648, -STORE, 47182615195648, 47182615199743, -STORE, 47182615199744, 47182615203839, -ERASE, 47182615158784, 47182615158784, -STORE, 47182615158784, 47182615162879, -STORE, 47182615162880, 47182615166975, -ERASE, 47182614913024, 47182614913024, -STORE, 47182614913024, 47182615109631, -STORE, 47182615109632, 47182615117823, -ERASE, 47182612029440, 47182612029440, -STORE, 47182612029440, 47182612066303, -STORE, 47182612066304, 47182612082687, -ERASE, 47182611476480, 47182611476480, -STORE, 47182611476480, 47182611480575, -STORE, 47182611480576, 47182611484671, -ERASE, 47182611161088, 47182611161088, -STORE, 47182611161088, 47182611165183, -STORE, 47182611165184, 47182611169279, -ERASE, 47182608891904, 47182608891904, -STORE, 47182608891904, 47182608912383, -STORE, 47182608912384, 47182608916479, -ERASE, 47182608560128, 47182608560128, -STORE, 47182608560128, 47182608564223, -STORE, 47182608564224, 47182608568319, -ERASE, 47182608515072, 47182608515072, -STORE, 47182608515072, 47182608519167, -STORE, 47182608519168, 47182608523263, -ERASE, 93963664379904, 93963664379904, -STORE, 93963664379904, 93963664502783, -STORE, 93963664502784, 93963664506879, -ERASE, 140450188599296, 140450188599296, -STORE, 140450188599296, 140450188603391, -STORE, 140450188603392, 140450188607487, -ERASE, 47182606557184, 47182606557184, -STORE, 93963694723072, 93963694858239, -STORE, 140737488347136, 140737488351231, -STORE, 140730313261056, 140737488351231, -ERASE, 140730313261056, 140730313261056, -STORE, 140730313261056, 140730313265151, -STORE, 94386579017728, 94386579697663, -ERASE, 94386579017728, 94386579017728, -STORE, 94386579017728, 94386579083263, -STORE, 94386579083264, 94386579697663, -ERASE, 94386579083264, 94386579083264, -STORE, 94386579083264, 94386579431423, -STORE, 94386579431424, 94386579570687, -STORE, 94386579570688, 94386579697663, -STORE, 140124810838016, 140124811010047, -ERASE, 140124810838016, 140124810838016, -STORE, 140124810838016, 140124810842111, -STORE, 140124810842112, 140124811010047, -ERASE, 140124810842112, 140124810842112, -STORE, 140124810842112, 140124810964991, -STORE, 140124810964992, 140124810997759, -STORE, 140124810997760, 140124811005951, -STORE, 140124811005952, 140124811010047, -STORE, 140730313601024, 140730313605119, -STORE, 140730313588736, 140730313601023, -STORE, 47507984158720, 47507984166911, -STORE, 47507984166912, 47507984175103, -STORE, 47507984175104, 47507986014207, -STORE, 47507984314368, 47507986014207, -STORE, 47507984175104, 47507984314367, -ERASE, 47507984314368, 47507984314368, -STORE, 47507984314368, 47507985973247, -STORE, 47507985973248, 47507986014207, -STORE, 47507985657856, 47507985973247, -STORE, 47507984314368, 47507985657855, -ERASE, 47507984314368, 47507984314368, -STORE, 47507984314368, 47507985657855, -STORE, 47507985969152, 47507985973247, -STORE, 47507985657856, 47507985969151, -ERASE, 47507985657856, 47507985657856, -STORE, 47507985657856, 47507985969151, -STORE, 47507985997824, 47507986014207, -STORE, 47507985973248, 47507985997823, -ERASE, 47507985973248, 47507985973248, -STORE, 47507985973248, 47507985997823, -ERASE, 47507985997824, 47507985997824, -STORE, 47507985997824, 47507986014207, -STORE, 47507986014208, 47507986124799, -STORE, 47507986030592, 47507986124799, -STORE, 47507986014208, 47507986030591, -ERASE, 47507986030592, 47507986030592, -STORE, 47507986030592, 47507986116607, -STORE, 47507986116608, 47507986124799, -STORE, 47507986092032, 47507986116607, -STORE, 47507986030592, 47507986092031, -ERASE, 47507986030592, 47507986030592, -STORE, 47507986030592, 47507986092031, -STORE, 47507986112512, 47507986116607, -STORE, 47507986092032, 47507986112511, -ERASE, 47507986092032, 47507986092032, -STORE, 47507986092032, 47507986112511, -ERASE, 47507986116608, 47507986116608, -STORE, 47507986116608, 47507986124799, -STORE, 47507986124800, 47507986169855, -ERASE, 47507986124800, 47507986124800, -STORE, 47507986124800, 47507986132991, -STORE, 47507986132992, 47507986169855, -STORE, 47507986153472, 47507986169855, -STORE, 47507986132992, 47507986153471, -ERASE, 47507986132992, 47507986132992, -STORE, 47507986132992, 47507986153471, -STORE, 47507986161664, 47507986169855, -STORE, 47507986153472, 47507986161663, -ERASE, 47507986153472, 47507986153472, -STORE, 47507986153472, 47507986169855, -ERASE, 47507986153472, 47507986153472, -STORE, 47507986153472, 47507986161663, -STORE, 47507986161664, 47507986169855, -ERASE, 47507986161664, 47507986161664, -STORE, 47507986161664, 47507986169855, -STORE, 47507986169856, 47507986518015, -STORE, 47507986210816, 47507986518015, -STORE, 47507986169856, 47507986210815, -ERASE, 47507986210816, 47507986210816, -STORE, 47507986210816, 47507986493439, -STORE, 47507986493440, 47507986518015, -STORE, 47507986423808, 47507986493439, -STORE, 47507986210816, 47507986423807, -ERASE, 47507986210816, 47507986210816, -STORE, 47507986210816, 47507986423807, -STORE, 47507986489344, 47507986493439, -STORE, 47507986423808, 47507986489343, -ERASE, 47507986423808, 47507986423808, -STORE, 47507986423808, 47507986489343, -ERASE, 47507986493440, 47507986493440, -STORE, 47507986493440, 47507986518015, -STORE, 47507986518016, 47507988779007, -STORE, 47507986669568, 47507988779007, -STORE, 47507986518016, 47507986669567, -ERASE, 47507986669568, 47507986669568, -STORE, 47507986669568, 47507988762623, -STORE, 47507988762624, 47507988779007, -STORE, 47507988770816, 47507988779007, -STORE, 47507988762624, 47507988770815, -ERASE, 47507988762624, 47507988762624, -STORE, 47507988762624, 47507988770815, -ERASE, 47507988770816, 47507988770816, -STORE, 47507988770816, 47507988779007, -STORE, 47507988779008, 47507988914175, -ERASE, 47507988779008, 47507988779008, -STORE, 47507988779008, 47507988803583, -STORE, 47507988803584, 47507988914175, -STORE, 47507988865024, 47507988914175, -STORE, 47507988803584, 47507988865023, -ERASE, 47507988803584, 47507988803584, -STORE, 47507988803584, 47507988865023, -STORE, 47507988889600, 47507988914175, -STORE, 47507988865024, 47507988889599, -ERASE, 47507988865024, 47507988865024, -STORE, 47507988865024, 47507988914175, -ERASE, 47507988865024, 47507988865024, -STORE, 47507988865024, 47507988889599, -STORE, 47507988889600, 47507988914175, -STORE, 47507988897792, 47507988914175, -STORE, 47507988889600, 47507988897791, -ERASE, 47507988889600, 47507988889600, -STORE, 47507988889600, 47507988897791, -ERASE, 47507988897792, 47507988897792, -STORE, 47507988897792, 47507988914175, -STORE, 47507988897792, 47507988922367, -STORE, 47507988922368, 47507989086207, -ERASE, 47507988922368, 47507988922368, -STORE, 47507988922368, 47507988934655, -STORE, 47507988934656, 47507989086207, -STORE, 47507989032960, 47507989086207, -STORE, 47507988934656, 47507989032959, -ERASE, 47507988934656, 47507988934656, -STORE, 47507988934656, 47507989032959, -STORE, 47507989078016, 47507989086207, -STORE, 47507989032960, 47507989078015, -ERASE, 47507989032960, 47507989032960, -STORE, 47507989032960, 47507989086207, -ERASE, 47507989032960, 47507989032960, -STORE, 47507989032960, 47507989078015, -STORE, 47507989078016, 47507989086207, -ERASE, 47507989078016, 47507989078016, -STORE, 47507989078016, 47507989086207, -STORE, 47507989086208, 47507989684223, -STORE, 47507989204992, 47507989684223, -STORE, 47507989086208, 47507989204991, -ERASE, 47507989204992, 47507989204992, -STORE, 47507989204992, 47507989630975, -STORE, 47507989630976, 47507989684223, -STORE, 47507989520384, 47507989630975, -STORE, 47507989204992, 47507989520383, -ERASE, 47507989204992, 47507989204992, -STORE, 47507989204992, 47507989520383, -STORE, 47507989626880, 47507989630975, -STORE, 47507989520384, 47507989626879, -ERASE, 47507989520384, 47507989520384, -STORE, 47507989520384, 47507989626879, -ERASE, 47507989630976, 47507989630976, -STORE, 47507989630976, 47507989684223, -STORE, 47507989684224, 47507992735743, -STORE, 47507990228992, 47507992735743, -STORE, 47507989684224, 47507990228991, -ERASE, 47507990228992, 47507990228992, -STORE, 47507990228992, 47507992514559, -STORE, 47507992514560, 47507992735743, -STORE, 47507991924736, 47507992514559, -STORE, 47507990228992, 47507991924735, -ERASE, 47507990228992, 47507990228992, -STORE, 47507990228992, 47507991924735, -STORE, 47507992510464, 47507992514559, -STORE, 47507991924736, 47507992510463, -ERASE, 47507991924736, 47507991924736, -STORE, 47507991924736, 47507992510463, -STORE, 47507992719360, 47507992735743, -STORE, 47507992514560, 47507992719359, -ERASE, 47507992514560, 47507992514560, -STORE, 47507992514560, 47507992719359, -ERASE, 47507992719360, 47507992719360, -STORE, 47507992719360, 47507992735743, -STORE, 47507992735744, 47507992768511, -ERASE, 47507992735744, 47507992735744, -STORE, 47507992735744, 47507992743935, -STORE, 47507992743936, 47507992768511, -STORE, 47507992756224, 47507992768511, -STORE, 47507992743936, 47507992756223, -ERASE, 47507992743936, 47507992743936, -STORE, 47507992743936, 47507992756223, -STORE, 47507992760320, 47507992768511, -STORE, 47507992756224, 47507992760319, -ERASE, 47507992756224, 47507992756224, -STORE, 47507992756224, 47507992768511, -ERASE, 47507992756224, 47507992756224, -STORE, 47507992756224, 47507992760319, -STORE, 47507992760320, 47507992768511, -ERASE, 47507992760320, 47507992760320, -STORE, 47507992760320, 47507992768511, -STORE, 47507992768512, 47507992805375, -ERASE, 47507992768512, 47507992768512, -STORE, 47507992768512, 47507992776703, -STORE, 47507992776704, 47507992805375, -STORE, 47507992793088, 47507992805375, -STORE, 47507992776704, 47507992793087, -ERASE, 47507992776704, 47507992776704, -STORE, 47507992776704, 47507992793087, -STORE, 47507992797184, 47507992805375, -STORE, 47507992793088, 47507992797183, -ERASE, 47507992793088, 47507992793088, -STORE, 47507992793088, 47507992805375, -ERASE, 47507992793088, 47507992793088, -STORE, 47507992793088, 47507992797183, -STORE, 47507992797184, 47507992805375, -ERASE, 47507992797184, 47507992797184, -STORE, 47507992797184, 47507992805375, -STORE, 47507992805376, 47507993280511, -ERASE, 47507992805376, 47507992805376, -STORE, 47507992805376, 47507992813567, -STORE, 47507992813568, 47507993280511, -STORE, 47507993149440, 47507993280511, -STORE, 47507992813568, 47507993149439, -ERASE, 47507992813568, 47507992813568, -STORE, 47507992813568, 47507993149439, -STORE, 47507993272320, 47507993280511, -STORE, 47507993149440, 47507993272319, -ERASE, 47507993149440, 47507993149440, -STORE, 47507993149440, 47507993280511, -ERASE, 47507993149440, 47507993149440, -STORE, 47507993149440, 47507993272319, -STORE, 47507993272320, 47507993280511, -ERASE, 47507993272320, 47507993272320, -STORE, 47507993272320, 47507993280511, -STORE, 47507993280512, 47507993288703, -STORE, 47507993288704, 47507993309183, -ERASE, 47507993288704, 47507993288704, -STORE, 47507993288704, 47507993292799, -STORE, 47507993292800, 47507993309183, -STORE, 47507993296896, 47507993309183, -STORE, 47507993292800, 47507993296895, -ERASE, 47507993292800, 47507993292800, -STORE, 47507993292800, 47507993296895, -STORE, 47507993300992, 47507993309183, -STORE, 47507993296896, 47507993300991, -ERASE, 47507993296896, 47507993296896, -STORE, 47507993296896, 47507993309183, -ERASE, 47507993296896, 47507993296896, -STORE, 47507993296896, 47507993300991, -STORE, 47507993300992, 47507993309183, -ERASE, 47507993300992, 47507993300992, -STORE, 47507993300992, 47507993309183, -STORE, 47507993309184, 47507993317375, -ERASE, 47507985973248, 47507985973248, -STORE, 47507985973248, 47507985989631, -STORE, 47507985989632, 47507985997823, -ERASE, 47507993300992, 47507993300992, -STORE, 47507993300992, 47507993305087, -STORE, 47507993305088, 47507993309183, -ERASE, 47507988889600, 47507988889600, -STORE, 47507988889600, 47507988893695, -STORE, 47507988893696, 47507988897791, -ERASE, 47507993272320, 47507993272320, -STORE, 47507993272320, 47507993276415, -STORE, 47507993276416, 47507993280511, -ERASE, 47507992797184, 47507992797184, -STORE, 47507992797184, 47507992801279, -STORE, 47507992801280, 47507992805375, -ERASE, 47507992760320, 47507992760320, -STORE, 47507992760320, 47507992764415, -STORE, 47507992764416, 47507992768511, -ERASE, 47507992514560, 47507992514560, -STORE, 47507992514560, 47507992711167, -STORE, 47507992711168, 47507992719359, -ERASE, 47507989630976, 47507989630976, -STORE, 47507989630976, 47507989667839, -STORE, 47507989667840, 47507989684223, -ERASE, 47507989078016, 47507989078016, -STORE, 47507989078016, 47507989082111, -STORE, 47507989082112, 47507989086207, -ERASE, 47507988762624, 47507988762624, -STORE, 47507988762624, 47507988766719, -STORE, 47507988766720, 47507988770815, -ERASE, 47507986493440, 47507986493440, -STORE, 47507986493440, 47507986513919, -STORE, 47507986513920, 47507986518015, -ERASE, 47507986161664, 47507986161664, -STORE, 47507986161664, 47507986165759, -STORE, 47507986165760, 47507986169855, -ERASE, 47507986116608, 47507986116608, -STORE, 47507986116608, 47507986120703, -STORE, 47507986120704, 47507986124799, -ERASE, 94386579570688, 94386579570688, -STORE, 94386579570688, 94386579693567, -STORE, 94386579693568, 94386579697663, -ERASE, 140124810997760, 140124810997760, -STORE, 140124810997760, 140124811001855, -STORE, 140124811001856, 140124811005951, -ERASE, 47507984158720, 47507984158720, -STORE, 94386583982080, 94386584117247, -STORE, 94386583982080, 94386584256511, -ERASE, 94386583982080, 94386583982080, -STORE, 94386583982080, 94386584223743, -STORE, 94386584223744, 94386584256511, -ERASE, 94386584223744, 94386584223744, -STORE, 140737488347136, 140737488351231, -STORE, 140733763395584, 140737488351231, -ERASE, 140733763395584, 140733763395584, -STORE, 140733763395584, 140733763399679, -STORE, 94011546472448, 94011547152383, -ERASE, 94011546472448, 94011546472448, -STORE, 94011546472448, 94011546537983, -STORE, 94011546537984, 94011547152383, -ERASE, 94011546537984, 94011546537984, -STORE, 94011546537984, 94011546886143, -STORE, 94011546886144, 94011547025407, -STORE, 94011547025408, 94011547152383, -STORE, 139757597949952, 139757598121983, -ERASE, 139757597949952, 139757597949952, -STORE, 139757597949952, 139757597954047, -STORE, 139757597954048, 139757598121983, -ERASE, 139757597954048, 139757597954048, -STORE, 139757597954048, 139757598076927, -STORE, 139757598076928, 139757598109695, -STORE, 139757598109696, 139757598117887, -STORE, 139757598117888, 139757598121983, -STORE, 140733763596288, 140733763600383, -STORE, 140733763584000, 140733763596287, -STORE, 47875197046784, 47875197054975, -STORE, 47875197054976, 47875197063167, -STORE, 47875197063168, 47875198902271, -STORE, 47875197202432, 47875198902271, -STORE, 47875197063168, 47875197202431, -ERASE, 47875197202432, 47875197202432, -STORE, 47875197202432, 47875198861311, -STORE, 47875198861312, 47875198902271, -STORE, 47875198545920, 47875198861311, -STORE, 47875197202432, 47875198545919, -ERASE, 47875197202432, 47875197202432, -STORE, 47875197202432, 47875198545919, -STORE, 47875198857216, 47875198861311, -STORE, 47875198545920, 47875198857215, -ERASE, 47875198545920, 47875198545920, -STORE, 47875198545920, 47875198857215, -STORE, 47875198885888, 47875198902271, -STORE, 47875198861312, 47875198885887, -ERASE, 47875198861312, 47875198861312, -STORE, 47875198861312, 47875198885887, -ERASE, 47875198885888, 47875198885888, -STORE, 47875198885888, 47875198902271, -STORE, 47875198902272, 47875199012863, -STORE, 47875198918656, 47875199012863, -STORE, 47875198902272, 47875198918655, -ERASE, 47875198918656, 47875198918656, -STORE, 47875198918656, 47875199004671, -STORE, 47875199004672, 47875199012863, -STORE, 47875198980096, 47875199004671, -STORE, 47875198918656, 47875198980095, -ERASE, 47875198918656, 47875198918656, -STORE, 47875198918656, 47875198980095, -STORE, 47875199000576, 47875199004671, -STORE, 47875198980096, 47875199000575, -ERASE, 47875198980096, 47875198980096, -STORE, 47875198980096, 47875199000575, -ERASE, 47875199004672, 47875199004672, -STORE, 47875199004672, 47875199012863, -STORE, 47875199012864, 47875199057919, -ERASE, 47875199012864, 47875199012864, -STORE, 47875199012864, 47875199021055, -STORE, 47875199021056, 47875199057919, -STORE, 47875199041536, 47875199057919, -STORE, 47875199021056, 47875199041535, -ERASE, 47875199021056, 47875199021056, -STORE, 47875199021056, 47875199041535, -STORE, 47875199049728, 47875199057919, -STORE, 47875199041536, 47875199049727, -ERASE, 47875199041536, 47875199041536, -STORE, 47875199041536, 47875199057919, -ERASE, 47875199041536, 47875199041536, -STORE, 47875199041536, 47875199049727, -STORE, 47875199049728, 47875199057919, -ERASE, 47875199049728, 47875199049728, -STORE, 47875199049728, 47875199057919, -STORE, 47875199057920, 47875199406079, -STORE, 47875199098880, 47875199406079, -STORE, 47875199057920, 47875199098879, -ERASE, 47875199098880, 47875199098880, -STORE, 47875199098880, 47875199381503, -STORE, 47875199381504, 47875199406079, -STORE, 47875199311872, 47875199381503, -STORE, 47875199098880, 47875199311871, -ERASE, 47875199098880, 47875199098880, -STORE, 47875199098880, 47875199311871, -STORE, 47875199377408, 47875199381503, -STORE, 47875199311872, 47875199377407, -ERASE, 47875199311872, 47875199311872, -STORE, 47875199311872, 47875199377407, -ERASE, 47875199381504, 47875199381504, -STORE, 47875199381504, 47875199406079, -STORE, 47875199406080, 47875201667071, -STORE, 47875199557632, 47875201667071, -STORE, 47875199406080, 47875199557631, -ERASE, 47875199557632, 47875199557632, -STORE, 47875199557632, 47875201650687, -STORE, 47875201650688, 47875201667071, -STORE, 47875201658880, 47875201667071, -STORE, 47875201650688, 47875201658879, -ERASE, 47875201650688, 47875201650688, -STORE, 47875201650688, 47875201658879, -ERASE, 47875201658880, 47875201658880, -STORE, 47875201658880, 47875201667071, -STORE, 47875201667072, 47875201802239, -ERASE, 47875201667072, 47875201667072, -STORE, 47875201667072, 47875201691647, -STORE, 47875201691648, 47875201802239, -STORE, 47875201753088, 47875201802239, -STORE, 47875201691648, 47875201753087, -ERASE, 47875201691648, 47875201691648, -STORE, 47875201691648, 47875201753087, -STORE, 47875201777664, 47875201802239, -STORE, 47875201753088, 47875201777663, -ERASE, 47875201753088, 47875201753088, -STORE, 47875201753088, 47875201802239, -ERASE, 47875201753088, 47875201753088, -STORE, 47875201753088, 47875201777663, -STORE, 47875201777664, 47875201802239, -STORE, 47875201785856, 47875201802239, -STORE, 47875201777664, 47875201785855, -ERASE, 47875201777664, 47875201777664, -STORE, 47875201777664, 47875201785855, -ERASE, 47875201785856, 47875201785856, -STORE, 47875201785856, 47875201802239, -STORE, 47875201785856, 47875201810431, -STORE, 47875201810432, 47875201974271, -ERASE, 47875201810432, 47875201810432, -STORE, 47875201810432, 47875201822719, -STORE, 47875201822720, 47875201974271, -STORE, 47875201921024, 47875201974271, -STORE, 47875201822720, 47875201921023, -ERASE, 47875201822720, 47875201822720, -STORE, 47875201822720, 47875201921023, -STORE, 47875201966080, 47875201974271, -STORE, 47875201921024, 47875201966079, -ERASE, 47875201921024, 47875201921024, -STORE, 47875201921024, 47875201974271, -ERASE, 47875201921024, 47875201921024, -STORE, 47875201921024, 47875201966079, -STORE, 47875201966080, 47875201974271, -ERASE, 47875201966080, 47875201966080, -STORE, 47875201966080, 47875201974271, -STORE, 47875201974272, 47875202572287, -STORE, 47875202093056, 47875202572287, -STORE, 47875201974272, 47875202093055, -ERASE, 47875202093056, 47875202093056, -STORE, 47875202093056, 47875202519039, -STORE, 47875202519040, 47875202572287, -STORE, 47875202408448, 47875202519039, -STORE, 47875202093056, 47875202408447, -ERASE, 47875202093056, 47875202093056, -STORE, 47875202093056, 47875202408447, -STORE, 47875202514944, 47875202519039, -STORE, 47875202408448, 47875202514943, -ERASE, 47875202408448, 47875202408448, -STORE, 47875202408448, 47875202514943, -ERASE, 47875202519040, 47875202519040, -STORE, 47875202519040, 47875202572287, -STORE, 47875202572288, 47875205623807, -STORE, 47875203117056, 47875205623807, -STORE, 47875202572288, 47875203117055, -ERASE, 47875203117056, 47875203117056, -STORE, 47875203117056, 47875205402623, -STORE, 47875205402624, 47875205623807, -STORE, 47875204812800, 47875205402623, -STORE, 47875203117056, 47875204812799, -ERASE, 47875203117056, 47875203117056, -STORE, 47875203117056, 47875204812799, -STORE, 47875205398528, 47875205402623, -STORE, 47875204812800, 47875205398527, -ERASE, 47875204812800, 47875204812800, -STORE, 47875204812800, 47875205398527, -STORE, 47875205607424, 47875205623807, -STORE, 47875205402624, 47875205607423, -ERASE, 47875205402624, 47875205402624, -STORE, 47875205402624, 47875205607423, -ERASE, 47875205607424, 47875205607424, -STORE, 47875205607424, 47875205623807, -STORE, 47875205623808, 47875205656575, -ERASE, 47875205623808, 47875205623808, -STORE, 47875205623808, 47875205631999, -STORE, 47875205632000, 47875205656575, -STORE, 47875205644288, 47875205656575, -STORE, 47875205632000, 47875205644287, -ERASE, 47875205632000, 47875205632000, -STORE, 47875205632000, 47875205644287, -STORE, 47875205648384, 47875205656575, -STORE, 47875205644288, 47875205648383, -ERASE, 47875205644288, 47875205644288, -STORE, 47875205644288, 47875205656575, -ERASE, 47875205644288, 47875205644288, -STORE, 47875205644288, 47875205648383, -STORE, 47875205648384, 47875205656575, -ERASE, 47875205648384, 47875205648384, -STORE, 47875205648384, 47875205656575, -STORE, 47875205656576, 47875205693439, -ERASE, 47875205656576, 47875205656576, -STORE, 47875205656576, 47875205664767, -STORE, 47875205664768, 47875205693439, -STORE, 47875205681152, 47875205693439, -STORE, 47875205664768, 47875205681151, -ERASE, 47875205664768, 47875205664768, -STORE, 47875205664768, 47875205681151, -STORE, 47875205685248, 47875205693439, -STORE, 47875205681152, 47875205685247, -ERASE, 47875205681152, 47875205681152, -STORE, 47875205681152, 47875205693439, -ERASE, 47875205681152, 47875205681152, -STORE, 47875205681152, 47875205685247, -STORE, 47875205685248, 47875205693439, -ERASE, 47875205685248, 47875205685248, -STORE, 47875205685248, 47875205693439, -STORE, 47875205693440, 47875206168575, -ERASE, 47875205693440, 47875205693440, -STORE, 47875205693440, 47875205701631, -STORE, 47875205701632, 47875206168575, -STORE, 47875206037504, 47875206168575, -STORE, 47875205701632, 47875206037503, -ERASE, 47875205701632, 47875205701632, -STORE, 47875205701632, 47875206037503, -STORE, 47875206160384, 47875206168575, -STORE, 47875206037504, 47875206160383, -ERASE, 47875206037504, 47875206037504, -STORE, 47875206037504, 47875206168575, -ERASE, 47875206037504, 47875206037504, -STORE, 47875206037504, 47875206160383, -STORE, 47875206160384, 47875206168575, -ERASE, 47875206160384, 47875206160384, -STORE, 47875206160384, 47875206168575, -STORE, 47875206168576, 47875206176767, -STORE, 47875206176768, 47875206197247, -ERASE, 47875206176768, 47875206176768, -STORE, 47875206176768, 47875206180863, -STORE, 47875206180864, 47875206197247, -STORE, 47875206184960, 47875206197247, -STORE, 47875206180864, 47875206184959, -ERASE, 47875206180864, 47875206180864, -STORE, 47875206180864, 47875206184959, -STORE, 47875206189056, 47875206197247, -STORE, 47875206184960, 47875206189055, -ERASE, 47875206184960, 47875206184960, -STORE, 47875206184960, 47875206197247, -ERASE, 47875206184960, 47875206184960, -STORE, 47875206184960, 47875206189055, -STORE, 47875206189056, 47875206197247, -ERASE, 47875206189056, 47875206189056, -STORE, 47875206189056, 47875206197247, -STORE, 47875206197248, 47875206205439, -ERASE, 47875198861312, 47875198861312, -STORE, 47875198861312, 47875198877695, -STORE, 47875198877696, 47875198885887, -ERASE, 47875206189056, 47875206189056, -STORE, 47875206189056, 47875206193151, -STORE, 47875206193152, 47875206197247, -ERASE, 47875201777664, 47875201777664, -STORE, 47875201777664, 47875201781759, -STORE, 47875201781760, 47875201785855, -ERASE, 47875206160384, 47875206160384, -STORE, 47875206160384, 47875206164479, -STORE, 47875206164480, 47875206168575, -ERASE, 47875205685248, 47875205685248, -STORE, 47875205685248, 47875205689343, -STORE, 47875205689344, 47875205693439, -ERASE, 47875205648384, 47875205648384, -STORE, 47875205648384, 47875205652479, -STORE, 47875205652480, 47875205656575, -ERASE, 47875205402624, 47875205402624, -STORE, 47875205402624, 47875205599231, -STORE, 47875205599232, 47875205607423, -ERASE, 47875202519040, 47875202519040, -STORE, 47875202519040, 47875202555903, -STORE, 47875202555904, 47875202572287, -ERASE, 47875201966080, 47875201966080, -STORE, 47875201966080, 47875201970175, -STORE, 47875201970176, 47875201974271, -ERASE, 47875201650688, 47875201650688, -STORE, 47875201650688, 47875201654783, -STORE, 47875201654784, 47875201658879, -ERASE, 47875199381504, 47875199381504, -STORE, 47875199381504, 47875199401983, -STORE, 47875199401984, 47875199406079, -ERASE, 47875199049728, 47875199049728, -STORE, 47875199049728, 47875199053823, -STORE, 47875199053824, 47875199057919, -ERASE, 47875199004672, 47875199004672, -STORE, 47875199004672, 47875199008767, -STORE, 47875199008768, 47875199012863, -ERASE, 94011547025408, 94011547025408, -STORE, 94011547025408, 94011547148287, -STORE, 94011547148288, 94011547152383, -ERASE, 139757598109696, 139757598109696, -STORE, 139757598109696, 139757598113791, -STORE, 139757598113792, 139757598117887, -ERASE, 47875197046784, 47875197046784, -STORE, 94011557584896, 94011557720063, -STORE, 94011557584896, 94011557855231, -ERASE, 94011557584896, 94011557584896, -STORE, 94011557584896, 94011557851135, -STORE, 94011557851136, 94011557855231, -ERASE, 94011557851136, 94011557851136, -ERASE, 94011557584896, 94011557584896, -STORE, 94011557584896, 94011557847039, -STORE, 94011557847040, 94011557851135, -ERASE, 94011557847040, 94011557847040, -STORE, 94011557584896, 94011557982207, -ERASE, 94011557584896, 94011557584896, -STORE, 94011557584896, 94011557978111, -STORE, 94011557978112, 94011557982207, -ERASE, 94011557978112, 94011557978112, -ERASE, 94011557584896, 94011557584896, -STORE, 94011557584896, 94011557974015, -STORE, 94011557974016, 94011557978111, -ERASE, 94011557974016, 94011557974016, -STORE, 140737488347136, 140737488351231, -STORE, 140734130360320, 140737488351231, -ERASE, 140734130360320, 140734130360320, -STORE, 140734130360320, 140734130364415, -STORE, 94641232105472, 94641232785407, -ERASE, 94641232105472, 94641232105472, -STORE, 94641232105472, 94641232171007, -STORE, 94641232171008, 94641232785407, -ERASE, 94641232171008, 94641232171008, -STORE, 94641232171008, 94641232519167, -STORE, 94641232519168, 94641232658431, -STORE, 94641232658432, 94641232785407, -STORE, 139726599516160, 139726599688191, -ERASE, 139726599516160, 139726599516160, -STORE, 139726599516160, 139726599520255, -STORE, 139726599520256, 139726599688191, -ERASE, 139726599520256, 139726599520256, -STORE, 139726599520256, 139726599643135, -STORE, 139726599643136, 139726599675903, -STORE, 139726599675904, 139726599684095, -STORE, 139726599684096, 139726599688191, -STORE, 140734130446336, 140734130450431, -STORE, 140734130434048, 140734130446335, -STORE, 47906195480576, 47906195488767, -STORE, 47906195488768, 47906195496959, -STORE, 47906195496960, 47906197336063, -STORE, 47906195636224, 47906197336063, -STORE, 47906195496960, 47906195636223, -ERASE, 47906195636224, 47906195636224, -STORE, 47906195636224, 47906197295103, -STORE, 47906197295104, 47906197336063, -STORE, 47906196979712, 47906197295103, -STORE, 47906195636224, 47906196979711, -ERASE, 47906195636224, 47906195636224, -STORE, 47906195636224, 47906196979711, -STORE, 47906197291008, 47906197295103, -STORE, 47906196979712, 47906197291007, -ERASE, 47906196979712, 47906196979712, -STORE, 47906196979712, 47906197291007, -STORE, 47906197319680, 47906197336063, -STORE, 47906197295104, 47906197319679, -ERASE, 47906197295104, 47906197295104, -STORE, 47906197295104, 47906197319679, -ERASE, 47906197319680, 47906197319680, -STORE, 47906197319680, 47906197336063, -STORE, 47906197336064, 47906197446655, -STORE, 47906197352448, 47906197446655, -STORE, 47906197336064, 47906197352447, -ERASE, 47906197352448, 47906197352448, -STORE, 47906197352448, 47906197438463, -STORE, 47906197438464, 47906197446655, -STORE, 47906197413888, 47906197438463, -STORE, 47906197352448, 47906197413887, -ERASE, 47906197352448, 47906197352448, -STORE, 47906197352448, 47906197413887, -STORE, 47906197434368, 47906197438463, -STORE, 47906197413888, 47906197434367, -ERASE, 47906197413888, 47906197413888, -STORE, 47906197413888, 47906197434367, -ERASE, 47906197438464, 47906197438464, -STORE, 47906197438464, 47906197446655, -STORE, 47906197446656, 47906197491711, -ERASE, 47906197446656, 47906197446656, -STORE, 47906197446656, 47906197454847, -STORE, 47906197454848, 47906197491711, -STORE, 47906197475328, 47906197491711, -STORE, 47906197454848, 47906197475327, -ERASE, 47906197454848, 47906197454848, -STORE, 47906197454848, 47906197475327, -STORE, 47906197483520, 47906197491711, -STORE, 47906197475328, 47906197483519, -ERASE, 47906197475328, 47906197475328, -STORE, 47906197475328, 47906197491711, -ERASE, 47906197475328, 47906197475328, -STORE, 47906197475328, 47906197483519, -STORE, 47906197483520, 47906197491711, -ERASE, 47906197483520, 47906197483520, -STORE, 47906197483520, 47906197491711, -STORE, 47906197491712, 47906197839871, -STORE, 47906197532672, 47906197839871, -STORE, 47906197491712, 47906197532671, -ERASE, 47906197532672, 47906197532672, -STORE, 47906197532672, 47906197815295, -STORE, 47906197815296, 47906197839871, -STORE, 47906197745664, 47906197815295, -STORE, 47906197532672, 47906197745663, -ERASE, 47906197532672, 47906197532672, -STORE, 47906197532672, 47906197745663, -STORE, 47906197811200, 47906197815295, -STORE, 47906197745664, 47906197811199, -ERASE, 47906197745664, 47906197745664, -STORE, 47906197745664, 47906197811199, -ERASE, 47906197815296, 47906197815296, -STORE, 47906197815296, 47906197839871, -STORE, 47906197839872, 47906200100863, -STORE, 47906197991424, 47906200100863, -STORE, 47906197839872, 47906197991423, -ERASE, 47906197991424, 47906197991424, -STORE, 47906197991424, 47906200084479, -STORE, 47906200084480, 47906200100863, -STORE, 47906200092672, 47906200100863, -STORE, 47906200084480, 47906200092671, -ERASE, 47906200084480, 47906200084480, -STORE, 47906200084480, 47906200092671, -ERASE, 47906200092672, 47906200092672, -STORE, 47906200092672, 47906200100863, -STORE, 47906200100864, 47906200236031, -ERASE, 47906200100864, 47906200100864, -STORE, 47906200100864, 47906200125439, -STORE, 47906200125440, 47906200236031, -STORE, 47906200186880, 47906200236031, -STORE, 47906200125440, 47906200186879, -ERASE, 47906200125440, 47906200125440, -STORE, 47906200125440, 47906200186879, -STORE, 47906200211456, 47906200236031, -STORE, 47906200186880, 47906200211455, -ERASE, 47906200186880, 47906200186880, -STORE, 47906200186880, 47906200236031, -ERASE, 47906200186880, 47906200186880, -STORE, 47906200186880, 47906200211455, -STORE, 47906200211456, 47906200236031, -STORE, 47906200219648, 47906200236031, -STORE, 47906200211456, 47906200219647, -ERASE, 47906200211456, 47906200211456, -STORE, 47906200211456, 47906200219647, -ERASE, 47906200219648, 47906200219648, -STORE, 47906200219648, 47906200236031, -STORE, 47906200219648, 47906200244223, -STORE, 47906200244224, 47906200408063, -ERASE, 47906200244224, 47906200244224, -STORE, 47906200244224, 47906200256511, -STORE, 47906200256512, 47906200408063, -STORE, 47906200354816, 47906200408063, -STORE, 47906200256512, 47906200354815, -ERASE, 47906200256512, 47906200256512, -STORE, 47906200256512, 47906200354815, -STORE, 47906200399872, 47906200408063, -STORE, 47906200354816, 47906200399871, -ERASE, 47906200354816, 47906200354816, -STORE, 47906200354816, 47906200408063, -ERASE, 47906200354816, 47906200354816, -STORE, 47906200354816, 47906200399871, -STORE, 47906200399872, 47906200408063, -ERASE, 47906200399872, 47906200399872, -STORE, 47906200399872, 47906200408063, -STORE, 47906200408064, 47906201006079, -STORE, 47906200526848, 47906201006079, -STORE, 47906200408064, 47906200526847, -ERASE, 47906200526848, 47906200526848, -STORE, 47906200526848, 47906200952831, -STORE, 47906200952832, 47906201006079, -STORE, 47906200842240, 47906200952831, -STORE, 47906200526848, 47906200842239, -ERASE, 47906200526848, 47906200526848, -STORE, 47906200526848, 47906200842239, -STORE, 47906200948736, 47906200952831, -STORE, 47906200842240, 47906200948735, -ERASE, 47906200842240, 47906200842240, -STORE, 47906200842240, 47906200948735, -ERASE, 47906200952832, 47906200952832, -STORE, 47906200952832, 47906201006079, -STORE, 47906201006080, 47906204057599, -STORE, 47906201550848, 47906204057599, -STORE, 47906201006080, 47906201550847, -ERASE, 47906201550848, 47906201550848, -STORE, 47906201550848, 47906203836415, -STORE, 47906203836416, 47906204057599, -STORE, 47906203246592, 47906203836415, -STORE, 47906201550848, 47906203246591, -ERASE, 47906201550848, 47906201550848, -STORE, 47906201550848, 47906203246591, -STORE, 47906203832320, 47906203836415, -STORE, 47906203246592, 47906203832319, -ERASE, 47906203246592, 47906203246592, -STORE, 47906203246592, 47906203832319, -STORE, 47906204041216, 47906204057599, -STORE, 47906203836416, 47906204041215, -ERASE, 47906203836416, 47906203836416, -STORE, 47906203836416, 47906204041215, -ERASE, 47906204041216, 47906204041216, -STORE, 47906204041216, 47906204057599, -STORE, 47906204057600, 47906204090367, -ERASE, 47906204057600, 47906204057600, -STORE, 47906204057600, 47906204065791, -STORE, 47906204065792, 47906204090367, -STORE, 47906204078080, 47906204090367, -STORE, 47906204065792, 47906204078079, -ERASE, 47906204065792, 47906204065792, -STORE, 47906204065792, 47906204078079, -STORE, 47906204082176, 47906204090367, -STORE, 47906204078080, 47906204082175, -ERASE, 47906204078080, 47906204078080, -STORE, 47906204078080, 47906204090367, -ERASE, 47906204078080, 47906204078080, -STORE, 47906204078080, 47906204082175, -STORE, 47906204082176, 47906204090367, -ERASE, 47906204082176, 47906204082176, -STORE, 47906204082176, 47906204090367, -STORE, 47906204090368, 47906204127231, -ERASE, 47906204090368, 47906204090368, -STORE, 47906204090368, 47906204098559, -STORE, 47906204098560, 47906204127231, -STORE, 47906204114944, 47906204127231, -STORE, 47906204098560, 47906204114943, -ERASE, 47906204098560, 47906204098560, -STORE, 47906204098560, 47906204114943, -STORE, 47906204119040, 47906204127231, -STORE, 47906204114944, 47906204119039, -ERASE, 47906204114944, 47906204114944, -STORE, 47906204114944, 47906204127231, -ERASE, 47906204114944, 47906204114944, -STORE, 47906204114944, 47906204119039, -STORE, 47906204119040, 47906204127231, -ERASE, 47906204119040, 47906204119040, -STORE, 47906204119040, 47906204127231, -STORE, 47906204127232, 47906204602367, -ERASE, 47906204127232, 47906204127232, -STORE, 47906204127232, 47906204135423, -STORE, 47906204135424, 47906204602367, -STORE, 47906204471296, 47906204602367, -STORE, 47906204135424, 47906204471295, -ERASE, 47906204135424, 47906204135424, -STORE, 47906204135424, 47906204471295, -STORE, 47906204594176, 47906204602367, -STORE, 47906204471296, 47906204594175, -ERASE, 47906204471296, 47906204471296, -STORE, 47906204471296, 47906204602367, -ERASE, 47906204471296, 47906204471296, -STORE, 47906204471296, 47906204594175, -STORE, 47906204594176, 47906204602367, -ERASE, 47906204594176, 47906204594176, -STORE, 47906204594176, 47906204602367, -STORE, 47906204602368, 47906204610559, -STORE, 47906204610560, 47906204631039, -ERASE, 47906204610560, 47906204610560, -STORE, 47906204610560, 47906204614655, -STORE, 47906204614656, 47906204631039, -STORE, 47906204618752, 47906204631039, -STORE, 47906204614656, 47906204618751, -ERASE, 47906204614656, 47906204614656, -STORE, 47906204614656, 47906204618751, -STORE, 47906204622848, 47906204631039, -STORE, 47906204618752, 47906204622847, -ERASE, 47906204618752, 47906204618752, -STORE, 47906204618752, 47906204631039, -ERASE, 47906204618752, 47906204618752, -STORE, 47906204618752, 47906204622847, -STORE, 47906204622848, 47906204631039, -ERASE, 47906204622848, 47906204622848, -STORE, 47906204622848, 47906204631039, -STORE, 47906204631040, 47906204639231, -ERASE, 47906197295104, 47906197295104, -STORE, 47906197295104, 47906197311487, -STORE, 47906197311488, 47906197319679, -ERASE, 47906204622848, 47906204622848, -STORE, 47906204622848, 47906204626943, -STORE, 47906204626944, 47906204631039, -ERASE, 47906200211456, 47906200211456, -STORE, 47906200211456, 47906200215551, -STORE, 47906200215552, 47906200219647, -ERASE, 47906204594176, 47906204594176, -STORE, 47906204594176, 47906204598271, -STORE, 47906204598272, 47906204602367, -ERASE, 47906204119040, 47906204119040, -STORE, 47906204119040, 47906204123135, -STORE, 47906204123136, 47906204127231, -ERASE, 47906204082176, 47906204082176, -STORE, 47906204082176, 47906204086271, -STORE, 47906204086272, 47906204090367, -ERASE, 47906203836416, 47906203836416, -STORE, 47906203836416, 47906204033023, -STORE, 47906204033024, 47906204041215, -ERASE, 47906200952832, 47906200952832, -STORE, 47906200952832, 47906200989695, -STORE, 47906200989696, 47906201006079, -ERASE, 47906200399872, 47906200399872, -STORE, 47906200399872, 47906200403967, -STORE, 47906200403968, 47906200408063, -ERASE, 47906200084480, 47906200084480, -STORE, 47906200084480, 47906200088575, -STORE, 47906200088576, 47906200092671, -ERASE, 47906197815296, 47906197815296, -STORE, 47906197815296, 47906197835775, -STORE, 47906197835776, 47906197839871, -ERASE, 47906197483520, 47906197483520, -STORE, 47906197483520, 47906197487615, -STORE, 47906197487616, 47906197491711, -ERASE, 47906197438464, 47906197438464, -STORE, 47906197438464, 47906197442559, -STORE, 47906197442560, 47906197446655, -ERASE, 94641232658432, 94641232658432, -STORE, 94641232658432, 94641232781311, -STORE, 94641232781312, 94641232785407, -ERASE, 139726599675904, 139726599675904, -STORE, 139726599675904, 139726599679999, -STORE, 139726599680000, 139726599684095, -ERASE, 47906195480576, 47906195480576, -STORE, 94641242615808, 94641242750975, - }; + check_seq(mt, 50, false); + mt_set_non_kernel(4); + check_store_range(mt, 5, 47, xa_mk_value(47), 0); + MT_BUG_ON(mt, !mt_height(mt)); + mtree_destroy(mt); - unsigned long set10[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140736427839488, 140737488351231, -ERASE, 140736427839488, 140736427839488, -STORE, 140736427839488, 140736427843583, -STORE, 94071213395968, 94071213567999, -ERASE, 94071213395968, 94071213395968, -STORE, 94071213395968, 94071213412351, -STORE, 94071213412352, 94071213567999, -ERASE, 94071213412352, 94071213412352, -STORE, 94071213412352, 94071213514751, -STORE, 94071213514752, 94071213555711, -STORE, 94071213555712, 94071213567999, -STORE, 139968410644480, 139968410816511, -ERASE, 139968410644480, 139968410644480, -STORE, 139968410644480, 139968410648575, -STORE, 139968410648576, 139968410816511, -ERASE, 139968410648576, 139968410648576, -STORE, 139968410648576, 139968410771455, -STORE, 139968410771456, 139968410804223, -STORE, 139968410804224, 139968410812415, -STORE, 139968410812416, 139968410816511, -STORE, 140736429277184, 140736429281279, -STORE, 140736429264896, 140736429277183, -STORE, 47664384352256, 47664384360447, -STORE, 47664384360448, 47664384368639, -STORE, 47664384368640, 47664384532479, -ERASE, 47664384368640, 47664384368640, -STORE, 47664384368640, 47664384380927, -STORE, 47664384380928, 47664384532479, -STORE, 47664384479232, 47664384532479, -STORE, 47664384380928, 47664384479231, -ERASE, 47664384380928, 47664384380928, -STORE, 47664384380928, 47664384479231, -STORE, 47664384524288, 47664384532479, -STORE, 47664384479232, 47664384524287, -ERASE, 47664384479232, 47664384479232, -STORE, 47664384479232, 47664384532479, -ERASE, 47664384479232, 47664384479232, -STORE, 47664384479232, 47664384524287, -STORE, 47664384524288, 47664384532479, -ERASE, 47664384524288, 47664384524288, -STORE, 47664384524288, 47664384532479, -STORE, 47664384532480, 47664387583999, -STORE, 47664385077248, 47664387583999, -STORE, 47664384532480, 47664385077247, -ERASE, 47664385077248, 47664385077248, -STORE, 47664385077248, 47664387362815, -STORE, 47664387362816, 47664387583999, -STORE, 47664386772992, 47664387362815, -STORE, 47664385077248, 47664386772991, -ERASE, 47664385077248, 47664385077248, -STORE, 47664385077248, 47664386772991, -STORE, 47664387358720, 47664387362815, -STORE, 47664386772992, 47664387358719, -ERASE, 47664386772992, 47664386772992, -STORE, 47664386772992, 47664387358719, -STORE, 47664387567616, 47664387583999, -STORE, 47664387362816, 47664387567615, -ERASE, 47664387362816, 47664387362816, -STORE, 47664387362816, 47664387567615, -ERASE, 47664387567616, 47664387567616, -STORE, 47664387567616, 47664387583999, -STORE, 47664387584000, 47664389423103, -STORE, 47664387723264, 47664389423103, -STORE, 47664387584000, 47664387723263, -ERASE, 47664387723264, 47664387723264, -STORE, 47664387723264, 47664389382143, -STORE, 47664389382144, 47664389423103, -STORE, 47664389066752, 47664389382143, -STORE, 47664387723264, 47664389066751, -ERASE, 47664387723264, 47664387723264, -STORE, 47664387723264, 47664389066751, -STORE, 47664389378048, 47664389382143, -STORE, 47664389066752, 47664389378047, -ERASE, 47664389066752, 47664389066752, -STORE, 47664389066752, 47664389378047, -STORE, 47664389406720, 47664389423103, -STORE, 47664389382144, 47664389406719, -ERASE, 47664389382144, 47664389382144, -STORE, 47664389382144, 47664389406719, -ERASE, 47664389406720, 47664389406720, -STORE, 47664389406720, 47664389423103, -STORE, 47664389423104, 47664389558271, -ERASE, 47664389423104, 47664389423104, -STORE, 47664389423104, 47664389447679, -STORE, 47664389447680, 47664389558271, -STORE, 47664389509120, 47664389558271, -STORE, 47664389447680, 47664389509119, -ERASE, 47664389447680, 47664389447680, -STORE, 47664389447680, 47664389509119, -STORE, 47664389533696, 47664389558271, -STORE, 47664389509120, 47664389533695, -ERASE, 47664389509120, 47664389509120, -STORE, 47664389509120, 47664389558271, -ERASE, 47664389509120, 47664389509120, -STORE, 47664389509120, 47664389533695, -STORE, 47664389533696, 47664389558271, -STORE, 47664389541888, 47664389558271, -STORE, 47664389533696, 47664389541887, -ERASE, 47664389533696, 47664389533696, -STORE, 47664389533696, 47664389541887, -ERASE, 47664389541888, 47664389541888, -STORE, 47664389541888, 47664389558271, -STORE, 47664389558272, 47664389578751, -ERASE, 47664389558272, 47664389558272, -STORE, 47664389558272, 47664389562367, -STORE, 47664389562368, 47664389578751, -STORE, 47664389566464, 47664389578751, -STORE, 47664389562368, 47664389566463, -ERASE, 47664389562368, 47664389562368, -STORE, 47664389562368, 47664389566463, -STORE, 47664389570560, 47664389578751, -STORE, 47664389566464, 47664389570559, -ERASE, 47664389566464, 47664389566464, -STORE, 47664389566464, 47664389578751, -ERASE, 47664389566464, 47664389566464, -STORE, 47664389566464, 47664389570559, -STORE, 47664389570560, 47664389578751, -ERASE, 47664389570560, 47664389570560, -STORE, 47664389570560, 47664389578751, -STORE, 47664389578752, 47664389586943, -ERASE, 47664389382144, 47664389382144, -STORE, 47664389382144, 47664389398527, -STORE, 47664389398528, 47664389406719, -ERASE, 47664389570560, 47664389570560, -STORE, 47664389570560, 47664389574655, -STORE, 47664389574656, 47664389578751, -ERASE, 47664389533696, 47664389533696, -STORE, 47664389533696, 47664389537791, -STORE, 47664389537792, 47664389541887, -ERASE, 47664387362816, 47664387362816, -STORE, 47664387362816, 47664387559423, -STORE, 47664387559424, 47664387567615, -ERASE, 47664384524288, 47664384524288, -STORE, 47664384524288, 47664384528383, -STORE, 47664384528384, 47664384532479, -ERASE, 94071213555712, 94071213555712, -STORE, 94071213555712, 94071213563903, -STORE, 94071213563904, 94071213567999, -ERASE, 139968410804224, 139968410804224, -STORE, 139968410804224, 139968410808319, -STORE, 139968410808320, 139968410812415, -ERASE, 47664384352256, 47664384352256, -STORE, 94071244402688, 94071244537855, -STORE, 140737488347136, 140737488351231, -STORE, 140728271503360, 140737488351231, -ERASE, 140728271503360, 140728271503360, -STORE, 140728271503360, 140728271507455, -STORE, 94410361982976, 94410362155007, -ERASE, 94410361982976, 94410361982976, -STORE, 94410361982976, 94410361999359, -STORE, 94410361999360, 94410362155007, -ERASE, 94410361999360, 94410361999360, -STORE, 94410361999360, 94410362101759, -STORE, 94410362101760, 94410362142719, -STORE, 94410362142720, 94410362155007, -STORE, 140351953997824, 140351954169855, -ERASE, 140351953997824, 140351953997824, -STORE, 140351953997824, 140351954001919, -STORE, 140351954001920, 140351954169855, -ERASE, 140351954001920, 140351954001920, -STORE, 140351954001920, 140351954124799, -STORE, 140351954124800, 140351954157567, -STORE, 140351954157568, 140351954165759, -STORE, 140351954165760, 140351954169855, -STORE, 140728272429056, 140728272433151, -STORE, 140728272416768, 140728272429055, -STORE, 47280840998912, 47280841007103, -STORE, 47280841007104, 47280841015295, -STORE, 47280841015296, 47280841179135, -ERASE, 47280841015296, 47280841015296, -STORE, 47280841015296, 47280841027583, -STORE, 47280841027584, 47280841179135, -STORE, 47280841125888, 47280841179135, -STORE, 47280841027584, 47280841125887, -ERASE, 47280841027584, 47280841027584, -STORE, 47280841027584, 47280841125887, -STORE, 47280841170944, 47280841179135, -STORE, 47280841125888, 47280841170943, -ERASE, 47280841125888, 47280841125888, -STORE, 47280841125888, 47280841179135, -ERASE, 47280841125888, 47280841125888, -STORE, 47280841125888, 47280841170943, -STORE, 47280841170944, 47280841179135, -ERASE, 47280841170944, 47280841170944, -STORE, 47280841170944, 47280841179135, -STORE, 47280841179136, 47280844230655, -STORE, 47280841723904, 47280844230655, -STORE, 47280841179136, 47280841723903, -ERASE, 47280841723904, 47280841723904, -STORE, 47280841723904, 47280844009471, -STORE, 47280844009472, 47280844230655, -STORE, 47280843419648, 47280844009471, -STORE, 47280841723904, 47280843419647, -ERASE, 47280841723904, 47280841723904, -STORE, 47280841723904, 47280843419647, -STORE, 47280844005376, 47280844009471, -STORE, 47280843419648, 47280844005375, -ERASE, 47280843419648, 47280843419648, -STORE, 47280843419648, 47280844005375, -STORE, 47280844214272, 47280844230655, -STORE, 47280844009472, 47280844214271, -ERASE, 47280844009472, 47280844009472, -STORE, 47280844009472, 47280844214271, -ERASE, 47280844214272, 47280844214272, -STORE, 47280844214272, 47280844230655, -STORE, 47280844230656, 47280846069759, -STORE, 47280844369920, 47280846069759, -STORE, 47280844230656, 47280844369919, -ERASE, 47280844369920, 47280844369920, -STORE, 47280844369920, 47280846028799, -STORE, 47280846028800, 47280846069759, -STORE, 47280845713408, 47280846028799, -STORE, 47280844369920, 47280845713407, -ERASE, 47280844369920, 47280844369920, -STORE, 47280844369920, 47280845713407, -STORE, 47280846024704, 47280846028799, -STORE, 47280845713408, 47280846024703, -ERASE, 47280845713408, 47280845713408, -STORE, 47280845713408, 47280846024703, -STORE, 47280846053376, 47280846069759, -STORE, 47280846028800, 47280846053375, -ERASE, 47280846028800, 47280846028800, -STORE, 47280846028800, 47280846053375, -ERASE, 47280846053376, 47280846053376, -STORE, 47280846053376, 47280846069759, -STORE, 47280846069760, 47280846204927, -ERASE, 47280846069760, 47280846069760, -STORE, 47280846069760, 47280846094335, -STORE, 47280846094336, 47280846204927, -STORE, 47280846155776, 47280846204927, -STORE, 47280846094336, 47280846155775, -ERASE, 47280846094336, 47280846094336, -STORE, 47280846094336, 47280846155775, -STORE, 47280846180352, 47280846204927, -STORE, 47280846155776, 47280846180351, -ERASE, 47280846155776, 47280846155776, -STORE, 47280846155776, 47280846204927, -ERASE, 47280846155776, 47280846155776, -STORE, 47280846155776, 47280846180351, -STORE, 47280846180352, 47280846204927, -STORE, 47280846188544, 47280846204927, -STORE, 47280846180352, 47280846188543, -ERASE, 47280846180352, 47280846180352, -STORE, 47280846180352, 47280846188543, -ERASE, 47280846188544, 47280846188544, -STORE, 47280846188544, 47280846204927, -STORE, 47280846204928, 47280846225407, -ERASE, 47280846204928, 47280846204928, -STORE, 47280846204928, 47280846209023, -STORE, 47280846209024, 47280846225407, -STORE, 47280846213120, 47280846225407, -STORE, 47280846209024, 47280846213119, -ERASE, 47280846209024, 47280846209024, -STORE, 47280846209024, 47280846213119, -STORE, 47280846217216, 47280846225407, -STORE, 47280846213120, 47280846217215, -ERASE, 47280846213120, 47280846213120, -STORE, 47280846213120, 47280846225407, -ERASE, 47280846213120, 47280846213120, -STORE, 47280846213120, 47280846217215, -STORE, 47280846217216, 47280846225407, -ERASE, 47280846217216, 47280846217216, -STORE, 47280846217216, 47280846225407, -STORE, 47280846225408, 47280846233599, -ERASE, 47280846028800, 47280846028800, -STORE, 47280846028800, 47280846045183, -STORE, 47280846045184, 47280846053375, -ERASE, 47280846217216, 47280846217216, -STORE, 47280846217216, 47280846221311, -STORE, 47280846221312, 47280846225407, -ERASE, 47280846180352, 47280846180352, -STORE, 47280846180352, 47280846184447, -STORE, 47280846184448, 47280846188543, -ERASE, 47280844009472, 47280844009472, -STORE, 47280844009472, 47280844206079, -STORE, 47280844206080, 47280844214271, -ERASE, 47280841170944, 47280841170944, -STORE, 47280841170944, 47280841175039, -STORE, 47280841175040, 47280841179135, -ERASE, 94410362142720, 94410362142720, -STORE, 94410362142720, 94410362150911, -STORE, 94410362150912, 94410362155007, -ERASE, 140351954157568, 140351954157568, -STORE, 140351954157568, 140351954161663, -STORE, 140351954161664, 140351954165759, -ERASE, 47280840998912, 47280840998912, -STORE, 94410379456512, 94410379591679, -STORE, 140737488347136, 140737488351231, -STORE, 140732946362368, 140737488351231, -ERASE, 140732946362368, 140732946362368, -STORE, 140732946362368, 140732946366463, -STORE, 94352937934848, 94352938106879, -ERASE, 94352937934848, 94352937934848, -STORE, 94352937934848, 94352937951231, -STORE, 94352937951232, 94352938106879, -ERASE, 94352937951232, 94352937951232, -STORE, 94352937951232, 94352938053631, -STORE, 94352938053632, 94352938094591, -STORE, 94352938094592, 94352938106879, -STORE, 140595518742528, 140595518914559, -ERASE, 140595518742528, 140595518742528, -STORE, 140595518742528, 140595518746623, -STORE, 140595518746624, 140595518914559, -ERASE, 140595518746624, 140595518746624, -STORE, 140595518746624, 140595518869503, -STORE, 140595518869504, 140595518902271, -STORE, 140595518902272, 140595518910463, -STORE, 140595518910464, 140595518914559, -STORE, 140732947468288, 140732947472383, -STORE, 140732947456000, 140732947468287, -STORE, 47037276254208, 47037276262399, -STORE, 47037276262400, 47037276270591, -STORE, 47037276270592, 47037276434431, -ERASE, 47037276270592, 47037276270592, -STORE, 47037276270592, 47037276282879, -STORE, 47037276282880, 47037276434431, -STORE, 47037276381184, 47037276434431, -STORE, 47037276282880, 47037276381183, -ERASE, 47037276282880, 47037276282880, -STORE, 47037276282880, 47037276381183, -STORE, 47037276426240, 47037276434431, -STORE, 47037276381184, 47037276426239, -ERASE, 47037276381184, 47037276381184, -STORE, 47037276381184, 47037276434431, -ERASE, 47037276381184, 47037276381184, -STORE, 47037276381184, 47037276426239, -STORE, 47037276426240, 47037276434431, -ERASE, 47037276426240, 47037276426240, -STORE, 47037276426240, 47037276434431, -STORE, 47037276434432, 47037279485951, -STORE, 47037276979200, 47037279485951, -STORE, 47037276434432, 47037276979199, -ERASE, 47037276979200, 47037276979200, -STORE, 47037276979200, 47037279264767, -STORE, 47037279264768, 47037279485951, -STORE, 47037278674944, 47037279264767, -STORE, 47037276979200, 47037278674943, -ERASE, 47037276979200, 47037276979200, -STORE, 47037276979200, 47037278674943, -STORE, 47037279260672, 47037279264767, -STORE, 47037278674944, 47037279260671, -ERASE, 47037278674944, 47037278674944, -STORE, 47037278674944, 47037279260671, -STORE, 47037279469568, 47037279485951, -STORE, 47037279264768, 47037279469567, -ERASE, 47037279264768, 47037279264768, -STORE, 47037279264768, 47037279469567, -ERASE, 47037279469568, 47037279469568, -STORE, 47037279469568, 47037279485951, -STORE, 47037279485952, 47037281325055, -STORE, 47037279625216, 47037281325055, -STORE, 47037279485952, 47037279625215, -ERASE, 47037279625216, 47037279625216, -STORE, 47037279625216, 47037281284095, -STORE, 47037281284096, 47037281325055, -STORE, 47037280968704, 47037281284095, -STORE, 47037279625216, 47037280968703, -ERASE, 47037279625216, 47037279625216, -STORE, 47037279625216, 47037280968703, -STORE, 47037281280000, 47037281284095, -STORE, 47037280968704, 47037281279999, -ERASE, 47037280968704, 47037280968704, -STORE, 47037280968704, 47037281279999, -STORE, 47037281308672, 47037281325055, -STORE, 47037281284096, 47037281308671, -ERASE, 47037281284096, 47037281284096, -STORE, 47037281284096, 47037281308671, -ERASE, 47037281308672, 47037281308672, -STORE, 47037281308672, 47037281325055, -STORE, 47037281325056, 47037281460223, -ERASE, 47037281325056, 47037281325056, -STORE, 47037281325056, 47037281349631, -STORE, 47037281349632, 47037281460223, -STORE, 47037281411072, 47037281460223, -STORE, 47037281349632, 47037281411071, -ERASE, 47037281349632, 47037281349632, -STORE, 47037281349632, 47037281411071, -STORE, 47037281435648, 47037281460223, -STORE, 47037281411072, 47037281435647, -ERASE, 47037281411072, 47037281411072, -STORE, 47037281411072, 47037281460223, -ERASE, 47037281411072, 47037281411072, -STORE, 47037281411072, 47037281435647, -STORE, 47037281435648, 47037281460223, -STORE, 47037281443840, 47037281460223, -STORE, 47037281435648, 47037281443839, -ERASE, 47037281435648, 47037281435648, -STORE, 47037281435648, 47037281443839, -ERASE, 47037281443840, 47037281443840, -STORE, 47037281443840, 47037281460223, -STORE, 47037281460224, 47037281480703, -ERASE, 47037281460224, 47037281460224, -STORE, 47037281460224, 47037281464319, -STORE, 47037281464320, 47037281480703, -STORE, 47037281468416, 47037281480703, -STORE, 47037281464320, 47037281468415, -ERASE, 47037281464320, 47037281464320, -STORE, 47037281464320, 47037281468415, -STORE, 47037281472512, 47037281480703, -STORE, 47037281468416, 47037281472511, -ERASE, 47037281468416, 47037281468416, -STORE, 47037281468416, 47037281480703, -ERASE, 47037281468416, 47037281468416, -STORE, 47037281468416, 47037281472511, -STORE, 47037281472512, 47037281480703, -ERASE, 47037281472512, 47037281472512, -STORE, 47037281472512, 47037281480703, -STORE, 47037281480704, 47037281488895, -ERASE, 47037281284096, 47037281284096, -STORE, 47037281284096, 47037281300479, -STORE, 47037281300480, 47037281308671, -ERASE, 47037281472512, 47037281472512, -STORE, 47037281472512, 47037281476607, -STORE, 47037281476608, 47037281480703, -ERASE, 47037281435648, 47037281435648, -STORE, 47037281435648, 47037281439743, -STORE, 47037281439744, 47037281443839, -ERASE, 47037279264768, 47037279264768, -STORE, 47037279264768, 47037279461375, -STORE, 47037279461376, 47037279469567, -ERASE, 47037276426240, 47037276426240, -STORE, 47037276426240, 47037276430335, -STORE, 47037276430336, 47037276434431, -ERASE, 94352938094592, 94352938094592, -STORE, 94352938094592, 94352938102783, -STORE, 94352938102784, 94352938106879, -ERASE, 140595518902272, 140595518902272, -STORE, 140595518902272, 140595518906367, -STORE, 140595518906368, 140595518910463, -ERASE, 47037276254208, 47037276254208, -STORE, 94352938438656, 94352938573823, -STORE, 140737488347136, 140737488351231, -STORE, 140733506027520, 140737488351231, -ERASE, 140733506027520, 140733506027520, -STORE, 140733506027520, 140733506031615, -STORE, 94150123073536, 94150123245567, -ERASE, 94150123073536, 94150123073536, -STORE, 94150123073536, 94150123089919, -STORE, 94150123089920, 94150123245567, -ERASE, 94150123089920, 94150123089920, -STORE, 94150123089920, 94150123192319, -STORE, 94150123192320, 94150123233279, -STORE, 94150123233280, 94150123245567, -STORE, 140081290375168, 140081290547199, -ERASE, 140081290375168, 140081290375168, -STORE, 140081290375168, 140081290379263, -STORE, 140081290379264, 140081290547199, -ERASE, 140081290379264, 140081290379264, -STORE, 140081290379264, 140081290502143, -STORE, 140081290502144, 140081290534911, -STORE, 140081290534912, 140081290543103, -STORE, 140081290543104, 140081290547199, -STORE, 140733506707456, 140733506711551, -STORE, 140733506695168, 140733506707455, -STORE, 47551504621568, 47551504629759, -STORE, 47551504629760, 47551504637951, -STORE, 47551504637952, 47551504801791, -ERASE, 47551504637952, 47551504637952, -STORE, 47551504637952, 47551504650239, -STORE, 47551504650240, 47551504801791, -STORE, 47551504748544, 47551504801791, -STORE, 47551504650240, 47551504748543, -ERASE, 47551504650240, 47551504650240, -STORE, 47551504650240, 47551504748543, -STORE, 47551504793600, 47551504801791, -STORE, 47551504748544, 47551504793599, -ERASE, 47551504748544, 47551504748544, -STORE, 47551504748544, 47551504801791, -ERASE, 47551504748544, 47551504748544, -STORE, 47551504748544, 47551504793599, -STORE, 47551504793600, 47551504801791, -ERASE, 47551504793600, 47551504793600, -STORE, 47551504793600, 47551504801791, -STORE, 47551504801792, 47551507853311, -STORE, 47551505346560, 47551507853311, -STORE, 47551504801792, 47551505346559, -ERASE, 47551505346560, 47551505346560, -STORE, 47551505346560, 47551507632127, -STORE, 47551507632128, 47551507853311, -STORE, 47551507042304, 47551507632127, -STORE, 47551505346560, 47551507042303, -ERASE, 47551505346560, 47551505346560, -STORE, 47551505346560, 47551507042303, -STORE, 47551507628032, 47551507632127, -STORE, 47551507042304, 47551507628031, -ERASE, 47551507042304, 47551507042304, -STORE, 47551507042304, 47551507628031, -STORE, 47551507836928, 47551507853311, -STORE, 47551507632128, 47551507836927, -ERASE, 47551507632128, 47551507632128, -STORE, 47551507632128, 47551507836927, -ERASE, 47551507836928, 47551507836928, -STORE, 47551507836928, 47551507853311, -STORE, 47551507853312, 47551509692415, -STORE, 47551507992576, 47551509692415, -STORE, 47551507853312, 47551507992575, -ERASE, 47551507992576, 47551507992576, -STORE, 47551507992576, 47551509651455, -STORE, 47551509651456, 47551509692415, -STORE, 47551509336064, 47551509651455, -STORE, 47551507992576, 47551509336063, -ERASE, 47551507992576, 47551507992576, -STORE, 47551507992576, 47551509336063, -STORE, 47551509647360, 47551509651455, -STORE, 47551509336064, 47551509647359, -ERASE, 47551509336064, 47551509336064, -STORE, 47551509336064, 47551509647359, -STORE, 47551509676032, 47551509692415, -STORE, 47551509651456, 47551509676031, -ERASE, 47551509651456, 47551509651456, -STORE, 47551509651456, 47551509676031, -ERASE, 47551509676032, 47551509676032, -STORE, 47551509676032, 47551509692415, -STORE, 47551509692416, 47551509827583, -ERASE, 47551509692416, 47551509692416, -STORE, 47551509692416, 47551509716991, -STORE, 47551509716992, 47551509827583, -STORE, 47551509778432, 47551509827583, -STORE, 47551509716992, 47551509778431, -ERASE, 47551509716992, 47551509716992, -STORE, 47551509716992, 47551509778431, -STORE, 47551509803008, 47551509827583, -STORE, 47551509778432, 47551509803007, -ERASE, 47551509778432, 47551509778432, -STORE, 47551509778432, 47551509827583, -ERASE, 47551509778432, 47551509778432, -STORE, 47551509778432, 47551509803007, -STORE, 47551509803008, 47551509827583, -STORE, 47551509811200, 47551509827583, -STORE, 47551509803008, 47551509811199, -ERASE, 47551509803008, 47551509803008, -STORE, 47551509803008, 47551509811199, -ERASE, 47551509811200, 47551509811200, -STORE, 47551509811200, 47551509827583, -STORE, 47551509827584, 47551509848063, -ERASE, 47551509827584, 47551509827584, -STORE, 47551509827584, 47551509831679, -STORE, 47551509831680, 47551509848063, -STORE, 47551509835776, 47551509848063, -STORE, 47551509831680, 47551509835775, -ERASE, 47551509831680, 47551509831680, -STORE, 47551509831680, 47551509835775, -STORE, 47551509839872, 47551509848063, -STORE, 47551509835776, 47551509839871, -ERASE, 47551509835776, 47551509835776, -STORE, 47551509835776, 47551509848063, -ERASE, 47551509835776, 47551509835776, -STORE, 47551509835776, 47551509839871, -STORE, 47551509839872, 47551509848063, -ERASE, 47551509839872, 47551509839872, -STORE, 47551509839872, 47551509848063, -STORE, 47551509848064, 47551509856255, -ERASE, 47551509651456, 47551509651456, -STORE, 47551509651456, 47551509667839, -STORE, 47551509667840, 47551509676031, -ERASE, 47551509839872, 47551509839872, -STORE, 47551509839872, 47551509843967, -STORE, 47551509843968, 47551509848063, -ERASE, 47551509803008, 47551509803008, -STORE, 47551509803008, 47551509807103, -STORE, 47551509807104, 47551509811199, -ERASE, 47551507632128, 47551507632128, -STORE, 47551507632128, 47551507828735, -STORE, 47551507828736, 47551507836927, -ERASE, 47551504793600, 47551504793600, -STORE, 47551504793600, 47551504797695, -STORE, 47551504797696, 47551504801791, -ERASE, 94150123233280, 94150123233280, -STORE, 94150123233280, 94150123241471, -STORE, 94150123241472, 94150123245567, -ERASE, 140081290534912, 140081290534912, -STORE, 140081290534912, 140081290539007, -STORE, 140081290539008, 140081290543103, -ERASE, 47551504621568, 47551504621568, -STORE, 94150148112384, 94150148247551, -STORE, 140737488347136, 140737488351231, -STORE, 140734389334016, 140737488351231, -ERASE, 140734389334016, 140734389334016, -STORE, 140734389334016, 140734389338111, -STORE, 94844636606464, 94844636778495, -ERASE, 94844636606464, 94844636606464, -STORE, 94844636606464, 94844636622847, -STORE, 94844636622848, 94844636778495, -ERASE, 94844636622848, 94844636622848, -STORE, 94844636622848, 94844636725247, -STORE, 94844636725248, 94844636766207, -STORE, 94844636766208, 94844636778495, -STORE, 139922765217792, 139922765389823, -ERASE, 139922765217792, 139922765217792, -STORE, 139922765217792, 139922765221887, -STORE, 139922765221888, 139922765389823, -ERASE, 139922765221888, 139922765221888, -STORE, 139922765221888, 139922765344767, -STORE, 139922765344768, 139922765377535, -STORE, 139922765377536, 139922765385727, -STORE, 139922765385728, 139922765389823, -STORE, 140734389678080, 140734389682175, -STORE, 140734389665792, 140734389678079, -STORE, 47710029778944, 47710029787135, -STORE, 47710029787136, 47710029795327, -STORE, 47710029795328, 47710029959167, -ERASE, 47710029795328, 47710029795328, -STORE, 47710029795328, 47710029807615, -STORE, 47710029807616, 47710029959167, -STORE, 47710029905920, 47710029959167, -STORE, 47710029807616, 47710029905919, -ERASE, 47710029807616, 47710029807616, -STORE, 47710029807616, 47710029905919, -STORE, 47710029950976, 47710029959167, -STORE, 47710029905920, 47710029950975, -ERASE, 47710029905920, 47710029905920, -STORE, 47710029905920, 47710029959167, -ERASE, 47710029905920, 47710029905920, -STORE, 47710029905920, 47710029950975, -STORE, 47710029950976, 47710029959167, -ERASE, 47710029950976, 47710029950976, -STORE, 47710029950976, 47710029959167, -STORE, 47710029959168, 47710033010687, -STORE, 47710030503936, 47710033010687, -STORE, 47710029959168, 47710030503935, -ERASE, 47710030503936, 47710030503936, -STORE, 47710030503936, 47710032789503, -STORE, 47710032789504, 47710033010687, -STORE, 47710032199680, 47710032789503, -STORE, 47710030503936, 47710032199679, -ERASE, 47710030503936, 47710030503936, -STORE, 47710030503936, 47710032199679, -STORE, 47710032785408, 47710032789503, -STORE, 47710032199680, 47710032785407, -ERASE, 47710032199680, 47710032199680, -STORE, 47710032199680, 47710032785407, -STORE, 47710032994304, 47710033010687, -STORE, 47710032789504, 47710032994303, -ERASE, 47710032789504, 47710032789504, -STORE, 47710032789504, 47710032994303, -ERASE, 47710032994304, 47710032994304, -STORE, 47710032994304, 47710033010687, -STORE, 47710033010688, 47710034849791, -STORE, 47710033149952, 47710034849791, -STORE, 47710033010688, 47710033149951, -ERASE, 47710033149952, 47710033149952, -STORE, 47710033149952, 47710034808831, -STORE, 47710034808832, 47710034849791, -STORE, 47710034493440, 47710034808831, -STORE, 47710033149952, 47710034493439, -ERASE, 47710033149952, 47710033149952, -STORE, 47710033149952, 47710034493439, -STORE, 47710034804736, 47710034808831, -STORE, 47710034493440, 47710034804735, -ERASE, 47710034493440, 47710034493440, -STORE, 47710034493440, 47710034804735, -STORE, 47710034833408, 47710034849791, -STORE, 47710034808832, 47710034833407, -ERASE, 47710034808832, 47710034808832, -STORE, 47710034808832, 47710034833407, -ERASE, 47710034833408, 47710034833408, -STORE, 47710034833408, 47710034849791, -STORE, 47710034849792, 47710034984959, -ERASE, 47710034849792, 47710034849792, -STORE, 47710034849792, 47710034874367, -STORE, 47710034874368, 47710034984959, -STORE, 47710034935808, 47710034984959, -STORE, 47710034874368, 47710034935807, -ERASE, 47710034874368, 47710034874368, -STORE, 47710034874368, 47710034935807, -STORE, 47710034960384, 47710034984959, -STORE, 47710034935808, 47710034960383, -ERASE, 47710034935808, 47710034935808, -STORE, 47710034935808, 47710034984959, -ERASE, 47710034935808, 47710034935808, -STORE, 47710034935808, 47710034960383, -STORE, 47710034960384, 47710034984959, -STORE, 47710034968576, 47710034984959, -STORE, 47710034960384, 47710034968575, -ERASE, 47710034960384, 47710034960384, -STORE, 47710034960384, 47710034968575, -ERASE, 47710034968576, 47710034968576, -STORE, 47710034968576, 47710034984959, -STORE, 47710034984960, 47710035005439, -ERASE, 47710034984960, 47710034984960, -STORE, 47710034984960, 47710034989055, -STORE, 47710034989056, 47710035005439, -STORE, 47710034993152, 47710035005439, -STORE, 47710034989056, 47710034993151, -ERASE, 47710034989056, 47710034989056, -STORE, 47710034989056, 47710034993151, -STORE, 47710034997248, 47710035005439, -STORE, 47710034993152, 47710034997247, -ERASE, 47710034993152, 47710034993152, -STORE, 47710034993152, 47710035005439, -ERASE, 47710034993152, 47710034993152, -STORE, 47710034993152, 47710034997247, -STORE, 47710034997248, 47710035005439, -ERASE, 47710034997248, 47710034997248, -STORE, 47710034997248, 47710035005439, -STORE, 47710035005440, 47710035013631, -ERASE, 47710034808832, 47710034808832, -STORE, 47710034808832, 47710034825215, -STORE, 47710034825216, 47710034833407, -ERASE, 47710034997248, 47710034997248, -STORE, 47710034997248, 47710035001343, -STORE, 47710035001344, 47710035005439, -ERASE, 47710034960384, 47710034960384, -STORE, 47710034960384, 47710034964479, -STORE, 47710034964480, 47710034968575, -ERASE, 47710032789504, 47710032789504, -STORE, 47710032789504, 47710032986111, -STORE, 47710032986112, 47710032994303, -ERASE, 47710029950976, 47710029950976, -STORE, 47710029950976, 47710029955071, -STORE, 47710029955072, 47710029959167, -ERASE, 94844636766208, 94844636766208, -STORE, 94844636766208, 94844636774399, -STORE, 94844636774400, 94844636778495, -ERASE, 139922765377536, 139922765377536, -STORE, 139922765377536, 139922765381631, -STORE, 139922765381632, 139922765385727, -ERASE, 47710029778944, 47710029778944, -STORE, 94844641775616, 94844641910783, -STORE, 140737488347136, 140737488351231, -STORE, 140732213886976, 140737488351231, -ERASE, 140732213886976, 140732213886976, -STORE, 140732213886976, 140732213891071, -STORE, 94240508887040, 94240509059071, -ERASE, 94240508887040, 94240508887040, -STORE, 94240508887040, 94240508903423, -STORE, 94240508903424, 94240509059071, -ERASE, 94240508903424, 94240508903424, -STORE, 94240508903424, 94240509005823, -STORE, 94240509005824, 94240509046783, -STORE, 94240509046784, 94240509059071, -STORE, 140275106516992, 140275106689023, -ERASE, 140275106516992, 140275106516992, -STORE, 140275106516992, 140275106521087, -STORE, 140275106521088, 140275106689023, -ERASE, 140275106521088, 140275106521088, -STORE, 140275106521088, 140275106643967, -STORE, 140275106643968, 140275106676735, -STORE, 140275106676736, 140275106684927, -STORE, 140275106684928, 140275106689023, -STORE, 140732213977088, 140732213981183, -STORE, 140732213964800, 140732213977087, -STORE, 47357688479744, 47357688487935, -STORE, 47357688487936, 47357688496127, -STORE, 47357688496128, 47357688659967, -ERASE, 47357688496128, 47357688496128, -STORE, 47357688496128, 47357688508415, -STORE, 47357688508416, 47357688659967, -STORE, 47357688606720, 47357688659967, -STORE, 47357688508416, 47357688606719, -ERASE, 47357688508416, 47357688508416, -STORE, 47357688508416, 47357688606719, -STORE, 47357688651776, 47357688659967, -STORE, 47357688606720, 47357688651775, -ERASE, 47357688606720, 47357688606720, -STORE, 47357688606720, 47357688659967, -ERASE, 47357688606720, 47357688606720, -STORE, 47357688606720, 47357688651775, -STORE, 47357688651776, 47357688659967, -ERASE, 47357688651776, 47357688651776, -STORE, 47357688651776, 47357688659967, -STORE, 47357688659968, 47357691711487, -STORE, 47357689204736, 47357691711487, -STORE, 47357688659968, 47357689204735, -ERASE, 47357689204736, 47357689204736, -STORE, 47357689204736, 47357691490303, -STORE, 47357691490304, 47357691711487, -STORE, 47357690900480, 47357691490303, -STORE, 47357689204736, 47357690900479, -ERASE, 47357689204736, 47357689204736, -STORE, 47357689204736, 47357690900479, -STORE, 47357691486208, 47357691490303, -STORE, 47357690900480, 47357691486207, -ERASE, 47357690900480, 47357690900480, -STORE, 47357690900480, 47357691486207, -STORE, 47357691695104, 47357691711487, -STORE, 47357691490304, 47357691695103, -ERASE, 47357691490304, 47357691490304, -STORE, 47357691490304, 47357691695103, -ERASE, 47357691695104, 47357691695104, -STORE, 47357691695104, 47357691711487, -STORE, 47357691711488, 47357693550591, -STORE, 47357691850752, 47357693550591, -STORE, 47357691711488, 47357691850751, -ERASE, 47357691850752, 47357691850752, -STORE, 47357691850752, 47357693509631, -STORE, 47357693509632, 47357693550591, -STORE, 47357693194240, 47357693509631, -STORE, 47357691850752, 47357693194239, -ERASE, 47357691850752, 47357691850752, -STORE, 47357691850752, 47357693194239, -STORE, 47357693505536, 47357693509631, -STORE, 47357693194240, 47357693505535, -ERASE, 47357693194240, 47357693194240, -STORE, 47357693194240, 47357693505535, -STORE, 47357693534208, 47357693550591, -STORE, 47357693509632, 47357693534207, -ERASE, 47357693509632, 47357693509632, -STORE, 47357693509632, 47357693534207, -ERASE, 47357693534208, 47357693534208, -STORE, 47357693534208, 47357693550591, -STORE, 47357693550592, 47357693685759, -ERASE, 47357693550592, 47357693550592, -STORE, 47357693550592, 47357693575167, -STORE, 47357693575168, 47357693685759, -STORE, 47357693636608, 47357693685759, -STORE, 47357693575168, 47357693636607, -ERASE, 47357693575168, 47357693575168, -STORE, 47357693575168, 47357693636607, -STORE, 47357693661184, 47357693685759, -STORE, 47357693636608, 47357693661183, -ERASE, 47357693636608, 47357693636608, -STORE, 47357693636608, 47357693685759, -ERASE, 47357693636608, 47357693636608, -STORE, 47357693636608, 47357693661183, -STORE, 47357693661184, 47357693685759, -STORE, 47357693669376, 47357693685759, -STORE, 47357693661184, 47357693669375, -ERASE, 47357693661184, 47357693661184, -STORE, 47357693661184, 47357693669375, -ERASE, 47357693669376, 47357693669376, -STORE, 47357693669376, 47357693685759, -STORE, 47357693685760, 47357693706239, -ERASE, 47357693685760, 47357693685760, -STORE, 47357693685760, 47357693689855, -STORE, 47357693689856, 47357693706239, -STORE, 47357693693952, 47357693706239, -STORE, 47357693689856, 47357693693951, -ERASE, 47357693689856, 47357693689856, -STORE, 47357693689856, 47357693693951, -STORE, 47357693698048, 47357693706239, -STORE, 47357693693952, 47357693698047, -ERASE, 47357693693952, 47357693693952, -STORE, 47357693693952, 47357693706239, -ERASE, 47357693693952, 47357693693952, -STORE, 47357693693952, 47357693698047, -STORE, 47357693698048, 47357693706239, -ERASE, 47357693698048, 47357693698048, -STORE, 47357693698048, 47357693706239, -STORE, 47357693706240, 47357693714431, -ERASE, 47357693509632, 47357693509632, -STORE, 47357693509632, 47357693526015, -STORE, 47357693526016, 47357693534207, -ERASE, 47357693698048, 47357693698048, -STORE, 47357693698048, 47357693702143, -STORE, 47357693702144, 47357693706239, -ERASE, 47357693661184, 47357693661184, -STORE, 47357693661184, 47357693665279, -STORE, 47357693665280, 47357693669375, -ERASE, 47357691490304, 47357691490304, -STORE, 47357691490304, 47357691686911, -STORE, 47357691686912, 47357691695103, -ERASE, 47357688651776, 47357688651776, -STORE, 47357688651776, 47357688655871, -STORE, 47357688655872, 47357688659967, -ERASE, 94240509046784, 94240509046784, -STORE, 94240509046784, 94240509054975, -STORE, 94240509054976, 94240509059071, -ERASE, 140275106676736, 140275106676736, -STORE, 140275106676736, 140275106680831, -STORE, 140275106680832, 140275106684927, -ERASE, 47357688479744, 47357688479744, -STORE, 94240518361088, 94240518496255, -STORE, 140737488347136, 140737488351231, -STORE, 140732688277504, 140737488351231, -ERASE, 140732688277504, 140732688277504, -STORE, 140732688277504, 140732688281599, -STORE, 94629171351552, 94629172064255, -ERASE, 94629171351552, 94629171351552, -STORE, 94629171351552, 94629171400703, -STORE, 94629171400704, 94629172064255, -ERASE, 94629171400704, 94629171400704, -STORE, 94629171400704, 94629171945471, -STORE, 94629171945472, 94629172043775, -STORE, 94629172043776, 94629172064255, -STORE, 139770707644416, 139770707816447, -ERASE, 139770707644416, 139770707644416, -STORE, 139770707644416, 139770707648511, -STORE, 139770707648512, 139770707816447, -ERASE, 139770707648512, 139770707648512, -STORE, 139770707648512, 139770707771391, -STORE, 139770707771392, 139770707804159, -STORE, 139770707804160, 139770707812351, -STORE, 139770707812352, 139770707816447, -STORE, 140732689121280, 140732689125375, -STORE, 140732689108992, 140732689121279, -STORE, 47862087352320, 47862087360511, -STORE, 47862087360512, 47862087368703, -STORE, 47862087368704, 47862087475199, -STORE, 47862087385088, 47862087475199, -STORE, 47862087368704, 47862087385087, -ERASE, 47862087385088, 47862087385088, -STORE, 47862087385088, 47862087458815, -STORE, 47862087458816, 47862087475199, -STORE, 47862087438336, 47862087458815, -STORE, 47862087385088, 47862087438335, -ERASE, 47862087385088, 47862087385088, -STORE, 47862087385088, 47862087438335, -STORE, 47862087454720, 47862087458815, -STORE, 47862087438336, 47862087454719, -ERASE, 47862087438336, 47862087438336, -STORE, 47862087438336, 47862087454719, -STORE, 47862087467008, 47862087475199, -STORE, 47862087458816, 47862087467007, -ERASE, 47862087458816, 47862087458816, -STORE, 47862087458816, 47862087467007, -ERASE, 47862087467008, 47862087467008, -STORE, 47862087467008, 47862087475199, -STORE, 47862087475200, 47862089314303, -STORE, 47862087614464, 47862089314303, -STORE, 47862087475200, 47862087614463, -ERASE, 47862087614464, 47862087614464, -STORE, 47862087614464, 47862089273343, -STORE, 47862089273344, 47862089314303, -STORE, 47862088957952, 47862089273343, -STORE, 47862087614464, 47862088957951, -ERASE, 47862087614464, 47862087614464, -STORE, 47862087614464, 47862088957951, -STORE, 47862089269248, 47862089273343, -STORE, 47862088957952, 47862089269247, -ERASE, 47862088957952, 47862088957952, -STORE, 47862088957952, 47862089269247, -STORE, 47862089297920, 47862089314303, -STORE, 47862089273344, 47862089297919, -ERASE, 47862089273344, 47862089273344, -STORE, 47862089273344, 47862089297919, -ERASE, 47862089297920, 47862089297920, -STORE, 47862089297920, 47862089314303, -STORE, 47862089297920, 47862089326591, -ERASE, 47862089273344, 47862089273344, -STORE, 47862089273344, 47862089289727, -STORE, 47862089289728, 47862089297919, -ERASE, 47862087458816, 47862087458816, -STORE, 47862087458816, 47862087462911, -STORE, 47862087462912, 47862087467007, -ERASE, 94629172043776, 94629172043776, -STORE, 94629172043776, 94629172060159, -STORE, 94629172060160, 94629172064255, -ERASE, 139770707804160, 139770707804160, -STORE, 139770707804160, 139770707808255, -STORE, 139770707808256, 139770707812351, -ERASE, 47862087352320, 47862087352320, -STORE, 94629197533184, 94629197668351, -STORE, 140737488347136, 140737488351231, -STORE, 140727540711424, 140737488351231, -ERASE, 140727540711424, 140727540711424, -STORE, 140727540711424, 140727540715519, -STORE, 94299865313280, 94299866025983, -ERASE, 94299865313280, 94299865313280, -STORE, 94299865313280, 94299865362431, -STORE, 94299865362432, 94299866025983, -ERASE, 94299865362432, 94299865362432, -STORE, 94299865362432, 94299865907199, -STORE, 94299865907200, 94299866005503, -STORE, 94299866005504, 94299866025983, -STORE, 140680268763136, 140680268935167, -ERASE, 140680268763136, 140680268763136, -STORE, 140680268763136, 140680268767231, -STORE, 140680268767232, 140680268935167, -ERASE, 140680268767232, 140680268767232, -STORE, 140680268767232, 140680268890111, -STORE, 140680268890112, 140680268922879, -STORE, 140680268922880, 140680268931071, -STORE, 140680268931072, 140680268935167, -STORE, 140727541424128, 140727541428223, -STORE, 140727541411840, 140727541424127, -STORE, 46952526233600, 46952526241791, -STORE, 46952526241792, 46952526249983, -STORE, 46952526249984, 46952526356479, -STORE, 46952526266368, 46952526356479, -STORE, 46952526249984, 46952526266367, -ERASE, 46952526266368, 46952526266368, -STORE, 46952526266368, 46952526340095, -STORE, 46952526340096, 46952526356479, -STORE, 46952526319616, 46952526340095, -STORE, 46952526266368, 46952526319615, -ERASE, 46952526266368, 46952526266368, -STORE, 46952526266368, 46952526319615, -STORE, 46952526336000, 46952526340095, -STORE, 46952526319616, 46952526335999, -ERASE, 46952526319616, 46952526319616, -STORE, 46952526319616, 46952526335999, -STORE, 46952526348288, 46952526356479, -STORE, 46952526340096, 46952526348287, -ERASE, 46952526340096, 46952526340096, -STORE, 46952526340096, 46952526348287, -ERASE, 46952526348288, 46952526348288, -STORE, 46952526348288, 46952526356479, -STORE, 46952526356480, 46952528195583, -STORE, 46952526495744, 46952528195583, -STORE, 46952526356480, 46952526495743, -ERASE, 46952526495744, 46952526495744, -STORE, 46952526495744, 46952528154623, -STORE, 46952528154624, 46952528195583, -STORE, 46952527839232, 46952528154623, -STORE, 46952526495744, 46952527839231, -ERASE, 46952526495744, 46952526495744, -STORE, 46952526495744, 46952527839231, -STORE, 46952528150528, 46952528154623, -STORE, 46952527839232, 46952528150527, -ERASE, 46952527839232, 46952527839232, -STORE, 46952527839232, 46952528150527, -STORE, 46952528179200, 46952528195583, -STORE, 46952528154624, 46952528179199, -ERASE, 46952528154624, 46952528154624, -STORE, 46952528154624, 46952528179199, -ERASE, 46952528179200, 46952528179200, -STORE, 46952528179200, 46952528195583, -STORE, 46952528179200, 46952528207871, -ERASE, 46952528154624, 46952528154624, -STORE, 46952528154624, 46952528171007, -STORE, 46952528171008, 46952528179199, -ERASE, 46952526340096, 46952526340096, -STORE, 46952526340096, 46952526344191, -STORE, 46952526344192, 46952526348287, -ERASE, 94299866005504, 94299866005504, -STORE, 94299866005504, 94299866021887, -STORE, 94299866021888, 94299866025983, -ERASE, 140680268922880, 140680268922880, -STORE, 140680268922880, 140680268926975, -STORE, 140680268926976, 140680268931071, -ERASE, 46952526233600, 46952526233600, -STORE, 140737488347136, 140737488351231, -STORE, 140722874793984, 140737488351231, -ERASE, 140722874793984, 140722874793984, -STORE, 140722874793984, 140722874798079, -STORE, 94448916213760, 94448916926463, -ERASE, 94448916213760, 94448916213760, -STORE, 94448916213760, 94448916262911, -STORE, 94448916262912, 94448916926463, -ERASE, 94448916262912, 94448916262912, -STORE, 94448916262912, 94448916807679, -STORE, 94448916807680, 94448916905983, -STORE, 94448916905984, 94448916926463, -STORE, 140389117046784, 140389117218815, -ERASE, 140389117046784, 140389117046784, -STORE, 140389117046784, 140389117050879, -STORE, 140389117050880, 140389117218815, -ERASE, 140389117050880, 140389117050880, -STORE, 140389117050880, 140389117173759, -STORE, 140389117173760, 140389117206527, -STORE, 140389117206528, 140389117214719, -STORE, 140389117214720, 140389117218815, -STORE, 140722875297792, 140722875301887, -STORE, 140722875285504, 140722875297791, -STORE, 47243677949952, 47243677958143, -STORE, 47243677958144, 47243677966335, -STORE, 47243677966336, 47243678072831, -STORE, 47243677982720, 47243678072831, -STORE, 47243677966336, 47243677982719, -ERASE, 47243677982720, 47243677982720, -STORE, 47243677982720, 47243678056447, -STORE, 47243678056448, 47243678072831, -STORE, 47243678035968, 47243678056447, -STORE, 47243677982720, 47243678035967, -ERASE, 47243677982720, 47243677982720, -STORE, 47243677982720, 47243678035967, -STORE, 47243678052352, 47243678056447, -STORE, 47243678035968, 47243678052351, -ERASE, 47243678035968, 47243678035968, -STORE, 47243678035968, 47243678052351, -STORE, 47243678064640, 47243678072831, -STORE, 47243678056448, 47243678064639, -ERASE, 47243678056448, 47243678056448, -STORE, 47243678056448, 47243678064639, -ERASE, 47243678064640, 47243678064640, -STORE, 47243678064640, 47243678072831, -STORE, 47243678072832, 47243679911935, -STORE, 47243678212096, 47243679911935, -STORE, 47243678072832, 47243678212095, -ERASE, 47243678212096, 47243678212096, -STORE, 47243678212096, 47243679870975, -STORE, 47243679870976, 47243679911935, -STORE, 47243679555584, 47243679870975, -STORE, 47243678212096, 47243679555583, -ERASE, 47243678212096, 47243678212096, -STORE, 47243678212096, 47243679555583, -STORE, 47243679866880, 47243679870975, -STORE, 47243679555584, 47243679866879, -ERASE, 47243679555584, 47243679555584, -STORE, 47243679555584, 47243679866879, -STORE, 47243679895552, 47243679911935, -STORE, 47243679870976, 47243679895551, -ERASE, 47243679870976, 47243679870976, -STORE, 47243679870976, 47243679895551, -ERASE, 47243679895552, 47243679895552, -STORE, 47243679895552, 47243679911935, -STORE, 47243679895552, 47243679924223, -ERASE, 47243679870976, 47243679870976, -STORE, 47243679870976, 47243679887359, -STORE, 47243679887360, 47243679895551, -ERASE, 47243678056448, 47243678056448, -STORE, 47243678056448, 47243678060543, -STORE, 47243678060544, 47243678064639, -ERASE, 94448916905984, 94448916905984, -STORE, 94448916905984, 94448916922367, -STORE, 94448916922368, 94448916926463, -ERASE, 140389117206528, 140389117206528, -STORE, 140389117206528, 140389117210623, -STORE, 140389117210624, 140389117214719, -ERASE, 47243677949952, 47243677949952, -STORE, 140737488347136, 140737488351231, -STORE, 140733068505088, 140737488351231, -ERASE, 140733068505088, 140733068505088, -STORE, 140733068505088, 140733068509183, -STORE, 94207145750528, 94207146463231, -ERASE, 94207145750528, 94207145750528, -STORE, 94207145750528, 94207145799679, -STORE, 94207145799680, 94207146463231, -ERASE, 94207145799680, 94207145799680, -STORE, 94207145799680, 94207146344447, -STORE, 94207146344448, 94207146442751, -STORE, 94207146442752, 94207146463231, -STORE, 140684504911872, 140684505083903, -ERASE, 140684504911872, 140684504911872, -STORE, 140684504911872, 140684504915967, -STORE, 140684504915968, 140684505083903, -ERASE, 140684504915968, 140684504915968, -STORE, 140684504915968, 140684505038847, -STORE, 140684505038848, 140684505071615, -STORE, 140684505071616, 140684505079807, -STORE, 140684505079808, 140684505083903, -STORE, 140733068607488, 140733068611583, -STORE, 140733068595200, 140733068607487, -STORE, 46948290084864, 46948290093055, -STORE, 46948290093056, 46948290101247, -STORE, 46948290101248, 46948290207743, -STORE, 46948290117632, 46948290207743, -STORE, 46948290101248, 46948290117631, -ERASE, 46948290117632, 46948290117632, -STORE, 46948290117632, 46948290191359, -STORE, 46948290191360, 46948290207743, -STORE, 46948290170880, 46948290191359, -STORE, 46948290117632, 46948290170879, -ERASE, 46948290117632, 46948290117632, -STORE, 46948290117632, 46948290170879, -STORE, 46948290187264, 46948290191359, -STORE, 46948290170880, 46948290187263, -ERASE, 46948290170880, 46948290170880, -STORE, 46948290170880, 46948290187263, -STORE, 46948290199552, 46948290207743, -STORE, 46948290191360, 46948290199551, -ERASE, 46948290191360, 46948290191360, -STORE, 46948290191360, 46948290199551, -ERASE, 46948290199552, 46948290199552, -STORE, 46948290199552, 46948290207743, -STORE, 46948290207744, 46948292046847, -STORE, 46948290347008, 46948292046847, -STORE, 46948290207744, 46948290347007, -ERASE, 46948290347008, 46948290347008, -STORE, 46948290347008, 46948292005887, -STORE, 46948292005888, 46948292046847, -STORE, 46948291690496, 46948292005887, -STORE, 46948290347008, 46948291690495, -ERASE, 46948290347008, 46948290347008, -STORE, 46948290347008, 46948291690495, -STORE, 46948292001792, 46948292005887, -STORE, 46948291690496, 46948292001791, -ERASE, 46948291690496, 46948291690496, -STORE, 46948291690496, 46948292001791, -STORE, 46948292030464, 46948292046847, -STORE, 46948292005888, 46948292030463, -ERASE, 46948292005888, 46948292005888, -STORE, 46948292005888, 46948292030463, -ERASE, 46948292030464, 46948292030464, -STORE, 46948292030464, 46948292046847, -STORE, 46948292030464, 46948292059135, -ERASE, 46948292005888, 46948292005888, -STORE, 46948292005888, 46948292022271, -STORE, 46948292022272, 46948292030463, -ERASE, 46948290191360, 46948290191360, -STORE, 46948290191360, 46948290195455, -STORE, 46948290195456, 46948290199551, -ERASE, 94207146442752, 94207146442752, -STORE, 94207146442752, 94207146459135, -STORE, 94207146459136, 94207146463231, -ERASE, 140684505071616, 140684505071616, -STORE, 140684505071616, 140684505075711, -STORE, 140684505075712, 140684505079807, -ERASE, 46948290084864, 46948290084864, -STORE, 140737488347136, 140737488351231, -STORE, 140726367158272, 140737488351231, -ERASE, 140726367158272, 140726367158272, -STORE, 140726367158272, 140726367162367, -STORE, 94436124106752, 94436124819455, -ERASE, 94436124106752, 94436124106752, -STORE, 94436124106752, 94436124155903, -STORE, 94436124155904, 94436124819455, -ERASE, 94436124155904, 94436124155904, -STORE, 94436124155904, 94436124700671, -STORE, 94436124700672, 94436124798975, -STORE, 94436124798976, 94436124819455, -STORE, 140049025044480, 140049025216511, -ERASE, 140049025044480, 140049025044480, -STORE, 140049025044480, 140049025048575, -STORE, 140049025048576, 140049025216511, -ERASE, 140049025048576, 140049025048576, -STORE, 140049025048576, 140049025171455, -STORE, 140049025171456, 140049025204223, -STORE, 140049025204224, 140049025212415, -STORE, 140049025212416, 140049025216511, -STORE, 140726367256576, 140726367260671, -STORE, 140726367244288, 140726367256575, -STORE, 47583769952256, 47583769960447, -STORE, 47583769960448, 47583769968639, -STORE, 47583769968640, 47583770075135, -STORE, 47583769985024, 47583770075135, -STORE, 47583769968640, 47583769985023, -ERASE, 47583769985024, 47583769985024, -STORE, 47583769985024, 47583770058751, -STORE, 47583770058752, 47583770075135, -STORE, 47583770038272, 47583770058751, -STORE, 47583769985024, 47583770038271, -ERASE, 47583769985024, 47583769985024, -STORE, 47583769985024, 47583770038271, -STORE, 47583770054656, 47583770058751, -STORE, 47583770038272, 47583770054655, -ERASE, 47583770038272, 47583770038272, -STORE, 47583770038272, 47583770054655, -STORE, 47583770066944, 47583770075135, -STORE, 47583770058752, 47583770066943, -ERASE, 47583770058752, 47583770058752, -STORE, 47583770058752, 47583770066943, -ERASE, 47583770066944, 47583770066944, -STORE, 47583770066944, 47583770075135, -STORE, 47583770075136, 47583771914239, -STORE, 47583770214400, 47583771914239, -STORE, 47583770075136, 47583770214399, -ERASE, 47583770214400, 47583770214400, -STORE, 47583770214400, 47583771873279, -STORE, 47583771873280, 47583771914239, -STORE, 47583771557888, 47583771873279, -STORE, 47583770214400, 47583771557887, -ERASE, 47583770214400, 47583770214400, -STORE, 47583770214400, 47583771557887, -STORE, 47583771869184, 47583771873279, -STORE, 47583771557888, 47583771869183, -ERASE, 47583771557888, 47583771557888, -STORE, 47583771557888, 47583771869183, -STORE, 47583771897856, 47583771914239, -STORE, 47583771873280, 47583771897855, -ERASE, 47583771873280, 47583771873280, -STORE, 47583771873280, 47583771897855, -ERASE, 47583771897856, 47583771897856, -STORE, 47583771897856, 47583771914239, -STORE, 47583771897856, 47583771926527, -ERASE, 47583771873280, 47583771873280, -STORE, 47583771873280, 47583771889663, -STORE, 47583771889664, 47583771897855, -ERASE, 47583770058752, 47583770058752, -STORE, 47583770058752, 47583770062847, -STORE, 47583770062848, 47583770066943, -ERASE, 94436124798976, 94436124798976, -STORE, 94436124798976, 94436124815359, -STORE, 94436124815360, 94436124819455, -ERASE, 140049025204224, 140049025204224, -STORE, 140049025204224, 140049025208319, -STORE, 140049025208320, 140049025212415, -ERASE, 47583769952256, 47583769952256, -STORE, 140737488347136, 140737488351231, -STORE, 140727116099584, 140737488351231, -ERASE, 140727116099584, 140727116099584, -STORE, 140727116099584, 140727116103679, -STORE, 94166319734784, 94166320447487, -ERASE, 94166319734784, 94166319734784, -STORE, 94166319734784, 94166319783935, -STORE, 94166319783936, 94166320447487, -ERASE, 94166319783936, 94166319783936, -STORE, 94166319783936, 94166320328703, -STORE, 94166320328704, 94166320427007, -STORE, 94166320427008, 94166320447487, -STORE, 139976559542272, 139976559714303, -ERASE, 139976559542272, 139976559542272, -STORE, 139976559542272, 139976559546367, -STORE, 139976559546368, 139976559714303, -ERASE, 139976559546368, 139976559546368, -STORE, 139976559546368, 139976559669247, -STORE, 139976559669248, 139976559702015, -STORE, 139976559702016, 139976559710207, -STORE, 139976559710208, 139976559714303, -STORE, 140727116222464, 140727116226559, -STORE, 140727116210176, 140727116222463, -STORE, 47656235454464, 47656235462655, -STORE, 47656235462656, 47656235470847, -STORE, 47656235470848, 47656235577343, -STORE, 47656235487232, 47656235577343, -STORE, 47656235470848, 47656235487231, -ERASE, 47656235487232, 47656235487232, -STORE, 47656235487232, 47656235560959, -STORE, 47656235560960, 47656235577343, -STORE, 47656235540480, 47656235560959, -STORE, 47656235487232, 47656235540479, -ERASE, 47656235487232, 47656235487232, -STORE, 47656235487232, 47656235540479, -STORE, 47656235556864, 47656235560959, -STORE, 47656235540480, 47656235556863, -ERASE, 47656235540480, 47656235540480, -STORE, 47656235540480, 47656235556863, -STORE, 47656235569152, 47656235577343, -STORE, 47656235560960, 47656235569151, -ERASE, 47656235560960, 47656235560960, -STORE, 47656235560960, 47656235569151, -ERASE, 47656235569152, 47656235569152, -STORE, 47656235569152, 47656235577343, -STORE, 47656235577344, 47656237416447, -STORE, 47656235716608, 47656237416447, -STORE, 47656235577344, 47656235716607, -ERASE, 47656235716608, 47656235716608, -STORE, 47656235716608, 47656237375487, -STORE, 47656237375488, 47656237416447, -STORE, 47656237060096, 47656237375487, -STORE, 47656235716608, 47656237060095, -ERASE, 47656235716608, 47656235716608, -STORE, 47656235716608, 47656237060095, -STORE, 47656237371392, 47656237375487, -STORE, 47656237060096, 47656237371391, -ERASE, 47656237060096, 47656237060096, -STORE, 47656237060096, 47656237371391, -STORE, 47656237400064, 47656237416447, -STORE, 47656237375488, 47656237400063, -ERASE, 47656237375488, 47656237375488, -STORE, 47656237375488, 47656237400063, -ERASE, 47656237400064, 47656237400064, -STORE, 47656237400064, 47656237416447, -STORE, 47656237400064, 47656237428735, -ERASE, 47656237375488, 47656237375488, -STORE, 47656237375488, 47656237391871, -STORE, 47656237391872, 47656237400063, -ERASE, 47656235560960, 47656235560960, -STORE, 47656235560960, 47656235565055, -STORE, 47656235565056, 47656235569151, -ERASE, 94166320427008, 94166320427008, -STORE, 94166320427008, 94166320443391, -STORE, 94166320443392, 94166320447487, -ERASE, 139976559702016, 139976559702016, -STORE, 139976559702016, 139976559706111, -STORE, 139976559706112, 139976559710207, -ERASE, 47656235454464, 47656235454464, -STORE, 94166332153856, 94166332289023, -STORE, 140737488347136, 140737488351231, -STORE, 140726412816384, 140737488351231, -ERASE, 140726412816384, 140726412816384, -STORE, 140726412816384, 140726412820479, -STORE, 94094884507648, 94094885220351, -ERASE, 94094884507648, 94094884507648, -STORE, 94094884507648, 94094884556799, -STORE, 94094884556800, 94094885220351, -ERASE, 94094884556800, 94094884556800, -STORE, 94094884556800, 94094885101567, -STORE, 94094885101568, 94094885199871, -STORE, 94094885199872, 94094885220351, -STORE, 139773773938688, 139773774110719, -ERASE, 139773773938688, 139773773938688, -STORE, 139773773938688, 139773773942783, -STORE, 139773773942784, 139773774110719, -ERASE, 139773773942784, 139773773942784, -STORE, 139773773942784, 139773774065663, -STORE, 139773774065664, 139773774098431, -STORE, 139773774098432, 139773774106623, -STORE, 139773774106624, 139773774110719, -STORE, 140726412963840, 140726412967935, -STORE, 140726412951552, 140726412963839, -STORE, 47859021058048, 47859021066239, -STORE, 47859021066240, 47859021074431, -STORE, 47859021074432, 47859021180927, -STORE, 47859021090816, 47859021180927, -STORE, 47859021074432, 47859021090815, -ERASE, 47859021090816, 47859021090816, -STORE, 47859021090816, 47859021164543, -STORE, 47859021164544, 47859021180927, -STORE, 47859021144064, 47859021164543, -STORE, 47859021090816, 47859021144063, -ERASE, 47859021090816, 47859021090816, -STORE, 47859021090816, 47859021144063, -STORE, 47859021160448, 47859021164543, -STORE, 47859021144064, 47859021160447, -ERASE, 47859021144064, 47859021144064, -STORE, 47859021144064, 47859021160447, -STORE, 47859021172736, 47859021180927, -STORE, 47859021164544, 47859021172735, -ERASE, 47859021164544, 47859021164544, -STORE, 47859021164544, 47859021172735, -ERASE, 47859021172736, 47859021172736, -STORE, 47859021172736, 47859021180927, -STORE, 47859021180928, 47859023020031, -STORE, 47859021320192, 47859023020031, -STORE, 47859021180928, 47859021320191, -ERASE, 47859021320192, 47859021320192, -STORE, 47859021320192, 47859022979071, -STORE, 47859022979072, 47859023020031, -STORE, 47859022663680, 47859022979071, -STORE, 47859021320192, 47859022663679, -ERASE, 47859021320192, 47859021320192, -STORE, 47859021320192, 47859022663679, -STORE, 47859022974976, 47859022979071, -STORE, 47859022663680, 47859022974975, -ERASE, 47859022663680, 47859022663680, -STORE, 47859022663680, 47859022974975, -STORE, 47859023003648, 47859023020031, -STORE, 47859022979072, 47859023003647, -ERASE, 47859022979072, 47859022979072, -STORE, 47859022979072, 47859023003647, -ERASE, 47859023003648, 47859023003648, -STORE, 47859023003648, 47859023020031, -STORE, 47859023003648, 47859023032319, -ERASE, 47859022979072, 47859022979072, -STORE, 47859022979072, 47859022995455, -STORE, 47859022995456, 47859023003647, -ERASE, 47859021164544, 47859021164544, -STORE, 47859021164544, 47859021168639, -STORE, 47859021168640, 47859021172735, -ERASE, 94094885199872, 94094885199872, -STORE, 94094885199872, 94094885216255, -STORE, 94094885216256, 94094885220351, -ERASE, 139773774098432, 139773774098432, -STORE, 139773774098432, 139773774102527, -STORE, 139773774102528, 139773774106623, -ERASE, 47859021058048, 47859021058048, -STORE, 94094901108736, 94094901243903, -STORE, 140737488347136, 140737488351231, -STORE, 140736567963648, 140737488351231, -ERASE, 140736567963648, 140736567963648, -STORE, 140736567963648, 140736567967743, -STORE, 94924425748480, 94924426461183, -ERASE, 94924425748480, 94924425748480, -STORE, 94924425748480, 94924425797631, -STORE, 94924425797632, 94924426461183, -ERASE, 94924425797632, 94924425797632, -STORE, 94924425797632, 94924426342399, -STORE, 94924426342400, 94924426440703, -STORE, 94924426440704, 94924426461183, -STORE, 140042126319616, 140042126491647, -ERASE, 140042126319616, 140042126319616, -STORE, 140042126319616, 140042126323711, -STORE, 140042126323712, 140042126491647, -ERASE, 140042126323712, 140042126323712, -STORE, 140042126323712, 140042126446591, -STORE, 140042126446592, 140042126479359, -STORE, 140042126479360, 140042126487551, -STORE, 140042126487552, 140042126491647, -STORE, 140736568672256, 140736568676351, -STORE, 140736568659968, 140736568672255, -STORE, 47590668677120, 47590668685311, -STORE, 47590668685312, 47590668693503, -STORE, 47590668693504, 47590668799999, -STORE, 47590668709888, 47590668799999, -STORE, 47590668693504, 47590668709887, -ERASE, 47590668709888, 47590668709888, -STORE, 47590668709888, 47590668783615, -STORE, 47590668783616, 47590668799999, -STORE, 47590668763136, 47590668783615, -STORE, 47590668709888, 47590668763135, -ERASE, 47590668709888, 47590668709888, -STORE, 47590668709888, 47590668763135, -STORE, 47590668779520, 47590668783615, -STORE, 47590668763136, 47590668779519, -ERASE, 47590668763136, 47590668763136, -STORE, 47590668763136, 47590668779519, -STORE, 47590668791808, 47590668799999, -STORE, 47590668783616, 47590668791807, -ERASE, 47590668783616, 47590668783616, -STORE, 47590668783616, 47590668791807, -ERASE, 47590668791808, 47590668791808, -STORE, 47590668791808, 47590668799999, -STORE, 47590668800000, 47590670639103, -STORE, 47590668939264, 47590670639103, -STORE, 47590668800000, 47590668939263, -ERASE, 47590668939264, 47590668939264, -STORE, 47590668939264, 47590670598143, -STORE, 47590670598144, 47590670639103, -STORE, 47590670282752, 47590670598143, -STORE, 47590668939264, 47590670282751, -ERASE, 47590668939264, 47590668939264, -STORE, 47590668939264, 47590670282751, -STORE, 47590670594048, 47590670598143, -STORE, 47590670282752, 47590670594047, -ERASE, 47590670282752, 47590670282752, -STORE, 47590670282752, 47590670594047, -STORE, 47590670622720, 47590670639103, -STORE, 47590670598144, 47590670622719, -ERASE, 47590670598144, 47590670598144, -STORE, 47590670598144, 47590670622719, -ERASE, 47590670622720, 47590670622720, -STORE, 47590670622720, 47590670639103, -STORE, 47590670622720, 47590670651391, -ERASE, 47590670598144, 47590670598144, -STORE, 47590670598144, 47590670614527, -STORE, 47590670614528, 47590670622719, -ERASE, 47590668783616, 47590668783616, -STORE, 47590668783616, 47590668787711, -STORE, 47590668787712, 47590668791807, -ERASE, 94924426440704, 94924426440704, -STORE, 94924426440704, 94924426457087, -STORE, 94924426457088, 94924426461183, -ERASE, 140042126479360, 140042126479360, -STORE, 140042126479360, 140042126483455, -STORE, 140042126483456, 140042126487551, -ERASE, 47590668677120, 47590668677120, -STORE, 140737488347136, 140737488351231, -STORE, 140733281439744, 140737488351231, -ERASE, 140733281439744, 140733281439744, -STORE, 140733281439744, 140733281443839, -STORE, 94490667069440, 94490667782143, -ERASE, 94490667069440, 94490667069440, -STORE, 94490667069440, 94490667118591, -STORE, 94490667118592, 94490667782143, -ERASE, 94490667118592, 94490667118592, -STORE, 94490667118592, 94490667663359, -STORE, 94490667663360, 94490667761663, -STORE, 94490667761664, 94490667782143, -STORE, 139878215118848, 139878215290879, -ERASE, 139878215118848, 139878215118848, -STORE, 139878215118848, 139878215122943, -STORE, 139878215122944, 139878215290879, -ERASE, 139878215122944, 139878215122944, -STORE, 139878215122944, 139878215245823, -STORE, 139878215245824, 139878215278591, -STORE, 139878215278592, 139878215286783, -STORE, 139878215286784, 139878215290879, -STORE, 140733281464320, 140733281468415, -STORE, 140733281452032, 140733281464319, -STORE, 47754579877888, 47754579886079, -STORE, 47754579886080, 47754579894271, -STORE, 47754579894272, 47754580000767, -STORE, 47754579910656, 47754580000767, -STORE, 47754579894272, 47754579910655, -ERASE, 47754579910656, 47754579910656, -STORE, 47754579910656, 47754579984383, -STORE, 47754579984384, 47754580000767, -STORE, 47754579963904, 47754579984383, -STORE, 47754579910656, 47754579963903, -ERASE, 47754579910656, 47754579910656, -STORE, 47754579910656, 47754579963903, -STORE, 47754579980288, 47754579984383, -STORE, 47754579963904, 47754579980287, -ERASE, 47754579963904, 47754579963904, -STORE, 47754579963904, 47754579980287, -STORE, 47754579992576, 47754580000767, -STORE, 47754579984384, 47754579992575, -ERASE, 47754579984384, 47754579984384, -STORE, 47754579984384, 47754579992575, -ERASE, 47754579992576, 47754579992576, -STORE, 47754579992576, 47754580000767, -STORE, 47754580000768, 47754581839871, -STORE, 47754580140032, 47754581839871, -STORE, 47754580000768, 47754580140031, -ERASE, 47754580140032, 47754580140032, -STORE, 47754580140032, 47754581798911, -STORE, 47754581798912, 47754581839871, -STORE, 47754581483520, 47754581798911, -STORE, 47754580140032, 47754581483519, -ERASE, 47754580140032, 47754580140032, -STORE, 47754580140032, 47754581483519, -STORE, 47754581794816, 47754581798911, -STORE, 47754581483520, 47754581794815, -ERASE, 47754581483520, 47754581483520, -STORE, 47754581483520, 47754581794815, -STORE, 47754581823488, 47754581839871, -STORE, 47754581798912, 47754581823487, -ERASE, 47754581798912, 47754581798912, -STORE, 47754581798912, 47754581823487, -ERASE, 47754581823488, 47754581823488, -STORE, 47754581823488, 47754581839871, -STORE, 47754581823488, 47754581852159, -ERASE, 47754581798912, 47754581798912, -STORE, 47754581798912, 47754581815295, -STORE, 47754581815296, 47754581823487, -ERASE, 47754579984384, 47754579984384, -STORE, 47754579984384, 47754579988479, -STORE, 47754579988480, 47754579992575, -ERASE, 94490667761664, 94490667761664, -STORE, 94490667761664, 94490667778047, -STORE, 94490667778048, 94490667782143, -ERASE, 139878215278592, 139878215278592, -STORE, 139878215278592, 139878215282687, -STORE, 139878215282688, 139878215286783, -ERASE, 47754579877888, 47754579877888, -STORE, 94490669649920, 94490669785087, -STORE, 140737488347136, 140737488351231, -STORE, 140735382188032, 140737488351231, -ERASE, 140735382188032, 140735382188032, -STORE, 140735382188032, 140735382192127, -STORE, 94150181302272, 94150182014975, -ERASE, 94150181302272, 94150181302272, -STORE, 94150181302272, 94150181351423, -STORE, 94150181351424, 94150182014975, -ERASE, 94150181351424, 94150181351424, -STORE, 94150181351424, 94150181896191, -STORE, 94150181896192, 94150181994495, -STORE, 94150181994496, 94150182014975, -STORE, 139679752458240, 139679752630271, -ERASE, 139679752458240, 139679752458240, -STORE, 139679752458240, 139679752462335, -STORE, 139679752462336, 139679752630271, -ERASE, 139679752462336, 139679752462336, -STORE, 139679752462336, 139679752585215, -STORE, 139679752585216, 139679752617983, -STORE, 139679752617984, 139679752626175, -STORE, 139679752626176, 139679752630271, -STORE, 140735382536192, 140735382540287, -STORE, 140735382523904, 140735382536191, -STORE, 47953042538496, 47953042546687, -STORE, 47953042546688, 47953042554879, -STORE, 47953042554880, 47953042661375, -STORE, 47953042571264, 47953042661375, -STORE, 47953042554880, 47953042571263, -ERASE, 47953042571264, 47953042571264, -STORE, 47953042571264, 47953042644991, -STORE, 47953042644992, 47953042661375, -STORE, 47953042624512, 47953042644991, -STORE, 47953042571264, 47953042624511, -ERASE, 47953042571264, 47953042571264, -STORE, 47953042571264, 47953042624511, -STORE, 47953042640896, 47953042644991, -STORE, 47953042624512, 47953042640895, -ERASE, 47953042624512, 47953042624512, -STORE, 47953042624512, 47953042640895, -STORE, 47953042653184, 47953042661375, -STORE, 47953042644992, 47953042653183, -ERASE, 47953042644992, 47953042644992, -STORE, 47953042644992, 47953042653183, -ERASE, 47953042653184, 47953042653184, -STORE, 47953042653184, 47953042661375, -STORE, 47953042661376, 47953044500479, -STORE, 47953042800640, 47953044500479, -STORE, 47953042661376, 47953042800639, -ERASE, 47953042800640, 47953042800640, -STORE, 47953042800640, 47953044459519, -STORE, 47953044459520, 47953044500479, -STORE, 47953044144128, 47953044459519, -STORE, 47953042800640, 47953044144127, -ERASE, 47953042800640, 47953042800640, -STORE, 47953042800640, 47953044144127, -STORE, 47953044455424, 47953044459519, -STORE, 47953044144128, 47953044455423, -ERASE, 47953044144128, 47953044144128, -STORE, 47953044144128, 47953044455423, -STORE, 47953044484096, 47953044500479, -STORE, 47953044459520, 47953044484095, -ERASE, 47953044459520, 47953044459520, -STORE, 47953044459520, 47953044484095, -ERASE, 47953044484096, 47953044484096, -STORE, 47953044484096, 47953044500479, -STORE, 47953044484096, 47953044512767, -ERASE, 47953044459520, 47953044459520, -STORE, 47953044459520, 47953044475903, -STORE, 47953044475904, 47953044484095, -ERASE, 47953042644992, 47953042644992, -STORE, 47953042644992, 47953042649087, -STORE, 47953042649088, 47953042653183, -ERASE, 94150181994496, 94150181994496, -STORE, 94150181994496, 94150182010879, -STORE, 94150182010880, 94150182014975, -ERASE, 139679752617984, 139679752617984, -STORE, 139679752617984, 139679752622079, -STORE, 139679752622080, 139679752626175, -ERASE, 47953042538496, 47953042538496, -STORE, 140737488347136, 140737488351231, -STORE, 140737044123648, 140737488351231, -ERASE, 140737044123648, 140737044123648, -STORE, 140737044123648, 140737044127743, -STORE, 94425324294144, 94425325006847, -ERASE, 94425324294144, 94425324294144, -STORE, 94425324294144, 94425324343295, -STORE, 94425324343296, 94425325006847, -ERASE, 94425324343296, 94425324343296, -STORE, 94425324343296, 94425324888063, -STORE, 94425324888064, 94425324986367, -STORE, 94425324986368, 94425325006847, -STORE, 140382015016960, 140382015188991, -ERASE, 140382015016960, 140382015016960, -STORE, 140382015016960, 140382015021055, -STORE, 140382015021056, 140382015188991, -ERASE, 140382015021056, 140382015021056, -STORE, 140382015021056, 140382015143935, -STORE, 140382015143936, 140382015176703, -STORE, 140382015176704, 140382015184895, -STORE, 140382015184896, 140382015188991, -STORE, 140737045585920, 140737045590015, -STORE, 140737045573632, 140737045585919, -STORE, 47250779979776, 47250779987967, -STORE, 47250779987968, 47250779996159, -STORE, 47250779996160, 47250780102655, -STORE, 47250780012544, 47250780102655, -STORE, 47250779996160, 47250780012543, -ERASE, 47250780012544, 47250780012544, -STORE, 47250780012544, 47250780086271, -STORE, 47250780086272, 47250780102655, -STORE, 47250780065792, 47250780086271, -STORE, 47250780012544, 47250780065791, -ERASE, 47250780012544, 47250780012544, -STORE, 47250780012544, 47250780065791, -STORE, 47250780082176, 47250780086271, -STORE, 47250780065792, 47250780082175, -ERASE, 47250780065792, 47250780065792, -STORE, 47250780065792, 47250780082175, -STORE, 47250780094464, 47250780102655, -STORE, 47250780086272, 47250780094463, -ERASE, 47250780086272, 47250780086272, -STORE, 47250780086272, 47250780094463, -ERASE, 47250780094464, 47250780094464, -STORE, 47250780094464, 47250780102655, -STORE, 47250780102656, 47250781941759, -STORE, 47250780241920, 47250781941759, -STORE, 47250780102656, 47250780241919, -ERASE, 47250780241920, 47250780241920, -STORE, 47250780241920, 47250781900799, -STORE, 47250781900800, 47250781941759, -STORE, 47250781585408, 47250781900799, -STORE, 47250780241920, 47250781585407, -ERASE, 47250780241920, 47250780241920, -STORE, 47250780241920, 47250781585407, -STORE, 47250781896704, 47250781900799, -STORE, 47250781585408, 47250781896703, -ERASE, 47250781585408, 47250781585408, -STORE, 47250781585408, 47250781896703, -STORE, 47250781925376, 47250781941759, -STORE, 47250781900800, 47250781925375, -ERASE, 47250781900800, 47250781900800, -STORE, 47250781900800, 47250781925375, -ERASE, 47250781925376, 47250781925376, -STORE, 47250781925376, 47250781941759, -STORE, 47250781925376, 47250781954047, -ERASE, 47250781900800, 47250781900800, -STORE, 47250781900800, 47250781917183, -STORE, 47250781917184, 47250781925375, -ERASE, 47250780086272, 47250780086272, -STORE, 47250780086272, 47250780090367, -STORE, 47250780090368, 47250780094463, -ERASE, 94425324986368, 94425324986368, -STORE, 94425324986368, 94425325002751, -STORE, 94425325002752, 94425325006847, -ERASE, 140382015176704, 140382015176704, -STORE, 140382015176704, 140382015180799, -STORE, 140382015180800, 140382015184895, -ERASE, 47250779979776, 47250779979776, -STORE, 94425351438336, 94425351573503, -STORE, 140737488347136, 140737488351231, -STORE, 140736801144832, 140737488351231, -ERASE, 140736801144832, 140736801144832, -STORE, 140736801144832, 140736801148927, -STORE, 94629429358592, 94629430071295, -ERASE, 94629429358592, 94629429358592, -STORE, 94629429358592, 94629429407743, -STORE, 94629429407744, 94629430071295, -ERASE, 94629429407744, 94629429407744, -STORE, 94629429407744, 94629429952511, -STORE, 94629429952512, 94629430050815, -STORE, 94629430050816, 94629430071295, -STORE, 139801685483520, 139801685655551, -ERASE, 139801685483520, 139801685483520, -STORE, 139801685483520, 139801685487615, -STORE, 139801685487616, 139801685655551, -ERASE, 139801685487616, 139801685487616, -STORE, 139801685487616, 139801685610495, -STORE, 139801685610496, 139801685643263, -STORE, 139801685643264, 139801685651455, -STORE, 139801685651456, 139801685655551, -STORE, 140736801198080, 140736801202175, -STORE, 140736801185792, 140736801198079, -STORE, 47831109513216, 47831109521407, -STORE, 47831109521408, 47831109529599, -STORE, 47831109529600, 47831109636095, -STORE, 47831109545984, 47831109636095, -STORE, 47831109529600, 47831109545983, -ERASE, 47831109545984, 47831109545984, -STORE, 47831109545984, 47831109619711, -STORE, 47831109619712, 47831109636095, -STORE, 47831109599232, 47831109619711, -STORE, 47831109545984, 47831109599231, -ERASE, 47831109545984, 47831109545984, -STORE, 47831109545984, 47831109599231, -STORE, 47831109615616, 47831109619711, -STORE, 47831109599232, 47831109615615, -ERASE, 47831109599232, 47831109599232, -STORE, 47831109599232, 47831109615615, -STORE, 47831109627904, 47831109636095, -STORE, 47831109619712, 47831109627903, -ERASE, 47831109619712, 47831109619712, -STORE, 47831109619712, 47831109627903, -ERASE, 47831109627904, 47831109627904, -STORE, 47831109627904, 47831109636095, -STORE, 47831109636096, 47831111475199, -STORE, 47831109775360, 47831111475199, -STORE, 47831109636096, 47831109775359, -ERASE, 47831109775360, 47831109775360, -STORE, 47831109775360, 47831111434239, -STORE, 47831111434240, 47831111475199, -STORE, 47831111118848, 47831111434239, -STORE, 47831109775360, 47831111118847, -ERASE, 47831109775360, 47831109775360, -STORE, 47831109775360, 47831111118847, -STORE, 47831111430144, 47831111434239, -STORE, 47831111118848, 47831111430143, -ERASE, 47831111118848, 47831111118848, -STORE, 47831111118848, 47831111430143, -STORE, 47831111458816, 47831111475199, -STORE, 47831111434240, 47831111458815, -ERASE, 47831111434240, 47831111434240, -STORE, 47831111434240, 47831111458815, -ERASE, 47831111458816, 47831111458816, -STORE, 47831111458816, 47831111475199, -STORE, 47831111458816, 47831111487487, -ERASE, 47831111434240, 47831111434240, -STORE, 47831111434240, 47831111450623, -STORE, 47831111450624, 47831111458815, -ERASE, 47831109619712, 47831109619712, -STORE, 47831109619712, 47831109623807, -STORE, 47831109623808, 47831109627903, -ERASE, 94629430050816, 94629430050816, -STORE, 94629430050816, 94629430067199, -STORE, 94629430067200, 94629430071295, -ERASE, 139801685643264, 139801685643264, -STORE, 139801685643264, 139801685647359, -STORE, 139801685647360, 139801685651455, -ERASE, 47831109513216, 47831109513216, -STORE, 140737488347136, 140737488351231, -STORE, 140729419612160, 140737488351231, -ERASE, 140729419612160, 140729419612160, -STORE, 140729419612160, 140729419616255, -STORE, 94443354148864, 94443354861567, -ERASE, 94443354148864, 94443354148864, -STORE, 94443354148864, 94443354198015, -STORE, 94443354198016, 94443354861567, -ERASE, 94443354198016, 94443354198016, -STORE, 94443354198016, 94443354742783, -STORE, 94443354742784, 94443354841087, -STORE, 94443354841088, 94443354861567, -STORE, 139741700038656, 139741700210687, -ERASE, 139741700038656, 139741700038656, -STORE, 139741700038656, 139741700042751, -STORE, 139741700042752, 139741700210687, -ERASE, 139741700042752, 139741700042752, -STORE, 139741700042752, 139741700165631, -STORE, 139741700165632, 139741700198399, -STORE, 139741700198400, 139741700206591, -STORE, 139741700206592, 139741700210687, -STORE, 140729420574720, 140729420578815, -STORE, 140729420562432, 140729420574719, -STORE, 47891094958080, 47891094966271, -STORE, 47891094966272, 47891094974463, -STORE, 47891094974464, 47891095080959, -STORE, 47891094990848, 47891095080959, -STORE, 47891094974464, 47891094990847, -ERASE, 47891094990848, 47891094990848, -STORE, 47891094990848, 47891095064575, -STORE, 47891095064576, 47891095080959, -STORE, 47891095044096, 47891095064575, -STORE, 47891094990848, 47891095044095, -ERASE, 47891094990848, 47891094990848, -STORE, 47891094990848, 47891095044095, -STORE, 47891095060480, 47891095064575, -STORE, 47891095044096, 47891095060479, -ERASE, 47891095044096, 47891095044096, -STORE, 47891095044096, 47891095060479, -STORE, 47891095072768, 47891095080959, -STORE, 47891095064576, 47891095072767, -ERASE, 47891095064576, 47891095064576, -STORE, 47891095064576, 47891095072767, -ERASE, 47891095072768, 47891095072768, -STORE, 47891095072768, 47891095080959, -STORE, 47891095080960, 47891096920063, -STORE, 47891095220224, 47891096920063, -STORE, 47891095080960, 47891095220223, -ERASE, 47891095220224, 47891095220224, -STORE, 47891095220224, 47891096879103, -STORE, 47891096879104, 47891096920063, -STORE, 47891096563712, 47891096879103, -STORE, 47891095220224, 47891096563711, -ERASE, 47891095220224, 47891095220224, -STORE, 47891095220224, 47891096563711, -STORE, 47891096875008, 47891096879103, -STORE, 47891096563712, 47891096875007, -ERASE, 47891096563712, 47891096563712, -STORE, 47891096563712, 47891096875007, -STORE, 47891096903680, 47891096920063, -STORE, 47891096879104, 47891096903679, -ERASE, 47891096879104, 47891096879104, -STORE, 47891096879104, 47891096903679, -ERASE, 47891096903680, 47891096903680, -STORE, 47891096903680, 47891096920063, -STORE, 47891096903680, 47891096932351, -ERASE, 47891096879104, 47891096879104, -STORE, 47891096879104, 47891096895487, -STORE, 47891096895488, 47891096903679, -ERASE, 47891095064576, 47891095064576, -STORE, 47891095064576, 47891095068671, -STORE, 47891095068672, 47891095072767, -ERASE, 94443354841088, 94443354841088, -STORE, 94443354841088, 94443354857471, -STORE, 94443354857472, 94443354861567, -ERASE, 139741700198400, 139741700198400, -STORE, 139741700198400, 139741700202495, -STORE, 139741700202496, 139741700206591, -ERASE, 47891094958080, 47891094958080, -STORE, 94443360825344, 94443360960511, -STORE, 140737488347136, 140737488351231, -STORE, 140722961661952, 140737488351231, -ERASE, 140722961661952, 140722961661952, -STORE, 140722961661952, 140722961666047, -STORE, 94878388944896, 94878389657599, -ERASE, 94878388944896, 94878388944896, -STORE, 94878388944896, 94878388994047, -STORE, 94878388994048, 94878389657599, -ERASE, 94878388994048, 94878388994048, -STORE, 94878388994048, 94878389538815, -STORE, 94878389538816, 94878389637119, -STORE, 94878389637120, 94878389657599, -STORE, 140210690056192, 140210690228223, -ERASE, 140210690056192, 140210690056192, -STORE, 140210690056192, 140210690060287, -STORE, 140210690060288, 140210690228223, -ERASE, 140210690060288, 140210690060288, -STORE, 140210690060288, 140210690183167, -STORE, 140210690183168, 140210690215935, -STORE, 140210690215936, 140210690224127, -STORE, 140210690224128, 140210690228223, -STORE, 140722963148800, 140722963152895, -STORE, 140722963136512, 140722963148799, -STORE, 47422104940544, 47422104948735, -STORE, 47422104948736, 47422104956927, -STORE, 47422104956928, 47422105063423, -STORE, 47422104973312, 47422105063423, -STORE, 47422104956928, 47422104973311, -ERASE, 47422104973312, 47422104973312, -STORE, 47422104973312, 47422105047039, -STORE, 47422105047040, 47422105063423, -STORE, 47422105026560, 47422105047039, -STORE, 47422104973312, 47422105026559, -ERASE, 47422104973312, 47422104973312, -STORE, 47422104973312, 47422105026559, -STORE, 47422105042944, 47422105047039, -STORE, 47422105026560, 47422105042943, -ERASE, 47422105026560, 47422105026560, -STORE, 47422105026560, 47422105042943, -STORE, 47422105055232, 47422105063423, -STORE, 47422105047040, 47422105055231, -ERASE, 47422105047040, 47422105047040, -STORE, 47422105047040, 47422105055231, -ERASE, 47422105055232, 47422105055232, -STORE, 47422105055232, 47422105063423, -STORE, 47422105063424, 47422106902527, -STORE, 47422105202688, 47422106902527, -STORE, 47422105063424, 47422105202687, -ERASE, 47422105202688, 47422105202688, -STORE, 47422105202688, 47422106861567, -STORE, 47422106861568, 47422106902527, -STORE, 47422106546176, 47422106861567, -STORE, 47422105202688, 47422106546175, -ERASE, 47422105202688, 47422105202688, -STORE, 47422105202688, 47422106546175, -STORE, 47422106857472, 47422106861567, -STORE, 47422106546176, 47422106857471, -ERASE, 47422106546176, 47422106546176, -STORE, 47422106546176, 47422106857471, -STORE, 47422106886144, 47422106902527, -STORE, 47422106861568, 47422106886143, -ERASE, 47422106861568, 47422106861568, -STORE, 47422106861568, 47422106886143, -ERASE, 47422106886144, 47422106886144, -STORE, 47422106886144, 47422106902527, -STORE, 47422106886144, 47422106914815, -ERASE, 47422106861568, 47422106861568, -STORE, 47422106861568, 47422106877951, -STORE, 47422106877952, 47422106886143, -ERASE, 47422105047040, 47422105047040, -STORE, 47422105047040, 47422105051135, -STORE, 47422105051136, 47422105055231, -ERASE, 94878389637120, 94878389637120, -STORE, 94878389637120, 94878389653503, -STORE, 94878389653504, 94878389657599, -ERASE, 140210690215936, 140210690215936, -STORE, 140210690215936, 140210690220031, -STORE, 140210690220032, 140210690224127, -ERASE, 47422104940544, 47422104940544, -STORE, 140737488347136, 140737488351231, -STORE, 140727690309632, 140737488351231, -ERASE, 140727690309632, 140727690309632, -STORE, 140727690309632, 140727690313727, -STORE, 94121892208640, 94121892921343, -ERASE, 94121892208640, 94121892208640, -STORE, 94121892208640, 94121892257791, -STORE, 94121892257792, 94121892921343, -ERASE, 94121892257792, 94121892257792, -STORE, 94121892257792, 94121892802559, -STORE, 94121892802560, 94121892900863, -STORE, 94121892900864, 94121892921343, -STORE, 140662438326272, 140662438498303, -ERASE, 140662438326272, 140662438326272, -STORE, 140662438326272, 140662438330367, -STORE, 140662438330368, 140662438498303, -ERASE, 140662438330368, 140662438330368, -STORE, 140662438330368, 140662438453247, -STORE, 140662438453248, 140662438486015, -STORE, 140662438486016, 140662438494207, -STORE, 140662438494208, 140662438498303, -STORE, 140727690379264, 140727690383359, -STORE, 140727690366976, 140727690379263, -STORE, 46970356670464, 46970356678655, -STORE, 46970356678656, 46970356686847, -STORE, 46970356686848, 46970356793343, -STORE, 46970356703232, 46970356793343, -STORE, 46970356686848, 46970356703231, -ERASE, 46970356703232, 46970356703232, -STORE, 46970356703232, 46970356776959, -STORE, 46970356776960, 46970356793343, -STORE, 46970356756480, 46970356776959, -STORE, 46970356703232, 46970356756479, -ERASE, 46970356703232, 46970356703232, -STORE, 46970356703232, 46970356756479, -STORE, 46970356772864, 46970356776959, -STORE, 46970356756480, 46970356772863, -ERASE, 46970356756480, 46970356756480, -STORE, 46970356756480, 46970356772863, -STORE, 46970356785152, 46970356793343, -STORE, 46970356776960, 46970356785151, -ERASE, 46970356776960, 46970356776960, -STORE, 46970356776960, 46970356785151, -ERASE, 46970356785152, 46970356785152, -STORE, 46970356785152, 46970356793343, -STORE, 46970356793344, 46970358632447, -STORE, 46970356932608, 46970358632447, -STORE, 46970356793344, 46970356932607, -ERASE, 46970356932608, 46970356932608, -STORE, 46970356932608, 46970358591487, -STORE, 46970358591488, 46970358632447, -STORE, 46970358276096, 46970358591487, -STORE, 46970356932608, 46970358276095, -ERASE, 46970356932608, 46970356932608, -STORE, 46970356932608, 46970358276095, -STORE, 46970358587392, 46970358591487, -STORE, 46970358276096, 46970358587391, -ERASE, 46970358276096, 46970358276096, -STORE, 46970358276096, 46970358587391, -STORE, 46970358616064, 46970358632447, -STORE, 46970358591488, 46970358616063, -ERASE, 46970358591488, 46970358591488, -STORE, 46970358591488, 46970358616063, -ERASE, 46970358616064, 46970358616064, -STORE, 46970358616064, 46970358632447, -STORE, 46970358616064, 46970358644735, -ERASE, 46970358591488, 46970358591488, -STORE, 46970358591488, 46970358607871, -STORE, 46970358607872, 46970358616063, -ERASE, 46970356776960, 46970356776960, -STORE, 46970356776960, 46970356781055, -STORE, 46970356781056, 46970356785151, -ERASE, 94121892900864, 94121892900864, -STORE, 94121892900864, 94121892917247, -STORE, 94121892917248, 94121892921343, -ERASE, 140662438486016, 140662438486016, -STORE, 140662438486016, 140662438490111, -STORE, 140662438490112, 140662438494207, -ERASE, 46970356670464, 46970356670464, -STORE, 94121898610688, 94121898745855, -STORE, 140737488347136, 140737488351231, -STORE, 140737189351424, 140737488351231, -ERASE, 140737189351424, 140737189351424, -STORE, 140737189351424, 140737189355519, -STORE, 93847948832768, 93847949545471, -ERASE, 93847948832768, 93847948832768, -STORE, 93847948832768, 93847948881919, -STORE, 93847948881920, 93847949545471, -ERASE, 93847948881920, 93847948881920, -STORE, 93847948881920, 93847949426687, -STORE, 93847949426688, 93847949524991, -STORE, 93847949524992, 93847949545471, -STORE, 139698989985792, 139698990157823, -ERASE, 139698989985792, 139698989985792, -STORE, 139698989985792, 139698989989887, -STORE, 139698989989888, 139698990157823, -ERASE, 139698989989888, 139698989989888, -STORE, 139698989989888, 139698990112767, -STORE, 139698990112768, 139698990145535, -STORE, 139698990145536, 139698990153727, -STORE, 139698990153728, 139698990157823, -STORE, 140737189744640, 140737189748735, -STORE, 140737189732352, 140737189744639, -STORE, 47933805010944, 47933805019135, -STORE, 47933805019136, 47933805027327, -STORE, 47933805027328, 47933805133823, -STORE, 47933805043712, 47933805133823, -STORE, 47933805027328, 47933805043711, -ERASE, 47933805043712, 47933805043712, -STORE, 47933805043712, 47933805117439, -STORE, 47933805117440, 47933805133823, -STORE, 47933805096960, 47933805117439, -STORE, 47933805043712, 47933805096959, -ERASE, 47933805043712, 47933805043712, -STORE, 47933805043712, 47933805096959, -STORE, 47933805113344, 47933805117439, -STORE, 47933805096960, 47933805113343, -ERASE, 47933805096960, 47933805096960, -STORE, 47933805096960, 47933805113343, -STORE, 47933805125632, 47933805133823, -STORE, 47933805117440, 47933805125631, -ERASE, 47933805117440, 47933805117440, -STORE, 47933805117440, 47933805125631, -ERASE, 47933805125632, 47933805125632, -STORE, 47933805125632, 47933805133823, -STORE, 47933805133824, 47933806972927, -STORE, 47933805273088, 47933806972927, -STORE, 47933805133824, 47933805273087, -ERASE, 47933805273088, 47933805273088, -STORE, 47933805273088, 47933806931967, -STORE, 47933806931968, 47933806972927, -STORE, 47933806616576, 47933806931967, -STORE, 47933805273088, 47933806616575, -ERASE, 47933805273088, 47933805273088, -STORE, 47933805273088, 47933806616575, -STORE, 47933806927872, 47933806931967, -STORE, 47933806616576, 47933806927871, -ERASE, 47933806616576, 47933806616576, -STORE, 47933806616576, 47933806927871, -STORE, 47933806956544, 47933806972927, -STORE, 47933806931968, 47933806956543, -ERASE, 47933806931968, 47933806931968, -STORE, 47933806931968, 47933806956543, -ERASE, 47933806956544, 47933806956544, -STORE, 47933806956544, 47933806972927, -STORE, 47933806956544, 47933806985215, -ERASE, 47933806931968, 47933806931968, -STORE, 47933806931968, 47933806948351, -STORE, 47933806948352, 47933806956543, -ERASE, 47933805117440, 47933805117440, -STORE, 47933805117440, 47933805121535, -STORE, 47933805121536, 47933805125631, -ERASE, 93847949524992, 93847949524992, -STORE, 93847949524992, 93847949541375, -STORE, 93847949541376, 93847949545471, -ERASE, 139698990145536, 139698990145536, -STORE, 139698990145536, 139698990149631, -STORE, 139698990149632, 139698990153727, -ERASE, 47933805010944, 47933805010944, -STORE, 140737488347136, 140737488351231, -STORE, 140725553991680, 140737488351231, -ERASE, 140725553991680, 140725553991680, -STORE, 140725553991680, 140725553995775, -STORE, 93980056248320, 93980056961023, -ERASE, 93980056248320, 93980056248320, -STORE, 93980056248320, 93980056297471, -STORE, 93980056297472, 93980056961023, -ERASE, 93980056297472, 93980056297472, -STORE, 93980056297472, 93980056842239, -STORE, 93980056842240, 93980056940543, -STORE, 93980056940544, 93980056961023, -STORE, 140146588971008, 140146589143039, -ERASE, 140146588971008, 140146588971008, -STORE, 140146588971008, 140146588975103, -STORE, 140146588975104, 140146589143039, -ERASE, 140146588975104, 140146588975104, -STORE, 140146588975104, 140146589097983, -STORE, 140146589097984, 140146589130751, -STORE, 140146589130752, 140146589138943, -STORE, 140146589138944, 140146589143039, -STORE, 140725554860032, 140725554864127, -STORE, 140725554847744, 140725554860031, -STORE, 47486206025728, 47486206033919, -STORE, 47486206033920, 47486206042111, -STORE, 47486206042112, 47486206148607, -STORE, 47486206058496, 47486206148607, -STORE, 47486206042112, 47486206058495, -ERASE, 47486206058496, 47486206058496, -STORE, 47486206058496, 47486206132223, -STORE, 47486206132224, 47486206148607, -STORE, 47486206111744, 47486206132223, -STORE, 47486206058496, 47486206111743, -ERASE, 47486206058496, 47486206058496, -STORE, 47486206058496, 47486206111743, -STORE, 47486206128128, 47486206132223, -STORE, 47486206111744, 47486206128127, -ERASE, 47486206111744, 47486206111744, -STORE, 47486206111744, 47486206128127, -STORE, 47486206140416, 47486206148607, -STORE, 47486206132224, 47486206140415, -ERASE, 47486206132224, 47486206132224, -STORE, 47486206132224, 47486206140415, -ERASE, 47486206140416, 47486206140416, -STORE, 47486206140416, 47486206148607, -STORE, 47486206148608, 47486207987711, -STORE, 47486206287872, 47486207987711, -STORE, 47486206148608, 47486206287871, -ERASE, 47486206287872, 47486206287872, -STORE, 47486206287872, 47486207946751, -STORE, 47486207946752, 47486207987711, -STORE, 47486207631360, 47486207946751, -STORE, 47486206287872, 47486207631359, -ERASE, 47486206287872, 47486206287872, -STORE, 47486206287872, 47486207631359, -STORE, 47486207942656, 47486207946751, -STORE, 47486207631360, 47486207942655, -ERASE, 47486207631360, 47486207631360, -STORE, 47486207631360, 47486207942655, -STORE, 47486207971328, 47486207987711, -STORE, 47486207946752, 47486207971327, -ERASE, 47486207946752, 47486207946752, -STORE, 47486207946752, 47486207971327, -ERASE, 47486207971328, 47486207971328, -STORE, 47486207971328, 47486207987711, -STORE, 47486207971328, 47486207999999, -ERASE, 47486207946752, 47486207946752, -STORE, 47486207946752, 47486207963135, -STORE, 47486207963136, 47486207971327, -ERASE, 47486206132224, 47486206132224, -STORE, 47486206132224, 47486206136319, -STORE, 47486206136320, 47486206140415, -ERASE, 93980056940544, 93980056940544, -STORE, 93980056940544, 93980056956927, -STORE, 93980056956928, 93980056961023, -ERASE, 140146589130752, 140146589130752, -STORE, 140146589130752, 140146589134847, -STORE, 140146589134848, 140146589138943, -ERASE, 47486206025728, 47486206025728, -STORE, 93980070006784, 93980070141951, -STORE, 140737488347136, 140737488351231, -STORE, 140727334776832, 140737488351231, -ERASE, 140727334776832, 140727334776832, -STORE, 140727334776832, 140727334780927, -STORE, 94049747247104, 94049747959807, -ERASE, 94049747247104, 94049747247104, -STORE, 94049747247104, 94049747296255, -STORE, 94049747296256, 94049747959807, -ERASE, 94049747296256, 94049747296256, -STORE, 94049747296256, 94049747841023, -STORE, 94049747841024, 94049747939327, -STORE, 94049747939328, 94049747959807, -STORE, 140227307216896, 140227307388927, -ERASE, 140227307216896, 140227307216896, -STORE, 140227307216896, 140227307220991, -STORE, 140227307220992, 140227307388927, -ERASE, 140227307220992, 140227307220992, -STORE, 140227307220992, 140227307343871, -STORE, 140227307343872, 140227307376639, -STORE, 140227307376640, 140227307384831, -STORE, 140227307384832, 140227307388927, -STORE, 140727335337984, 140727335342079, -STORE, 140727335325696, 140727335337983, -STORE, 47405487779840, 47405487788031, -STORE, 47405487788032, 47405487796223, -STORE, 47405487796224, 47405487902719, -STORE, 47405487812608, 47405487902719, -STORE, 47405487796224, 47405487812607, -ERASE, 47405487812608, 47405487812608, -STORE, 47405487812608, 47405487886335, -STORE, 47405487886336, 47405487902719, -STORE, 47405487865856, 47405487886335, -STORE, 47405487812608, 47405487865855, -ERASE, 47405487812608, 47405487812608, -STORE, 47405487812608, 47405487865855, -STORE, 47405487882240, 47405487886335, -STORE, 47405487865856, 47405487882239, -ERASE, 47405487865856, 47405487865856, -STORE, 47405487865856, 47405487882239, -STORE, 47405487894528, 47405487902719, -STORE, 47405487886336, 47405487894527, -ERASE, 47405487886336, 47405487886336, -STORE, 47405487886336, 47405487894527, -ERASE, 47405487894528, 47405487894528, -STORE, 47405487894528, 47405487902719, -STORE, 47405487902720, 47405489741823, -STORE, 47405488041984, 47405489741823, -STORE, 47405487902720, 47405488041983, -ERASE, 47405488041984, 47405488041984, -STORE, 47405488041984, 47405489700863, -STORE, 47405489700864, 47405489741823, -STORE, 47405489385472, 47405489700863, -STORE, 47405488041984, 47405489385471, -ERASE, 47405488041984, 47405488041984, -STORE, 47405488041984, 47405489385471, -STORE, 47405489696768, 47405489700863, -STORE, 47405489385472, 47405489696767, -ERASE, 47405489385472, 47405489385472, -STORE, 47405489385472, 47405489696767, -STORE, 47405489725440, 47405489741823, -STORE, 47405489700864, 47405489725439, -ERASE, 47405489700864, 47405489700864, -STORE, 47405489700864, 47405489725439, -ERASE, 47405489725440, 47405489725440, -STORE, 47405489725440, 47405489741823, -STORE, 47405489725440, 47405489754111, -ERASE, 47405489700864, 47405489700864, -STORE, 47405489700864, 47405489717247, -STORE, 47405489717248, 47405489725439, -ERASE, 47405487886336, 47405487886336, -STORE, 47405487886336, 47405487890431, -STORE, 47405487890432, 47405487894527, -ERASE, 94049747939328, 94049747939328, -STORE, 94049747939328, 94049747955711, -STORE, 94049747955712, 94049747959807, -ERASE, 140227307376640, 140227307376640, -STORE, 140227307376640, 140227307380735, -STORE, 140227307380736, 140227307384831, -ERASE, 47405487779840, 47405487779840, -STORE, 94049758810112, 94049758945279, -STORE, 140737488347136, 140737488351231, -STORE, 140727079718912, 140737488351231, -ERASE, 140727079718912, 140727079718912, -STORE, 140727079718912, 140727079723007, -STORE, 94250996527104, 94250997239807, -ERASE, 94250996527104, 94250996527104, -STORE, 94250996527104, 94250996576255, -STORE, 94250996576256, 94250997239807, -ERASE, 94250996576256, 94250996576256, -STORE, 94250996576256, 94250997121023, -STORE, 94250997121024, 94250997219327, -STORE, 94250997219328, 94250997239807, -STORE, 140060022587392, 140060022759423, -ERASE, 140060022587392, 140060022587392, -STORE, 140060022587392, 140060022591487, -STORE, 140060022591488, 140060022759423, -ERASE, 140060022591488, 140060022591488, -STORE, 140060022591488, 140060022714367, -STORE, 140060022714368, 140060022747135, -STORE, 140060022747136, 140060022755327, -STORE, 140060022755328, 140060022759423, -STORE, 140727079788544, 140727079792639, -STORE, 140727079776256, 140727079788543, -STORE, 47572772409344, 47572772417535, -STORE, 47572772417536, 47572772425727, -STORE, 47572772425728, 47572772532223, -STORE, 47572772442112, 47572772532223, -STORE, 47572772425728, 47572772442111, -ERASE, 47572772442112, 47572772442112, -STORE, 47572772442112, 47572772515839, -STORE, 47572772515840, 47572772532223, -STORE, 47572772495360, 47572772515839, -STORE, 47572772442112, 47572772495359, -ERASE, 47572772442112, 47572772442112, -STORE, 47572772442112, 47572772495359, -STORE, 47572772511744, 47572772515839, -STORE, 47572772495360, 47572772511743, -ERASE, 47572772495360, 47572772495360, -STORE, 47572772495360, 47572772511743, -STORE, 47572772524032, 47572772532223, -STORE, 47572772515840, 47572772524031, -ERASE, 47572772515840, 47572772515840, -STORE, 47572772515840, 47572772524031, -ERASE, 47572772524032, 47572772524032, -STORE, 47572772524032, 47572772532223, -STORE, 47572772532224, 47572774371327, -STORE, 47572772671488, 47572774371327, -STORE, 47572772532224, 47572772671487, -ERASE, 47572772671488, 47572772671488, -STORE, 47572772671488, 47572774330367, -STORE, 47572774330368, 47572774371327, -STORE, 47572774014976, 47572774330367, -STORE, 47572772671488, 47572774014975, -ERASE, 47572772671488, 47572772671488, -STORE, 47572772671488, 47572774014975, -STORE, 47572774326272, 47572774330367, -STORE, 47572774014976, 47572774326271, -ERASE, 47572774014976, 47572774014976, -STORE, 47572774014976, 47572774326271, -STORE, 47572774354944, 47572774371327, -STORE, 47572774330368, 47572774354943, -ERASE, 47572774330368, 47572774330368, -STORE, 47572774330368, 47572774354943, -ERASE, 47572774354944, 47572774354944, -STORE, 47572774354944, 47572774371327, -STORE, 47572774354944, 47572774383615, -ERASE, 47572774330368, 47572774330368, -STORE, 47572774330368, 47572774346751, -STORE, 47572774346752, 47572774354943, -ERASE, 47572772515840, 47572772515840, -STORE, 47572772515840, 47572772519935, -STORE, 47572772519936, 47572772524031, -ERASE, 94250997219328, 94250997219328, -STORE, 94250997219328, 94250997235711, -STORE, 94250997235712, 94250997239807, -ERASE, 140060022747136, 140060022747136, -STORE, 140060022747136, 140060022751231, -STORE, 140060022751232, 140060022755327, -ERASE, 47572772409344, 47572772409344, -STORE, 94251018305536, 94251018440703, -STORE, 140737488347136, 140737488351231, -STORE, 140730012389376, 140737488351231, -ERASE, 140730012389376, 140730012389376, -STORE, 140730012389376, 140730012393471, -STORE, 94382607675392, 94382607695871, -ERASE, 94382607675392, 94382607675392, -STORE, 94382607675392, 94382607679487, -STORE, 94382607679488, 94382607695871, -ERASE, 94382607679488, 94382607679488, -STORE, 94382607679488, 94382607683583, -STORE, 94382607683584, 94382607687679, -STORE, 94382607687680, 94382607695871, -STORE, 140252451454976, 140252451627007, -ERASE, 140252451454976, 140252451454976, -STORE, 140252451454976, 140252451459071, -STORE, 140252451459072, 140252451627007, -ERASE, 140252451459072, 140252451459072, -STORE, 140252451459072, 140252451581951, -STORE, 140252451581952, 140252451614719, -STORE, 140252451614720, 140252451622911, -STORE, 140252451622912, 140252451627007, -STORE, 140730013548544, 140730013552639, -STORE, 140730013536256, 140730013548543, -STORE, 47380343541760, 47380343549951, -STORE, 47380343549952, 47380343558143, -STORE, 47380343558144, 47380345397247, -STORE, 47380343697408, 47380345397247, -STORE, 47380343558144, 47380343697407, -ERASE, 47380343697408, 47380343697408, -STORE, 47380343697408, 47380345356287, -STORE, 47380345356288, 47380345397247, -STORE, 47380345040896, 47380345356287, -STORE, 47380343697408, 47380345040895, -ERASE, 47380343697408, 47380343697408, -STORE, 47380343697408, 47380345040895, -STORE, 47380345352192, 47380345356287, -STORE, 47380345040896, 47380345352191, -ERASE, 47380345040896, 47380345040896, -STORE, 47380345040896, 47380345352191, -STORE, 47380345380864, 47380345397247, -STORE, 47380345356288, 47380345380863, -ERASE, 47380345356288, 47380345356288, -STORE, 47380345356288, 47380345380863, -ERASE, 47380345380864, 47380345380864, -STORE, 47380345380864, 47380345397247, -ERASE, 47380345356288, 47380345356288, -STORE, 47380345356288, 47380345372671, -STORE, 47380345372672, 47380345380863, -ERASE, 94382607687680, 94382607687680, -STORE, 94382607687680, 94382607691775, -STORE, 94382607691776, 94382607695871, -ERASE, 140252451614720, 140252451614720, -STORE, 140252451614720, 140252451618815, -STORE, 140252451618816, 140252451622911, -ERASE, 47380343541760, 47380343541760, -STORE, 94382626803712, 94382626938879, -STORE, 140737488347136, 140737488351231, -STORE, 140730900271104, 140737488351231, -ERASE, 140730900271104, 140730900271104, -STORE, 140730900271104, 140730900275199, -STORE, 93855478120448, 93855478337535, -ERASE, 93855478120448, 93855478120448, -STORE, 93855478120448, 93855478198271, -STORE, 93855478198272, 93855478337535, -ERASE, 93855478198272, 93855478198272, -STORE, 93855478198272, 93855478243327, -STORE, 93855478243328, 93855478288383, -STORE, 93855478288384, 93855478337535, -STORE, 140092686573568, 140092686745599, -ERASE, 140092686573568, 140092686573568, -STORE, 140092686573568, 140092686577663, -STORE, 140092686577664, 140092686745599, -ERASE, 140092686577664, 140092686577664, -STORE, 140092686577664, 140092686700543, -STORE, 140092686700544, 140092686733311, -STORE, 140092686733312, 140092686741503, -STORE, 140092686741504, 140092686745599, -STORE, 140730900537344, 140730900541439, -STORE, 140730900525056, 140730900537343, -STORE, 47540108423168, 47540108431359, -STORE, 47540108431360, 47540108439551, -STORE, 47540108439552, 47540110278655, -STORE, 47540108578816, 47540110278655, -STORE, 47540108439552, 47540108578815, -ERASE, 47540108578816, 47540108578816, -STORE, 47540108578816, 47540110237695, -STORE, 47540110237696, 47540110278655, -STORE, 47540109922304, 47540110237695, -STORE, 47540108578816, 47540109922303, -ERASE, 47540108578816, 47540108578816, -STORE, 47540108578816, 47540109922303, -STORE, 47540110233600, 47540110237695, -STORE, 47540109922304, 47540110233599, -ERASE, 47540109922304, 47540109922304, -STORE, 47540109922304, 47540110233599, -STORE, 47540110262272, 47540110278655, -STORE, 47540110237696, 47540110262271, -ERASE, 47540110237696, 47540110237696, -STORE, 47540110237696, 47540110262271, -ERASE, 47540110262272, 47540110262272, -STORE, 47540110262272, 47540110278655, -ERASE, 47540110237696, 47540110237696, -STORE, 47540110237696, 47540110254079, -STORE, 47540110254080, 47540110262271, -ERASE, 93855478288384, 93855478288384, -STORE, 93855478288384, 93855478333439, -STORE, 93855478333440, 93855478337535, -ERASE, 140092686733312, 140092686733312, -STORE, 140092686733312, 140092686737407, -STORE, 140092686737408, 140092686741503, -ERASE, 47540108423168, 47540108423168, -STORE, 93855492222976, 93855492358143, -STORE, 93855492222976, 93855492493311, -STORE, 140737488347136, 140737488351231, -STORE, 140733498146816, 140737488351231, -ERASE, 140733498146816, 140733498146816, -STORE, 140733498146816, 140733498150911, -STORE, 94170739654656, 94170740367359, -ERASE, 94170739654656, 94170739654656, -STORE, 94170739654656, 94170739703807, -STORE, 94170739703808, 94170740367359, -ERASE, 94170739703808, 94170739703808, -STORE, 94170739703808, 94170740248575, -STORE, 94170740248576, 94170740346879, -STORE, 94170740346880, 94170740367359, -STORE, 140024788877312, 140024789049343, -ERASE, 140024788877312, 140024788877312, -STORE, 140024788877312, 140024788881407, -STORE, 140024788881408, 140024789049343, -ERASE, 140024788881408, 140024788881408, -STORE, 140024788881408, 140024789004287, -STORE, 140024789004288, 140024789037055, -STORE, 140024789037056, 140024789045247, -STORE, 140024789045248, 140024789049343, -STORE, 140733499023360, 140733499027455, -STORE, 140733499011072, 140733499023359, -STORE, 47608006119424, 47608006127615, -STORE, 47608006127616, 47608006135807, -STORE, 47608006135808, 47608006242303, -STORE, 47608006152192, 47608006242303, -STORE, 47608006135808, 47608006152191, -ERASE, 47608006152192, 47608006152192, -STORE, 47608006152192, 47608006225919, -STORE, 47608006225920, 47608006242303, -STORE, 47608006205440, 47608006225919, -STORE, 47608006152192, 47608006205439, -ERASE, 47608006152192, 47608006152192, -STORE, 47608006152192, 47608006205439, -STORE, 47608006221824, 47608006225919, -STORE, 47608006205440, 47608006221823, -ERASE, 47608006205440, 47608006205440, -STORE, 47608006205440, 47608006221823, -STORE, 47608006234112, 47608006242303, -STORE, 47608006225920, 47608006234111, -ERASE, 47608006225920, 47608006225920, -STORE, 47608006225920, 47608006234111, -ERASE, 47608006234112, 47608006234112, -STORE, 47608006234112, 47608006242303, -STORE, 47608006242304, 47608008081407, -STORE, 47608006381568, 47608008081407, -STORE, 47608006242304, 47608006381567, -ERASE, 47608006381568, 47608006381568, -STORE, 47608006381568, 47608008040447, -STORE, 47608008040448, 47608008081407, -STORE, 47608007725056, 47608008040447, -STORE, 47608006381568, 47608007725055, -ERASE, 47608006381568, 47608006381568, -STORE, 47608006381568, 47608007725055, -STORE, 47608008036352, 47608008040447, -STORE, 47608007725056, 47608008036351, -ERASE, 47608007725056, 47608007725056, -STORE, 47608007725056, 47608008036351, -STORE, 47608008065024, 47608008081407, -STORE, 47608008040448, 47608008065023, -ERASE, 47608008040448, 47608008040448, -STORE, 47608008040448, 47608008065023, -ERASE, 47608008065024, 47608008065024, -STORE, 47608008065024, 47608008081407, -STORE, 47608008065024, 47608008093695, -ERASE, 47608008040448, 47608008040448, -STORE, 47608008040448, 47608008056831, -STORE, 47608008056832, 47608008065023, -ERASE, 47608006225920, 47608006225920, -STORE, 47608006225920, 47608006230015, -STORE, 47608006230016, 47608006234111, -ERASE, 94170740346880, 94170740346880, -STORE, 94170740346880, 94170740363263, -STORE, 94170740363264, 94170740367359, -ERASE, 140024789037056, 140024789037056, -STORE, 140024789037056, 140024789041151, -STORE, 140024789041152, 140024789045247, -ERASE, 47608006119424, 47608006119424, -STORE, 140737488347136, 140737488351231, -STORE, 140730264326144, 140737488351231, -ERASE, 140730264326144, 140730264326144, -STORE, 140730264326144, 140730264330239, -STORE, 94653216407552, 94653217120255, -ERASE, 94653216407552, 94653216407552, -STORE, 94653216407552, 94653216456703, -STORE, 94653216456704, 94653217120255, -ERASE, 94653216456704, 94653216456704, -STORE, 94653216456704, 94653217001471, -STORE, 94653217001472, 94653217099775, -STORE, 94653217099776, 94653217120255, -STORE, 140103617011712, 140103617183743, -ERASE, 140103617011712, 140103617011712, -STORE, 140103617011712, 140103617015807, -STORE, 140103617015808, 140103617183743, -ERASE, 140103617015808, 140103617015808, -STORE, 140103617015808, 140103617138687, -STORE, 140103617138688, 140103617171455, -STORE, 140103617171456, 140103617179647, -STORE, 140103617179648, 140103617183743, -STORE, 140730265427968, 140730265432063, -STORE, 140730265415680, 140730265427967, -STORE, 47529177985024, 47529177993215, -STORE, 47529177993216, 47529178001407, -STORE, 47529178001408, 47529178107903, -STORE, 47529178017792, 47529178107903, -STORE, 47529178001408, 47529178017791, -ERASE, 47529178017792, 47529178017792, -STORE, 47529178017792, 47529178091519, -STORE, 47529178091520, 47529178107903, -STORE, 47529178071040, 47529178091519, -STORE, 47529178017792, 47529178071039, -ERASE, 47529178017792, 47529178017792, -STORE, 47529178017792, 47529178071039, -STORE, 47529178087424, 47529178091519, -STORE, 47529178071040, 47529178087423, -ERASE, 47529178071040, 47529178071040, -STORE, 47529178071040, 47529178087423, -STORE, 47529178099712, 47529178107903, -STORE, 47529178091520, 47529178099711, -ERASE, 47529178091520, 47529178091520, -STORE, 47529178091520, 47529178099711, -ERASE, 47529178099712, 47529178099712, -STORE, 47529178099712, 47529178107903, -STORE, 47529178107904, 47529179947007, -STORE, 47529178247168, 47529179947007, -STORE, 47529178107904, 47529178247167, -ERASE, 47529178247168, 47529178247168, -STORE, 47529178247168, 47529179906047, -STORE, 47529179906048, 47529179947007, -STORE, 47529179590656, 47529179906047, -STORE, 47529178247168, 47529179590655, -ERASE, 47529178247168, 47529178247168, -STORE, 47529178247168, 47529179590655, -STORE, 47529179901952, 47529179906047, -STORE, 47529179590656, 47529179901951, -ERASE, 47529179590656, 47529179590656, -STORE, 47529179590656, 47529179901951, -STORE, 47529179930624, 47529179947007, -STORE, 47529179906048, 47529179930623, -ERASE, 47529179906048, 47529179906048, -STORE, 47529179906048, 47529179930623, -ERASE, 47529179930624, 47529179930624, -STORE, 47529179930624, 47529179947007, -STORE, 47529179930624, 47529179959295, -ERASE, 47529179906048, 47529179906048, -STORE, 47529179906048, 47529179922431, -STORE, 47529179922432, 47529179930623, -ERASE, 47529178091520, 47529178091520, -STORE, 47529178091520, 47529178095615, -STORE, 47529178095616, 47529178099711, -ERASE, 94653217099776, 94653217099776, -STORE, 94653217099776, 94653217116159, -STORE, 94653217116160, 94653217120255, -ERASE, 140103617171456, 140103617171456, -STORE, 140103617171456, 140103617175551, -STORE, 140103617175552, 140103617179647, -ERASE, 47529177985024, 47529177985024, -STORE, 94653241135104, 94653241270271, -STORE, 140737488347136, 140737488351231, -STORE, 140736284549120, 140737488351231, -ERASE, 140736284549120, 140736284549120, -STORE, 140736284549120, 140736284553215, -STORE, 93963663822848, 93963664506879, -ERASE, 93963663822848, 93963663822848, -STORE, 93963663822848, 93963663884287, -STORE, 93963663884288, 93963664506879, -ERASE, 93963663884288, 93963663884288, -STORE, 93963663884288, 93963664240639, -STORE, 93963664240640, 93963664379903, -STORE, 93963664379904, 93963664506879, -STORE, 140450188439552, 140450188611583, -ERASE, 140450188439552, 140450188439552, -STORE, 140450188439552, 140450188443647, -STORE, 140450188443648, 140450188611583, -ERASE, 140450188443648, 140450188443648, -STORE, 140450188443648, 140450188566527, -STORE, 140450188566528, 140450188599295, -STORE, 140450188599296, 140450188607487, -STORE, 140450188607488, 140450188611583, -STORE, 140736284577792, 140736284581887, -STORE, 140736284565504, 140736284577791, -STORE, 47182606557184, 47182606565375, -STORE, 47182606565376, 47182606573567, -STORE, 47182606573568, 47182608412671, -STORE, 47182606712832, 47182608412671, -STORE, 47182606573568, 47182606712831, -ERASE, 47182606712832, 47182606712832, -STORE, 47182606712832, 47182608371711, -STORE, 47182608371712, 47182608412671, -STORE, 47182608056320, 47182608371711, -STORE, 47182606712832, 47182608056319, -ERASE, 47182606712832, 47182606712832, -STORE, 47182606712832, 47182608056319, -STORE, 47182608367616, 47182608371711, -STORE, 47182608056320, 47182608367615, -ERASE, 47182608056320, 47182608056320, -STORE, 47182608056320, 47182608367615, -STORE, 47182608396288, 47182608412671, -STORE, 47182608371712, 47182608396287, -ERASE, 47182608371712, 47182608371712, -STORE, 47182608371712, 47182608396287, -ERASE, 47182608396288, 47182608396288, -STORE, 47182608396288, 47182608412671, -STORE, 47182608412672, 47182608523263, -STORE, 47182608429056, 47182608523263, -STORE, 47182608412672, 47182608429055, -ERASE, 47182608429056, 47182608429056, -STORE, 47182608429056, 47182608515071, -STORE, 47182608515072, 47182608523263, -STORE, 47182608490496, 47182608515071, -STORE, 47182608429056, 47182608490495, -ERASE, 47182608429056, 47182608429056, -STORE, 47182608429056, 47182608490495, -STORE, 47182608510976, 47182608515071, -STORE, 47182608490496, 47182608510975, -ERASE, 47182608490496, 47182608490496, -STORE, 47182608490496, 47182608510975, -ERASE, 47182608515072, 47182608515072, -STORE, 47182608515072, 47182608523263, -STORE, 47182608523264, 47182608568319, -ERASE, 47182608523264, 47182608523264, -STORE, 47182608523264, 47182608531455, -STORE, 47182608531456, 47182608568319, -STORE, 47182608551936, 47182608568319, -STORE, 47182608531456, 47182608551935, -ERASE, 47182608531456, 47182608531456, -STORE, 47182608531456, 47182608551935, -STORE, 47182608560128, 47182608568319, -STORE, 47182608551936, 47182608560127, -ERASE, 47182608551936, 47182608551936, -STORE, 47182608551936, 47182608568319, -ERASE, 47182608551936, 47182608551936, -STORE, 47182608551936, 47182608560127, -STORE, 47182608560128, 47182608568319, -ERASE, 47182608560128, 47182608560128, -STORE, 47182608560128, 47182608568319, -STORE, 47182608568320, 47182608916479, -STORE, 47182608609280, 47182608916479, -STORE, 47182608568320, 47182608609279, -ERASE, 47182608609280, 47182608609280, -STORE, 47182608609280, 47182608891903, -STORE, 47182608891904, 47182608916479, -STORE, 47182608822272, 47182608891903, -STORE, 47182608609280, 47182608822271, -ERASE, 47182608609280, 47182608609280, -STORE, 47182608609280, 47182608822271, -STORE, 47182608887808, 47182608891903, -STORE, 47182608822272, 47182608887807, -ERASE, 47182608822272, 47182608822272, -STORE, 47182608822272, 47182608887807, -ERASE, 47182608891904, 47182608891904, -STORE, 47182608891904, 47182608916479, -STORE, 47182608916480, 47182611177471, -STORE, 47182609068032, 47182611177471, -STORE, 47182608916480, 47182609068031, -ERASE, 47182609068032, 47182609068032, -STORE, 47182609068032, 47182611161087, -STORE, 47182611161088, 47182611177471, -STORE, 47182611169280, 47182611177471, -STORE, 47182611161088, 47182611169279, -ERASE, 47182611161088, 47182611161088, -STORE, 47182611161088, 47182611169279, -ERASE, 47182611169280, 47182611169280, -STORE, 47182611169280, 47182611177471, -STORE, 47182611177472, 47182611312639, -ERASE, 47182611177472, 47182611177472, -STORE, 47182611177472, 47182611202047, -STORE, 47182611202048, 47182611312639, -STORE, 47182611263488, 47182611312639, -STORE, 47182611202048, 47182611263487, -ERASE, 47182611202048, 47182611202048, -STORE, 47182611202048, 47182611263487, -STORE, 47182611288064, 47182611312639, -STORE, 47182611263488, 47182611288063, -ERASE, 47182611263488, 47182611263488, -STORE, 47182611263488, 47182611312639, -ERASE, 47182611263488, 47182611263488, -STORE, 47182611263488, 47182611288063, -STORE, 47182611288064, 47182611312639, -STORE, 47182611296256, 47182611312639, -STORE, 47182611288064, 47182611296255, -ERASE, 47182611288064, 47182611288064, -STORE, 47182611288064, 47182611296255, -ERASE, 47182611296256, 47182611296256, -STORE, 47182611296256, 47182611312639, -STORE, 47182611296256, 47182611320831, -STORE, 47182611320832, 47182611484671, -ERASE, 47182611320832, 47182611320832, -STORE, 47182611320832, 47182611333119, -STORE, 47182611333120, 47182611484671, -STORE, 47182611431424, 47182611484671, -STORE, 47182611333120, 47182611431423, -ERASE, 47182611333120, 47182611333120, -STORE, 47182611333120, 47182611431423, -STORE, 47182611476480, 47182611484671, -STORE, 47182611431424, 47182611476479, -ERASE, 47182611431424, 47182611431424, -STORE, 47182611431424, 47182611484671, -ERASE, 47182611431424, 47182611431424, -STORE, 47182611431424, 47182611476479, -STORE, 47182611476480, 47182611484671, -ERASE, 47182611476480, 47182611476480, -STORE, 47182611476480, 47182611484671, -STORE, 47182611484672, 47182612082687, -STORE, 47182611603456, 47182612082687, -STORE, 47182611484672, 47182611603455, -ERASE, 47182611603456, 47182611603456, -STORE, 47182611603456, 47182612029439, -STORE, 47182612029440, 47182612082687, -STORE, 47182611918848, 47182612029439, -STORE, 47182611603456, 47182611918847, -ERASE, 47182611603456, 47182611603456, -STORE, 47182611603456, 47182611918847, -STORE, 47182612025344, 47182612029439, -STORE, 47182611918848, 47182612025343, -ERASE, 47182611918848, 47182611918848, -STORE, 47182611918848, 47182612025343, -ERASE, 47182612029440, 47182612029440, -STORE, 47182612029440, 47182612082687, -STORE, 47182612082688, 47182615134207, -STORE, 47182612627456, 47182615134207, -STORE, 47182612082688, 47182612627455, -ERASE, 47182612627456, 47182612627456, -STORE, 47182612627456, 47182614913023, -STORE, 47182614913024, 47182615134207, -STORE, 47182614323200, 47182614913023, -STORE, 47182612627456, 47182614323199, -ERASE, 47182612627456, 47182612627456, -STORE, 47182612627456, 47182614323199, -STORE, 47182614908928, 47182614913023, -STORE, 47182614323200, 47182614908927, -ERASE, 47182614323200, 47182614323200, -STORE, 47182614323200, 47182614908927, -STORE, 47182615117824, 47182615134207, -STORE, 47182614913024, 47182615117823, -ERASE, 47182614913024, 47182614913024, -STORE, 47182614913024, 47182615117823, -ERASE, 47182615117824, 47182615117824, -STORE, 47182615117824, 47182615134207, -STORE, 47182615134208, 47182615166975, -ERASE, 47182615134208, 47182615134208, -STORE, 47182615134208, 47182615142399, -STORE, 47182615142400, 47182615166975, -STORE, 47182615154688, 47182615166975, -STORE, 47182615142400, 47182615154687, -ERASE, 47182615142400, 47182615142400, -STORE, 47182615142400, 47182615154687, -STORE, 47182615158784, 47182615166975, -STORE, 47182615154688, 47182615158783, -ERASE, 47182615154688, 47182615154688, -STORE, 47182615154688, 47182615166975, -ERASE, 47182615154688, 47182615154688, -STORE, 47182615154688, 47182615158783, -STORE, 47182615158784, 47182615166975, -ERASE, 47182615158784, 47182615158784, -STORE, 47182615158784, 47182615166975, -STORE, 47182615166976, 47182615203839, -ERASE, 47182615166976, 47182615166976, -STORE, 47182615166976, 47182615175167, -STORE, 47182615175168, 47182615203839, -STORE, 47182615191552, 47182615203839, -STORE, 47182615175168, 47182615191551, -ERASE, 47182615175168, 47182615175168, -STORE, 47182615175168, 47182615191551, -STORE, 47182615195648, 47182615203839, -STORE, 47182615191552, 47182615195647, -ERASE, 47182615191552, 47182615191552, -STORE, 47182615191552, 47182615203839, -ERASE, 47182615191552, 47182615191552, -STORE, 47182615191552, 47182615195647, -STORE, 47182615195648, 47182615203839, -ERASE, 47182615195648, 47182615195648, -STORE, 47182615195648, 47182615203839, -STORE, 47182615203840, 47182615678975, -ERASE, 47182615203840, 47182615203840, -STORE, 47182615203840, 47182615212031, -STORE, 47182615212032, 47182615678975, -STORE, 47182615547904, 47182615678975, -STORE, 47182615212032, 47182615547903, -ERASE, 47182615212032, 47182615212032, -STORE, 47182615212032, 47182615547903, -STORE, 47182615670784, 47182615678975, -STORE, 47182615547904, 47182615670783, -ERASE, 47182615547904, 47182615547904, -STORE, 47182615547904, 47182615678975, -ERASE, 47182615547904, 47182615547904, -STORE, 47182615547904, 47182615670783, -STORE, 47182615670784, 47182615678975, -ERASE, 47182615670784, 47182615670784, -STORE, 47182615670784, 47182615678975, -STORE, 47182615678976, 47182615687167, -STORE, 47182615687168, 47182615707647, -ERASE, 47182615687168, 47182615687168, -STORE, 47182615687168, 47182615691263, -STORE, 47182615691264, 47182615707647, -STORE, 47182615695360, 47182615707647, -STORE, 47182615691264, 47182615695359, -ERASE, 47182615691264, 47182615691264, -STORE, 47182615691264, 47182615695359, -STORE, 47182615699456, 47182615707647, -STORE, 47182615695360, 47182615699455, -ERASE, 47182615695360, 47182615695360, -STORE, 47182615695360, 47182615707647, -ERASE, 47182615695360, 47182615695360, -STORE, 47182615695360, 47182615699455, -STORE, 47182615699456, 47182615707647, -ERASE, 47182615699456, 47182615699456, -STORE, 47182615699456, 47182615707647, -STORE, 47182615707648, 47182615715839, -ERASE, 47182608371712, 47182608371712, -STORE, 47182608371712, 47182608388095, -STORE, 47182608388096, 47182608396287, -ERASE, 47182615699456, 47182615699456, -STORE, 47182615699456, 47182615703551, -STORE, 47182615703552, 47182615707647, -ERASE, 47182611288064, 47182611288064, -STORE, 47182611288064, 47182611292159, -STORE, 47182611292160, 47182611296255, -ERASE, 47182615670784, 47182615670784, -STORE, 47182615670784, 47182615674879, -STORE, 47182615674880, 47182615678975, -ERASE, 47182615195648, 47182615195648, -STORE, 47182615195648, 47182615199743, -STORE, 47182615199744, 47182615203839, -ERASE, 47182615158784, 47182615158784, -STORE, 47182615158784, 47182615162879, -STORE, 47182615162880, 47182615166975, -ERASE, 47182614913024, 47182614913024, -STORE, 47182614913024, 47182615109631, -STORE, 47182615109632, 47182615117823, -ERASE, 47182612029440, 47182612029440, -STORE, 47182612029440, 47182612066303, -STORE, 47182612066304, 47182612082687, -ERASE, 47182611476480, 47182611476480, -STORE, 47182611476480, 47182611480575, -STORE, 47182611480576, 47182611484671, -ERASE, 47182611161088, 47182611161088, -STORE, 47182611161088, 47182611165183, -STORE, 47182611165184, 47182611169279, -ERASE, 47182608891904, 47182608891904, -STORE, 47182608891904, 47182608912383, -STORE, 47182608912384, 47182608916479, -ERASE, 47182608560128, 47182608560128, -STORE, 47182608560128, 47182608564223, -STORE, 47182608564224, 47182608568319, -ERASE, 47182608515072, 47182608515072, -STORE, 47182608515072, 47182608519167, -STORE, 47182608519168, 47182608523263, -ERASE, 93963664379904, 93963664379904, -STORE, 93963664379904, 93963664502783, -STORE, 93963664502784, 93963664506879, -ERASE, 140450188599296, 140450188599296, -STORE, 140450188599296, 140450188603391, -STORE, 140450188603392, 140450188607487, -ERASE, 47182606557184, 47182606557184, -STORE, 93963694723072, 93963694858239, -STORE, 140737488347136, 140737488351231, -STORE, 140730313261056, 140737488351231, -ERASE, 140730313261056, 140730313261056, -STORE, 140730313261056, 140730313265151, -STORE, 94386579017728, 94386579697663, -ERASE, 94386579017728, 94386579017728, -STORE, 94386579017728, 94386579083263, -STORE, 94386579083264, 94386579697663, -ERASE, 94386579083264, 94386579083264, -STORE, 94386579083264, 94386579431423, -STORE, 94386579431424, 94386579570687, -STORE, 94386579570688, 94386579697663, -STORE, 140124810838016, 140124811010047, -ERASE, 140124810838016, 140124810838016, -STORE, 140124810838016, 140124810842111, -STORE, 140124810842112, 140124811010047, -ERASE, 140124810842112, 140124810842112, -STORE, 140124810842112, 140124810964991, -STORE, 140124810964992, 140124810997759, -STORE, 140124810997760, 140124811005951, -STORE, 140124811005952, 140124811010047, -STORE, 140730313601024, 140730313605119, -STORE, 140730313588736, 140730313601023, -STORE, 47507984158720, 47507984166911, -STORE, 47507984166912, 47507984175103, -STORE, 47507984175104, 47507986014207, -STORE, 47507984314368, 47507986014207, -STORE, 47507984175104, 47507984314367, -ERASE, 47507984314368, 47507984314368, -STORE, 47507984314368, 47507985973247, -STORE, 47507985973248, 47507986014207, -STORE, 47507985657856, 47507985973247, -STORE, 47507984314368, 47507985657855, -ERASE, 47507984314368, 47507984314368, -STORE, 47507984314368, 47507985657855, -STORE, 47507985969152, 47507985973247, -STORE, 47507985657856, 47507985969151, -ERASE, 47507985657856, 47507985657856, -STORE, 47507985657856, 47507985969151, -STORE, 47507985997824, 47507986014207, -STORE, 47507985973248, 47507985997823, -ERASE, 47507985973248, 47507985973248, -STORE, 47507985973248, 47507985997823, -ERASE, 47507985997824, 47507985997824, -STORE, 47507985997824, 47507986014207, -STORE, 47507986014208, 47507986124799, -STORE, 47507986030592, 47507986124799, -STORE, 47507986014208, 47507986030591, -ERASE, 47507986030592, 47507986030592, -STORE, 47507986030592, 47507986116607, -STORE, 47507986116608, 47507986124799, -STORE, 47507986092032, 47507986116607, -STORE, 47507986030592, 47507986092031, -ERASE, 47507986030592, 47507986030592, -STORE, 47507986030592, 47507986092031, -STORE, 47507986112512, 47507986116607, -STORE, 47507986092032, 47507986112511, -ERASE, 47507986092032, 47507986092032, -STORE, 47507986092032, 47507986112511, -ERASE, 47507986116608, 47507986116608, -STORE, 47507986116608, 47507986124799, -STORE, 47507986124800, 47507986169855, -ERASE, 47507986124800, 47507986124800, -STORE, 47507986124800, 47507986132991, -STORE, 47507986132992, 47507986169855, -STORE, 47507986153472, 47507986169855, -STORE, 47507986132992, 47507986153471, -ERASE, 47507986132992, 47507986132992, -STORE, 47507986132992, 47507986153471, -STORE, 47507986161664, 47507986169855, -STORE, 47507986153472, 47507986161663, -ERASE, 47507986153472, 47507986153472, -STORE, 47507986153472, 47507986169855, -ERASE, 47507986153472, 47507986153472, -STORE, 47507986153472, 47507986161663, -STORE, 47507986161664, 47507986169855, -ERASE, 47507986161664, 47507986161664, -STORE, 47507986161664, 47507986169855, -STORE, 47507986169856, 47507986518015, -STORE, 47507986210816, 47507986518015, -STORE, 47507986169856, 47507986210815, -ERASE, 47507986210816, 47507986210816, -STORE, 47507986210816, 47507986493439, -STORE, 47507986493440, 47507986518015, -STORE, 47507986423808, 47507986493439, -STORE, 47507986210816, 47507986423807, -ERASE, 47507986210816, 47507986210816, -STORE, 47507986210816, 47507986423807, -STORE, 47507986489344, 47507986493439, -STORE, 47507986423808, 47507986489343, -ERASE, 47507986423808, 47507986423808, -STORE, 47507986423808, 47507986489343, -ERASE, 47507986493440, 47507986493440, -STORE, 47507986493440, 47507986518015, -STORE, 47507986518016, 47507988779007, -STORE, 47507986669568, 47507988779007, -STORE, 47507986518016, 47507986669567, -ERASE, 47507986669568, 47507986669568, -STORE, 47507986669568, 47507988762623, -STORE, 47507988762624, 47507988779007, -STORE, 47507988770816, 47507988779007, -STORE, 47507988762624, 47507988770815, -ERASE, 47507988762624, 47507988762624, -STORE, 47507988762624, 47507988770815, -ERASE, 47507988770816, 47507988770816, -STORE, 47507988770816, 47507988779007, -STORE, 47507988779008, 47507988914175, -ERASE, 47507988779008, 47507988779008, -STORE, 47507988779008, 47507988803583, -STORE, 47507988803584, 47507988914175, -STORE, 47507988865024, 47507988914175, -STORE, 47507988803584, 47507988865023, -ERASE, 47507988803584, 47507988803584, -STORE, 47507988803584, 47507988865023, -STORE, 47507988889600, 47507988914175, -STORE, 47507988865024, 47507988889599, -ERASE, 47507988865024, 47507988865024, -STORE, 47507988865024, 47507988914175, -ERASE, 47507988865024, 47507988865024, -STORE, 47507988865024, 47507988889599, -STORE, 47507988889600, 47507988914175, -STORE, 47507988897792, 47507988914175, -STORE, 47507988889600, 47507988897791, -ERASE, 47507988889600, 47507988889600, -STORE, 47507988889600, 47507988897791, -ERASE, 47507988897792, 47507988897792, -STORE, 47507988897792, 47507988914175, -STORE, 47507988897792, 47507988922367, -STORE, 47507988922368, 47507989086207, -ERASE, 47507988922368, 47507988922368, -STORE, 47507988922368, 47507988934655, -STORE, 47507988934656, 47507989086207, -STORE, 47507989032960, 47507989086207, -STORE, 47507988934656, 47507989032959, -ERASE, 47507988934656, 47507988934656, -STORE, 47507988934656, 47507989032959, -STORE, 47507989078016, 47507989086207, -STORE, 47507989032960, 47507989078015, -ERASE, 47507989032960, 47507989032960, -STORE, 47507989032960, 47507989086207, -ERASE, 47507989032960, 47507989032960, -STORE, 47507989032960, 47507989078015, -STORE, 47507989078016, 47507989086207, -ERASE, 47507989078016, 47507989078016, -STORE, 47507989078016, 47507989086207, -STORE, 47507989086208, 47507989684223, -STORE, 47507989204992, 47507989684223, -STORE, 47507989086208, 47507989204991, -ERASE, 47507989204992, 47507989204992, -STORE, 47507989204992, 47507989630975, -STORE, 47507989630976, 47507989684223, -STORE, 47507989520384, 47507989630975, -STORE, 47507989204992, 47507989520383, -ERASE, 47507989204992, 47507989204992, -STORE, 47507989204992, 47507989520383, -STORE, 47507989626880, 47507989630975, -STORE, 47507989520384, 47507989626879, -ERASE, 47507989520384, 47507989520384, -STORE, 47507989520384, 47507989626879, -ERASE, 47507989630976, 47507989630976, -STORE, 47507989630976, 47507989684223, -STORE, 47507989684224, 47507992735743, -STORE, 47507990228992, 47507992735743, -STORE, 47507989684224, 47507990228991, -ERASE, 47507990228992, 47507990228992, -STORE, 47507990228992, 47507992514559, -STORE, 47507992514560, 47507992735743, -STORE, 47507991924736, 47507992514559, -STORE, 47507990228992, 47507991924735, -ERASE, 47507990228992, 47507990228992, -STORE, 47507990228992, 47507991924735, -STORE, 47507992510464, 47507992514559, -STORE, 47507991924736, 47507992510463, -ERASE, 47507991924736, 47507991924736, -STORE, 47507991924736, 47507992510463, -STORE, 47507992719360, 47507992735743, -STORE, 47507992514560, 47507992719359, -ERASE, 47507992514560, 47507992514560, -STORE, 47507992514560, 47507992719359, -ERASE, 47507992719360, 47507992719360, -STORE, 47507992719360, 47507992735743, -STORE, 47507992735744, 47507992768511, -ERASE, 47507992735744, 47507992735744, -STORE, 47507992735744, 47507992743935, -STORE, 47507992743936, 47507992768511, -STORE, 47507992756224, 47507992768511, -STORE, 47507992743936, 47507992756223, -ERASE, 47507992743936, 47507992743936, -STORE, 47507992743936, 47507992756223, -STORE, 47507992760320, 47507992768511, -STORE, 47507992756224, 47507992760319, -ERASE, 47507992756224, 47507992756224, -STORE, 47507992756224, 47507992768511, -ERASE, 47507992756224, 47507992756224, -STORE, 47507992756224, 47507992760319, -STORE, 47507992760320, 47507992768511, -ERASE, 47507992760320, 47507992760320, -STORE, 47507992760320, 47507992768511, -STORE, 47507992768512, 47507992805375, -ERASE, 47507992768512, 47507992768512, -STORE, 47507992768512, 47507992776703, -STORE, 47507992776704, 47507992805375, -STORE, 47507992793088, 47507992805375, -STORE, 47507992776704, 47507992793087, -ERASE, 47507992776704, 47507992776704, -STORE, 47507992776704, 47507992793087, -STORE, 47507992797184, 47507992805375, -STORE, 47507992793088, 47507992797183, -ERASE, 47507992793088, 47507992793088, -STORE, 47507992793088, 47507992805375, -ERASE, 47507992793088, 47507992793088, -STORE, 47507992793088, 47507992797183, -STORE, 47507992797184, 47507992805375, -ERASE, 47507992797184, 47507992797184, -STORE, 47507992797184, 47507992805375, -STORE, 47507992805376, 47507993280511, -ERASE, 47507992805376, 47507992805376, -STORE, 47507992805376, 47507992813567, -STORE, 47507992813568, 47507993280511, -STORE, 47507993149440, 47507993280511, -STORE, 47507992813568, 47507993149439, -ERASE, 47507992813568, 47507992813568, -STORE, 47507992813568, 47507993149439, -STORE, 47507993272320, 47507993280511, -STORE, 47507993149440, 47507993272319, -ERASE, 47507993149440, 47507993149440, -STORE, 47507993149440, 47507993280511, -ERASE, 47507993149440, 47507993149440, -STORE, 47507993149440, 47507993272319, -STORE, 47507993272320, 47507993280511, -ERASE, 47507993272320, 47507993272320, -STORE, 47507993272320, 47507993280511, -STORE, 47507993280512, 47507993288703, -STORE, 47507993288704, 47507993309183, -ERASE, 47507993288704, 47507993288704, -STORE, 47507993288704, 47507993292799, -STORE, 47507993292800, 47507993309183, -STORE, 47507993296896, 47507993309183, -STORE, 47507993292800, 47507993296895, -ERASE, 47507993292800, 47507993292800, -STORE, 47507993292800, 47507993296895, -STORE, 47507993300992, 47507993309183, -STORE, 47507993296896, 47507993300991, -ERASE, 47507993296896, 47507993296896, -STORE, 47507993296896, 47507993309183, -ERASE, 47507993296896, 47507993296896, -STORE, 47507993296896, 47507993300991, -STORE, 47507993300992, 47507993309183, -ERASE, 47507993300992, 47507993300992, -STORE, 47507993300992, 47507993309183, -STORE, 47507993309184, 47507993317375, -ERASE, 47507985973248, 47507985973248, -STORE, 47507985973248, 47507985989631, -STORE, 47507985989632, 47507985997823, -ERASE, 47507993300992, 47507993300992, -STORE, 47507993300992, 47507993305087, -STORE, 47507993305088, 47507993309183, -ERASE, 47507988889600, 47507988889600, -STORE, 47507988889600, 47507988893695, -STORE, 47507988893696, 47507988897791, -ERASE, 47507993272320, 47507993272320, -STORE, 47507993272320, 47507993276415, -STORE, 47507993276416, 47507993280511, -ERASE, 47507992797184, 47507992797184, -STORE, 47507992797184, 47507992801279, -STORE, 47507992801280, 47507992805375, -ERASE, 47507992760320, 47507992760320, -STORE, 47507992760320, 47507992764415, -STORE, 47507992764416, 47507992768511, -ERASE, 47507992514560, 47507992514560, -STORE, 47507992514560, 47507992711167, -STORE, 47507992711168, 47507992719359, -ERASE, 47507989630976, 47507989630976, -STORE, 47507989630976, 47507989667839, -STORE, 47507989667840, 47507989684223, -ERASE, 47507989078016, 47507989078016, -STORE, 47507989078016, 47507989082111, -STORE, 47507989082112, 47507989086207, -ERASE, 47507988762624, 47507988762624, -STORE, 47507988762624, 47507988766719, -STORE, 47507988766720, 47507988770815, -ERASE, 47507986493440, 47507986493440, -STORE, 47507986493440, 47507986513919, -STORE, 47507986513920, 47507986518015, -ERASE, 47507986161664, 47507986161664, -STORE, 47507986161664, 47507986165759, -STORE, 47507986165760, 47507986169855, -ERASE, 47507986116608, 47507986116608, -STORE, 47507986116608, 47507986120703, -STORE, 47507986120704, 47507986124799, -ERASE, 94386579570688, 94386579570688, -STORE, 94386579570688, 94386579693567, -STORE, 94386579693568, 94386579697663, -ERASE, 140124810997760, 140124810997760, -STORE, 140124810997760, 140124811001855, -STORE, 140124811001856, 140124811005951, -ERASE, 47507984158720, 47507984158720, -STORE, 94386583982080, 94386584117247, -STORE, 94386583982080, 94386584256511, -ERASE, 94386583982080, 94386583982080, -STORE, 94386583982080, 94386584223743, -STORE, 94386584223744, 94386584256511, -ERASE, 94386584223744, 94386584223744, -STORE, 140737488347136, 140737488351231, -STORE, 140733763395584, 140737488351231, -ERASE, 140733763395584, 140733763395584, -STORE, 140733763395584, 140733763399679, -STORE, 94011546472448, 94011547152383, -ERASE, 94011546472448, 94011546472448, -STORE, 94011546472448, 94011546537983, -STORE, 94011546537984, 94011547152383, -ERASE, 94011546537984, 94011546537984, -STORE, 94011546537984, 94011546886143, -STORE, 94011546886144, 94011547025407, -STORE, 94011547025408, 94011547152383, -STORE, 139757597949952, 139757598121983, -ERASE, 139757597949952, 139757597949952, -STORE, 139757597949952, 139757597954047, -STORE, 139757597954048, 139757598121983, -ERASE, 139757597954048, 139757597954048, -STORE, 139757597954048, 139757598076927, -STORE, 139757598076928, 139757598109695, -STORE, 139757598109696, 139757598117887, -STORE, 139757598117888, 139757598121983, -STORE, 140733763596288, 140733763600383, -STORE, 140733763584000, 140733763596287, -STORE, 47875197046784, 47875197054975, -STORE, 47875197054976, 47875197063167, -STORE, 47875197063168, 47875198902271, -STORE, 47875197202432, 47875198902271, -STORE, 47875197063168, 47875197202431, -ERASE, 47875197202432, 47875197202432, -STORE, 47875197202432, 47875198861311, -STORE, 47875198861312, 47875198902271, -STORE, 47875198545920, 47875198861311, -STORE, 47875197202432, 47875198545919, -ERASE, 47875197202432, 47875197202432, -STORE, 47875197202432, 47875198545919, -STORE, 47875198857216, 47875198861311, -STORE, 47875198545920, 47875198857215, -ERASE, 47875198545920, 47875198545920, -STORE, 47875198545920, 47875198857215, -STORE, 47875198885888, 47875198902271, -STORE, 47875198861312, 47875198885887, -ERASE, 47875198861312, 47875198861312, -STORE, 47875198861312, 47875198885887, -ERASE, 47875198885888, 47875198885888, -STORE, 47875198885888, 47875198902271, -STORE, 47875198902272, 47875199012863, -STORE, 47875198918656, 47875199012863, -STORE, 47875198902272, 47875198918655, -ERASE, 47875198918656, 47875198918656, -STORE, 47875198918656, 47875199004671, -STORE, 47875199004672, 47875199012863, -STORE, 47875198980096, 47875199004671, -STORE, 47875198918656, 47875198980095, -ERASE, 47875198918656, 47875198918656, -STORE, 47875198918656, 47875198980095, -STORE, 47875199000576, 47875199004671, -STORE, 47875198980096, 47875199000575, -ERASE, 47875198980096, 47875198980096, -STORE, 47875198980096, 47875199000575, -ERASE, 47875199004672, 47875199004672, -STORE, 47875199004672, 47875199012863, -STORE, 47875199012864, 47875199057919, -ERASE, 47875199012864, 47875199012864, -STORE, 47875199012864, 47875199021055, -STORE, 47875199021056, 47875199057919, -STORE, 47875199041536, 47875199057919, -STORE, 47875199021056, 47875199041535, -ERASE, 47875199021056, 47875199021056, -STORE, 47875199021056, 47875199041535, -STORE, 47875199049728, 47875199057919, -STORE, 47875199041536, 47875199049727, -ERASE, 47875199041536, 47875199041536, -STORE, 47875199041536, 47875199057919, -ERASE, 47875199041536, 47875199041536, -STORE, 47875199041536, 47875199049727, -STORE, 47875199049728, 47875199057919, -ERASE, 47875199049728, 47875199049728, -STORE, 47875199049728, 47875199057919, -STORE, 47875199057920, 47875199406079, -STORE, 47875199098880, 47875199406079, -STORE, 47875199057920, 47875199098879, -ERASE, 47875199098880, 47875199098880, -STORE, 47875199098880, 47875199381503, -STORE, 47875199381504, 47875199406079, -STORE, 47875199311872, 47875199381503, -STORE, 47875199098880, 47875199311871, -ERASE, 47875199098880, 47875199098880, -STORE, 47875199098880, 47875199311871, -STORE, 47875199377408, 47875199381503, -STORE, 47875199311872, 47875199377407, -ERASE, 47875199311872, 47875199311872, -STORE, 47875199311872, 47875199377407, -ERASE, 47875199381504, 47875199381504, -STORE, 47875199381504, 47875199406079, -STORE, 47875199406080, 47875201667071, -STORE, 47875199557632, 47875201667071, -STORE, 47875199406080, 47875199557631, -ERASE, 47875199557632, 47875199557632, -STORE, 47875199557632, 47875201650687, -STORE, 47875201650688, 47875201667071, -STORE, 47875201658880, 47875201667071, -STORE, 47875201650688, 47875201658879, -ERASE, 47875201650688, 47875201650688, -STORE, 47875201650688, 47875201658879, -ERASE, 47875201658880, 47875201658880, -STORE, 47875201658880, 47875201667071, -STORE, 47875201667072, 47875201802239, -ERASE, 47875201667072, 47875201667072, -STORE, 47875201667072, 47875201691647, -STORE, 47875201691648, 47875201802239, -STORE, 47875201753088, 47875201802239, -STORE, 47875201691648, 47875201753087, -ERASE, 47875201691648, 47875201691648, -STORE, 47875201691648, 47875201753087, -STORE, 47875201777664, 47875201802239, -STORE, 47875201753088, 47875201777663, -ERASE, 47875201753088, 47875201753088, -STORE, 47875201753088, 47875201802239, -ERASE, 47875201753088, 47875201753088, -STORE, 47875201753088, 47875201777663, -STORE, 47875201777664, 47875201802239, -STORE, 47875201785856, 47875201802239, -STORE, 47875201777664, 47875201785855, -ERASE, 47875201777664, 47875201777664, -STORE, 47875201777664, 47875201785855, -ERASE, 47875201785856, 47875201785856, -STORE, 47875201785856, 47875201802239, -STORE, 47875201785856, 47875201810431, -STORE, 47875201810432, 47875201974271, -ERASE, 47875201810432, 47875201810432, -STORE, 47875201810432, 47875201822719, -STORE, 47875201822720, 47875201974271, -STORE, 47875201921024, 47875201974271, -STORE, 47875201822720, 47875201921023, -ERASE, 47875201822720, 47875201822720, -STORE, 47875201822720, 47875201921023, -STORE, 47875201966080, 47875201974271, -STORE, 47875201921024, 47875201966079, -ERASE, 47875201921024, 47875201921024, -STORE, 47875201921024, 47875201974271, -ERASE, 47875201921024, 47875201921024, -STORE, 47875201921024, 47875201966079, -STORE, 47875201966080, 47875201974271, -ERASE, 47875201966080, 47875201966080, -STORE, 47875201966080, 47875201974271, -STORE, 47875201974272, 47875202572287, -STORE, 47875202093056, 47875202572287, -STORE, 47875201974272, 47875202093055, -ERASE, 47875202093056, 47875202093056, -STORE, 47875202093056, 47875202519039, -STORE, 47875202519040, 47875202572287, -STORE, 47875202408448, 47875202519039, -STORE, 47875202093056, 47875202408447, -ERASE, 47875202093056, 47875202093056, -STORE, 47875202093056, 47875202408447, -STORE, 47875202514944, 47875202519039, -STORE, 47875202408448, 47875202514943, -ERASE, 47875202408448, 47875202408448, -STORE, 47875202408448, 47875202514943, -ERASE, 47875202519040, 47875202519040, -STORE, 47875202519040, 47875202572287, -STORE, 47875202572288, 47875205623807, -STORE, 47875203117056, 47875205623807, -STORE, 47875202572288, 47875203117055, -ERASE, 47875203117056, 47875203117056, -STORE, 47875203117056, 47875205402623, -STORE, 47875205402624, 47875205623807, -STORE, 47875204812800, 47875205402623, -STORE, 47875203117056, 47875204812799, -ERASE, 47875203117056, 47875203117056, -STORE, 47875203117056, 47875204812799, -STORE, 47875205398528, 47875205402623, -STORE, 47875204812800, 47875205398527, -ERASE, 47875204812800, 47875204812800, -STORE, 47875204812800, 47875205398527, -STORE, 47875205607424, 47875205623807, -STORE, 47875205402624, 47875205607423, -ERASE, 47875205402624, 47875205402624, -STORE, 47875205402624, 47875205607423, -ERASE, 47875205607424, 47875205607424, -STORE, 47875205607424, 47875205623807, -STORE, 47875205623808, 47875205656575, -ERASE, 47875205623808, 47875205623808, -STORE, 47875205623808, 47875205631999, -STORE, 47875205632000, 47875205656575, -STORE, 47875205644288, 47875205656575, -STORE, 47875205632000, 47875205644287, -ERASE, 47875205632000, 47875205632000, -STORE, 47875205632000, 47875205644287, -STORE, 47875205648384, 47875205656575, -STORE, 47875205644288, 47875205648383, -ERASE, 47875205644288, 47875205644288, -STORE, 47875205644288, 47875205656575, -ERASE, 47875205644288, 47875205644288, -STORE, 47875205644288, 47875205648383, -STORE, 47875205648384, 47875205656575, -ERASE, 47875205648384, 47875205648384, -STORE, 47875205648384, 47875205656575, -STORE, 47875205656576, 47875205693439, -ERASE, 47875205656576, 47875205656576, -STORE, 47875205656576, 47875205664767, -STORE, 47875205664768, 47875205693439, -STORE, 47875205681152, 47875205693439, -STORE, 47875205664768, 47875205681151, -ERASE, 47875205664768, 47875205664768, -STORE, 47875205664768, 47875205681151, -STORE, 47875205685248, 47875205693439, -STORE, 47875205681152, 47875205685247, -ERASE, 47875205681152, 47875205681152, -STORE, 47875205681152, 47875205693439, -ERASE, 47875205681152, 47875205681152, -STORE, 47875205681152, 47875205685247, -STORE, 47875205685248, 47875205693439, -ERASE, 47875205685248, 47875205685248, -STORE, 47875205685248, 47875205693439, -STORE, 47875205693440, 47875206168575, -ERASE, 47875205693440, 47875205693440, -STORE, 47875205693440, 47875205701631, -STORE, 47875205701632, 47875206168575, -STORE, 47875206037504, 47875206168575, -STORE, 47875205701632, 47875206037503, -ERASE, 47875205701632, 47875205701632, -STORE, 47875205701632, 47875206037503, -STORE, 47875206160384, 47875206168575, -STORE, 47875206037504, 47875206160383, -ERASE, 47875206037504, 47875206037504, -STORE, 47875206037504, 47875206168575, -ERASE, 47875206037504, 47875206037504, -STORE, 47875206037504, 47875206160383, -STORE, 47875206160384, 47875206168575, -ERASE, 47875206160384, 47875206160384, -STORE, 47875206160384, 47875206168575, -STORE, 47875206168576, 47875206176767, -STORE, 47875206176768, 47875206197247, -ERASE, 47875206176768, 47875206176768, -STORE, 47875206176768, 47875206180863, -STORE, 47875206180864, 47875206197247, -STORE, 47875206184960, 47875206197247, -STORE, 47875206180864, 47875206184959, -ERASE, 47875206180864, 47875206180864, -STORE, 47875206180864, 47875206184959, -STORE, 47875206189056, 47875206197247, -STORE, 47875206184960, 47875206189055, -ERASE, 47875206184960, 47875206184960, -STORE, 47875206184960, 47875206197247, -ERASE, 47875206184960, 47875206184960, -STORE, 47875206184960, 47875206189055, -STORE, 47875206189056, 47875206197247, -ERASE, 47875206189056, 47875206189056, -STORE, 47875206189056, 47875206197247, -STORE, 47875206197248, 47875206205439, -ERASE, 47875198861312, 47875198861312, -STORE, 47875198861312, 47875198877695, -STORE, 47875198877696, 47875198885887, -ERASE, 47875206189056, 47875206189056, -STORE, 47875206189056, 47875206193151, -STORE, 47875206193152, 47875206197247, -ERASE, 47875201777664, 47875201777664, -STORE, 47875201777664, 47875201781759, -STORE, 47875201781760, 47875201785855, -ERASE, 47875206160384, 47875206160384, -STORE, 47875206160384, 47875206164479, -STORE, 47875206164480, 47875206168575, -ERASE, 47875205685248, 47875205685248, -STORE, 47875205685248, 47875205689343, -STORE, 47875205689344, 47875205693439, -ERASE, 47875205648384, 47875205648384, -STORE, 47875205648384, 47875205652479, -STORE, 47875205652480, 47875205656575, -ERASE, 47875205402624, 47875205402624, -STORE, 47875205402624, 47875205599231, -STORE, 47875205599232, 47875205607423, -ERASE, 47875202519040, 47875202519040, -STORE, 47875202519040, 47875202555903, -STORE, 47875202555904, 47875202572287, -ERASE, 47875201966080, 47875201966080, -STORE, 47875201966080, 47875201970175, -STORE, 47875201970176, 47875201974271, -ERASE, 47875201650688, 47875201650688, -STORE, 47875201650688, 47875201654783, -STORE, 47875201654784, 47875201658879, -ERASE, 47875199381504, 47875199381504, -STORE, 47875199381504, 47875199401983, -STORE, 47875199401984, 47875199406079, -ERASE, 47875199049728, 47875199049728, -STORE, 47875199049728, 47875199053823, -STORE, 47875199053824, 47875199057919, -ERASE, 47875199004672, 47875199004672, -STORE, 47875199004672, 47875199008767, -STORE, 47875199008768, 47875199012863, -ERASE, 94011547025408, 94011547025408, -STORE, 94011547025408, 94011547148287, -STORE, 94011547148288, 94011547152383, -ERASE, 139757598109696, 139757598109696, -STORE, 139757598109696, 139757598113791, -STORE, 139757598113792, 139757598117887, -ERASE, 47875197046784, 47875197046784, -STORE, 94011557584896, 94011557720063, -STORE, 94011557584896, 94011557855231, -ERASE, 94011557584896, 94011557584896, -STORE, 94011557584896, 94011557851135, -STORE, 94011557851136, 94011557855231, -ERASE, 94011557851136, 94011557851136, -ERASE, 94011557584896, 94011557584896, -STORE, 94011557584896, 94011557847039, -STORE, 94011557847040, 94011557851135, -ERASE, 94011557847040, 94011557847040, -STORE, 94011557584896, 94011557982207, -ERASE, 94011557584896, 94011557584896, -STORE, 94011557584896, 94011557978111, -STORE, 94011557978112, 94011557982207, -ERASE, 94011557978112, 94011557978112, -ERASE, 94011557584896, 94011557584896, -STORE, 94011557584896, 94011557974015, -STORE, 94011557974016, 94011557978111, -ERASE, 94011557974016, 94011557974016, -STORE, 140737488347136, 140737488351231, -STORE, 140734130360320, 140737488351231, -ERASE, 140734130360320, 140734130360320, -STORE, 140734130360320, 140734130364415, -STORE, 94641232105472, 94641232785407, -ERASE, 94641232105472, 94641232105472, -STORE, 94641232105472, 94641232171007, -STORE, 94641232171008, 94641232785407, -ERASE, 94641232171008, 94641232171008, -STORE, 94641232171008, 94641232519167, -STORE, 94641232519168, 94641232658431, -STORE, 94641232658432, 94641232785407, -STORE, 139726599516160, 139726599688191, -ERASE, 139726599516160, 139726599516160, -STORE, 139726599516160, 139726599520255, -STORE, 139726599520256, 139726599688191, -ERASE, 139726599520256, 139726599520256, -STORE, 139726599520256, 139726599643135, -STORE, 139726599643136, 139726599675903, -STORE, 139726599675904, 139726599684095, -STORE, 139726599684096, 139726599688191, -STORE, 140734130446336, 140734130450431, -STORE, 140734130434048, 140734130446335, -STORE, 47906195480576, 47906195488767, -STORE, 47906195488768, 47906195496959, -STORE, 47906195496960, 47906197336063, -STORE, 47906195636224, 47906197336063, -STORE, 47906195496960, 47906195636223, -ERASE, 47906195636224, 47906195636224, -STORE, 47906195636224, 47906197295103, -STORE, 47906197295104, 47906197336063, -STORE, 47906196979712, 47906197295103, -STORE, 47906195636224, 47906196979711, -ERASE, 47906195636224, 47906195636224, -STORE, 47906195636224, 47906196979711, -STORE, 47906197291008, 47906197295103, -STORE, 47906196979712, 47906197291007, -ERASE, 47906196979712, 47906196979712, -STORE, 47906196979712, 47906197291007, -STORE, 47906197319680, 47906197336063, -STORE, 47906197295104, 47906197319679, -ERASE, 47906197295104, 47906197295104, -STORE, 47906197295104, 47906197319679, -ERASE, 47906197319680, 47906197319680, -STORE, 47906197319680, 47906197336063, -STORE, 47906197336064, 47906197446655, -STORE, 47906197352448, 47906197446655, -STORE, 47906197336064, 47906197352447, -ERASE, 47906197352448, 47906197352448, -STORE, 47906197352448, 47906197438463, -STORE, 47906197438464, 47906197446655, -STORE, 47906197413888, 47906197438463, -STORE, 47906197352448, 47906197413887, -ERASE, 47906197352448, 47906197352448, -STORE, 47906197352448, 47906197413887, -STORE, 47906197434368, 47906197438463, -STORE, 47906197413888, 47906197434367, -ERASE, 47906197413888, 47906197413888, -STORE, 47906197413888, 47906197434367, -ERASE, 47906197438464, 47906197438464, -STORE, 47906197438464, 47906197446655, -STORE, 47906197446656, 47906197491711, -ERASE, 47906197446656, 47906197446656, -STORE, 47906197446656, 47906197454847, -STORE, 47906197454848, 47906197491711, -STORE, 47906197475328, 47906197491711, -STORE, 47906197454848, 47906197475327, -ERASE, 47906197454848, 47906197454848, -STORE, 47906197454848, 47906197475327, -STORE, 47906197483520, 47906197491711, -STORE, 47906197475328, 47906197483519, -ERASE, 47906197475328, 47906197475328, -STORE, 47906197475328, 47906197491711, -ERASE, 47906197475328, 47906197475328, -STORE, 47906197475328, 47906197483519, -STORE, 47906197483520, 47906197491711, -ERASE, 47906197483520, 47906197483520, -STORE, 47906197483520, 47906197491711, -STORE, 47906197491712, 47906197839871, -STORE, 47906197532672, 47906197839871, -STORE, 47906197491712, 47906197532671, -ERASE, 47906197532672, 47906197532672, -STORE, 47906197532672, 47906197815295, -STORE, 47906197815296, 47906197839871, -STORE, 47906197745664, 47906197815295, -STORE, 47906197532672, 47906197745663, -ERASE, 47906197532672, 47906197532672, -STORE, 47906197532672, 47906197745663, -STORE, 47906197811200, 47906197815295, -STORE, 47906197745664, 47906197811199, -ERASE, 47906197745664, 47906197745664, -STORE, 47906197745664, 47906197811199, -ERASE, 47906197815296, 47906197815296, -STORE, 47906197815296, 47906197839871, -STORE, 47906197839872, 47906200100863, -STORE, 47906197991424, 47906200100863, -STORE, 47906197839872, 47906197991423, -ERASE, 47906197991424, 47906197991424, -STORE, 47906197991424, 47906200084479, -STORE, 47906200084480, 47906200100863, -STORE, 47906200092672, 47906200100863, -STORE, 47906200084480, 47906200092671, -ERASE, 47906200084480, 47906200084480, -STORE, 47906200084480, 47906200092671, -ERASE, 47906200092672, 47906200092672, -STORE, 47906200092672, 47906200100863, -STORE, 47906200100864, 47906200236031, -ERASE, 47906200100864, 47906200100864, -STORE, 47906200100864, 47906200125439, -STORE, 47906200125440, 47906200236031, -STORE, 47906200186880, 47906200236031, -STORE, 47906200125440, 47906200186879, -ERASE, 47906200125440, 47906200125440, -STORE, 47906200125440, 47906200186879, -STORE, 47906200211456, 47906200236031, -STORE, 47906200186880, 47906200211455, -ERASE, 47906200186880, 47906200186880, -STORE, 47906200186880, 47906200236031, -ERASE, 47906200186880, 47906200186880, -STORE, 47906200186880, 47906200211455, -STORE, 47906200211456, 47906200236031, -STORE, 47906200219648, 47906200236031, -STORE, 47906200211456, 47906200219647, -ERASE, 47906200211456, 47906200211456, -STORE, 47906200211456, 47906200219647, -ERASE, 47906200219648, 47906200219648, -STORE, 47906200219648, 47906200236031, -STORE, 47906200219648, 47906200244223, -STORE, 47906200244224, 47906200408063, -ERASE, 47906200244224, 47906200244224, -STORE, 47906200244224, 47906200256511, -STORE, 47906200256512, 47906200408063, -STORE, 47906200354816, 47906200408063, -STORE, 47906200256512, 47906200354815, -ERASE, 47906200256512, 47906200256512, -STORE, 47906200256512, 47906200354815, -STORE, 47906200399872, 47906200408063, -STORE, 47906200354816, 47906200399871, -ERASE, 47906200354816, 47906200354816, -STORE, 47906200354816, 47906200408063, -ERASE, 47906200354816, 47906200354816, -STORE, 47906200354816, 47906200399871, -STORE, 47906200399872, 47906200408063, -ERASE, 47906200399872, 47906200399872, -STORE, 47906200399872, 47906200408063, -STORE, 47906200408064, 47906201006079, -STORE, 47906200526848, 47906201006079, -STORE, 47906200408064, 47906200526847, -ERASE, 47906200526848, 47906200526848, -STORE, 47906200526848, 47906200952831, -STORE, 47906200952832, 47906201006079, -STORE, 47906200842240, 47906200952831, -STORE, 47906200526848, 47906200842239, -ERASE, 47906200526848, 47906200526848, -STORE, 47906200526848, 47906200842239, -STORE, 47906200948736, 47906200952831, -STORE, 47906200842240, 47906200948735, -ERASE, 47906200842240, 47906200842240, -STORE, 47906200842240, 47906200948735, -ERASE, 47906200952832, 47906200952832, -STORE, 47906200952832, 47906201006079, -STORE, 47906201006080, 47906204057599, -STORE, 47906201550848, 47906204057599, -STORE, 47906201006080, 47906201550847, -ERASE, 47906201550848, 47906201550848, -STORE, 47906201550848, 47906203836415, -STORE, 47906203836416, 47906204057599, -STORE, 47906203246592, 47906203836415, -STORE, 47906201550848, 47906203246591, -ERASE, 47906201550848, 47906201550848, -STORE, 47906201550848, 47906203246591, -STORE, 47906203832320, 47906203836415, -STORE, 47906203246592, 47906203832319, -ERASE, 47906203246592, 47906203246592, -STORE, 47906203246592, 47906203832319, -STORE, 47906204041216, 47906204057599, -STORE, 47906203836416, 47906204041215, -ERASE, 47906203836416, 47906203836416, -STORE, 47906203836416, 47906204041215, -ERASE, 47906204041216, 47906204041216, -STORE, 47906204041216, 47906204057599, -STORE, 47906204057600, 47906204090367, -ERASE, 47906204057600, 47906204057600, -STORE, 47906204057600, 47906204065791, -STORE, 47906204065792, 47906204090367, -STORE, 47906204078080, 47906204090367, -STORE, 47906204065792, 47906204078079, -ERASE, 47906204065792, 47906204065792, -STORE, 47906204065792, 47906204078079, -STORE, 47906204082176, 47906204090367, -STORE, 47906204078080, 47906204082175, -ERASE, 47906204078080, 47906204078080, -STORE, 47906204078080, 47906204090367, -ERASE, 47906204078080, 47906204078080, -STORE, 47906204078080, 47906204082175, -STORE, 47906204082176, 47906204090367, -ERASE, 47906204082176, 47906204082176, -STORE, 47906204082176, 47906204090367, -STORE, 47906204090368, 47906204127231, -ERASE, 47906204090368, 47906204090368, -STORE, 47906204090368, 47906204098559, -STORE, 47906204098560, 47906204127231, -STORE, 47906204114944, 47906204127231, -STORE, 47906204098560, 47906204114943, -ERASE, 47906204098560, 47906204098560, -STORE, 47906204098560, 47906204114943, -STORE, 47906204119040, 47906204127231, -STORE, 47906204114944, 47906204119039, -ERASE, 47906204114944, 47906204114944, -STORE, 47906204114944, 47906204127231, -ERASE, 47906204114944, 47906204114944, -STORE, 47906204114944, 47906204119039, -STORE, 47906204119040, 47906204127231, -ERASE, 47906204119040, 47906204119040, -STORE, 47906204119040, 47906204127231, -STORE, 47906204127232, 47906204602367, -ERASE, 47906204127232, 47906204127232, -STORE, 47906204127232, 47906204135423, -STORE, 47906204135424, 47906204602367, -STORE, 47906204471296, 47906204602367, -STORE, 47906204135424, 47906204471295, -ERASE, 47906204135424, 47906204135424, -STORE, 47906204135424, 47906204471295, -STORE, 47906204594176, 47906204602367, -STORE, 47906204471296, 47906204594175, -ERASE, 47906204471296, 47906204471296, -STORE, 47906204471296, 47906204602367, -ERASE, 47906204471296, 47906204471296, -STORE, 47906204471296, 47906204594175, -STORE, 47906204594176, 47906204602367, -ERASE, 47906204594176, 47906204594176, -STORE, 47906204594176, 47906204602367, -STORE, 47906204602368, 47906204610559, -STORE, 47906204610560, 47906204631039, -ERASE, 47906204610560, 47906204610560, -STORE, 47906204610560, 47906204614655, -STORE, 47906204614656, 47906204631039, -STORE, 47906204618752, 47906204631039, -STORE, 47906204614656, 47906204618751, -ERASE, 47906204614656, 47906204614656, -STORE, 47906204614656, 47906204618751, -STORE, 47906204622848, 47906204631039, -STORE, 47906204618752, 47906204622847, -ERASE, 47906204618752, 47906204618752, -STORE, 47906204618752, 47906204631039, -ERASE, 47906204618752, 47906204618752, -STORE, 47906204618752, 47906204622847, -STORE, 47906204622848, 47906204631039, -ERASE, 47906204622848, 47906204622848, -STORE, 47906204622848, 47906204631039, -STORE, 47906204631040, 47906204639231, -ERASE, 47906197295104, 47906197295104, -STORE, 47906197295104, 47906197311487, -STORE, 47906197311488, 47906197319679, -ERASE, 47906204622848, 47906204622848, -STORE, 47906204622848, 47906204626943, -STORE, 47906204626944, 47906204631039, -ERASE, 47906200211456, 47906200211456, -STORE, 47906200211456, 47906200215551, -STORE, 47906200215552, 47906200219647, -ERASE, 47906204594176, 47906204594176, -STORE, 47906204594176, 47906204598271, -STORE, 47906204598272, 47906204602367, -ERASE, 47906204119040, 47906204119040, -STORE, 47906204119040, 47906204123135, -STORE, 47906204123136, 47906204127231, -ERASE, 47906204082176, 47906204082176, -STORE, 47906204082176, 47906204086271, -STORE, 47906204086272, 47906204090367, -ERASE, 47906203836416, 47906203836416, -STORE, 47906203836416, 47906204033023, -STORE, 47906204033024, 47906204041215, -ERASE, 47906200952832, 47906200952832, -STORE, 47906200952832, 47906200989695, -STORE, 47906200989696, 47906201006079, -ERASE, 47906200399872, 47906200399872, -STORE, 47906200399872, 47906200403967, -STORE, 47906200403968, 47906200408063, -ERASE, 47906200084480, 47906200084480, -STORE, 47906200084480, 47906200088575, -STORE, 47906200088576, 47906200092671, -ERASE, 47906197815296, 47906197815296, -STORE, 47906197815296, 47906197835775, -STORE, 47906197835776, 47906197839871, -ERASE, 47906197483520, 47906197483520, -STORE, 47906197483520, 47906197487615, -STORE, 47906197487616, 47906197491711, -ERASE, 47906197438464, 47906197438464, -STORE, 47906197438464, 47906197442559, -STORE, 47906197442560, 47906197446655, -ERASE, 94641232658432, 94641232658432, -STORE, 94641232658432, 94641232781311, -STORE, 94641232781312, 94641232785407, -ERASE, 139726599675904, 139726599675904, -STORE, 139726599675904, 139726599679999, -STORE, 139726599680000, 139726599684095, -ERASE, 47906195480576, 47906195480576, -STORE, 94641242615808, 94641242750975, - }; - unsigned long set11[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140732658499584, 140737488351231, -ERASE, 140732658499584, 140732658499584, -STORE, 140732658499584, 140732658503679, -STORE, 94029856579584, 94029856751615, -ERASE, 94029856579584, 94029856579584, -STORE, 94029856579584, 94029856595967, -STORE, 94029856595968, 94029856751615, -ERASE, 94029856595968, 94029856595968, -STORE, 94029856595968, 94029856698367, -STORE, 94029856698368, 94029856739327, -STORE, 94029856739328, 94029856751615, -STORE, 140014592573440, 140014592745471, -ERASE, 140014592573440, 140014592573440, -STORE, 140014592573440, 140014592577535, -STORE, 140014592577536, 140014592745471, -ERASE, 140014592577536, 140014592577536, -STORE, 140014592577536, 140014592700415, -STORE, 140014592700416, 140014592733183, -STORE, 140014592733184, 140014592741375, -STORE, 140014592741376, 140014592745471, -STORE, 140732658565120, 140732658569215, -STORE, 140732658552832, 140732658565119, - }; - - unsigned long set12[] = { /* contains 12 values. */ -STORE, 140737488347136, 140737488351231, -STORE, 140732658499584, 140737488351231, -ERASE, 140732658499584, 140732658499584, -STORE, 140732658499584, 140732658503679, -STORE, 94029856579584, 94029856751615, -ERASE, 94029856579584, 94029856579584, -STORE, 94029856579584, 94029856595967, -STORE, 94029856595968, 94029856751615, -ERASE, 94029856595968, 94029856595968, -STORE, 94029856595968, 94029856698367, -STORE, 94029856698368, 94029856739327, -STORE, 94029856739328, 94029856751615, -STORE, 140014592573440, 140014592745471, -ERASE, 140014592573440, 140014592573440, -STORE, 140014592573440, 140014592577535, -STORE, 140014592577536, 140014592745471, -ERASE, 140014592577536, 140014592577536, -STORE, 140014592577536, 140014592700415, -STORE, 140014592700416, 140014592733183, -STORE, 140014592733184, 140014592741375, -STORE, 140014592741376, 140014592745471, -STORE, 140732658565120, 140732658569215, -STORE, 140732658552832, 140732658565119, -STORE, 140014592741375, 140014592741375, /* contrived */ -STORE, 140014592733184, 140014592741376, /* creates first entry retry. */ - }; - unsigned long set13[] = { -STORE, 140373516247040, 140373516251135,/*: ffffa2e7b0e10d80 */ -STORE, 140373516251136, 140373516255231,/*: ffffa2e7b1195d80 */ -STORE, 140373516255232, 140373516443647,/*: ffffa2e7b0e109c0 */ -STORE, 140373516443648, 140373516587007,/*: ffffa2e7b05fecc0 */ -STORE, 140373516963840, 140373518647295,/*: ffffa2e7bfbdcc00 */ -STORE, 140373518647296, 140373518663679,/*: ffffa2e7bf5d59c0 */ -STORE, 140373518663680, 140373518684159,/*: deleted (257) */ -STORE, 140373518680064, 140373518684159,/*: ffffa2e7b0e1cb40 */ -STORE, 140373518684160, 140373518688254,/*: ffffa2e7b05fec00 */ -STORE, 140373518688256, 140373518692351,/*: ffffa2e7bfbdcd80 */ -STORE, 140373518692352, 140373518696447,/*: ffffa2e7b0749e40 */ - }; - unsigned long set14[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140731667996672, 140737488351231, -SNULL, 140731668000767, 140737488351231, -STORE, 140731667996672, 140731668000767, -STORE, 140731667865600, 140731668000767, -STORE, 94077521272832, 94077521313791, -SNULL, 94077521301503, 94077521313791, -STORE, 94077521272832, 94077521301503, -STORE, 94077521301504, 94077521313791, -ERASE, 94077521301504, 94077521313791, -STORE, 94077521305600, 94077521313791, -STORE, 139826134630400, 139826136883199, -SNULL, 139826134773759, 139826136883199, -STORE, 139826134630400, 139826134773759, -STORE, 139826134773760, 139826136883199, -ERASE, 139826134773760, 139826136883199, -STORE, 139826136870912, 139826136879103, -STORE, 139826136879104, 139826136883199, -STORE, 140731668013056, 140731668017151, -STORE, 140731668000768, 140731668013055, -STORE, 139826136862720, 139826136870911, -STORE, 139826132406272, 139826134630399, -SNULL, 139826134056959, 139826134630399, -STORE, 139826132406272, 139826134056959, -STORE, 139826134056960, 139826134630399, -SNULL, 139826134056960, 139826134626303, -STORE, 139826134626304, 139826134630399, -STORE, 139826134056960, 139826134626303, -ERASE, 139826134056960, 139826134626303, -STORE, 139826134056960, 139826134626303, -ERASE, 139826134626304, 139826134630399, -STORE, 139826134626304, 139826134630399, -STORE, 139826136842240, 139826136862719, -STORE, 139826130022400, 139826132406271, -SNULL, 139826130022400, 139826130288639, -STORE, 139826130288640, 139826132406271, -STORE, 139826130022400, 139826130288639, -SNULL, 139826132381695, 139826132406271, -STORE, 139826130288640, 139826132381695, -STORE, 139826132381696, 139826132406271, -SNULL, 139826132381696, 139826132402175, -STORE, 139826132402176, 139826132406271, -STORE, 139826132381696, 139826132402175, -ERASE, 139826132381696, 139826132402175, -STORE, 139826132381696, 139826132402175, -ERASE, 139826132402176, 139826132406271, -STORE, 139826132402176, 139826132406271, -STORE, 139826127806464, 139826130022399, -SNULL, 139826127806464, 139826127904767, -STORE, 139826127904768, 139826130022399, -STORE, 139826127806464, 139826127904767, -SNULL, 139826129997823, 139826130022399, -STORE, 139826127904768, 139826129997823, -STORE, 139826129997824, 139826130022399, -SNULL, 139826129997824, 139826130006015, -STORE, 139826130006016, 139826130022399, -STORE, 139826129997824, 139826130006015, -ERASE, 139826129997824, 139826130006015, -STORE, 139826129997824, 139826130006015, -ERASE, 139826130006016, 139826130022399, -STORE, 139826130006016, 139826130022399, -STORE, 139826124009472, 139826127806463, -SNULL, 139826124009472, 139826125668351, -STORE, 139826125668352, 139826127806463, -STORE, 139826124009472, 139826125668351, -SNULL, 139826127765503, 139826127806463, -STORE, 139826125668352, 139826127765503, -STORE, 139826127765504, 139826127806463, -SNULL, 139826127765504, 139826127790079, -STORE, 139826127790080, 139826127806463, -STORE, 139826127765504, 139826127790079, -ERASE, 139826127765504, 139826127790079, -STORE, 139826127765504, 139826127790079, -ERASE, 139826127790080, 139826127806463, -STORE, 139826127790080, 139826127806463, -STORE, 139826121748480, 139826124009471, -SNULL, 139826121748480, 139826121900031, -STORE, 139826121900032, 139826124009471, -STORE, 139826121748480, 139826121900031, -SNULL, 139826123993087, 139826124009471, -STORE, 139826121900032, 139826123993087, -STORE, 139826123993088, 139826124009471, -SNULL, 139826123993088, 139826124001279, -STORE, 139826124001280, 139826124009471, -STORE, 139826123993088, 139826124001279, -ERASE, 139826123993088, 139826124001279, -STORE, 139826123993088, 139826124001279, -ERASE, 139826124001280, 139826124009471, -STORE, 139826124001280, 139826124009471, -STORE, 139826119626752, 139826121748479, -SNULL, 139826119626752, 139826119643135, -STORE, 139826119643136, 139826121748479, -STORE, 139826119626752, 139826119643135, -SNULL, 139826121740287, 139826121748479, -STORE, 139826119643136, 139826121740287, -STORE, 139826121740288, 139826121748479, -ERASE, 139826121740288, 139826121748479, -STORE, 139826121740288, 139826121748479, -STORE, 139826136834048, 139826136842239, -STORE, 139826117496832, 139826119626751, -SNULL, 139826117496832, 139826117525503, -STORE, 139826117525504, 139826119626751, -STORE, 139826117496832, 139826117525503, -SNULL, 139826119618559, 139826119626751, -STORE, 139826117525504, 139826119618559, -STORE, 139826119618560, 139826119626751, -ERASE, 139826119618560, 139826119626751, -STORE, 139826119618560, 139826119626751, -STORE, 139826115244032, 139826117496831, -SNULL, 139826115244032, 139826115395583, -STORE, 139826115395584, 139826117496831, -STORE, 139826115244032, 139826115395583, -SNULL, 139826117488639, 139826117496831, -STORE, 139826115395584, 139826117488639, -STORE, 139826117488640, 139826117496831, -ERASE, 139826117488640, 139826117496831, -STORE, 139826117488640, 139826117496831, -STORE, 139826113073152, 139826115244031, -SNULL, 139826113073152, 139826113142783, -STORE, 139826113142784, 139826115244031, -STORE, 139826113073152, 139826113142783, -SNULL, 139826115235839, 139826115244031, -STORE, 139826113142784, 139826115235839, -STORE, 139826115235840, 139826115244031, -ERASE, 139826115235840, 139826115244031, -STORE, 139826115235840, 139826115244031, -STORE, 139826109861888, 139826113073151, -SNULL, 139826109861888, 139826110939135, -STORE, 139826110939136, 139826113073151, -STORE, 139826109861888, 139826110939135, -SNULL, 139826113036287, 139826113073151, -STORE, 139826110939136, 139826113036287, -STORE, 139826113036288, 139826113073151, -ERASE, 139826113036288, 139826113073151, -STORE, 139826113036288, 139826113073151, -STORE, 139826107727872, 139826109861887, -SNULL, 139826107727872, 139826107756543, -STORE, 139826107756544, 139826109861887, -STORE, 139826107727872, 139826107756543, -SNULL, 139826109853695, 139826109861887, -STORE, 139826107756544, 139826109853695, -STORE, 139826109853696, 139826109861887, -ERASE, 139826109853696, 139826109861887, -STORE, 139826109853696, 139826109861887, -STORE, 139826105417728, 139826107727871, -SNULL, 139826105417728, 139826105622527, -STORE, 139826105622528, 139826107727871, -STORE, 139826105417728, 139826105622527, -SNULL, 139826107719679, 139826107727871, -STORE, 139826105622528, 139826107719679, -STORE, 139826107719680, 139826107727871, -ERASE, 139826107719680, 139826107727871, -STORE, 139826107719680, 139826107727871, -STORE, 139826136825856, 139826136842239, -STORE, 139826103033856, 139826105417727, -SNULL, 139826103033856, 139826103226367, -STORE, 139826103226368, 139826105417727, -STORE, 139826103033856, 139826103226367, -SNULL, 139826105319423, 139826105417727, -STORE, 139826103226368, 139826105319423, -STORE, 139826105319424, 139826105417727, -ERASE, 139826105319424, 139826105417727, -STORE, 139826105319424, 139826105417727, -STORE, 139826100916224, 139826103033855, -SNULL, 139826100916224, 139826100932607, -STORE, 139826100932608, 139826103033855, -STORE, 139826100916224, 139826100932607, -SNULL, 139826103025663, 139826103033855, -STORE, 139826100932608, 139826103025663, -STORE, 139826103025664, 139826103033855, -ERASE, 139826103025664, 139826103033855, -STORE, 139826103025664, 139826103033855, -STORE, 139826098348032, 139826100916223, -SNULL, 139826098348032, 139826098814975, -STORE, 139826098814976, 139826100916223, -STORE, 139826098348032, 139826098814975, -SNULL, 139826100908031, 139826100916223, -STORE, 139826098814976, 139826100908031, -STORE, 139826100908032, 139826100916223, -ERASE, 139826100908032, 139826100916223, -STORE, 139826100908032, 139826100916223, -STORE, 139826096234496, 139826098348031, -SNULL, 139826096234496, 139826096246783, -STORE, 139826096246784, 139826098348031, -STORE, 139826096234496, 139826096246783, -SNULL, 139826098339839, 139826098348031, -STORE, 139826096246784, 139826098339839, -STORE, 139826098339840, 139826098348031, -ERASE, 139826098339840, 139826098348031, -STORE, 139826098339840, 139826098348031, -STORE, 139826094055424, 139826096234495, -SNULL, 139826094055424, 139826094133247, -STORE, 139826094133248, 139826096234495, -STORE, 139826094055424, 139826094133247, -SNULL, 139826096226303, 139826096234495, -STORE, 139826094133248, 139826096226303, -STORE, 139826096226304, 139826096234495, -ERASE, 139826096226304, 139826096234495, -STORE, 139826096226304, 139826096234495, -STORE, 139826136817664, 139826136842239, -STORE, 139826091937792, 139826094055423, -SNULL, 139826091937792, 139826091954175, -STORE, 139826091954176, 139826094055423, -STORE, 139826091937792, 139826091954175, -SNULL, 139826094047231, 139826094055423, -STORE, 139826091954176, 139826094047231, -STORE, 139826094047232, 139826094055423, -ERASE, 139826094047232, 139826094055423, -STORE, 139826094047232, 139826094055423, -STORE, 139826136809472, 139826136842239, -SNULL, 139826127781887, 139826127790079, -STORE, 139826127765504, 139826127781887, -STORE, 139826127781888, 139826127790079, -SNULL, 139826094051327, 139826094055423, -STORE, 139826094047232, 139826094051327, -STORE, 139826094051328, 139826094055423, -SNULL, 139826096230399, 139826096234495, -STORE, 139826096226304, 139826096230399, -STORE, 139826096230400, 139826096234495, -SNULL, 139826098343935, 139826098348031, -STORE, 139826098339840, 139826098343935, -STORE, 139826098343936, 139826098348031, -SNULL, 139826130001919, 139826130006015, -STORE, 139826129997824, 139826130001919, -STORE, 139826130001920, 139826130006015, -SNULL, 139826100912127, 139826100916223, -STORE, 139826100908032, 139826100912127, -STORE, 139826100912128, 139826100916223, -SNULL, 139826103029759, 139826103033855, -STORE, 139826103025664, 139826103029759, -STORE, 139826103029760, 139826103033855, -SNULL, 139826105413631, 139826105417727, -STORE, 139826105319424, 139826105413631, -STORE, 139826105413632, 139826105417727, -SNULL, 139826107723775, 139826107727871, -STORE, 139826107719680, 139826107723775, -STORE, 139826107723776, 139826107727871, -SNULL, 139826109857791, 139826109861887, -STORE, 139826109853696, 139826109857791, -STORE, 139826109857792, 139826109861887, -SNULL, 139826113044479, 139826113073151, -STORE, 139826113036288, 139826113044479, -STORE, 139826113044480, 139826113073151, -SNULL, 139826115239935, 139826115244031, -STORE, 139826115235840, 139826115239935, -STORE, 139826115239936, 139826115244031, -SNULL, 139826117492735, 139826117496831, -STORE, 139826117488640, 139826117492735, -STORE, 139826117492736, 139826117496831, -SNULL, 139826119622655, 139826119626751, -STORE, 139826119618560, 139826119622655, -STORE, 139826119622656, 139826119626751, -SNULL, 139826121744383, 139826121748479, -STORE, 139826121740288, 139826121744383, -STORE, 139826121744384, 139826121748479, -SNULL, 139826123997183, 139826124001279, -STORE, 139826123993088, 139826123997183, -STORE, 139826123997184, 139826124001279, -SNULL, 139826132398079, 139826132402175, -STORE, 139826132381696, 139826132398079, -STORE, 139826132398080, 139826132402175, -SNULL, 139826134622207, 139826134626303, -STORE, 139826134056960, 139826134622207, -STORE, 139826134622208, 139826134626303, -SNULL, 94077521309695, 94077521313791, -STORE, 94077521305600, 94077521309695, -STORE, 94077521309696, 94077521313791, -SNULL, 139826136875007, 139826136879103, -STORE, 139826136870912, 139826136875007, -STORE, 139826136875008, 139826136879103, -ERASE, 139826136842240, 139826136862719, -STORE, 94077554049024, 94077554184191, -STORE, 139826136543232, 139826136842239, -STORE, 139826136276992, 139826136842239, -STORE, 139826136010752, 139826136842239, -STORE, 139826135744512, 139826136842239, -SNULL, 139826136543231, 139826136842239, -STORE, 139826135744512, 139826136543231, -STORE, 139826136543232, 139826136842239, -SNULL, 139826136543232, 139826136809471, -STORE, 139826136809472, 139826136842239, -STORE, 139826136543232, 139826136809471, - }; - unsigned long set15[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140722061451264, 140737488351231, -SNULL, 140722061455359, 140737488351231, -STORE, 140722061451264, 140722061455359, -STORE, 140722061320192, 140722061455359, -STORE, 94728600248320, 94728600289279, -SNULL, 94728600276991, 94728600289279, -STORE, 94728600248320, 94728600276991, -STORE, 94728600276992, 94728600289279, -ERASE, 94728600276992, 94728600289279, -STORE, 94728600281088, 94728600289279, -STORE, 139906806779904, 139906809032703, -SNULL, 139906806923263, 139906809032703, -STORE, 139906806779904, 139906806923263, -STORE, 139906806923264, 139906809032703, -ERASE, 139906806923264, 139906809032703, -STORE, 139906809020416, 139906809028607, -STORE, 139906809028608, 139906809032703, -STORE, 140722061692928, 140722061697023, -STORE, 140722061680640, 140722061692927, -STORE, 139906809012224, 139906809020415, -STORE, 139906804555776, 139906806779903, -SNULL, 139906806206463, 139906806779903, -STORE, 139906804555776, 139906806206463, -STORE, 139906806206464, 139906806779903, -SNULL, 139906806206464, 139906806775807, -STORE, 139906806775808, 139906806779903, -STORE, 139906806206464, 139906806775807, -ERASE, 139906806206464, 139906806775807, -STORE, 139906806206464, 139906806775807, -ERASE, 139906806775808, 139906806779903, -STORE, 139906806775808, 139906806779903, -STORE, 139906808991744, 139906809012223, -STORE, 139906802171904, 139906804555775, -SNULL, 139906802171904, 139906802438143, -STORE, 139906802438144, 139906804555775, -STORE, 139906802171904, 139906802438143, -SNULL, 139906804531199, 139906804555775, -STORE, 139906802438144, 139906804531199, -STORE, 139906804531200, 139906804555775, -SNULL, 139906804531200, 139906804551679, -STORE, 139906804551680, 139906804555775, -STORE, 139906804531200, 139906804551679, -ERASE, 139906804531200, 139906804551679, -STORE, 139906804531200, 139906804551679, -ERASE, 139906804551680, 139906804555775, -STORE, 139906804551680, 139906804555775, -STORE, 139906799955968, 139906802171903, -SNULL, 139906799955968, 139906800054271, -STORE, 139906800054272, 139906802171903, -STORE, 139906799955968, 139906800054271, -SNULL, 139906802147327, 139906802171903, -STORE, 139906800054272, 139906802147327, -STORE, 139906802147328, 139906802171903, -SNULL, 139906802147328, 139906802155519, -STORE, 139906802155520, 139906802171903, -STORE, 139906802147328, 139906802155519, -ERASE, 139906802147328, 139906802155519, -STORE, 139906802147328, 139906802155519, -ERASE, 139906802155520, 139906802171903, -STORE, 139906802155520, 139906802171903, -STORE, 139906796158976, 139906799955967, -SNULL, 139906796158976, 139906797817855, -STORE, 139906797817856, 139906799955967, -STORE, 139906796158976, 139906797817855, -SNULL, 139906799915007, 139906799955967, -STORE, 139906797817856, 139906799915007, -STORE, 139906799915008, 139906799955967, -SNULL, 139906799915008, 139906799939583, -STORE, 139906799939584, 139906799955967, -STORE, 139906799915008, 139906799939583, -ERASE, 139906799915008, 139906799939583, -STORE, 139906799915008, 139906799939583, -ERASE, 139906799939584, 139906799955967, -STORE, 139906799939584, 139906799955967, -STORE, 139906793897984, 139906796158975, -SNULL, 139906793897984, 139906794049535, -STORE, 139906794049536, 139906796158975, -STORE, 139906793897984, 139906794049535, -SNULL, 139906796142591, 139906796158975, -STORE, 139906794049536, 139906796142591, -STORE, 139906796142592, 139906796158975, -SNULL, 139906796142592, 139906796150783, -STORE, 139906796150784, 139906796158975, -STORE, 139906796142592, 139906796150783, -ERASE, 139906796142592, 139906796150783, -STORE, 139906796142592, 139906796150783, -ERASE, 139906796150784, 139906796158975, -STORE, 139906796150784, 139906796158975, -STORE, 139906791776256, 139906793897983, -SNULL, 139906791776256, 139906791792639, -STORE, 139906791792640, 139906793897983, -STORE, 139906791776256, 139906791792639, -SNULL, 139906793889791, 139906793897983, -STORE, 139906791792640, 139906793889791, -STORE, 139906793889792, 139906793897983, -ERASE, 139906793889792, 139906793897983, -STORE, 139906793889792, 139906793897983, -STORE, 139906808983552, 139906808991743, -STORE, 139906789646336, 139906791776255, -SNULL, 139906789646336, 139906789675007, -STORE, 139906789675008, 139906791776255, -STORE, 139906789646336, 139906789675007, -SNULL, 139906791768063, 139906791776255, -STORE, 139906789675008, 139906791768063, -STORE, 139906791768064, 139906791776255, -ERASE, 139906791768064, 139906791776255, -STORE, 139906791768064, 139906791776255, -STORE, 139906787393536, 139906789646335, -SNULL, 139906787393536, 139906787545087, -STORE, 139906787545088, 139906789646335, -STORE, 139906787393536, 139906787545087, -SNULL, 139906789638143, 139906789646335, -STORE, 139906787545088, 139906789638143, -STORE, 139906789638144, 139906789646335, -ERASE, 139906789638144, 139906789646335, -STORE, 139906789638144, 139906789646335, -STORE, 139906785222656, 139906787393535, -SNULL, 139906785222656, 139906785292287, -STORE, 139906785292288, 139906787393535, -STORE, 139906785222656, 139906785292287, -SNULL, 139906787385343, 139906787393535, -STORE, 139906785292288, 139906787385343, -STORE, 139906787385344, 139906787393535, -ERASE, 139906787385344, 139906787393535, -STORE, 139906787385344, 139906787393535, -STORE, 139906782011392, 139906785222655, -SNULL, 139906782011392, 139906783088639, -STORE, 139906783088640, 139906785222655, -STORE, 139906782011392, 139906783088639, -SNULL, 139906785185791, 139906785222655, -STORE, 139906783088640, 139906785185791, -STORE, 139906785185792, 139906785222655, -ERASE, 139906785185792, 139906785222655, -STORE, 139906785185792, 139906785222655, -STORE, 139906779877376, 139906782011391, -SNULL, 139906779877376, 139906779906047, -STORE, 139906779906048, 139906782011391, -STORE, 139906779877376, 139906779906047, -SNULL, 139906782003199, 139906782011391, -STORE, 139906779906048, 139906782003199, -STORE, 139906782003200, 139906782011391, -ERASE, 139906782003200, 139906782011391, -STORE, 139906782003200, 139906782011391, -STORE, 139906777567232, 139906779877375, -SNULL, 139906777567232, 139906777772031, -STORE, 139906777772032, 139906779877375, -STORE, 139906777567232, 139906777772031, -SNULL, 139906779869183, 139906779877375, -STORE, 139906777772032, 139906779869183, -STORE, 139906779869184, 139906779877375, -ERASE, 139906779869184, 139906779877375, -STORE, 139906779869184, 139906779877375, -STORE, 139906808975360, 139906808991743, -STORE, 139906775183360, 139906777567231, -SNULL, 139906775183360, 139906775375871, -STORE, 139906775375872, 139906777567231, -STORE, 139906775183360, 139906775375871, -SNULL, 139906777468927, 139906777567231, -STORE, 139906775375872, 139906777468927, -STORE, 139906777468928, 139906777567231, -ERASE, 139906777468928, 139906777567231, -STORE, 139906777468928, 139906777567231, -STORE, 139906773065728, 139906775183359, -SNULL, 139906773065728, 139906773082111, -STORE, 139906773082112, 139906775183359, -STORE, 139906773065728, 139906773082111, -SNULL, 139906775175167, 139906775183359, -STORE, 139906773082112, 139906775175167, -STORE, 139906775175168, 139906775183359, -ERASE, 139906775175168, 139906775183359, -STORE, 139906775175168, 139906775183359, -STORE, 139906770497536, 139906773065727, -SNULL, 139906770497536, 139906770964479, -STORE, 139906770964480, 139906773065727, -STORE, 139906770497536, 139906770964479, -SNULL, 139906773057535, 139906773065727, -STORE, 139906770964480, 139906773057535, -STORE, 139906773057536, 139906773065727, -ERASE, 139906773057536, 139906773065727, -STORE, 139906773057536, 139906773065727, -STORE, 139906768384000, 139906770497535, -SNULL, 139906768384000, 139906768396287, -STORE, 139906768396288, 139906770497535, -STORE, 139906768384000, 139906768396287, -SNULL, 139906770489343, 139906770497535, -STORE, 139906768396288, 139906770489343, -STORE, 139906770489344, 139906770497535, -ERASE, 139906770489344, 139906770497535, -STORE, 139906770489344, 139906770497535, -STORE, 139906766204928, 139906768383999, -SNULL, 139906766204928, 139906766282751, -STORE, 139906766282752, 139906768383999, -STORE, 139906766204928, 139906766282751, -SNULL, 139906768375807, 139906768383999, -STORE, 139906766282752, 139906768375807, -STORE, 139906768375808, 139906768383999, -ERASE, 139906768375808, 139906768383999, -STORE, 139906768375808, 139906768383999, -STORE, 139906808967168, 139906808991743, -STORE, 139906764087296, 139906766204927, -SNULL, 139906764087296, 139906764103679, -STORE, 139906764103680, 139906766204927, -STORE, 139906764087296, 139906764103679, -SNULL, 139906766196735, 139906766204927, -STORE, 139906764103680, 139906766196735, -STORE, 139906766196736, 139906766204927, -ERASE, 139906766196736, 139906766204927, -STORE, 139906766196736, 139906766204927, -STORE, 139906808958976, 139906808991743, -SNULL, 139906799931391, 139906799939583, -STORE, 139906799915008, 139906799931391, -STORE, 139906799931392, 139906799939583, -SNULL, 139906766200831, 139906766204927, -STORE, 139906766196736, 139906766200831, -STORE, 139906766200832, 139906766204927, -SNULL, 139906768379903, 139906768383999, -STORE, 139906768375808, 139906768379903, -STORE, 139906768379904, 139906768383999, -SNULL, 139906770493439, 139906770497535, -STORE, 139906770489344, 139906770493439, -STORE, 139906770493440, 139906770497535, -SNULL, 139906802151423, 139906802155519, -STORE, 139906802147328, 139906802151423, -STORE, 139906802151424, 139906802155519, -SNULL, 139906773061631, 139906773065727, -STORE, 139906773057536, 139906773061631, -STORE, 139906773061632, 139906773065727, -SNULL, 139906775179263, 139906775183359, -STORE, 139906775175168, 139906775179263, -STORE, 139906775179264, 139906775183359, -SNULL, 139906777563135, 139906777567231, -STORE, 139906777468928, 139906777563135, -STORE, 139906777563136, 139906777567231, -SNULL, 139906779873279, 139906779877375, -STORE, 139906779869184, 139906779873279, -STORE, 139906779873280, 139906779877375, -SNULL, 139906782007295, 139906782011391, -STORE, 139906782003200, 139906782007295, -STORE, 139906782007296, 139906782011391, -SNULL, 139906785193983, 139906785222655, -STORE, 139906785185792, 139906785193983, -STORE, 139906785193984, 139906785222655, -SNULL, 139906787389439, 139906787393535, -STORE, 139906787385344, 139906787389439, -STORE, 139906787389440, 139906787393535, -SNULL, 139906789642239, 139906789646335, -STORE, 139906789638144, 139906789642239, -STORE, 139906789642240, 139906789646335, -SNULL, 139906791772159, 139906791776255, -STORE, 139906791768064, 139906791772159, -STORE, 139906791772160, 139906791776255, -SNULL, 139906793893887, 139906793897983, -STORE, 139906793889792, 139906793893887, -STORE, 139906793893888, 139906793897983, -SNULL, 139906796146687, 139906796150783, -STORE, 139906796142592, 139906796146687, -STORE, 139906796146688, 139906796150783, -SNULL, 139906804547583, 139906804551679, -STORE, 139906804531200, 139906804547583, -STORE, 139906804547584, 139906804551679, -SNULL, 139906806771711, 139906806775807, -STORE, 139906806206464, 139906806771711, -STORE, 139906806771712, 139906806775807, -SNULL, 94728600285183, 94728600289279, -STORE, 94728600281088, 94728600285183, -STORE, 94728600285184, 94728600289279, -SNULL, 139906809024511, 139906809028607, -STORE, 139906809020416, 139906809024511, -STORE, 139906809024512, 139906809028607, -ERASE, 139906808991744, 139906809012223, -STORE, 94728620138496, 94728620273663, -STORE, 139906808692736, 139906808991743, -STORE, 139906808426496, 139906808991743, -STORE, 139906808160256, 139906808991743, -STORE, 139906807894016, 139906808991743, -SNULL, 139906808692735, 139906808991743, -STORE, 139906807894016, 139906808692735, -STORE, 139906808692736, 139906808991743, -SNULL, 139906808692736, 139906808958975, -STORE, 139906808958976, 139906808991743, -STORE, 139906808692736, 139906808958975, - }; - - unsigned long set16[] = { -STORE, 94174808662016, 94174809321471, -STORE, 94174811414528, 94174811426815, -STORE, 94174811426816, 94174811430911, -STORE, 94174811430912, 94174811443199, -STORE, 94174841700352, 94174841835519, -STORE, 140173257838592, 140173259497471, -STORE, 140173259497472, 140173261594623, -STORE, 140173261594624, 140173261611007, -STORE, 140173261611008, 140173261619199, -STORE, 140173261619200, 140173261635583, -STORE, 140173261635584, 140173261778943, -STORE, 140173263863808, 140173263871999, -STORE, 140173263876096, 140173263880191, -STORE, 140173263880192, 140173263884287, -STORE, 140173263884288, 140173263888383, -STORE, 140729801007104, 140729801142271, -STORE, 140729801617408, 140729801629695, -STORE, 140729801629696, 140729801633791, -STORE, 140737488347136, 140737488351231, -STORE, 140728166858752, 140737488351231, -SNULL, 140728166862847, 140737488351231, -STORE, 140728166858752, 140728166862847, -STORE, 140728166727680, 140728166862847, -STORE, 93912949866496, 93912950337535, -SNULL, 93912950288383, 93912950337535, -STORE, 93912949866496, 93912950288383, -STORE, 93912950288384, 93912950337535, -ERASE, 93912950288384, 93912950337535, -STORE, 93912950292480, 93912950337535, -STORE, 139921863385088, 139921865637887, -SNULL, 139921863528447, 139921865637887, -STORE, 139921863385088, 139921863528447, -STORE, 139921863528448, 139921865637887, -ERASE, 139921863528448, 139921865637887, -STORE, 139921865625600, 139921865633791, -STORE, 139921865633792, 139921865637887, -STORE, 140728167899136, 140728167903231, -STORE, 140728167886848, 140728167899135, -STORE, 139921865601024, 139921865625599, -STORE, 139921865592832, 139921865601023, -STORE, 139921861251072, 139921863385087, -SNULL, 139921861251072, 139921861279743, -STORE, 139921861279744, 139921863385087, -STORE, 139921861251072, 139921861279743, -SNULL, 139921863376895, 139921863385087, -STORE, 139921861279744, 139921863376895, -STORE, 139921863376896, 139921863385087, -ERASE, 139921863376896, 139921863385087, -STORE, 139921863376896, 139921863385087, -STORE, 139921858867200, 139921861251071, -SNULL, 139921858867200, 139921859133439, -STORE, 139921859133440, 139921861251071, -STORE, 139921858867200, 139921859133439, -SNULL, 139921861226495, 139921861251071, -STORE, 139921859133440, 139921861226495, -STORE, 139921861226496, 139921861251071, -SNULL, 139921861226496, 139921861246975, -STORE, 139921861246976, 139921861251071, -STORE, 139921861226496, 139921861246975, -ERASE, 139921861226496, 139921861246975, -STORE, 139921861226496, 139921861246975, -ERASE, 139921861246976, 139921861251071, -STORE, 139921861246976, 139921861251071, -STORE, 139921856675840, 139921858867199, -SNULL, 139921856675840, 139921856765951, -STORE, 139921856765952, 139921858867199, -STORE, 139921856675840, 139921856765951, -SNULL, 139921858859007, 139921858867199, -STORE, 139921856765952, 139921858859007, -STORE, 139921858859008, 139921858867199, -ERASE, 139921858859008, 139921858867199, -STORE, 139921858859008, 139921858867199, -STORE, 139921854414848, 139921856675839, -SNULL, 139921854414848, 139921854566399, -STORE, 139921854566400, 139921856675839, -STORE, 139921854414848, 139921854566399, -SNULL, 139921856659455, 139921856675839, -STORE, 139921854566400, 139921856659455, -STORE, 139921856659456, 139921856675839, -SNULL, 139921856659456, 139921856667647, -STORE, 139921856667648, 139921856675839, -STORE, 139921856659456, 139921856667647, -ERASE, 139921856659456, 139921856667647, -STORE, 139921856659456, 139921856667647, -ERASE, 139921856667648, 139921856675839, -STORE, 139921856667648, 139921856675839, -STORE, 139921852284928, 139921854414847, -SNULL, 139921852284928, 139921852313599, -STORE, 139921852313600, 139921854414847, -STORE, 139921852284928, 139921852313599, -SNULL, 139921854406655, 139921854414847, -STORE, 139921852313600, 139921854406655, -STORE, 139921854406656, 139921854414847, -ERASE, 139921854406656, 139921854414847, -STORE, 139921854406656, 139921854414847, -STORE, 139921850068992, 139921852284927, -SNULL, 139921850068992, 139921850167295, -STORE, 139921850167296, 139921852284927, -STORE, 139921850068992, 139921850167295, -SNULL, 139921852260351, 139921852284927, -STORE, 139921850167296, 139921852260351, -STORE, 139921852260352, 139921852284927, -SNULL, 139921852260352, 139921852268543, -STORE, 139921852268544, 139921852284927, -STORE, 139921852260352, 139921852268543, -ERASE, 139921852260352, 139921852268543, -STORE, 139921852260352, 139921852268543, -ERASE, 139921852268544, 139921852284927, -STORE, 139921852268544, 139921852284927, -STORE, 139921865584640, 139921865601023, -STORE, 139921846272000, 139921850068991, -SNULL, 139921846272000, 139921847930879, -STORE, 139921847930880, 139921850068991, -STORE, 139921846272000, 139921847930879, -SNULL, 139921850028031, 139921850068991, -STORE, 139921847930880, 139921850028031, -STORE, 139921850028032, 139921850068991, -SNULL, 139921850028032, 139921850052607, -STORE, 139921850052608, 139921850068991, -STORE, 139921850028032, 139921850052607, -ERASE, 139921850028032, 139921850052607, -STORE, 139921850028032, 139921850052607, -ERASE, 139921850052608, 139921850068991, -STORE, 139921850052608, 139921850068991, -STORE, 139921844154368, 139921846271999, -SNULL, 139921844154368, 139921844170751, -STORE, 139921844170752, 139921846271999, -STORE, 139921844154368, 139921844170751, -SNULL, 139921846263807, 139921846271999, -STORE, 139921844170752, 139921846263807, -STORE, 139921846263808, 139921846271999, -ERASE, 139921846263808, 139921846271999, -STORE, 139921846263808, 139921846271999, -STORE, 139921842036736, 139921844154367, -SNULL, 139921842036736, 139921842053119, -STORE, 139921842053120, 139921844154367, -STORE, 139921842036736, 139921842053119, -SNULL, 139921844146175, 139921844154367, -STORE, 139921842053120, 139921844146175, -STORE, 139921844146176, 139921844154367, -ERASE, 139921844146176, 139921844154367, -STORE, 139921844146176, 139921844154367, -STORE, 139921839468544, 139921842036735, -SNULL, 139921839468544, 139921839935487, -STORE, 139921839935488, 139921842036735, -STORE, 139921839468544, 139921839935487, -SNULL, 139921842028543, 139921842036735, -STORE, 139921839935488, 139921842028543, -STORE, 139921842028544, 139921842036735, -ERASE, 139921842028544, 139921842036735, -STORE, 139921842028544, 139921842036735, -STORE, 139921837355008, 139921839468543, -SNULL, 139921837355008, 139921837367295, -STORE, 139921837367296, 139921839468543, -STORE, 139921837355008, 139921837367295, -SNULL, 139921839460351, 139921839468543, -STORE, 139921837367296, 139921839460351, -STORE, 139921839460352, 139921839468543, -ERASE, 139921839460352, 139921839468543, -STORE, 139921839460352, 139921839468543, -STORE, 139921865576448, 139921865601023, -STORE, 139921865564160, 139921865601023, -SNULL, 139921850044415, 139921850052607, -STORE, 139921850028032, 139921850044415, -STORE, 139921850044416, 139921850052607, -SNULL, 139921839464447, 139921839468543, -STORE, 139921839460352, 139921839464447, -STORE, 139921839464448, 139921839468543, -SNULL, 139921852264447, 139921852268543, -STORE, 139921852260352, 139921852264447, -STORE, 139921852264448, 139921852268543, -SNULL, 139921842032639, 139921842036735, -STORE, 139921842028544, 139921842032639, -STORE, 139921842032640, 139921842036735, -SNULL, 139921844150271, 139921844154367, -STORE, 139921844146176, 139921844150271, -STORE, 139921844150272, 139921844154367, -SNULL, 139921846267903, 139921846271999, -STORE, 139921846263808, 139921846267903, -STORE, 139921846267904, 139921846271999, -SNULL, 139921854410751, 139921854414847, -STORE, 139921854406656, 139921854410751, -STORE, 139921854410752, 139921854414847, -SNULL, 139921856663551, 139921856667647, -STORE, 139921856659456, 139921856663551, -STORE, 139921856663552, 139921856667647, -SNULL, 139921858863103, 139921858867199, -STORE, 139921858859008, 139921858863103, -STORE, 139921858863104, 139921858867199, -SNULL, 139921861242879, 139921861246975, -STORE, 139921861226496, 139921861242879, -STORE, 139921861242880, 139921861246975, -SNULL, 139921863380991, 139921863385087, -STORE, 139921863376896, 139921863380991, -STORE, 139921863380992, 139921863385087, -SNULL, 93912950333439, 93912950337535, -STORE, 93912950292480, 93912950333439, -STORE, 93912950333440, 93912950337535, -SNULL, 139921865629695, 139921865633791, -STORE, 139921865625600, 139921865629695, -STORE, 139921865629696, 139921865633791, -ERASE, 139921865601024, 139921865625599, -STORE, 93912968110080, 93912968245247, -STORE, 139921828913152, 139921837355007, -STORE, 139921865621504, 139921865625599, -STORE, 139921865617408, 139921865621503, -STORE, 139921865613312, 139921865617407, -STORE, 139921865547776, 139921865564159, - }; - - unsigned long set17[] = { -STORE, 94397057224704, 94397057646591, -STORE, 94397057650688, 94397057691647, -STORE, 94397057691648, 94397057695743, -STORE, 94397075271680, 94397075406847, -STORE, 139953169051648, 139953169063935, -STORE, 139953169063936, 139953171156991, -STORE, 139953171156992, 139953171161087, -STORE, 139953171161088, 139953171165183, -STORE, 139953171165184, 139953171632127, -STORE, 139953171632128, 139953173725183, -STORE, 139953173725184, 139953173729279, -STORE, 139953173729280, 139953173733375, -STORE, 139953173733376, 139953173749759, -STORE, 139953173749760, 139953175842815, -STORE, 139953175842816, 139953175846911, -STORE, 139953175846912, 139953175851007, -STORE, 139953175851008, 139953175867391, -STORE, 139953175867392, 139953177960447, -STORE, 139953177960448, 139953177964543, -STORE, 139953177964544, 139953177968639, -STORE, 139953177968640, 139953179627519, -STORE, 139953179627520, 139953181724671, -STORE, 139953181724672, 139953181741055, -STORE, 139953181741056, 139953181749247, -STORE, 139953181749248, 139953181765631, -STORE, 139953181765632, 139953181863935, -STORE, 139953181863936, 139953183956991, -STORE, 139953183956992, 139953183961087, -STORE, 139953183961088, 139953183965183, -STORE, 139953183965184, 139953183981567, -STORE, 139953183981568, 139953184010239, -STORE, 139953184010240, 139953186103295, -STORE, 139953186103296, 139953186107391, -STORE, 139953186107392, 139953186111487, -STORE, 139953186111488, 139953186263039, -STORE, 139953186263040, 139953188356095, -STORE, 139953188356096, 139953188360191, -STORE, 139953188360192, 139953188364287, -STORE, 139953188364288, 139953188372479, -STORE, 139953188372480, 139953188462591, -STORE, 139953188462592, 139953190555647, -STORE, 139953190555648, 139953190559743, -STORE, 139953190559744, 139953190563839, -STORE, 139953190563840, 139953190830079, -STORE, 139953190830080, 139953192923135, -STORE, 139953192923136, 139953192939519, -STORE, 139953192939520, 139953192943615, -STORE, 139953192943616, 139953192947711, -STORE, 139953192947712, 139953192976383, -STORE, 139953192976384, 139953195073535, -STORE, 139953195073536, 139953195077631, -STORE, 139953195077632, 139953195081727, -STORE, 139953195081728, 139953195225087, -STORE, 139953197281280, 139953197318143, -STORE, 139953197322240, 139953197326335, -STORE, 139953197326336, 139953197330431, -STORE, 139953197330432, 139953197334527, -STORE, 140720477511680, 140720477646847, -STORE, 140720478302208, 140720478314495, -STORE, 140720478314496, 140720478318591, - }; - unsigned long set18[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140724953673728, 140737488351231, -SNULL, 140724953677823, 140737488351231, -STORE, 140724953673728, 140724953677823, -STORE, 140724953542656, 140724953677823, -STORE, 94675199266816, 94675199311871, -SNULL, 94675199303679, 94675199311871, -STORE, 94675199266816, 94675199303679, -STORE, 94675199303680, 94675199311871, -ERASE, 94675199303680, 94675199311871, -STORE, 94675199303680, 94675199311871, -STORE, 140222970605568, 140222972858367, -SNULL, 140222970748927, 140222972858367, -STORE, 140222970605568, 140222970748927, -STORE, 140222970748928, 140222972858367, -ERASE, 140222970748928, 140222972858367, -STORE, 140222972846080, 140222972854271, -STORE, 140222972854272, 140222972858367, -STORE, 140724954365952, 140724954370047, -STORE, 140724954353664, 140724954365951, -STORE, 140222972841984, 140222972846079, -STORE, 140222972833792, 140222972841983, -STORE, 140222968475648, 140222970605567, -SNULL, 140222968475648, 140222968504319, -STORE, 140222968504320, 140222970605567, -STORE, 140222968475648, 140222968504319, -SNULL, 140222970597375, 140222970605567, -STORE, 140222968504320, 140222970597375, -STORE, 140222970597376, 140222970605567, -ERASE, 140222970597376, 140222970605567, -STORE, 140222970597376, 140222970605567, - }; - unsigned long set19[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140725182459904, 140737488351231, -SNULL, 140725182463999, 140737488351231, -STORE, 140725182459904, 140725182463999, -STORE, 140725182328832, 140725182463999, -STORE, 94730166636544, 94730166763519, -SNULL, 94730166747135, 94730166763519, -STORE, 94730166636544, 94730166747135, -STORE, 94730166747136, 94730166763519, -ERASE, 94730166747136, 94730166763519, -STORE, 94730166751232, 94730166763519, -STORE, 140656834555904, 140656836808703, -SNULL, 140656834699263, 140656836808703, -STORE, 140656834555904, 140656834699263, -STORE, 140656834699264, 140656836808703, -ERASE, 140656834699264, 140656836808703, -STORE, 140656836796416, 140656836804607, -STORE, 140656836804608, 140656836808703, -STORE, 140725183389696, 140725183393791, -STORE, 140725183377408, 140725183389695, -STORE, 140656836788224, 140656836796415, -STORE, 140656832331776, 140656834555903, -SNULL, 140656833982463, 140656834555903, -STORE, 140656832331776, 140656833982463, -STORE, 140656833982464, 140656834555903, -SNULL, 140656833982464, 140656834551807, -STORE, 140656834551808, 140656834555903, -STORE, 140656833982464, 140656834551807, -ERASE, 140656833982464, 140656834551807, -STORE, 140656833982464, 140656834551807, -ERASE, 140656834551808, 140656834555903, -STORE, 140656834551808, 140656834555903, -STORE, 140656836763648, 140656836788223, -STORE, 140656830070784, 140656832331775, -SNULL, 140656830070784, 140656830222335, -STORE, 140656830222336, 140656832331775, -STORE, 140656830070784, 140656830222335, -SNULL, 140656832315391, 140656832331775, -STORE, 140656830222336, 140656832315391, -STORE, 140656832315392, 140656832331775, -SNULL, 140656832315392, 140656832323583, -STORE, 140656832323584, 140656832331775, -STORE, 140656832315392, 140656832323583, -ERASE, 140656832315392, 140656832323583, -STORE, 140656832315392, 140656832323583, -ERASE, 140656832323584, 140656832331775, -STORE, 140656832323584, 140656832331775, -STORE, 140656827940864, 140656830070783, -SNULL, 140656827940864, 140656827969535, -STORE, 140656827969536, 140656830070783, -STORE, 140656827940864, 140656827969535, -SNULL, 140656830062591, 140656830070783, -STORE, 140656827969536, 140656830062591, -STORE, 140656830062592, 140656830070783, -ERASE, 140656830062592, 140656830070783, -STORE, 140656830062592, 140656830070783, -STORE, 140656825724928, 140656827940863, -SNULL, 140656825724928, 140656825823231, -STORE, 140656825823232, 140656827940863, -STORE, 140656825724928, 140656825823231, -SNULL, 140656827916287, 140656827940863, -STORE, 140656825823232, 140656827916287, -STORE, 140656827916288, 140656827940863, -SNULL, 140656827916288, 140656827924479, -STORE, 140656827924480, 140656827940863, -STORE, 140656827916288, 140656827924479, -ERASE, 140656827916288, 140656827924479, -STORE, 140656827916288, 140656827924479, -ERASE, 140656827924480, 140656827940863, -STORE, 140656827924480, 140656827940863, -STORE, 140656821927936, 140656825724927, -SNULL, 140656821927936, 140656823586815, -STORE, 140656823586816, 140656825724927, -STORE, 140656821927936, 140656823586815, -SNULL, 140656825683967, 140656825724927, -STORE, 140656823586816, 140656825683967, -STORE, 140656825683968, 140656825724927, -SNULL, 140656825683968, 140656825708543, -STORE, 140656825708544, 140656825724927, -STORE, 140656825683968, 140656825708543, -ERASE, 140656825683968, 140656825708543, -STORE, 140656825683968, 140656825708543, -ERASE, 140656825708544, 140656825724927, -STORE, 140656825708544, 140656825724927, -STORE, 140656819806208, 140656821927935, -SNULL, 140656819806208, 140656819822591, -STORE, 140656819822592, 140656821927935, -STORE, 140656819806208, 140656819822591, -SNULL, 140656821919743, 140656821927935, -STORE, 140656819822592, 140656821919743, -STORE, 140656821919744, 140656821927935, -ERASE, 140656821919744, 140656821927935, -STORE, 140656821919744, 140656821927935, -STORE, 140656836755456, 140656836763647, -STORE, 140656817553408, 140656819806207, -SNULL, 140656817553408, 140656817704959, -STORE, 140656817704960, 140656819806207, -STORE, 140656817553408, 140656817704959, -SNULL, 140656819798015, 140656819806207, -STORE, 140656817704960, 140656819798015, -STORE, 140656819798016, 140656819806207, -ERASE, 140656819798016, 140656819806207, -STORE, 140656819798016, 140656819806207, -STORE, 140656815382528, 140656817553407, -SNULL, 140656815382528, 140656815452159, -STORE, 140656815452160, 140656817553407, -STORE, 140656815382528, 140656815452159, -SNULL, 140656817545215, 140656817553407, -STORE, 140656815452160, 140656817545215, -STORE, 140656817545216, 140656817553407, -ERASE, 140656817545216, 140656817553407, -STORE, 140656817545216, 140656817553407, -STORE, 140656812171264, 140656815382527, -SNULL, 140656812171264, 140656813248511, -STORE, 140656813248512, 140656815382527, -STORE, 140656812171264, 140656813248511, -SNULL, 140656815345663, 140656815382527, -STORE, 140656813248512, 140656815345663, -STORE, 140656815345664, 140656815382527, -ERASE, 140656815345664, 140656815382527, -STORE, 140656815345664, 140656815382527, -STORE, 140656810037248, 140656812171263, -SNULL, 140656810037248, 140656810065919, -STORE, 140656810065920, 140656812171263, -STORE, 140656810037248, 140656810065919, -SNULL, 140656812163071, 140656812171263, -STORE, 140656810065920, 140656812163071, -STORE, 140656812163072, 140656812171263, -ERASE, 140656812163072, 140656812171263, -STORE, 140656812163072, 140656812171263, -STORE, 140656807727104, 140656810037247, -SNULL, 140656807727104, 140656807931903, -STORE, 140656807931904, 140656810037247, -STORE, 140656807727104, 140656807931903, -SNULL, 140656810029055, 140656810037247, -STORE, 140656807931904, 140656810029055, -STORE, 140656810029056, 140656810037247, -ERASE, 140656810029056, 140656810037247, -STORE, 140656810029056, 140656810037247, -STORE, 140656805343232, 140656807727103, -SNULL, 140656805343232, 140656805535743, -STORE, 140656805535744, 140656807727103, -STORE, 140656805343232, 140656805535743, -SNULL, 140656807628799, 140656807727103, -STORE, 140656805535744, 140656807628799, -STORE, 140656807628800, 140656807727103, -ERASE, 140656807628800, 140656807727103, -STORE, 140656807628800, 140656807727103, -STORE, 140656836747264, 140656836763647, -STORE, 140656802775040, 140656805343231, -SNULL, 140656802775040, 140656803241983, -STORE, 140656803241984, 140656805343231, -STORE, 140656802775040, 140656803241983, -SNULL, 140656805335039, 140656805343231, -STORE, 140656803241984, 140656805335039, -STORE, 140656805335040, 140656805343231, -ERASE, 140656805335040, 140656805343231, -STORE, 140656805335040, 140656805343231, -STORE, 140656800661504, 140656802775039, -SNULL, 140656800661504, 140656800673791, -STORE, 140656800673792, 140656802775039, -STORE, 140656800661504, 140656800673791, -SNULL, 140656802766847, 140656802775039, -STORE, 140656800673792, 140656802766847, -STORE, 140656802766848, 140656802775039, -ERASE, 140656802766848, 140656802775039, -STORE, 140656802766848, 140656802775039, -STORE, 140656798482432, 140656800661503, -SNULL, 140656798482432, 140656798560255, -STORE, 140656798560256, 140656800661503, -STORE, 140656798482432, 140656798560255, -SNULL, 140656800653311, 140656800661503, -STORE, 140656798560256, 140656800653311, -STORE, 140656800653312, 140656800661503, -ERASE, 140656800653312, 140656800661503, -STORE, 140656800653312, 140656800661503, -STORE, 140656796364800, 140656798482431, -SNULL, 140656796364800, 140656796381183, -STORE, 140656796381184, 140656798482431, -STORE, 140656796364800, 140656796381183, -SNULL, 140656798474239, 140656798482431, -STORE, 140656796381184, 140656798474239, -STORE, 140656798474240, 140656798482431, -ERASE, 140656798474240, 140656798482431, -STORE, 140656798474240, 140656798482431, -STORE, 140656836739072, 140656836763647, -STORE, 140656836726784, 140656836763647, -SNULL, 140656825700351, 140656825708543, -STORE, 140656825683968, 140656825700351, -STORE, 140656825700352, 140656825708543, -SNULL, 140656798478335, 140656798482431, -STORE, 140656798474240, 140656798478335, -STORE, 140656798478336, 140656798482431, -SNULL, 140656800657407, 140656800661503, -STORE, 140656800653312, 140656800657407, -STORE, 140656800657408, 140656800661503, -SNULL, 140656802770943, 140656802775039, -STORE, 140656802766848, 140656802770943, -STORE, 140656802770944, 140656802775039, -SNULL, 140656827920383, 140656827924479, -STORE, 140656827916288, 140656827920383, -STORE, 140656827920384, 140656827924479, -SNULL, 140656805339135, 140656805343231, -STORE, 140656805335040, 140656805339135, -STORE, 140656805339136, 140656805343231, -SNULL, 140656807723007, 140656807727103, -STORE, 140656807628800, 140656807723007, -STORE, 140656807723008, 140656807727103, -SNULL, 140656810033151, 140656810037247, -STORE, 140656810029056, 140656810033151, -STORE, 140656810033152, 140656810037247, -SNULL, 140656812167167, 140656812171263, -STORE, 140656812163072, 140656812167167, -STORE, 140656812167168, 140656812171263, -SNULL, 140656815353855, 140656815382527, -STORE, 140656815345664, 140656815353855, -STORE, 140656815353856, 140656815382527, -SNULL, 140656817549311, 140656817553407, -STORE, 140656817545216, 140656817549311, -STORE, 140656817549312, 140656817553407, -SNULL, 140656819802111, 140656819806207, -STORE, 140656819798016, 140656819802111, -STORE, 140656819802112, 140656819806207, -SNULL, 140656821923839, 140656821927935, -STORE, 140656821919744, 140656821923839, -STORE, 140656821923840, 140656821927935, -SNULL, 140656830066687, 140656830070783, -STORE, 140656830062592, 140656830066687, -STORE, 140656830066688, 140656830070783, -SNULL, 140656832319487, 140656832323583, -STORE, 140656832315392, 140656832319487, -STORE, 140656832319488, 140656832323583, -SNULL, 140656834547711, 140656834551807, -STORE, 140656833982464, 140656834547711, -STORE, 140656834547712, 140656834551807, -SNULL, 94730166759423, 94730166763519, -STORE, 94730166751232, 94730166759423, -STORE, 94730166759424, 94730166763519, -SNULL, 140656836800511, 140656836804607, -STORE, 140656836796416, 140656836800511, -STORE, 140656836800512, 140656836804607, -ERASE, 140656836763648, 140656836788223, -STORE, 94730171318272, 94730171453439, -STORE, 140656836784128, 140656836788223, -STORE, 140656836780032, 140656836784127, -STORE, 140656791920640, 140656796364799, -STORE, 140656836775936, 140656836780031, -STORE, 140656787476480, 140656791920639, -STORE, 140656779083776, 140656787476479, -SNULL, 140656779087871, 140656787476479, -STORE, 140656779083776, 140656779087871, -STORE, 140656779087872, 140656787476479, -STORE, 140656836771840, 140656836775935, -STORE, 140656774639616, 140656779083775, -STORE, 140656766246912, 140656774639615, -SNULL, 140656766251007, 140656774639615, -STORE, 140656766246912, 140656766251007, -STORE, 140656766251008, 140656774639615, -ERASE, 140656791920640, 140656796364799, -ERASE, 140656836780032, 140656836784127, -ERASE, 140656787476480, 140656791920639, -ERASE, 140656836775936, 140656836780031, -STORE, 140656836780032, 140656836784127, -STORE, 140656791920640, 140656796364799, -STORE, 140656836775936, 140656836780031, -STORE, 140656787476480, 140656791920639, -ERASE, 140656774639616, 140656779083775, - }; - unsigned long set20[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140735952392192, 140737488351231, -SNULL, 140735952396287, 140737488351231, -STORE, 140735952392192, 140735952396287, -STORE, 140735952261120, 140735952396287, -STORE, 94849008947200, 94849009414143, -SNULL, 94849009364991, 94849009414143, -STORE, 94849008947200, 94849009364991, -STORE, 94849009364992, 94849009414143, -ERASE, 94849009364992, 94849009414143, -STORE, 94849009364992, 94849009414143, -STORE, 140590397943808, 140590400196607, -SNULL, 140590398087167, 140590400196607, -STORE, 140590397943808, 140590398087167, -STORE, 140590398087168, 140590400196607, -ERASE, 140590398087168, 140590400196607, -STORE, 140590400184320, 140590400192511, -STORE, 140590400192512, 140590400196607, -STORE, 140735952850944, 140735952855039, -STORE, 140735952838656, 140735952850943, -STORE, 140590400180224, 140590400184319, -STORE, 140590400172032, 140590400180223, -STORE, 140590395809792, 140590397943807, -SNULL, 140590395809792, 140590395838463, -STORE, 140590395838464, 140590397943807, -STORE, 140590395809792, 140590395838463, -SNULL, 140590397935615, 140590397943807, -STORE, 140590395838464, 140590397935615, -STORE, 140590397935616, 140590397943807, -ERASE, 140590397935616, 140590397943807, -STORE, 140590397935616, 140590397943807, -STORE, 140590393425920, 140590395809791, -SNULL, 140590393425920, 140590393692159, -STORE, 140590393692160, 140590395809791, -STORE, 140590393425920, 140590393692159, -SNULL, 140590395785215, 140590395809791, -STORE, 140590393692160, 140590395785215, -STORE, 140590395785216, 140590395809791, -SNULL, 140590395785216, 140590395805695, -STORE, 140590395805696, 140590395809791, -STORE, 140590395785216, 140590395805695, -ERASE, 140590395785216, 140590395805695, -STORE, 140590395785216, 140590395805695, -ERASE, 140590395805696, 140590395809791, -STORE, 140590395805696, 140590395809791, -STORE, 140590391234560, 140590393425919, -SNULL, 140590391234560, 140590391324671, -STORE, 140590391324672, 140590393425919, -STORE, 140590391234560, 140590391324671, -SNULL, 140590393417727, 140590393425919, -STORE, 140590391324672, 140590393417727, -STORE, 140590393417728, 140590393425919, -ERASE, 140590393417728, 140590393425919, -STORE, 140590393417728, 140590393425919, -STORE, 140590388973568, 140590391234559, -SNULL, 140590388973568, 140590389125119, -STORE, 140590389125120, 140590391234559, -STORE, 140590388973568, 140590389125119, -SNULL, 140590391218175, 140590391234559, -STORE, 140590389125120, 140590391218175, -STORE, 140590391218176, 140590391234559, -SNULL, 140590391218176, 140590391226367, -STORE, 140590391226368, 140590391234559, -STORE, 140590391218176, 140590391226367, -ERASE, 140590391218176, 140590391226367, -STORE, 140590391218176, 140590391226367, -ERASE, 140590391226368, 140590391234559, -STORE, 140590391226368, 140590391234559, -STORE, 140590386843648, 140590388973567, -SNULL, 140590386843648, 140590386872319, -STORE, 140590386872320, 140590388973567, -STORE, 140590386843648, 140590386872319, -SNULL, 140590388965375, 140590388973567, -STORE, 140590386872320, 140590388965375, -STORE, 140590388965376, 140590388973567, -ERASE, 140590388965376, 140590388973567, -STORE, 140590388965376, 140590388973567, -STORE, 140590384627712, 140590386843647, -SNULL, 140590384627712, 140590384726015, -STORE, 140590384726016, 140590386843647, -STORE, 140590384627712, 140590384726015, -SNULL, 140590386819071, 140590386843647, -STORE, 140590384726016, 140590386819071, -STORE, 140590386819072, 140590386843647, -SNULL, 140590386819072, 140590386827263, -STORE, 140590386827264, 140590386843647, -STORE, 140590386819072, 140590386827263, -ERASE, 140590386819072, 140590386827263, -STORE, 140590386819072, 140590386827263, -ERASE, 140590386827264, 140590386843647, -STORE, 140590386827264, 140590386843647, -STORE, 140590400163840, 140590400180223, -STORE, 140590380830720, 140590384627711, -SNULL, 140590380830720, 140590382489599, -STORE, 140590382489600, 140590384627711, -STORE, 140590380830720, 140590382489599, -SNULL, 140590384586751, 140590384627711, -STORE, 140590382489600, 140590384586751, -STORE, 140590384586752, 140590384627711, -SNULL, 140590384586752, 140590384611327, -STORE, 140590384611328, 140590384627711, -STORE, 140590384586752, 140590384611327, -ERASE, 140590384586752, 140590384611327, -STORE, 140590384586752, 140590384611327, -ERASE, 140590384611328, 140590384627711, -STORE, 140590384611328, 140590384627711, -STORE, 140590378713088, 140590380830719, -SNULL, 140590378713088, 140590378729471, -STORE, 140590378729472, 140590380830719, -STORE, 140590378713088, 140590378729471, -SNULL, 140590380822527, 140590380830719, -STORE, 140590378729472, 140590380822527, -STORE, 140590380822528, 140590380830719, -ERASE, 140590380822528, 140590380830719, -STORE, 140590380822528, 140590380830719, -STORE, 140590376595456, 140590378713087, -SNULL, 140590376595456, 140590376611839, -STORE, 140590376611840, 140590378713087, -STORE, 140590376595456, 140590376611839, -SNULL, 140590378704895, 140590378713087, -STORE, 140590376611840, 140590378704895, -STORE, 140590378704896, 140590378713087, -ERASE, 140590378704896, 140590378713087, -STORE, 140590378704896, 140590378713087, -STORE, 140590374027264, 140590376595455, -SNULL, 140590374027264, 140590374494207, -STORE, 140590374494208, 140590376595455, -STORE, 140590374027264, 140590374494207, -SNULL, 140590376587263, 140590376595455, -STORE, 140590374494208, 140590376587263, -STORE, 140590376587264, 140590376595455, -ERASE, 140590376587264, 140590376595455, -STORE, 140590376587264, 140590376595455, -STORE, 140590371913728, 140590374027263, -SNULL, 140590371913728, 140590371926015, -STORE, 140590371926016, 140590374027263, -STORE, 140590371913728, 140590371926015, -SNULL, 140590374019071, 140590374027263, -STORE, 140590371926016, 140590374019071, -STORE, 140590374019072, 140590374027263, -ERASE, 140590374019072, 140590374027263, -STORE, 140590374019072, 140590374027263, -STORE, 140590400155648, 140590400180223, -STORE, 140590400143360, 140590400180223, -SNULL, 140590384603135, 140590384611327, -STORE, 140590384586752, 140590384603135, -STORE, 140590384603136, 140590384611327, -SNULL, 140590374023167, 140590374027263, -STORE, 140590374019072, 140590374023167, -STORE, 140590374023168, 140590374027263, -SNULL, 140590386823167, 140590386827263, -STORE, 140590386819072, 140590386823167, -STORE, 140590386823168, 140590386827263, -SNULL, 140590376591359, 140590376595455, - }; - unsigned long set21[] = { -STORE, 93874710941696, 93874711363583, -STORE, 93874711367680, 93874711408639, -STORE, 93874711408640, 93874711412735, -STORE, 93874720989184, 93874721124351, -STORE, 140708365086720, 140708365099007, -STORE, 140708365099008, 140708367192063, -STORE, 140708367192064, 140708367196159, -STORE, 140708367196160, 140708367200255, -STORE, 140708367200256, 140708367667199, -STORE, 140708367667200, 140708369760255, -STORE, 140708369760256, 140708369764351, -STORE, 140708369764352, 140708369768447, -STORE, 140708369768448, 140708369784831, -STORE, 140708369784832, 140708371877887, -STORE, 140708371877888, 140708371881983, -STORE, 140708371881984, 140708371886079, -STORE, 140708371886080, 140708371902463, -STORE, 140708371902464, 140708373995519, -STORE, 140708373995520, 140708373999615, -STORE, 140708373999616, 140708374003711, -STORE, 140708374003712, 140708375662591, -STORE, 140708375662592, 140708377759743, -STORE, 140708377759744, 140708377776127, -STORE, 140708377776128, 140708377784319, -STORE, 140708377784320, 140708377800703, -STORE, 140708377800704, 140708377899007, -STORE, 140708377899008, 140708379992063, -STORE, 140708379992064, 140708379996159, -STORE, 140708379996160, 140708380000255, -STORE, 140708380000256, 140708380016639, -STORE, 140708380016640, 140708380045311, -STORE, 140708380045312, 140708382138367, -STORE, 140708382138368, 140708382142463, -STORE, 140708382142464, 140708382146559, -STORE, 140708382146560, 140708382298111, -STORE, 140708382298112, 140708384391167, -STORE, 140708384391168, 140708384395263, -STORE, 140708384395264, 140708384399359, -STORE, 140708384399360, 140708384407551, -STORE, 140708384407552, 140708384497663, -STORE, 140708384497664, 140708386590719, -STORE, 140708386590720, 140708386594815, -STORE, 140708386594816, 140708386598911, -STORE, 140708386598912, 140708386865151, -STORE, 140708386865152, 140708388958207, -STORE, 140708388958208, 140708388974591, -STORE, 140708388974592, 140708388978687, -STORE, 140708388978688, 140708388982783, -STORE, 140708388982784, 140708389011455, -STORE, 140708389011456, 140708391108607, -STORE, 140708391108608, 140708391112703, -STORE, 140708391112704, 140708391116799, -STORE, 140708391116800, 140708391260159, -STORE, 140708393291776, 140708393308159, -STORE, 140708393308160, 140708393312255, -STORE, 140708393312256, 140708393316351, -STORE, 140708393316352, 140708393353215, -STORE, 140708393353216, 140708393357311, -STORE, 140708393357312, 140708393361407, -STORE, 140708393361408, 140708393365503, -STORE, 140708393365504, 140708393369599, -STORE, 140730557042688, 140730557177855, -STORE, 140730557235200, 140730557247487, -STORE, 140730557247488, 140730557251583, -ERASE, 140708393353216, 140708393357311, -ERASE, 140708393312256, 140708393316351, -ERASE, 140708393308160, 140708393312255, -ERASE, 140708393291776, 140708393308159, - }; - unsigned long set22[] = { -STORE, 93951397134336, 93951397183487, -STORE, 93951397183488, 93951397728255, -STORE, 93951397728256, 93951397826559, -STORE, 93951397826560, 93951397842943, -STORE, 93951397842944, 93951397847039, -STORE, 93951425974272, 93951426109439, -STORE, 140685152665600, 140685152677887, -STORE, 140685152677888, 140685152829439, -STORE, 140685152829440, 140685154181119, -STORE, 140685154181120, 140685154484223, -STORE, 140685154484224, 140685154496511, -STORE, 140685154496512, 140685154508799, -STORE, 140685154508800, 140685154525183, -STORE, 140685154525184, 140685154541567, -STORE, 140685154541568, 140685154590719, -STORE, 140685154590720, 140685154603007, -STORE, 140685154603008, 140685154607103, -STORE, 140685154607104, 140685154611199, -STORE, 140685154611200, 140685154615295, -STORE, 140685154615296, 140685154631679, -STORE, 140685154639872, 140685154643967, -STORE, 140685154643968, 140685154766847, -STORE, 140685154766848, 140685154799615, -STORE, 140685154803712, 140685154807807, -STORE, 140685154807808, 140685154811903, -STORE, 140685154811904, 140685154815999, -STORE, 140722188902400, 140722189037567, -STORE, 140722189512704, 140722189524991, -STORE, 140722189524992, 140722189529087, -STORE, 140737488347136, 140737488351231, -STORE, 140733429354496, 140737488351231, -SNULL, 140733429358591, 140737488351231, -STORE, 140733429354496, 140733429358591, -STORE, 140733429223424, 140733429358591, -STORE, 94526683537408, 94526683660287, -SNULL, 94526683553791, 94526683660287, -STORE, 94526683537408, 94526683553791, -STORE, 94526683553792, 94526683660287, -ERASE, 94526683553792, 94526683660287, -STORE, 94526683553792, 94526683623423, -STORE, 94526683623424, 94526683647999, -STORE, 94526683652096, 94526683660287, -STORE, 140551363747840, 140551363923967, -SNULL, 140551363751935, 140551363923967, -STORE, 140551363747840, 140551363751935, -STORE, 140551363751936, 140551363923967, -ERASE, 140551363751936, 140551363923967, -STORE, 140551363751936, 140551363874815, -STORE, 140551363874816, 140551363907583, -STORE, 140551363911680, 140551363919871, -STORE, 140551363919872, 140551363923967, -STORE, 140733429690368, 140733429694463, -STORE, 140733429678080, 140733429690367, -STORE, 140551363739648, 140551363747839, -STORE, 140551363731456, 140551363739647, -STORE, 140551363379200, 140551363731455, -SNULL, 140551363379200, 140551363420159, -STORE, 140551363420160, 140551363731455, -STORE, 140551363379200, 140551363420159, -SNULL, 140551363706879, 140551363731455, -STORE, 140551363420160, 140551363706879, -STORE, 140551363706880, 140551363731455, -SNULL, 140551363420160, 140551363637247, -STORE, 140551363637248, 140551363706879, -STORE, 140551363420160, 140551363637247, -ERASE, 140551363420160, 140551363637247, -STORE, 140551363420160, 140551363637247, -SNULL, 140551363637248, 140551363702783, -STORE, 140551363702784, 140551363706879, -STORE, 140551363637248, 140551363702783, -ERASE, 140551363637248, 140551363702783, -STORE, 140551363637248, 140551363702783, -ERASE, 140551363706880, 140551363731455, -STORE, 140551363706880, 140551363731455, -STORE, 140551361531904, 140551363379199, -SNULL, 140551361683455, 140551363379199, -STORE, 140551361531904, 140551361683455, -STORE, 140551361683456, 140551363379199, -SNULL, 140551361683456, 140551363035135, -STORE, 140551363035136, 140551363379199, -STORE, 140551361683456, 140551363035135, -ERASE, 140551361683456, 140551363035135, -STORE, 140551361683456, 140551363035135, -SNULL, 140551363035136, 140551363338239, -STORE, 140551363338240, 140551363379199, -STORE, 140551363035136, 140551363338239, -ERASE, 140551363035136, 140551363338239, -STORE, 140551363035136, 140551363379199, -SNULL, 140551363338239, 140551363379199, -STORE, 140551363035136, 140551363338239, -STORE, 140551363338240, 140551363379199, -SNULL, 140551363338240, 140551363362815, -STORE, 140551363362816, 140551363379199, -STORE, 140551363338240, 140551363362815, -ERASE, 140551363338240, 140551363362815, -STORE, 140551363338240, 140551363362815, -ERASE, 140551363362816, 140551363379199, -STORE, 140551363362816, 140551363379199, -STORE, 140551361519616, 140551361531903, -SNULL, 140551363350527, 140551363362815, -STORE, 140551363338240, 140551363350527, -STORE, 140551363350528, 140551363362815, -SNULL, 140551363727359, 140551363731455, -STORE, 140551363706880, 140551363727359, -STORE, 140551363727360, 140551363731455, -SNULL, 94526683656191, 94526683660287, -STORE, 94526683652096, 94526683656191, -STORE, 94526683656192, 94526683660287, -SNULL, 140551363915775, 140551363919871, -STORE, 140551363911680, 140551363915775, -STORE, 140551363915776, 140551363919871, -ERASE, 140551363739648, 140551363747839, -STORE, 94526715490304, 94526715625471, -STORE, 140551361253376, 140551361531903, -STORE, 140551360987136, 140551361531903, -STORE, 140551360720896, 140551361531903, -STORE, 140551360454656, 140551361531903, -SNULL, 140551361253375, 140551361531903, -STORE, 140551360454656, 140551361253375, -STORE, 140551361253376, 140551361531903, -SNULL, 140551361253376, 140551361519615, -STORE, 140551361519616, 140551361531903, -STORE, 140551361253376, 140551361519615, -ERASE, 140551361253376, 140551361519615, - }; - - unsigned long set23[] = { -STORE, 94014447943680, 94014448156671, -STORE, 94014450253824, 94014450257919, -STORE, 94014450257920, 94014450266111, -STORE, 94014450266112, 94014450278399, -STORE, 94014464225280, 94014464630783, -STORE, 139761764306944, 139761765965823, -STORE, 139761765965824, 139761768062975, -STORE, 139761768062976, 139761768079359, -STORE, 139761768079360, 139761768087551, -STORE, 139761768087552, 139761768103935, -STORE, 139761768103936, 139761768116223, -STORE, 139761768116224, 139761770209279, -STORE, 139761770209280, 139761770213375, -STORE, 139761770213376, 139761770217471, -STORE, 139761770217472, 139761770360831, -STORE, 139761770729472, 139761772412927, -STORE, 139761772412928, 139761772429311, -STORE, 139761772457984, 139761772462079, -STORE, 139761772462080, 139761772466175, -STORE, 139761772466176, 139761772470271, -STORE, 140724336517120, 140724336652287, -STORE, 140724336955392, 140724336967679, -STORE, 140724336967680, 140724336971775, -STORE, 140737488347136, 140737488351231, -STORE, 140721840295936, 140737488351231, -SNULL, 140721840300031, 140737488351231, -STORE, 140721840295936, 140721840300031, -STORE, 140721840164864, 140721840300031, -STORE, 93937913667584, 93937915830271, -SNULL, 93937913729023, 93937915830271, -STORE, 93937913667584, 93937913729023, -STORE, 93937913729024, 93937915830271, -ERASE, 93937913729024, 93937915830271, -STORE, 93937915822080, 93937915830271, -STORE, 140598835335168, 140598837587967, -SNULL, 140598835478527, 140598837587967, -STORE, 140598835335168, 140598835478527, -STORE, 140598835478528, 140598837587967, -ERASE, 140598835478528, 140598837587967, -STORE, 140598837575680, 140598837583871, -STORE, 140598837583872, 140598837587967, -STORE, 140721841086464, 140721841090559, -STORE, 140721841074176, 140721841086463, -STORE, 140598837547008, 140598837575679, -STORE, 140598837538816, 140598837547007, -STORE, 140598831538176, 140598835335167, -SNULL, 140598831538176, 140598833197055, -STORE, 140598833197056, 140598835335167, -STORE, 140598831538176, 140598833197055, -SNULL, 140598835294207, 140598835335167, -STORE, 140598833197056, 140598835294207, -STORE, 140598835294208, 140598835335167, -SNULL, 140598835294208, 140598835318783, -STORE, 140598835318784, 140598835335167, -STORE, 140598835294208, 140598835318783, -ERASE, 140598835294208, 140598835318783, -STORE, 140598835294208, 140598835318783, -ERASE, 140598835318784, 140598835335167, -STORE, 140598835318784, 140598835335167, -SNULL, 140598835310591, 140598835318783, -STORE, 140598835294208, 140598835310591, -STORE, 140598835310592, 140598835318783, -SNULL, 93937915826175, 93937915830271, -STORE, 93937915822080, 93937915826175, -STORE, 93937915826176, 93937915830271, -SNULL, 140598837579775, 140598837583871, -STORE, 140598837575680, 140598837579775, -STORE, 140598837579776, 140598837583871, -ERASE, 140598837547008, 140598837575679, -STORE, 93937929179136, 93937929314303, -STORE, 140598835855360, 140598837538815, -STORE, 140737488347136, 140737488351231, -STORE, 140728187723776, 140737488351231, -SNULL, 140728187727871, 140737488351231, -STORE, 140728187723776, 140728187727871, -STORE, 140728187592704, 140728187727871, -STORE, 4194304, 5128191, -STORE, 7221248, 7241727, -STORE, 7241728, 7249919, -STORE, 140583951437824, 140583953690623, -SNULL, 140583951581183, 140583953690623, -STORE, 140583951437824, 140583951581183, -STORE, 140583951581184, 140583953690623, -ERASE, 140583951581184, 140583953690623, -STORE, 140583953678336, 140583953686527, -STORE, 140583953686528, 140583953690623, -STORE, 140728189116416, 140728189120511, -STORE, 140728189104128, 140728189116415, -STORE, 140583953649664, 140583953678335, -STORE, 140583953641472, 140583953649663, -STORE, 140583948275712, 140583951437823, -SNULL, 140583948275712, 140583949336575, -STORE, 140583949336576, 140583951437823, -STORE, 140583948275712, 140583949336575, -SNULL, 140583951429631, 140583951437823, -STORE, 140583949336576, 140583951429631, -STORE, 140583951429632, 140583951437823, -ERASE, 140583951429632, 140583951437823, -STORE, 140583951429632, 140583951437823, -STORE, 140583944478720, 140583948275711, -SNULL, 140583944478720, 140583946137599, -STORE, 140583946137600, 140583948275711, -STORE, 140583944478720, 140583946137599, -SNULL, 140583948234751, 140583948275711, -STORE, 140583946137600, 140583948234751, -STORE, 140583948234752, 140583948275711, -SNULL, 140583948234752, 140583948259327, -STORE, 140583948259328, 140583948275711, -STORE, 140583948234752, 140583948259327, -ERASE, 140583948234752, 140583948259327, -STORE, 140583948234752, 140583948259327, -ERASE, 140583948259328, 140583948275711, -STORE, 140583948259328, 140583948275711, -STORE, 140583953629184, 140583953649663, -SNULL, 140583948251135, 140583948259327, -STORE, 140583948234752, 140583948251135, -STORE, 140583948251136, 140583948259327, -SNULL, 140583951433727, 140583951437823, -STORE, 140583951429632, 140583951433727, -STORE, 140583951433728, 140583951437823, -SNULL, 7233535, 7241727, -STORE, 7221248, 7233535, -STORE, 7233536, 7241727, -SNULL, 140583953682431, 140583953686527, -STORE, 140583953678336, 140583953682431, -STORE, 140583953682432, 140583953686527, -ERASE, 140583953649664, 140583953678335, -STORE, 17821696, 17956863, -STORE, 17821696, 18104319, -STORE, 140583951945728, 140583953629183, -STORE, 94014447943680, 94014448156671, -STORE, 94014450253824, 94014450257919, -STORE, 94014450257920, 94014450266111, -STORE, 94014450266112, 94014450278399, -STORE, 94014464225280, 94014465196031, -STORE, 139761764306944, 139761765965823, -STORE, 139761765965824, 139761768062975, -STORE, 139761768062976, 139761768079359, -STORE, 139761768079360, 139761768087551, -STORE, 139761768087552, 139761768103935, -STORE, 139761768103936, 139761768116223, -STORE, 139761768116224, 139761770209279, -STORE, 139761770209280, 139761770213375, -STORE, 139761770213376, 139761770217471, -STORE, 139761770217472, 139761770360831, -STORE, 139761770729472, 139761772412927, -STORE, 139761772412928, 139761772429311, -STORE, 139761772457984, 139761772462079, -STORE, 139761772462080, 139761772466175, -STORE, 139761772466176, 139761772470271, -STORE, 140724336517120, 140724336652287, -STORE, 140724336955392, 140724336967679, -STORE, 140724336967680, 140724336971775, -STORE, 140737488347136, 140737488351231, -STORE, 140726063296512, 140737488351231, -SNULL, 140726063300607, 140737488351231, -STORE, 140726063296512, 140726063300607, -STORE, 140726063165440, 140726063300607, -STORE, 94016795934720, 94016798158847, -SNULL, 94016796045311, 94016798158847, -STORE, 94016795934720, 94016796045311, -STORE, 94016796045312, 94016798158847, -ERASE, 94016796045312, 94016798158847, -STORE, 94016798138368, 94016798150655, -STORE, 94016798150656, 94016798158847, -STORE, 139975915966464, 139975918219263, -SNULL, 139975916109823, 139975918219263, -STORE, 139975915966464, 139975916109823, -STORE, 139975916109824, 139975918219263, -ERASE, 139975916109824, 139975918219263, -STORE, 139975918206976, 139975918215167, -STORE, 139975918215168, 139975918219263, -STORE, 140726064541696, 140726064545791, -STORE, 140726064529408, 140726064541695, -STORE, 139975918178304, 139975918206975, -STORE, 139975918170112, 139975918178303, -STORE, 139975912169472, 139975915966463, -SNULL, 139975912169472, 139975913828351, -STORE, 139975913828352, 139975915966463, -STORE, 139975912169472, 139975913828351, -SNULL, 139975915925503, 139975915966463, -STORE, 139975913828352, 139975915925503, -STORE, 139975915925504, 139975915966463, -SNULL, 139975915925504, 139975915950079, -STORE, 139975915950080, 139975915966463, -STORE, 139975915925504, 139975915950079, -ERASE, 139975915925504, 139975915950079, -STORE, 139975915925504, 139975915950079, -ERASE, 139975915950080, 139975915966463, -STORE, 139975915950080, 139975915966463, -SNULL, 139975915941887, 139975915950079, -STORE, 139975915925504, 139975915941887, -STORE, 139975915941888, 139975915950079, -SNULL, 94016798146559, 94016798150655, -STORE, 94016798138368, 94016798146559, -STORE, 94016798146560, 94016798150655, -SNULL, 139975918211071, 139975918215167, -STORE, 139975918206976, 139975918211071, -STORE, 139975918211072, 139975918215167, -ERASE, 139975918178304, 139975918206975, -STORE, 94016804925440, 94016805060607, -STORE, 94596177661952, 94596177772543, -STORE, 94596179865600, 94596179873791, -STORE, 94596179873792, 94596179877887, -STORE, 94596179877888, 94596179886079, -STORE, 94596211597312, 94596211863551, -STORE, 140127351840768, 140127353499647, -STORE, 140127353499648, 140127355596799, -STORE, 140127355596800, 140127355613183, -STORE, 140127355613184, 140127355621375, -STORE, 140127355621376, 140127355637759, -STORE, 140127355637760, 140127355781119, -STORE, 140127357841408, 140127357849599, -STORE, 140127357878272, 140127357882367, -STORE, 140127357882368, 140127357886463, -STORE, 140127357886464, 140127357890559, -STORE, 140726167252992, 140726167392255, -STORE, 140726167838720, 140726167851007, -STORE, 140726167851008, 140726167855103, -STORE, 140737488347136, 140737488351231, -STORE, 140731874017280, 140737488351231, -SNULL, 140731874021375, 140737488351231, -STORE, 140731874017280, 140731874021375, -STORE, 140731873886208, 140731874021375, -STORE, 94178682265600, 94178684489727, -SNULL, 94178682376191, 94178684489727, -STORE, 94178682265600, 94178682376191, -STORE, 94178682376192, 94178684489727, -ERASE, 94178682376192, 94178684489727, -STORE, 94178684469248, 94178684481535, -STORE, 94178684481536, 94178684489727, -STORE, 140460853403648, 140460855656447, -SNULL, 140460853547007, 140460855656447, -STORE, 140460853403648, 140460853547007, -STORE, 140460853547008, 140460855656447, -ERASE, 140460853547008, 140460855656447, -STORE, 140460855644160, 140460855652351, -STORE, 140460855652352, 140460855656447, -STORE, 140731874103296, 140731874107391, -STORE, 140731874091008, 140731874103295, -STORE, 140460855615488, 140460855644159, -STORE, 140460855607296, 140460855615487, -STORE, 140460849606656, 140460853403647, -SNULL, 140460849606656, 140460851265535, -STORE, 140460851265536, 140460853403647, -STORE, 140460849606656, 140460851265535, -SNULL, 140460853362687, 140460853403647, -STORE, 140460851265536, 140460853362687, -STORE, 140460853362688, 140460853403647, -SNULL, 140460853362688, 140460853387263, -STORE, 140460853387264, 140460853403647, -STORE, 140460853362688, 140460853387263, -ERASE, 140460853362688, 140460853387263, -STORE, 140460853362688, 140460853387263, -ERASE, 140460853387264, 140460853403647, -STORE, 140460853387264, 140460853403647, -SNULL, 140460853379071, 140460853387263, -STORE, 140460853362688, 140460853379071, -STORE, 140460853379072, 140460853387263, -SNULL, 94178684477439, 94178684481535, -STORE, 94178684469248, 94178684477439, -STORE, 94178684477440, 94178684481535, -SNULL, 140460855648255, 140460855652351, -STORE, 140460855644160, 140460855648255, -STORE, 140460855648256, 140460855652351, -ERASE, 140460855615488, 140460855644159, -STORE, 94178692063232, 94178692198399, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140733096603648, 140737488351231, -SNULL, 140733096611839, 140737488351231, -STORE, 140733096603648, 140733096611839, -STORE, 140733096472576, 140733096611839, -STORE, 94796716122112, 94796718325759, -SNULL, 94796716224511, 94796718325759, -STORE, 94796716122112, 94796716224511, -STORE, 94796716224512, 94796718325759, -ERASE, 94796716224512, 94796718325759, -STORE, 94796718317568, 94796718325759, -STORE, 139667892793344, 139667895046143, -SNULL, 139667892936703, 139667895046143, -STORE, 139667892793344, 139667892936703, -STORE, 139667892936704, 139667895046143, -ERASE, 139667892936704, 139667895046143, -STORE, 139667895033856, 139667895042047, -STORE, 139667895042048, 139667895046143, -STORE, 140733096857600, 140733096861695, -STORE, 140733096845312, 140733096857599, -STORE, 139667895005184, 139667895033855, -STORE, 139667894996992, 139667895005183, -STORE, 139667890532352, 139667892793343, -SNULL, 139667890532352, 139667890683903, -STORE, 139667890683904, 139667892793343, -STORE, 139667890532352, 139667890683903, -SNULL, 139667892776959, 139667892793343, -STORE, 139667890683904, 139667892776959, -STORE, 139667892776960, 139667892793343, -SNULL, 139667892776960, 139667892785151, -STORE, 139667892785152, 139667892793343, -STORE, 139667892776960, 139667892785151, -ERASE, 139667892776960, 139667892785151, -STORE, 139667892776960, 139667892785151, -ERASE, 139667892785152, 139667892793343, -STORE, 139667892785152, 139667892793343, -STORE, 139667886735360, 139667890532351, -SNULL, 139667886735360, 139667888394239, -STORE, 139667888394240, 139667890532351, -STORE, 139667886735360, 139667888394239, -SNULL, 139667890491391, 139667890532351, -STORE, 139667888394240, 139667890491391, -STORE, 139667890491392, 139667890532351, -SNULL, 139667890491392, 139667890515967, -STORE, 139667890515968, 139667890532351, -STORE, 139667890491392, 139667890515967, -ERASE, 139667890491392, 139667890515967, -STORE, 139667890491392, 139667890515967, -ERASE, 139667890515968, 139667890532351, -STORE, 139667890515968, 139667890532351, -STORE, 139667884167168, 139667886735359, -SNULL, 139667884167168, 139667884634111, -STORE, 139667884634112, 139667886735359, -STORE, 139667884167168, 139667884634111, -SNULL, 139667886727167, 139667886735359, -STORE, 139667884634112, 139667886727167, -STORE, 139667886727168, 139667886735359, -ERASE, 139667886727168, 139667886735359, -STORE, 139667886727168, 139667886735359, -STORE, 139667882053632, 139667884167167, -SNULL, 139667882053632, 139667882065919, -STORE, 139667882065920, 139667884167167, -STORE, 139667882053632, 139667882065919, -SNULL, 139667884158975, 139667884167167, -STORE, 139667882065920, 139667884158975, -STORE, 139667884158976, 139667884167167, -ERASE, 139667884158976, 139667884167167, -STORE, 139667884158976, 139667884167167, -STORE, 139667879837696, 139667882053631, -SNULL, 139667879837696, 139667879935999, -STORE, 139667879936000, 139667882053631, -STORE, 139667879837696, 139667879935999, -SNULL, 139667882029055, 139667882053631, -STORE, 139667879936000, 139667882029055, -STORE, 139667882029056, 139667882053631, -SNULL, 139667882029056, 139667882037247, -STORE, 139667882037248, 139667882053631, -STORE, 139667882029056, 139667882037247, -ERASE, 139667882029056, 139667882037247, -STORE, 139667882029056, 139667882037247, -ERASE, 139667882037248, 139667882053631, -STORE, 139667882037248, 139667882053631, -STORE, 139667894988800, 139667895005183, -SNULL, 139667890507775, 139667890515967, -STORE, 139667890491392, 139667890507775, -STORE, 139667890507776, 139667890515967, -SNULL, 139667882033151, 139667882037247, -STORE, 139667882029056, 139667882033151, -STORE, 139667882033152, 139667882037247, -SNULL, 139667884163071, 139667884167167, -STORE, 139667884158976, 139667884163071, -STORE, 139667884163072, 139667884167167, -SNULL, 139667886731263, 139667886735359, -STORE, 139667886727168, 139667886731263, -STORE, 139667886731264, 139667886735359, -SNULL, 139667892781055, 139667892785151, -STORE, 139667892776960, 139667892781055, -STORE, 139667892781056, 139667892785151, -SNULL, 94796718321663, 94796718325759, -STORE, 94796718317568, 94796718321663, -STORE, 94796718321664, 94796718325759, -SNULL, 139667895037951, 139667895042047, -STORE, 139667895033856, 139667895037951, -STORE, 139667895037952, 139667895042047, -ERASE, 139667895005184, 139667895033855, -STORE, 94796726063104, 94796726198271, -STORE, 139667893305344, 139667894988799, -STORE, 139667895005184, 139667895033855, -STORE, 94796726063104, 94796726333439, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140722489507840, 140737488351231, -SNULL, 140722489516031, 140737488351231, -STORE, 140722489507840, 140722489516031, -STORE, 140722489376768, 140722489516031, -STORE, 93980993265664, 93980995489791, -SNULL, 93980993376255, 93980995489791, -STORE, 93980993265664, 93980993376255, -STORE, 93980993376256, 93980995489791, -ERASE, 93980993376256, 93980995489791, -STORE, 93980995469312, 93980995481599, -STORE, 93980995481600, 93980995489791, -STORE, 140261313593344, 140261315846143, -SNULL, 140261313736703, 140261315846143, -STORE, 140261313593344, 140261313736703, -STORE, 140261313736704, 140261315846143, -ERASE, 140261313736704, 140261315846143, -STORE, 140261315833856, 140261315842047, -STORE, 140261315842048, 140261315846143, -STORE, 140722489675776, 140722489679871, -STORE, 140722489663488, 140722489675775, -STORE, 140261315805184, 140261315833855, -STORE, 140261315796992, 140261315805183, -STORE, 140261309796352, 140261313593343, -SNULL, 140261309796352, 140261311455231, -STORE, 140261311455232, 140261313593343, -STORE, 140261309796352, 140261311455231, -SNULL, 140261313552383, 140261313593343, -STORE, 140261311455232, 140261313552383, -STORE, 140261313552384, 140261313593343, -SNULL, 140261313552384, 140261313576959, -STORE, 140261313576960, 140261313593343, -STORE, 140261313552384, 140261313576959, -ERASE, 140261313552384, 140261313576959, -STORE, 140261313552384, 140261313576959, -ERASE, 140261313576960, 140261313593343, -STORE, 140261313576960, 140261313593343, -SNULL, 140261313568767, 140261313576959, -STORE, 140261313552384, 140261313568767, -STORE, 140261313568768, 140261313576959, -SNULL, 93980995477503, 93980995481599, -STORE, 93980995469312, 93980995477503, -STORE, 93980995477504, 93980995481599, -SNULL, 140261315837951, 140261315842047, -STORE, 140261315833856, 140261315837951, -STORE, 140261315837952, 140261315842047, -ERASE, 140261315805184, 140261315833855, -STORE, 93980997443584, 93980997578751, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140737488338944, 140737488351231, -STORE, 140734059450368, 140737488351231, -SNULL, 140734059462655, 140737488351231, -STORE, 140734059450368, 140734059462655, -STORE, 140734059319296, 140734059462655, -STORE, 4194304, 5128191, -STORE, 7221248, 7241727, -STORE, 7241728, 7249919, -STORE, 140307554983936, 140307557236735, -SNULL, 140307555127295, 140307557236735, -STORE, 140307554983936, 140307555127295, -STORE, 140307555127296, 140307557236735, -ERASE, 140307555127296, 140307557236735, -STORE, 140307557224448, 140307557232639, -STORE, 140307557232640, 140307557236735, -STORE, 140734059483136, 140734059487231, -STORE, 140734059470848, 140734059483135, -STORE, 140307557195776, 140307557224447, -STORE, 140307557187584, 140307557195775, -STORE, 140307551821824, 140307554983935, -SNULL, 140307551821824, 140307552882687, -STORE, 140307552882688, 140307554983935, -STORE, 140307551821824, 140307552882687, -SNULL, 140307554975743, 140307554983935, -STORE, 140307552882688, 140307554975743, -STORE, 140307554975744, 140307554983935, -ERASE, 140307554975744, 140307554983935, -STORE, 140307554975744, 140307554983935, -STORE, 140307548024832, 140307551821823, -SNULL, 140307548024832, 140307549683711, -STORE, 140307549683712, 140307551821823, -STORE, 140307548024832, 140307549683711, -SNULL, 140307551780863, 140307551821823, -STORE, 140307549683712, 140307551780863, -STORE, 140307551780864, 140307551821823, -SNULL, 140307551780864, 140307551805439, -STORE, 140307551805440, 140307551821823, -STORE, 140307551780864, 140307551805439, -ERASE, 140307551780864, 140307551805439, -STORE, 140307551780864, 140307551805439, -ERASE, 140307551805440, 140307551821823, -STORE, 140307551805440, 140307551821823, -STORE, 140307557175296, 140307557195775, -SNULL, 140307551797247, 140307551805439, -STORE, 140307551780864, 140307551797247, -STORE, 140307551797248, 140307551805439, -SNULL, 140307554979839, 140307554983935, -STORE, 140307554975744, 140307554979839, -STORE, 140307554979840, 140307554983935, -SNULL, 7233535, 7241727, -STORE, 7221248, 7233535, -STORE, 7233536, 7241727, -SNULL, 140307557228543, 140307557232639, -STORE, 140307557224448, 140307557228543, -STORE, 140307557228544, 140307557232639, -ERASE, 140307557195776, 140307557224447, -STORE, 39698432, 39833599, -STORE, 39698432, 39981055, -STORE, 94306485321728, 94306485432319, -STORE, 94306487525376, 94306487533567, -STORE, 94306487533568, 94306487537663, -STORE, 94306487537664, 94306487545855, -STORE, 94306488868864, 94306489004031, -STORE, 140497673998336, 140497675657215, -STORE, 140497675657216, 140497677754367, -STORE, 140497677754368, 140497677770751, -STORE, 140497677770752, 140497677778943, -STORE, 140497677778944, 140497677795327, -STORE, 140497677795328, 140497677938687, -STORE, 140497679998976, 140497680007167, -STORE, 140497680035840, 140497680039935, -STORE, 140497680039936, 140497680044031, -STORE, 140497680044032, 140497680048127, -STORE, 140732780462080, 140732780601343, -STORE, 140732782239744, 140732782252031, -STORE, 140732782252032, 140732782256127, -STORE, 94236915900416, 94236916011007, -STORE, 94236918104064, 94236918112255, -STORE, 94236918112256, 94236918116351, -STORE, 94236918116352, 94236918124543, -STORE, 94236939489280, 94236939624447, -STORE, 140046091743232, 140046093402111, -STORE, 140046093402112, 140046095499263, -STORE, 140046095499264, 140046095515647, -STORE, 140046095515648, 140046095523839, -STORE, 140046095523840, 140046095540223, -STORE, 140046095540224, 140046095683583, -STORE, 140046097743872, 140046097752063, -STORE, 140046097780736, 140046097784831, -STORE, 140046097784832, 140046097788927, -STORE, 140046097788928, 140046097793023, -STORE, 140726694449152, 140726694588415, -STORE, 140726695313408, 140726695325695, -STORE, 140726695325696, 140726695329791, -STORE, 94894582779904, 94894582992895, -STORE, 94894585090048, 94894585094143, -STORE, 94894585094144, 94894585102335, -STORE, 94894585102336, 94894585114623, -STORE, 94894592868352, 94894594293759, -STORE, 139733563842560, 139733565501439, -STORE, 139733565501440, 139733567598591, -STORE, 139733567598592, 139733567614975, -STORE, 139733567614976, 139733567623167, -STORE, 139733567623168, 139733567639551, -STORE, 139733567639552, 139733567651839, -STORE, 139733567651840, 139733569744895, -STORE, 139733569744896, 139733569748991, -STORE, 139733569748992, 139733569753087, -STORE, 139733569753088, 139733569896447, -STORE, 139733570265088, 139733571948543, -STORE, 139733571948544, 139733571964927, -STORE, 139733571993600, 139733571997695, -STORE, 139733571997696, 139733572001791, -STORE, 139733572001792, 139733572005887, -STORE, 140726369255424, 140726369394687, -STORE, 140726370402304, 140726370414591, -STORE, 140726370414592, 140726370418687, -STORE, 94899236483072, 94899236696063, -STORE, 94899238793216, 94899238797311, -STORE, 94899238797312, 94899238805503, -STORE, 94899238805504, 94899238817791, -STORE, 94899263045632, 94899263979519, -STORE, 140040959893504, 140040961552383, -STORE, 140040961552384, 140040963649535, -STORE, 140040963649536, 140040963665919, -STORE, 140040963665920, 140040963674111, -STORE, 140040963674112, 140040963690495, -STORE, 140040963690496, 140040963702783, -STORE, 140040963702784, 140040965795839, -STORE, 140040965795840, 140040965799935, -STORE, 140040965799936, 140040965804031, -STORE, 140040965804032, 140040965947391, -STORE, 140040966316032, 140040967999487, -STORE, 140040967999488, 140040968015871, -STORE, 140040968044544, 140040968048639, -STORE, 140040968048640, 140040968052735, -STORE, 140040968052736, 140040968056831, -STORE, 140729921359872, 140729921499135, -STORE, 140729921613824, 140729921626111, -STORE, 140729921626112, 140729921630207, -STORE, 94818265190400, 94818265403391, -STORE, 94818267500544, 94818267504639, -STORE, 94818267504640, 94818267512831, -STORE, 94818267512832, 94818267525119, -STORE, 94818283372544, 94818285858815, -STORE, 139818425675776, 139818427334655, -STORE, 139818427334656, 139818429431807, -STORE, 139818429431808, 139818429448191, -STORE, 139818429448192, 139818429456383, -STORE, 139818429456384, 139818429472767, -STORE, 139818429472768, 139818429485055, -STORE, 139818429485056, 139818431578111, -STORE, 139818431578112, 139818431582207, -STORE, 139818431582208, 139818431586303, -STORE, 139818431586304, 139818431729663, -STORE, 139818432098304, 139818433781759, -STORE, 139818433781760, 139818433798143, -STORE, 139818433826816, 139818433830911, -STORE, 139818433830912, 139818433835007, -STORE, 139818433835008, 139818433839103, -STORE, 140726170509312, 140726170648575, -STORE, 140726171824128, 140726171836415, -STORE, 140726171836416, 140726171840511, -STORE, 94611513188352, 94611513401343, -STORE, 94611515498496, 94611515502591, -STORE, 94611515502592, 94611515510783, -STORE, 94611515510784, 94611515523071, -STORE, 94611516502016, 94611516907519, -STORE, 140596246388736, 140596248047615, -STORE, 140596248047616, 140596250144767, -STORE, 140596250144768, 140596250161151, -STORE, 140596250161152, 140596250169343, -STORE, 140596250169344, 140596250185727, -STORE, 140596250185728, 140596250198015, -STORE, 140596250198016, 140596252291071, -STORE, 140596252291072, 140596252295167, -STORE, 140596252295168, 140596252299263, -STORE, 140596252299264, 140596252442623, -STORE, 140596252811264, 140596254494719, -STORE, 140596254494720, 140596254511103, -STORE, 140596254539776, 140596254543871, -STORE, 140596254543872, 140596254547967, -STORE, 140596254547968, 140596254552063, -STORE, 140731551338496, 140731551477759, -STORE, 140731551780864, 140731551793151, -STORE, 140731551793152, 140731551797247, -STORE, 94313835851776, 94313836064767, -STORE, 94313838161920, 94313838166015, -STORE, 94313838166016, 94313838174207, -STORE, 94313838174208, 94313838186495, -STORE, 94313858416640, 94313861906431, -STORE, 140693503918080, 140693505576959, -STORE, 140693505576960, 140693507674111, -STORE, 140693507674112, 140693507690495, -STORE, 140693507690496, 140693507698687, -STORE, 140693507698688, 140693507715071, -STORE, 140693507715072, 140693507727359, -STORE, 140693507727360, 140693509820415, -STORE, 140693509820416, 140693509824511, -STORE, 140693509824512, 140693509828607, -STORE, 140693509828608, 140693509971967, -STORE, 140693510340608, 140693512024063, -STORE, 140693512024064, 140693512040447, -STORE, 140693512069120, 140693512073215, -STORE, 140693512073216, 140693512077311, -STORE, 140693512077312, 140693512081407, -STORE, 140721116065792, 140721116205055, -STORE, 140721117831168, 140721117843455, -STORE, 140721117843456, 140721117847551, -STORE, 94843650150400, 94843650363391, -STORE, 94843652460544, 94843652464639, -STORE, 94843652464640, 94843652472831, -STORE, 94843652472832, 94843652485119, -STORE, 94843685388288, 94843686281215, -STORE, 140484193681408, 140484195340287, -STORE, 140484195340288, 140484197437439, -STORE, 140484197437440, 140484197453823, -STORE, 140484197453824, 140484197462015, -STORE, 140484197462016, 140484197478399, -STORE, 140484197478400, 140484197490687, -STORE, 140484197490688, 140484199583743, -STORE, 140484199583744, 140484199587839, -STORE, 140484199587840, 140484199591935, -STORE, 140484199591936, 140484199735295, -STORE, 140484200103936, 140484201787391, -STORE, 140484201787392, 140484201803775, -STORE, 140484201832448, 140484201836543, -STORE, 140484201836544, 140484201840639, -STORE, 140484201840640, 140484201844735, -STORE, 140726294315008, 140726294454271, -STORE, 140726295646208, 140726295658495, -STORE, 140726295658496, 140726295662591, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140720422371328, 140737488351231, -SNULL, 140720422379519, 140737488351231, -STORE, 140720422371328, 140720422379519, -STORE, 140720422240256, 140720422379519, -STORE, 94417967845376, 94417970180095, -SNULL, 94417968058367, 94417970180095, -STORE, 94417967845376, 94417968058367, -STORE, 94417968058368, 94417970180095, -ERASE, 94417968058368, 94417970180095, -STORE, 94417970155520, 94417970167807, -STORE, 94417970167808, 94417970180095, -STORE, 140252450045952, 140252452298751, -SNULL, 140252450189311, 140252452298751, -STORE, 140252450045952, 140252450189311, -STORE, 140252450189312, 140252452298751, -ERASE, 140252450189312, 140252452298751, -STORE, 140252452286464, 140252452294655, -STORE, 140252452294656, 140252452298751, -STORE, 140720422416384, 140720422420479, -STORE, 140720422404096, 140720422416383, -STORE, 140252452257792, 140252452286463, -STORE, 140252452249600, 140252452257791, -STORE, 140252447932416, 140252450045951, -SNULL, 140252447932416, 140252447944703, -STORE, 140252447944704, 140252450045951, -STORE, 140252447932416, 140252447944703, -SNULL, 140252450037759, 140252450045951, -STORE, 140252447944704, 140252450037759, -STORE, 140252450037760, 140252450045951, -ERASE, 140252450037760, 140252450045951, -STORE, 140252450037760, 140252450045951, -STORE, 140252444135424, 140252447932415, -SNULL, 140252444135424, 140252445794303, -STORE, 140252445794304, 140252447932415, -STORE, 140252444135424, 140252445794303, -SNULL, 140252447891455, 140252447932415, -STORE, 140252445794304, 140252447891455, -STORE, 140252447891456, 140252447932415, -SNULL, 140252447891456, 140252447916031, -STORE, 140252447916032, 140252447932415, -STORE, 140252447891456, 140252447916031, -ERASE, 140252447891456, 140252447916031, -STORE, 140252447891456, 140252447916031, -ERASE, 140252447916032, 140252447932415, -STORE, 140252447916032, 140252447932415, -STORE, 140252452241408, 140252452257791, -SNULL, 140252447907839, 140252447916031, -STORE, 140252447891456, 140252447907839, -STORE, 140252447907840, 140252447916031, -SNULL, 140252450041855, 140252450045951, -STORE, 140252450037760, 140252450041855, -STORE, 140252450041856, 140252450045951, -SNULL, 94417970159615, 94417970167807, -STORE, 94417970155520, 94417970159615, -STORE, 94417970159616, 94417970167807, -SNULL, 140252452290559, 140252452294655, -STORE, 140252452286464, 140252452290559, -STORE, 140252452290560, 140252452294655, -ERASE, 140252452257792, 140252452286463, -STORE, 94417996333056, 94417996468223, -STORE, 140252450557952, 140252452241407, -STORE, 94417996333056, 94417996603391, -STORE, 94417996333056, 94417996738559, -STORE, 94417996333056, 94417996910591, -SNULL, 94417996881919, 94417996910591, -STORE, 94417996333056, 94417996881919, -STORE, 94417996881920, 94417996910591, -ERASE, 94417996881920, 94417996910591, -STORE, 94417996333056, 94417997017087, -STORE, 94417996333056, 94417997152255, -SNULL, 94417997135871, 94417997152255, -STORE, 94417996333056, 94417997135871, -STORE, 94417997135872, 94417997152255, -ERASE, 94417997135872, 94417997152255, -STORE, 94417996333056, 94417997291519, -SNULL, 94417997271039, 94417997291519, -STORE, 94417996333056, 94417997271039, -STORE, 94417997271040, 94417997291519, -ERASE, 94417997271040, 94417997291519, -STORE, 94417996333056, 94417997406207, -SNULL, 94417997381631, 94417997406207, -STORE, 94417996333056, 94417997381631, -STORE, 94417997381632, 94417997406207, -ERASE, 94417997381632, 94417997406207, -STORE, 94417996333056, 94417997516799, -SNULL, 94417997488127, 94417997516799, -STORE, 94417996333056, 94417997488127, -STORE, 94417997488128, 94417997516799, -ERASE, 94417997488128, 94417997516799, -STORE, 94417996333056, 94417997643775, -SNULL, 94417997631487, 94417997643775, -STORE, 94417996333056, 94417997631487, -STORE, 94417997631488, 94417997643775, -ERASE, 94417997631488, 94417997643775, -SNULL, 94417997590527, 94417997631487, -STORE, 94417996333056, 94417997590527, -STORE, 94417997590528, 94417997631487, -ERASE, 94417997590528, 94417997631487, -STORE, 94417996333056, 94417997733887, -STORE, 94417996333056, 94417997869055, -STORE, 94417996333056, 94417998004223, -SNULL, 94417998000127, 94417998004223, -STORE, 94417996333056, 94417998000127, -STORE, 94417998000128, 94417998004223, -ERASE, 94417998000128, 94417998004223, -STORE, 94049170993152, 94049171206143, -STORE, 94049173303296, 94049173307391, -STORE, 94049173307392, 94049173315583, -STORE, 94049173315584, 94049173327871, -STORE, 94049176236032, 94049183645695, -STORE, 139807795544064, 139807797202943, -STORE, 139807797202944, 139807799300095, -STORE, 139807799300096, 139807799316479, -STORE, 139807799316480, 139807799324671, -STORE, 139807799324672, 139807799341055, -STORE, 139807799341056, 139807799353343, -STORE, 139807799353344, 139807801446399, -STORE, 139807801446400, 139807801450495, -STORE, 139807801450496, 139807801454591, -STORE, 139807801454592, 139807801597951, -STORE, 139807801966592, 139807803650047, -STORE, 139807803650048, 139807803666431, -STORE, 139807803695104, 139807803699199, -STORE, 139807803699200, 139807803703295, -STORE, 139807803703296, 139807803707391, -STORE, 140727555538944, 140727555678207, -STORE, 140727555940352, 140727555952639, -STORE, 140727555952640, 140727555956735, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140722483441664, 140737488351231, -SNULL, 140722483449855, 140737488351231, -STORE, 140722483441664, 140722483449855, -STORE, 140722483310592, 140722483449855, -STORE, 94416704921600, 94416707145727, -SNULL, 94416705032191, 94416707145727, -STORE, 94416704921600, 94416705032191, -STORE, 94416705032192, 94416707145727, -ERASE, 94416705032192, 94416707145727, -STORE, 94416707125248, 94416707137535, -STORE, 94416707137536, 94416707145727, -STORE, 140555439296512, 140555441549311, -SNULL, 140555439439871, 140555441549311, -STORE, 140555439296512, 140555439439871, -STORE, 140555439439872, 140555441549311, -ERASE, 140555439439872, 140555441549311, -STORE, 140555441537024, 140555441545215, -STORE, 140555441545216, 140555441549311, -STORE, 140722484781056, 140722484785151, -STORE, 140722484768768, 140722484781055, -STORE, 140555441508352, 140555441537023, -STORE, 140555441500160, 140555441508351, -STORE, 140555435499520, 140555439296511, -SNULL, 140555435499520, 140555437158399, -STORE, 140555437158400, 140555439296511, -STORE, 140555435499520, 140555437158399, -SNULL, 140555439255551, 140555439296511, -STORE, 140555437158400, 140555439255551, -STORE, 140555439255552, 140555439296511, -SNULL, 140555439255552, 140555439280127, -STORE, 140555439280128, 140555439296511, -STORE, 140555439255552, 140555439280127, -ERASE, 140555439255552, 140555439280127, -STORE, 140555439255552, 140555439280127, -ERASE, 140555439280128, 140555439296511, -STORE, 140555439280128, 140555439296511, -SNULL, 140555439271935, 140555439280127, -STORE, 140555439255552, 140555439271935, -STORE, 140555439271936, 140555439280127, -SNULL, 94416707133439, 94416707137535, -STORE, 94416707125248, 94416707133439, -STORE, 94416707133440, 94416707137535, -SNULL, 140555441541119, 140555441545215, -STORE, 140555441537024, 140555441541119, -STORE, 140555441541120, 140555441545215, -ERASE, 140555441508352, 140555441537023, -STORE, 94416724672512, 94416724807679, -STORE, 94686636953600, 94686637166591, -STORE, 94686639263744, 94686639267839, -STORE, 94686639267840, 94686639276031, -STORE, 94686639276032, 94686639288319, -STORE, 94686662193152, 94686663163903, -STORE, 140312944431104, 140312946089983, -STORE, 140312946089984, 140312948187135, -STORE, 140312948187136, 140312948203519, -STORE, 140312948203520, 140312948211711, -STORE, 140312948211712, 140312948228095, -STORE, 140312948228096, 140312948240383, -STORE, 140312948240384, 140312950333439, -STORE, 140312950333440, 140312950337535, -STORE, 140312950337536, 140312950341631, -STORE, 140312950341632, 140312950484991, -STORE, 140312950853632, 140312952537087, -STORE, 140312952537088, 140312952553471, -STORE, 140312952582144, 140312952586239, -STORE, 140312952586240, 140312952590335, -STORE, 140312952590336, 140312952594431, -STORE, 140730598920192, 140730599059455, -STORE, 140730599108608, 140730599120895, -STORE, 140730599120896, 140730599124991, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140726234079232, 140737488351231, -SNULL, 140726234087423, 140737488351231, -STORE, 140726234079232, 140726234087423, -STORE, 140726233948160, 140726234087423, -STORE, 94589467578368, 94589469802495, -SNULL, 94589467688959, 94589469802495, -STORE, 94589467578368, 94589467688959, -STORE, 94589467688960, 94589469802495, -ERASE, 94589467688960, 94589469802495, -STORE, 94589469782016, 94589469794303, -STORE, 94589469794304, 94589469802495, -STORE, 140587082842112, 140587085094911, -SNULL, 140587082985471, 140587085094911, -STORE, 140587082842112, 140587082985471, -STORE, 140587082985472, 140587085094911, -ERASE, 140587082985472, 140587085094911, -STORE, 140587085082624, 140587085090815, -STORE, 140587085090816, 140587085094911, -STORE, 140726234103808, 140726234107903, -STORE, 140726234091520, 140726234103807, -STORE, 140587085053952, 140587085082623, -STORE, 140587085045760, 140587085053951, -STORE, 140587079045120, 140587082842111, -SNULL, 140587079045120, 140587080703999, -STORE, 140587080704000, 140587082842111, -STORE, 140587079045120, 140587080703999, -SNULL, 140587082801151, 140587082842111, -STORE, 140587080704000, 140587082801151, -STORE, 140587082801152, 140587082842111, -SNULL, 140587082801152, 140587082825727, -STORE, 140587082825728, 140587082842111, -STORE, 140587082801152, 140587082825727, -ERASE, 140587082801152, 140587082825727, -STORE, 140587082801152, 140587082825727, -ERASE, 140587082825728, 140587082842111, -STORE, 140587082825728, 140587082842111, -SNULL, 140587082817535, 140587082825727, -STORE, 140587082801152, 140587082817535, -STORE, 140587082817536, 140587082825727, -SNULL, 94589469790207, 94589469794303, -STORE, 94589469782016, 94589469790207, -STORE, 94589469790208, 94589469794303, -SNULL, 140587085086719, 140587085090815, -STORE, 140587085082624, 140587085086719, -STORE, 140587085086720, 140587085090815, -ERASE, 140587085053952, 140587085082623, -STORE, 94589477507072, 94589477642239, -STORE, 94225448325120, 94225448538111, -STORE, 94225450635264, 94225450639359, -STORE, 94225450639360, 94225450647551, -STORE, 94225450647552, 94225450659839, -STORE, 94225470246912, 94225473548287, -STORE, 140199245496320, 140199247155199, -STORE, 140199247155200, 140199249252351, -STORE, 140199249252352, 140199249268735, -STORE, 140199249268736, 140199249276927, -STORE, 140199249276928, 140199249293311, -STORE, 140199249293312, 140199249305599, -STORE, 140199249305600, 140199251398655, -STORE, 140199251398656, 140199251402751, -STORE, 140199251402752, 140199251406847, -STORE, 140199251406848, 140199251550207, -STORE, 140199251918848, 140199253602303, -STORE, 140199253602304, 140199253618687, -STORE, 140199253647360, 140199253651455, -STORE, 140199253651456, 140199253655551, -STORE, 140199253655552, 140199253659647, -STORE, 140726264414208, 140726264553471, -STORE, 140726265843712, 140726265855999, -STORE, 140726265856000, 140726265860095, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140733508358144, 140737488351231, -SNULL, 140733508366335, 140737488351231, -STORE, 140733508358144, 140733508366335, -STORE, 140733508227072, 140733508366335, -STORE, 94766263947264, 94766266171391, -SNULL, 94766264057855, 94766266171391, -STORE, 94766263947264, 94766264057855, -STORE, 94766264057856, 94766266171391, -ERASE, 94766264057856, 94766266171391, -STORE, 94766266150912, 94766266163199, -STORE, 94766266163200, 94766266171391, -STORE, 140693985132544, 140693987385343, -SNULL, 140693985275903, 140693987385343, -STORE, 140693985132544, 140693985275903, -STORE, 140693985275904, 140693987385343, -ERASE, 140693985275904, 140693987385343, -STORE, 140693987373056, 140693987381247, -STORE, 140693987381248, 140693987385343, -STORE, 140733509939200, 140733509943295, -STORE, 140733509926912, 140733509939199, -STORE, 140693987344384, 140693987373055, -STORE, 140693987336192, 140693987344383, -STORE, 140693981335552, 140693985132543, -SNULL, 140693981335552, 140693982994431, -STORE, 140693982994432, 140693985132543, -STORE, 140693981335552, 140693982994431, -SNULL, 140693985091583, 140693985132543, -STORE, 140693982994432, 140693985091583, -STORE, 140693985091584, 140693985132543, -SNULL, 140693985091584, 140693985116159, -STORE, 140693985116160, 140693985132543, -STORE, 140693985091584, 140693985116159, -ERASE, 140693985091584, 140693985116159, -STORE, 140693985091584, 140693985116159, -ERASE, 140693985116160, 140693985132543, -STORE, 140693985116160, 140693985132543, -SNULL, 140693985107967, 140693985116159, -STORE, 140693985091584, 140693985107967, -STORE, 140693985107968, 140693985116159, -SNULL, 94766266159103, 94766266163199, -STORE, 94766266150912, 94766266159103, -STORE, 94766266159104, 94766266163199, -SNULL, 140693987377151, 140693987381247, -STORE, 140693987373056, 140693987377151, -STORE, 140693987377152, 140693987381247, -ERASE, 140693987344384, 140693987373055, -STORE, 94766282035200, 94766282170367, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140724769353728, 140737488351231, -SNULL, 140724769361919, 140737488351231, -STORE, 140724769353728, 140724769361919, -STORE, 140724769222656, 140724769361919, -STORE, 94710460526592, 94710462750719, -SNULL, 94710460637183, 94710462750719, -STORE, 94710460526592, 94710460637183, -STORE, 94710460637184, 94710462750719, -ERASE, 94710460637184, 94710462750719, -STORE, 94710462730240, 94710462742527, -STORE, 94710462742528, 94710462750719, -STORE, 140469764395008, 140469766647807, -SNULL, 140469764538367, 140469766647807, -STORE, 140469764395008, 140469764538367, -STORE, 140469764538368, 140469766647807, -ERASE, 140469764538368, 140469766647807, -STORE, 140469766635520, 140469766643711, -STORE, 140469766643712, 140469766647807, -STORE, 140724770877440, 140724770881535, -STORE, 140724770865152, 140724770877439, -STORE, 140469766606848, 140469766635519, -STORE, 140469766598656, 140469766606847, -STORE, 140469760598016, 140469764395007, -SNULL, 140469760598016, 140469762256895, -STORE, 140469762256896, 140469764395007, -STORE, 140469760598016, 140469762256895, -SNULL, 140469764354047, 140469764395007, -STORE, 140469762256896, 140469764354047, -STORE, 140469764354048, 140469764395007, -SNULL, 140469764354048, 140469764378623, -STORE, 140469764378624, 140469764395007, -STORE, 140469764354048, 140469764378623, -ERASE, 140469764354048, 140469764378623, -STORE, 140469764354048, 140469764378623, -ERASE, 140469764378624, 140469764395007, -STORE, 140469764378624, 140469764395007, -SNULL, 140469764370431, 140469764378623, -STORE, 140469764354048, 140469764370431, -STORE, 140469764370432, 140469764378623, -SNULL, 94710462738431, 94710462742527, -STORE, 94710462730240, 94710462738431, -STORE, 94710462738432, 94710462742527, -SNULL, 140469766639615, 140469766643711, -STORE, 140469766635520, 140469766639615, -STORE, 140469766639616, 140469766643711, -ERASE, 140469766606848, 140469766635519, -STORE, 94710485581824, 94710485716991, -STORE, 94105755795456, 94105756008447, -STORE, 94105758105600, 94105758109695, -STORE, 94105758109696, 94105758117887, -STORE, 94105758117888, 94105758130175, -STORE, 94105788981248, 94105794871295, -STORE, 140641190031360, 140641191690239, -STORE, 140641191690240, 140641193787391, -STORE, 140641193787392, 140641193803775, -STORE, 140641193803776, 140641193811967, -STORE, 140641193811968, 140641193828351, -STORE, 140641193828352, 140641193840639, -STORE, 140641193840640, 140641195933695, -STORE, 140641195933696, 140641195937791, -STORE, 140641195937792, 140641195941887, -STORE, 140641195941888, 140641196085247, -STORE, 140641196453888, 140641198137343, -STORE, 140641198137344, 140641198153727, -STORE, 140641198182400, 140641198186495, -STORE, 140641198186496, 140641198190591, -STORE, 140641198190592, 140641198194687, -STORE, 140731980034048, 140731980173311, -STORE, 140731981078528, 140731981090815, -STORE, 140731981090816, 140731981094911, -STORE, 93828086431744, 93828086644735, -STORE, 93828088741888, 93828088745983, -STORE, 93828088745984, 93828088754175, -STORE, 93828088754176, 93828088766463, -STORE, 93828094193664, 93828096831487, -STORE, 139844717334528, 139844718993407, -STORE, 139844718993408, 139844721090559, -STORE, 139844721090560, 139844721106943, -STORE, 139844721106944, 139844721115135, -STORE, 139844721115136, 139844721131519, -STORE, 139844721131520, 139844721143807, -STORE, 139844721143808, 139844723236863, -STORE, 139844723236864, 139844723240959, -STORE, 139844723240960, 139844723245055, -STORE, 139844723245056, 139844723388415, -STORE, 139844723757056, 139844725440511, -STORE, 139844725440512, 139844725456895, -STORE, 139844725485568, 139844725489663, -STORE, 139844725489664, 139844725493759, -STORE, 139844725493760, 139844725497855, -STORE, 140729996185600, 140729996324863, -STORE, 140729996828672, 140729996840959, -STORE, 140729996840960, 140729996845055, -STORE, 140737488347136, 140737488351231, -STORE, 140722494771200, 140737488351231, -SNULL, 140722494775295, 140737488351231, -STORE, 140722494771200, 140722494775295, -STORE, 140722494640128, 140722494775295, -STORE, 94324011311104, 94324013535231, -SNULL, 94324011421695, 94324013535231, -STORE, 94324011311104, 94324011421695, -STORE, 94324011421696, 94324013535231, -ERASE, 94324011421696, 94324013535231, -STORE, 94324013514752, 94324013527039, -STORE, 94324013527040, 94324013535231, -STORE, 140151462309888, 140151464562687, -SNULL, 140151462453247, 140151464562687, -STORE, 140151462309888, 140151462453247, -STORE, 140151462453248, 140151464562687, -ERASE, 140151462453248, 140151464562687, -STORE, 140151464550400, 140151464558591, -STORE, 140151464558592, 140151464562687, -STORE, 140722495467520, 140722495471615, -STORE, 140722495455232, 140722495467519, -STORE, 140151464521728, 140151464550399, -STORE, 140151464513536, 140151464521727, -STORE, 140151458512896, 140151462309887, -SNULL, 140151458512896, 140151460171775, -STORE, 140151460171776, 140151462309887, -STORE, 140151458512896, 140151460171775, -SNULL, 140151462268927, 140151462309887, -STORE, 140151460171776, 140151462268927, -STORE, 140151462268928, 140151462309887, -SNULL, 140151462268928, 140151462293503, -STORE, 140151462293504, 140151462309887, -STORE, 140151462268928, 140151462293503, -ERASE, 140151462268928, 140151462293503, -STORE, 140151462268928, 140151462293503, -ERASE, 140151462293504, 140151462309887, -STORE, 140151462293504, 140151462309887, -SNULL, 140151462285311, 140151462293503, -STORE, 140151462268928, 140151462285311, -STORE, 140151462285312, 140151462293503, -SNULL, 94324013522943, 94324013527039, -STORE, 94324013514752, 94324013522943, -STORE, 94324013522944, 94324013527039, -SNULL, 140151464554495, 140151464558591, -STORE, 140151464550400, 140151464554495, -STORE, 140151464554496, 140151464558591, -ERASE, 140151464521728, 140151464550399, -STORE, 94324024778752, 94324024913919, -STORE, 94899262967808, 94899263180799, -STORE, 94899265277952, 94899265282047, -STORE, 94899265282048, 94899265290239, -STORE, 94899265290240, 94899265302527, -STORE, 94899295469568, 94899298689023, -STORE, 140434388418560, 140434390077439, -STORE, 140434390077440, 140434392174591, -STORE, 140434392174592, 140434392190975, -STORE, 140434392190976, 140434392199167, -STORE, 140434392199168, 140434392215551, -STORE, 140434392215552, 140434392227839, -STORE, 140434392227840, 140434394320895, -STORE, 140434394320896, 140434394324991, -STORE, 140434394324992, 140434394329087, -STORE, 140434394329088, 140434394472447, -STORE, 140434394841088, 140434396524543, -STORE, 140434396524544, 140434396540927, -STORE, 140434396569600, 140434396573695, -STORE, 140434396573696, 140434396577791, -STORE, 140434396577792, 140434396581887, -STORE, 140720618135552, 140720618274815, -STORE, 140720618418176, 140720618430463, -STORE, 140720618430464, 140720618434559, -STORE, 94425529798656, 94425530011647, -STORE, 94425532108800, 94425532112895, -STORE, 94425532112896, 94425532121087, -STORE, 94425532121088, 94425532133375, -STORE, 94425557753856, 94425566576639, -STORE, 140600528470016, 140600530128895, -STORE, 140600530128896, 140600532226047, -STORE, 140600532226048, 140600532242431, -STORE, 140600532242432, 140600532250623, -STORE, 140600532250624, 140600532267007, -STORE, 140600532267008, 140600532279295, -STORE, 140600532279296, 140600534372351, -STORE, 140600534372352, 140600534376447, -STORE, 140600534376448, 140600534380543, -STORE, 140600534380544, 140600534523903, -STORE, 140600534892544, 140600536575999, -STORE, 140600536576000, 140600536592383, -STORE, 140600536621056, 140600536625151, -STORE, 140600536625152, 140600536629247, -STORE, 140600536629248, 140600536633343, -STORE, 140721857785856, 140721857925119, -STORE, 140721858068480, 140721858080767, -STORE, 140721858080768, 140721858084863, -STORE, 94425529798656, 94425530011647, -STORE, 94425532108800, 94425532112895, -STORE, 94425532112896, 94425532121087, -STORE, 94425532121088, 94425532133375, -STORE, 94425557753856, 94425568772095, -STORE, 140600528470016, 140600530128895, -STORE, 140600530128896, 140600532226047, -STORE, 140600532226048, 140600532242431, -STORE, 140600532242432, 140600532250623, -STORE, 140600532250624, 140600532267007, -STORE, 140600532267008, 140600532279295, -STORE, 140600532279296, 140600534372351, -STORE, 140600534372352, 140600534376447, -STORE, 140600534376448, 140600534380543, -STORE, 140600534380544, 140600534523903, -STORE, 140600534892544, 140600536575999, -STORE, 140600536576000, 140600536592383, -STORE, 140600536621056, 140600536625151, -STORE, 140600536625152, 140600536629247, -STORE, 140600536629248, 140600536633343, -STORE, 140721857785856, 140721857925119, -STORE, 140721858068480, 140721858080767, -STORE, 140721858080768, 140721858084863, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140735611645952, 140737488351231, -SNULL, 140735611654143, 140737488351231, -STORE, 140735611645952, 140735611654143, -STORE, 140735611514880, 140735611654143, -STORE, 94592137641984, 94592139866111, -SNULL, 94592137752575, 94592139866111, -STORE, 94592137641984, 94592137752575, -STORE, 94592137752576, 94592139866111, -ERASE, 94592137752576, 94592139866111, -STORE, 94592139845632, 94592139857919, -STORE, 94592139857920, 94592139866111, -STORE, 140350425030656, 140350427283455, -SNULL, 140350425174015, 140350427283455, -STORE, 140350425030656, 140350425174015, -STORE, 140350425174016, 140350427283455, -ERASE, 140350425174016, 140350427283455, -STORE, 140350427271168, 140350427279359, -STORE, 140350427279360, 140350427283455, -STORE, 140735612043264, 140735612047359, -STORE, 140735612030976, 140735612043263, -STORE, 140350427242496, 140350427271167, -STORE, 140350427234304, 140350427242495, -STORE, 140350421233664, 140350425030655, -SNULL, 140350421233664, 140350422892543, -STORE, 140350422892544, 140350425030655, -STORE, 140350421233664, 140350422892543, -SNULL, 140350424989695, 140350425030655, -STORE, 140350422892544, 140350424989695, -STORE, 140350424989696, 140350425030655, -SNULL, 140350424989696, 140350425014271, -STORE, 140350425014272, 140350425030655, -STORE, 140350424989696, 140350425014271, -ERASE, 140350424989696, 140350425014271, -STORE, 140350424989696, 140350425014271, -ERASE, 140350425014272, 140350425030655, -STORE, 140350425014272, 140350425030655, -SNULL, 140350425006079, 140350425014271, -STORE, 140350424989696, 140350425006079, -STORE, 140350425006080, 140350425014271, -SNULL, 94592139853823, 94592139857919, -STORE, 94592139845632, 94592139853823, -STORE, 94592139853824, 94592139857919, -SNULL, 140350427275263, 140350427279359, -STORE, 140350427271168, 140350427275263, -STORE, 140350427275264, 140350427279359, -ERASE, 140350427242496, 140350427271167, -STORE, 94592164823040, 94592164958207, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140723500535808, 140737488351231, -SNULL, 140723500543999, 140737488351231, -STORE, 140723500535808, 140723500543999, -STORE, 140723500404736, 140723500543999, -STORE, 94458379010048, 94458381234175, -SNULL, 94458379120639, 94458381234175, -STORE, 94458379010048, 94458379120639, -STORE, 94458379120640, 94458381234175, -ERASE, 94458379120640, 94458381234175, -STORE, 94458381213696, 94458381225983, -STORE, 94458381225984, 94458381234175, -STORE, 139771674230784, 139771676483583, -SNULL, 139771674374143, 139771676483583, -STORE, 139771674230784, 139771674374143, -STORE, 139771674374144, 139771676483583, -ERASE, 139771674374144, 139771676483583, -STORE, 139771676471296, 139771676479487, -STORE, 139771676479488, 139771676483583, -STORE, 140723500769280, 140723500773375, -STORE, 140723500756992, 140723500769279, -STORE, 139771676442624, 139771676471295, -STORE, 139771676434432, 139771676442623, -STORE, 139771670433792, 139771674230783, -SNULL, 139771670433792, 139771672092671, -STORE, 139771672092672, 139771674230783, -STORE, 139771670433792, 139771672092671, -SNULL, 139771674189823, 139771674230783, -STORE, 139771672092672, 139771674189823, -STORE, 139771674189824, 139771674230783, -SNULL, 139771674189824, 139771674214399, -STORE, 139771674214400, 139771674230783, -STORE, 139771674189824, 139771674214399, -ERASE, 139771674189824, 139771674214399, -STORE, 139771674189824, 139771674214399, -ERASE, 139771674214400, 139771674230783, -STORE, 139771674214400, 139771674230783, -SNULL, 139771674206207, 139771674214399, -STORE, 139771674189824, 139771674206207, -STORE, 139771674206208, 139771674214399, -SNULL, 94458381221887, 94458381225983, -STORE, 94458381213696, 94458381221887, -STORE, 94458381221888, 94458381225983, -SNULL, 139771676475391, 139771676479487, -STORE, 139771676471296, 139771676475391, -STORE, 139771676475392, 139771676479487, -ERASE, 139771676442624, 139771676471295, -STORE, 94458401873920, 94458402009087, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140731316264960, 140737488351231, -SNULL, 140731316273151, 140737488351231, -STORE, 140731316264960, 140731316273151, -STORE, 140731316133888, 140731316273151, -STORE, 94437830881280, 94437833215999, -SNULL, 94437831094271, 94437833215999, -STORE, 94437830881280, 94437831094271, -STORE, 94437831094272, 94437833215999, -ERASE, 94437831094272, 94437833215999, -STORE, 94437833191424, 94437833203711, -STORE, 94437833203712, 94437833215999, -STORE, 140265986031616, 140265988284415, -SNULL, 140265986174975, 140265988284415, -STORE, 140265986031616, 140265986174975, -STORE, 140265986174976, 140265988284415, -ERASE, 140265986174976, 140265988284415, -STORE, 140265988272128, 140265988280319, -STORE, 140265988280320, 140265988284415, -STORE, 140731316318208, 140731316322303, -STORE, 140731316305920, 140731316318207, -STORE, 140265988243456, 140265988272127, -STORE, 140265988235264, 140265988243455, -STORE, 140265983918080, 140265986031615, -SNULL, 140265983918080, 140265983930367, -STORE, 140265983930368, 140265986031615, -STORE, 140265983918080, 140265983930367, -SNULL, 140265986023423, 140265986031615, -STORE, 140265983930368, 140265986023423, -STORE, 140265986023424, 140265986031615, -ERASE, 140265986023424, 140265986031615, -STORE, 140265986023424, 140265986031615, -STORE, 140265980121088, 140265983918079, -SNULL, 140265980121088, 140265981779967, -STORE, 140265981779968, 140265983918079, -STORE, 140265980121088, 140265981779967, -SNULL, 140265983877119, 140265983918079, -STORE, 140265981779968, 140265983877119, -STORE, 140265983877120, 140265983918079, -SNULL, 140265983877120, 140265983901695, -STORE, 140265983901696, 140265983918079, -STORE, 140265983877120, 140265983901695, -ERASE, 140265983877120, 140265983901695, -STORE, 140265983877120, 140265983901695, -ERASE, 140265983901696, 140265983918079, -STORE, 140265983901696, 140265983918079, -STORE, 140265988227072, 140265988243455, -SNULL, 140265983893503, 140265983901695, -STORE, 140265983877120, 140265983893503, -STORE, 140265983893504, 140265983901695, -SNULL, 140265986027519, 140265986031615, -STORE, 140265986023424, 140265986027519, -STORE, 140265986027520, 140265986031615, -SNULL, 94437833195519, 94437833203711, -STORE, 94437833191424, 94437833195519, -STORE, 94437833195520, 94437833203711, -SNULL, 140265988276223, 140265988280319, -STORE, 140265988272128, 140265988276223, -STORE, 140265988276224, 140265988280319, -ERASE, 140265988243456, 140265988272127, -STORE, 94437847638016, 94437847773183, -STORE, 140265986543616, 140265988227071, -STORE, 94437847638016, 94437847908351, -STORE, 94437847638016, 94437848043519, -STORE, 94437847638016, 94437848190975, -SNULL, 94437848178687, 94437848190975, -STORE, 94437847638016, 94437848178687, -STORE, 94437848178688, 94437848190975, -ERASE, 94437848178688, 94437848190975, -STORE, 94437847638016, 94437848330239, -STORE, 94437847638016, 94437848465407, -SNULL, 94437848444927, 94437848465407, -STORE, 94437847638016, 94437848444927, -STORE, 94437848444928, 94437848465407, -ERASE, 94437848444928, 94437848465407, -STORE, 94437847638016, 94437848584191, -STORE, 94437847638016, 94437848719359, -SNULL, 94437848678399, 94437848719359, -STORE, 94437847638016, 94437848678399, -STORE, 94437848678400, 94437848719359, -ERASE, 94437848678400, 94437848719359, -STORE, 94437847638016, 94437848842239, -SNULL, 94437848825855, 94437848842239, -STORE, 94437847638016, 94437848825855, -STORE, 94437848825856, 94437848842239, -ERASE, 94437848825856, 94437848842239, -STORE, 94437847638016, 94437848961023, -STORE, 94437847638016, 94437849096191, -STORE, 94661814710272, 94661814923263, -STORE, 94661817020416, 94661817024511, -STORE, 94661817024512, 94661817032703, -STORE, 94661817032704, 94661817044991, -STORE, 94661840424960, 94661841240063, -STORE, 140582259814400, 140582261473279, -STORE, 140582261473280, 140582263570431, -STORE, 140582263570432, 140582263586815, -STORE, 140582263586816, 140582263595007, -STORE, 140582263595008, 140582263611391, -STORE, 140582263611392, 140582263623679, -STORE, 140582263623680, 140582265716735, -STORE, 140582265716736, 140582265720831, -STORE, 140582265720832, 140582265724927, -STORE, 140582265724928, 140582265868287, -STORE, 140582266236928, 140582267920383, -STORE, 140582267920384, 140582267936767, -STORE, 140582267965440, 140582267969535, -STORE, 140582267969536, 140582267973631, -STORE, 140582267973632, 140582267977727, -STORE, 140735472508928, 140735472648191, -STORE, 140735472672768, 140735472685055, -STORE, 140735472685056, 140735472689151, -STORE, 94440069140480, 94440069353471, -STORE, 94440071450624, 94440071454719, -STORE, 94440071454720, 94440071462911, -STORE, 94440071462912, 94440071475199, -STORE, 94440072122368, 94440079048703, -STORE, 140112218095616, 140112219754495, -STORE, 140112219754496, 140112221851647, -STORE, 140112221851648, 140112221868031, -STORE, 140112221868032, 140112221876223, -STORE, 140112221876224, 140112221892607, -STORE, 140112221892608, 140112221904895, -STORE, 140112221904896, 140112223997951, -STORE, 140112223997952, 140112224002047, -STORE, 140112224002048, 140112224006143, -STORE, 140112224006144, 140112224149503, -STORE, 140112224518144, 140112226201599, -STORE, 140112226201600, 140112226217983, -STORE, 140112226246656, 140112226250751, -STORE, 140112226250752, 140112226254847, -STORE, 140112226254848, 140112226258943, -STORE, 140737460969472, 140737461108735, -STORE, 140737462083584, 140737462095871, -STORE, 140737462095872, 140737462099967, -STORE, 94257654345728, 94257654390783, -STORE, 94257656483840, 94257656487935, -STORE, 94257656487936, 94257656492031, -STORE, 94257656492032, 94257656496127, -STORE, 94257665859584, 94257665994751, -STORE, 140507070345216, 140507070386175, -STORE, 140507070386176, 140507072483327, -STORE, 140507072483328, 140507072487423, -STORE, 140507072487424, 140507072491519, -STORE, 140507072491520, 140507072516095, -STORE, 140507072516096, 140507072561151, -STORE, 140507072561152, 140507074654207, -STORE, 140507074654208, 140507074658303, -STORE, 140507074658304, 140507074662399, -STORE, 140507074662400, 140507074744319, -STORE, 140507074744320, 140507076841471, -STORE, 140507076841472, 140507076845567, -STORE, 140507076845568, 140507076849663, -STORE, 140507076849664, 140507076857855, -STORE, 140507076857856, 140507076886527, -STORE, 140507076886528, 140507078979583, -STORE, 140507078979584, 140507078983679, -STORE, 140507078983680, 140507078987775, -STORE, 140507078987776, 140507079086079, -STORE, 140507079086080, 140507081179135, -STORE, 140507081179136, 140507081183231, -STORE, 140507081183232, 140507081187327, -STORE, 140507081187328, 140507081203711, -STORE, 140507081203712, 140507081220095, -STORE, 140507081220096, 140507083317247, -STORE, 140507083317248, 140507083321343, -STORE, 140507083321344, 140507083325439, -STORE, 140507083325440, 140507083792383, -STORE, 140507083792384, 140507085885439, -STORE, 140507085885440, 140507085889535, -STORE, 140507085889536, 140507085893631, -STORE, 140507085893632, 140507085905919, -STORE, 140507085905920, 140507087998975, -STORE, 140507087998976, 140507088003071, -STORE, 140507088003072, 140507088007167, -STORE, 140507088007168, 140507088125951, -STORE, 140507088125952, 140507090219007, -STORE, 140507090219008, 140507090223103, -STORE, 140507090223104, 140507090227199, -STORE, 140507090227200, 140507090268159, -STORE, 140507090268160, 140507091927039, -STORE, 140507091927040, 140507094024191, -STORE, 140507094024192, 140507094040575, -STORE, 140507094040576, 140507094048767, -STORE, 140507094048768, 140507094065151, -STORE, 140507094065152, 140507094216703, -STORE, 140507094216704, 140507096309759, -STORE, 140507096309760, 140507096313855, -STORE, 140507096313856, 140507096317951, -STORE, 140507096317952, 140507096326143, -STORE, 140507096326144, 140507096379391, -STORE, 140507096379392, 140507098472447, -STORE, 140507098472448, 140507098476543, -STORE, 140507098476544, 140507098480639, -STORE, 140507098480640, 140507098623999, -STORE, 140507098980352, 140507100663807, -STORE, 140507100663808, 140507100692479, -STORE, 140507100721152, 140507100725247, -STORE, 140507100725248, 140507100729343, -STORE, 140507100729344, 140507100733439, -STORE, 140728152780800, 140728152915967, -STORE, 140728153698304, 140728153710591, -STORE, 140728153710592, 140728153714687, -STORE, 140507068137472, 140507070345215, -SNULL, 140507068137472, 140507068190719, -STORE, 140507068190720, 140507070345215, -STORE, 140507068137472, 140507068190719, -SNULL, 140507070287871, 140507070345215, -STORE, 140507068190720, 140507070287871, -STORE, 140507070287872, 140507070345215, -SNULL, 140507070287872, 140507070296063, -STORE, 140507070296064, 140507070345215, -STORE, 140507070287872, 140507070296063, -ERASE, 140507070287872, 140507070296063, -STORE, 140507070287872, 140507070296063, -ERASE, 140507070296064, 140507070345215, -STORE, 140507070296064, 140507070345215, -STORE, 140507100692480, 140507100721151, -STORE, 140507065810944, 140507068137471, -SNULL, 140507065810944, 140507065843711, -STORE, 140507065843712, 140507068137471, -STORE, 140507065810944, 140507065843711, -SNULL, 140507067940863, 140507068137471, -STORE, 140507065843712, 140507067940863, -STORE, 140507067940864, 140507068137471, -SNULL, 140507067940864, 140507067949055, -STORE, 140507067949056, 140507068137471, -STORE, 140507067940864, 140507067949055, -ERASE, 140507067940864, 140507067949055, -STORE, 140507067940864, 140507067949055, -ERASE, 140507067949056, 140507068137471, -STORE, 140507067949056, 140507068137471, -SNULL, 140507067944959, 140507067949055, -STORE, 140507067940864, 140507067944959, -STORE, 140507067944960, 140507067949055, -SNULL, 140507070291967, 140507070296063, -STORE, 140507070287872, 140507070291967, -STORE, 140507070291968, 140507070296063, -ERASE, 140507100692480, 140507100721151, -STORE, 140507063705600, 140507065810943, -SNULL, 140507063705600, 140507063709695, -STORE, 140507063709696, 140507065810943, -STORE, 140507063705600, 140507063709695, -SNULL, 140507065802751, 140507065810943, -STORE, 140507063709696, 140507065802751, -STORE, 140507065802752, 140507065810943, -ERASE, 140507065802752, 140507065810943, -STORE, 140507065802752, 140507065810943, -SNULL, 140507065806847, 140507065810943, -STORE, 140507065802752, 140507065806847, -STORE, 140507065806848, 140507065810943, -STORE, 140507061600256, 140507063705599, -SNULL, 140507061600256, 140507061604351, -STORE, 140507061604352, 140507063705599, -STORE, 140507061600256, 140507061604351, -SNULL, 140507063697407, 140507063705599, -STORE, 140507061604352, 140507063697407, -STORE, 140507063697408, 140507063705599, -ERASE, 140507063697408, 140507063705599, -STORE, 140507063697408, 140507063705599, -SNULL, 140507063701503, 140507063705599, -STORE, 140507063697408, 140507063701503, -STORE, 140507063701504, 140507063705599, -STORE, 140507059490816, 140507061600255, -SNULL, 140507059490816, 140507059499007, -STORE, 140507059499008, 140507061600255, -STORE, 140507059490816, 140507059499007, -SNULL, 140507061592063, 140507061600255, -STORE, 140507059499008, 140507061592063, -STORE, 140507061592064, 140507061600255, -ERASE, 140507061592064, 140507061600255, -STORE, 140507061592064, 140507061600255, -SNULL, 140507061596159, 140507061600255, -STORE, 140507061592064, 140507061596159, -STORE, 140507061596160, 140507061600255, -STORE, 140507057377280, 140507059490815, -SNULL, 140507057377280, 140507057389567, -STORE, 140507057389568, 140507059490815, -STORE, 140507057377280, 140507057389567, -SNULL, 140507059482623, 140507059490815, -STORE, 140507057389568, 140507059482623, -STORE, 140507059482624, 140507059490815, -ERASE, 140507059482624, 140507059490815, -STORE, 140507059482624, 140507059490815, -SNULL, 140507059486719, 140507059490815, -STORE, 140507059482624, 140507059486719, -STORE, 140507059486720, 140507059490815, -STORE, 140507055255552, 140507057377279, -SNULL, 140507055255552, 140507055276031, -STORE, 140507055276032, 140507057377279, -STORE, 140507055255552, 140507055276031, -SNULL, 140507057369087, 140507057377279, -STORE, 140507055276032, 140507057369087, -STORE, 140507057369088, 140507057377279, -ERASE, 140507057369088, 140507057377279, -STORE, 140507057369088, 140507057377279, -SNULL, 140507057373183, 140507057377279, -STORE, 140507057369088, 140507057373183, -STORE, 140507057373184, 140507057377279, -STORE, 140507098693632, 140507098980351, -SNULL, 140507098959871, 140507098980351, -STORE, 140507098693632, 140507098959871, -STORE, 140507098959872, 140507098980351, -SNULL, 140507098959872, 140507098976255, -STORE, 140507098976256, 140507098980351, -STORE, 140507098959872, 140507098976255, -ERASE, 140507098959872, 140507098976255, -STORE, 140507098959872, 140507098976255, -ERASE, 140507098976256, 140507098980351, -STORE, 140507098976256, 140507098980351, -STORE, 140507100692480, 140507100721151, -STORE, 140507053125632, 140507055255551, -SNULL, 140507053125632, 140507053154303, -STORE, 140507053154304, 140507055255551, -STORE, 140507053125632, 140507053154303, -SNULL, 140507055247359, 140507055255551, -STORE, 140507053154304, 140507055247359, -STORE, 140507055247360, 140507055255551, -ERASE, 140507055247360, 140507055255551, -STORE, 140507055247360, 140507055255551, -STORE, 140507051012096, 140507053125631, -SNULL, 140507051012096, 140507051024383, -STORE, 140507051024384, 140507053125631, -STORE, 140507051012096, 140507051024383, -SNULL, 140507053117439, 140507053125631, -STORE, 140507051024384, 140507053117439, -STORE, 140507053117440, 140507053125631, -ERASE, 140507053117440, 140507053125631, -STORE, 140507053117440, 140507053125631, -SNULL, 140507053121535, 140507053125631, -STORE, 140507053117440, 140507053121535, -STORE, 140507053121536, 140507053125631, -SNULL, 140507055251455, 140507055255551, -STORE, 140507055247360, 140507055251455, -STORE, 140507055251456, 140507055255551, -SNULL, 140507098972159, 140507098976255, -STORE, 140507098959872, 140507098972159, -STORE, 140507098972160, 140507098976255, -ERASE, 140507100692480, 140507100721151, -STORE, 140507100717056, 140507100721151, -ERASE, 140507100717056, 140507100721151, -STORE, 140507100717056, 140507100721151, -ERASE, 140507100717056, 140507100721151, -STORE, 140507100717056, 140507100721151, -ERASE, 140507100717056, 140507100721151, -STORE, 140507100717056, 140507100721151, -ERASE, 140507100717056, 140507100721151, -STORE, 140507100692480, 140507100721151, -ERASE, 140507068137472, 140507068190719, -ERASE, 140507068190720, 140507070287871, -ERASE, 140507070287872, 140507070291967, -ERASE, 140507070291968, 140507070296063, -ERASE, 140507070296064, 140507070345215, -ERASE, 140507065810944, 140507065843711, -ERASE, 140507065843712, 140507067940863, -ERASE, 140507067940864, 140507067944959, -ERASE, 140507067944960, 140507067949055, -ERASE, 140507067949056, 140507068137471, -ERASE, 140507063705600, 140507063709695, -ERASE, 140507063709696, 140507065802751, -ERASE, 140507065802752, 140507065806847, -ERASE, 140507065806848, 140507065810943, -ERASE, 140507061600256, 140507061604351, -ERASE, 140507061604352, 140507063697407, -ERASE, 140507063697408, 140507063701503, -ERASE, 140507063701504, 140507063705599, -ERASE, 140507059490816, 140507059499007, -ERASE, 140507059499008, 140507061592063, -ERASE, 140507061592064, 140507061596159, -ERASE, 140507061596160, 140507061600255, -ERASE, 140507057377280, 140507057389567, -ERASE, 140507057389568, 140507059482623, -ERASE, 140507059482624, 140507059486719, -ERASE, 140507059486720, 140507059490815, -ERASE, 140507055255552, 140507055276031, -ERASE, 140507055276032, 140507057369087, -ERASE, 140507057369088, 140507057373183, -ERASE, 140507057373184, 140507057377279, -ERASE, 140507098693632, 140507098959871, -ERASE, 140507098959872, 140507098972159, -ERASE, 140507098972160, 140507098976255, -ERASE, 140507098976256, 140507098980351, -ERASE, 140507051012096, 140507051024383, -ERASE, 140507051024384, 140507053117439, -ERASE, 140507053117440, 140507053121535, -ERASE, 140507053121536, 140507053125631, -STORE, 94036448296960, 94036448509951, -STORE, 94036450607104, 94036450611199, -STORE, 94036450611200, 94036450619391, -STORE, 94036450619392, 94036450631679, -STORE, 94036482445312, 94036502376447, -STORE, 140469487013888, 140469488672767, -STORE, 140469488672768, 140469490769919, -STORE, 140469490769920, 140469490786303, -STORE, 140469490786304, 140469490794495, -STORE, 140469490794496, 140469490810879, -STORE, 140469490810880, 140469490823167, -STORE, 140469490823168, 140469492916223, -STORE, 140469492916224, 140469492920319, -STORE, 140469492920320, 140469492924415, -STORE, 140469492924416, 140469493067775, -STORE, 140469493436416, 140469495119871, -STORE, 140469495119872, 140469495136255, -STORE, 140469495164928, 140469495169023, -STORE, 140469495169024, 140469495173119, -STORE, 140469495173120, 140469495177215, -STORE, 140732281446400, 140732281585663, -STORE, 140732282736640, 140732282748927, -STORE, 140732282748928, 140732282753023, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140723411931136, 140737488351231, -SNULL, 140723411939327, 140737488351231, -STORE, 140723411931136, 140723411939327, -STORE, 140723411800064, 140723411939327, -STORE, 93993768685568, 93993770909695, -SNULL, 93993768796159, 93993770909695, -STORE, 93993768685568, 93993768796159, -STORE, 93993768796160, 93993770909695, -ERASE, 93993768796160, 93993770909695, -STORE, 93993770889216, 93993770901503, -STORE, 93993770901504, 93993770909695, -STORE, 140508681740288, 140508683993087, -SNULL, 140508681883647, 140508683993087, -STORE, 140508681740288, 140508681883647, -STORE, 140508681883648, 140508683993087, -ERASE, 140508681883648, 140508683993087, -STORE, 140508683980800, 140508683988991, -STORE, 140508683988992, 140508683993087, -STORE, 140723412070400, 140723412074495, -STORE, 140723412058112, 140723412070399, -STORE, 140508683952128, 140508683980799, -STORE, 140508683943936, 140508683952127, -STORE, 140508677943296, 140508681740287, -SNULL, 140508677943296, 140508679602175, -STORE, 140508679602176, 140508681740287, -STORE, 140508677943296, 140508679602175, -SNULL, 140508681699327, 140508681740287, -STORE, 140508679602176, 140508681699327, -STORE, 140508681699328, 140508681740287, -SNULL, 140508681699328, 140508681723903, -STORE, 140508681723904, 140508681740287, -STORE, 140508681699328, 140508681723903, -ERASE, 140508681699328, 140508681723903, -STORE, 140508681699328, 140508681723903, -ERASE, 140508681723904, 140508681740287, -STORE, 140508681723904, 140508681740287, -SNULL, 140508681715711, 140508681723903, -STORE, 140508681699328, 140508681715711, -STORE, 140508681715712, 140508681723903, -SNULL, 93993770897407, 93993770901503, -STORE, 93993770889216, 93993770897407, -STORE, 93993770897408, 93993770901503, -SNULL, 140508683984895, 140508683988991, -STORE, 140508683980800, 140508683984895, -STORE, 140508683984896, 140508683988991, -ERASE, 140508683952128, 140508683980799, -STORE, 93993791582208, 93993791717375, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140734685458432, 140737488351231, -SNULL, 140734685466623, 140737488351231, -STORE, 140734685458432, 140734685466623, -STORE, 140734685327360, 140734685466623, -STORE, 93832321548288, 93832323772415, -SNULL, 93832321658879, 93832323772415, -STORE, 93832321548288, 93832321658879, -STORE, 93832321658880, 93832323772415, -ERASE, 93832321658880, 93832323772415, -STORE, 93832323751936, 93832323764223, -STORE, 93832323764224, 93832323772415, -STORE, 140650945118208, 140650947371007, -SNULL, 140650945261567, 140650947371007, -STORE, 140650945118208, 140650945261567, -STORE, 140650945261568, 140650947371007, -ERASE, 140650945261568, 140650947371007, -STORE, 140650947358720, 140650947366911, -STORE, 140650947366912, 140650947371007, -STORE, 140734686081024, 140734686085119, -STORE, 140734686068736, 140734686081023, -STORE, 140650947330048, 140650947358719, -STORE, 140650947321856, 140650947330047, -STORE, 140650941321216, 140650945118207, -SNULL, 140650941321216, 140650942980095, -STORE, 140650942980096, 140650945118207, -STORE, 140650941321216, 140650942980095, -SNULL, 140650945077247, 140650945118207, -STORE, 140650942980096, 140650945077247, -STORE, 140650945077248, 140650945118207, -SNULL, 140650945077248, 140650945101823, -STORE, 140650945101824, 140650945118207, -STORE, 140650945077248, 140650945101823, -ERASE, 140650945077248, 140650945101823, -STORE, 140650945077248, 140650945101823, -ERASE, 140650945101824, 140650945118207, -STORE, 140650945101824, 140650945118207, -SNULL, 140650945093631, 140650945101823, -STORE, 140650945077248, 140650945093631, -STORE, 140650945093632, 140650945101823, -SNULL, 93832323760127, 93832323764223, -STORE, 93832323751936, 93832323760127, -STORE, 93832323760128, 93832323764223, -SNULL, 140650947362815, 140650947366911, -STORE, 140650947358720, 140650947362815, -STORE, 140650947362816, 140650947366911, -ERASE, 140650947330048, 140650947358719, -STORE, 93832331890688, 93832332025855, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140728333520896, 140737488351231, -SNULL, 140728333529087, 140737488351231, -STORE, 140728333520896, 140728333529087, -STORE, 140728333389824, 140728333529087, -STORE, 94872734732288, 94872736956415, -SNULL, 94872734842879, 94872736956415, -STORE, 94872734732288, 94872734842879, -STORE, 94872734842880, 94872736956415, -ERASE, 94872734842880, 94872736956415, -STORE, 94872736935936, 94872736948223, -STORE, 94872736948224, 94872736956415, -STORE, 139755193257984, 139755195510783, -SNULL, 139755193401343, 139755195510783, -STORE, 139755193257984, 139755193401343, -STORE, 139755193401344, 139755195510783, -ERASE, 139755193401344, 139755195510783, -STORE, 139755195498496, 139755195506687, -STORE, 139755195506688, 139755195510783, -STORE, 140728333926400, 140728333930495, -STORE, 140728333914112, 140728333926399, -STORE, 139755195469824, 139755195498495, -STORE, 139755195461632, 139755195469823, -STORE, 139755189460992, 139755193257983, -SNULL, 139755189460992, 139755191119871, -STORE, 139755191119872, 139755193257983, -STORE, 139755189460992, 139755191119871, -SNULL, 139755193217023, 139755193257983, -STORE, 139755191119872, 139755193217023, -STORE, 139755193217024, 139755193257983, -SNULL, 139755193217024, 139755193241599, -STORE, 139755193241600, 139755193257983, -STORE, 139755193217024, 139755193241599, -ERASE, 139755193217024, 139755193241599, -STORE, 139755193217024, 139755193241599, -ERASE, 139755193241600, 139755193257983, -STORE, 139755193241600, 139755193257983, -SNULL, 139755193233407, 139755193241599, -STORE, 139755193217024, 139755193233407, -STORE, 139755193233408, 139755193241599, -SNULL, 94872736944127, 94872736948223, -STORE, 94872736935936, 94872736944127, -STORE, 94872736944128, 94872736948223, -SNULL, 139755195502591, 139755195506687, -STORE, 139755195498496, 139755195502591, -STORE, 139755195502592, 139755195506687, -ERASE, 139755195469824, 139755195498495, -STORE, 94872749744128, 94872749879295, -STORE, 94720243642368, 94720243855359, -STORE, 94720245952512, 94720245956607, -STORE, 94720245956608, 94720245964799, -STORE, 94720245964800, 94720245977087, -STORE, 94720277745664, 94720278151167, -STORE, 140453174497280, 140453176156159, -STORE, 140453176156160, 140453178253311, -STORE, 140453178253312, 140453178269695, -STORE, 140453178269696, 140453178277887, -STORE, 140453178277888, 140453178294271, -STORE, 140453178294272, 140453178306559, -STORE, 140453178306560, 140453180399615, -STORE, 140453180399616, 140453180403711, -STORE, 140453180403712, 140453180407807, -STORE, 140453180407808, 140453180551167, -STORE, 140453180919808, 140453182603263, -STORE, 140453182603264, 140453182619647, -STORE, 140453182648320, 140453182652415, -STORE, 140453182652416, 140453182656511, -STORE, 140453182656512, 140453182660607, -STORE, 140733223923712, 140733224062975, -STORE, 140733224808448, 140733224820735, -STORE, 140733224820736, 140733224824831, -STORE, 94321091141632, 94321091354623, -STORE, 94321093451776, 94321093455871, -STORE, 94321093455872, 94321093464063, -STORE, 94321093464064, 94321093476351, -STORE, 94321115873280, 94321117229055, -STORE, 139695978840064, 139695980498943, -STORE, 139695980498944, 139695982596095, -STORE, 139695982596096, 139695982612479, -STORE, 139695982612480, 139695982620671, -STORE, 139695982620672, 139695982637055, -STORE, 139695982637056, 139695982649343, -STORE, 139695982649344, 139695984742399, -STORE, 139695984742400, 139695984746495, -STORE, 139695984746496, 139695984750591, -STORE, 139695984750592, 139695984893951, -STORE, 139695985262592, 139695986946047, -STORE, 139695986946048, 139695986962431, -STORE, 139695986991104, 139695986995199, -STORE, 139695986995200, 139695986999295, -STORE, 139695986999296, 139695987003391, -STORE, 140734650564608, 140734650703871, -STORE, 140734650785792, 140734650798079, -STORE, 140734650798080, 140734650802175, -STORE, 94523438456832, 94523438669823, -STORE, 94523440766976, 94523440771071, -STORE, 94523440771072, 94523440779263, -STORE, 94523440779264, 94523440791551, -STORE, 94523464544256, 94523465842687, -STORE, 140453231493120, 140453233151999, -STORE, 140453233152000, 140453235249151, -STORE, 140453235249152, 140453235265535, -STORE, 140453235265536, 140453235273727, -STORE, 140453235273728, 140453235290111, -STORE, 140453235290112, 140453235302399, -STORE, 140453235302400, 140453237395455, -STORE, 140453237395456, 140453237399551, -STORE, 140453237399552, 140453237403647, -STORE, 140453237403648, 140453237547007, -STORE, 140453237915648, 140453239599103, -STORE, 140453239599104, 140453239615487, -STORE, 140453239644160, 140453239648255, -STORE, 140453239648256, 140453239652351, -STORE, 140453239652352, 140453239656447, -STORE, 140734679445504, 140734679584767, -STORE, 140734680018944, 140734680031231, -STORE, 140734680031232, 140734680035327, -STORE, 94614776987648, 94614777200639, -STORE, 94614779297792, 94614779301887, -STORE, 94614779301888, 94614779310079, -STORE, 94614779310080, 94614779322367, -STORE, 94614798467072, 94614800699391, -STORE, 139677037182976, 139677038841855, -STORE, 139677038841856, 139677040939007, -STORE, 139677040939008, 139677040955391, -STORE, 139677040955392, 139677040963583, -STORE, 139677040963584, 139677040979967, -STORE, 139677040979968, 139677040992255, -STORE, 139677040992256, 139677043085311, -STORE, 139677043085312, 139677043089407, -STORE, 139677043089408, 139677043093503, -STORE, 139677043093504, 139677043236863, -STORE, 139677043605504, 139677045288959, -STORE, 139677045288960, 139677045305343, -STORE, 139677045334016, 139677045338111, -STORE, 139677045338112, 139677045342207, -STORE, 139677045342208, 139677045346303, -STORE, 140721604411392, 140721604550655, -STORE, 140721606135808, 140721606148095, -STORE, 140721606148096, 140721606152191, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140729280544768, 140737488351231, -SNULL, 140729280552959, 140737488351231, -STORE, 140729280544768, 140729280552959, -STORE, 140729280413696, 140729280552959, -STORE, 94863939334144, 94863941558271, -SNULL, 94863939444735, 94863941558271, -STORE, 94863939334144, 94863939444735, -STORE, 94863939444736, 94863941558271, -ERASE, 94863939444736, 94863941558271, -STORE, 94863941537792, 94863941550079, -STORE, 94863941550080, 94863941558271, -STORE, 139691047276544, 139691049529343, -SNULL, 139691047419903, 139691049529343, -STORE, 139691047276544, 139691047419903, -STORE, 139691047419904, 139691049529343, -ERASE, 139691047419904, 139691049529343, -STORE, 139691049517056, 139691049525247, -STORE, 139691049525248, 139691049529343, -STORE, 140729281679360, 140729281683455, -STORE, 140729281667072, 140729281679359, -STORE, 139691049488384, 139691049517055, -STORE, 139691049480192, 139691049488383, -STORE, 139691043479552, 139691047276543, -SNULL, 139691043479552, 139691045138431, -STORE, 139691045138432, 139691047276543, -STORE, 139691043479552, 139691045138431, -SNULL, 139691047235583, 139691047276543, -STORE, 139691045138432, 139691047235583, -STORE, 139691047235584, 139691047276543, -SNULL, 139691047235584, 139691047260159, -STORE, 139691047260160, 139691047276543, -STORE, 139691047235584, 139691047260159, -ERASE, 139691047235584, 139691047260159, -STORE, 139691047235584, 139691047260159, -ERASE, 139691047260160, 139691047276543, -STORE, 139691047260160, 139691047276543, -SNULL, 139691047251967, 139691047260159, -STORE, 139691047235584, 139691047251967, -STORE, 139691047251968, 139691047260159, -SNULL, 94863941545983, 94863941550079, -STORE, 94863941537792, 94863941545983, -STORE, 94863941545984, 94863941550079, -SNULL, 139691049521151, 139691049525247, -STORE, 139691049517056, 139691049521151, -STORE, 139691049521152, 139691049525247, -ERASE, 139691049488384, 139691049517055, -STORE, 94863951294464, 94863951429631, -STORE, 93998209294336, 93998209507327, -STORE, 93998211604480, 93998211608575, -STORE, 93998211608576, 93998211616767, -STORE, 93998211616768, 93998211629055, -STORE, 93998227210240, 93998227615743, -STORE, 140243029913600, 140243031572479, -STORE, 140243031572480, 140243033669631, -STORE, 140243033669632, 140243033686015, -STORE, 140243033686016, 140243033694207, -STORE, 140243033694208, 140243033710591, -STORE, 140243033710592, 140243033722879, -STORE, 140243033722880, 140243035815935, -STORE, 140243035815936, 140243035820031, -STORE, 140243035820032, 140243035824127, -STORE, 140243035824128, 140243035967487, -STORE, 140243036336128, 140243038019583, -STORE, 140243038019584, 140243038035967, -STORE, 140243038064640, 140243038068735, -STORE, 140243038068736, 140243038072831, -STORE, 140243038072832, 140243038076927, -STORE, 140734976479232, 140734976618495, -STORE, 140734977978368, 140734977990655, -STORE, 140734977990656, 140734977994751, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140722742775808, 140737488351231, -SNULL, 140722742783999, 140737488351231, -STORE, 140722742775808, 140722742783999, -STORE, 140722742644736, 140722742783999, -STORE, 93857673662464, 93857675997183, -SNULL, 93857673875455, 93857675997183, -STORE, 93857673662464, 93857673875455, -STORE, 93857673875456, 93857675997183, -ERASE, 93857673875456, 93857675997183, -STORE, 93857675972608, 93857675984895, -STORE, 93857675984896, 93857675997183, -STORE, 140629677498368, 140629679751167, -SNULL, 140629677641727, 140629679751167, -STORE, 140629677498368, 140629677641727, -STORE, 140629677641728, 140629679751167, -ERASE, 140629677641728, 140629679751167, -STORE, 140629679738880, 140629679747071, -STORE, 140629679747072, 140629679751167, -STORE, 140722743222272, 140722743226367, -STORE, 140722743209984, 140722743222271, -STORE, 140629679710208, 140629679738879, -STORE, 140629679702016, 140629679710207, -STORE, 140629675384832, 140629677498367, -SNULL, 140629675384832, 140629675397119, -STORE, 140629675397120, 140629677498367, -STORE, 140629675384832, 140629675397119, -SNULL, 140629677490175, 140629677498367, -STORE, 140629675397120, 140629677490175, -STORE, 140629677490176, 140629677498367, -ERASE, 140629677490176, 140629677498367, -STORE, 140629677490176, 140629677498367, -STORE, 140629671587840, 140629675384831, -SNULL, 140629671587840, 140629673246719, -STORE, 140629673246720, 140629675384831, -STORE, 140629671587840, 140629673246719, -SNULL, 140629675343871, 140629675384831, -STORE, 140629673246720, 140629675343871, -STORE, 140629675343872, 140629675384831, -SNULL, 140629675343872, 140629675368447, -STORE, 140629675368448, 140629675384831, -STORE, 140629675343872, 140629675368447, -ERASE, 140629675343872, 140629675368447, -STORE, 140629675343872, 140629675368447, -ERASE, 140629675368448, 140629675384831, -STORE, 140629675368448, 140629675384831, -STORE, 140629679693824, 140629679710207, -SNULL, 140629675360255, 140629675368447, -STORE, 140629675343872, 140629675360255, -STORE, 140629675360256, 140629675368447, -SNULL, 140629677494271, 140629677498367, -STORE, 140629677490176, 140629677494271, -STORE, 140629677494272, 140629677498367, -SNULL, 93857675976703, 93857675984895, -STORE, 93857675972608, 93857675976703, -STORE, 93857675976704, 93857675984895, -SNULL, 140629679742975, 140629679747071, -STORE, 140629679738880, 140629679742975, -STORE, 140629679742976, 140629679747071, -ERASE, 140629679710208, 140629679738879, -STORE, 93857705832448, 93857705967615, -STORE, 140629678010368, 140629679693823, -STORE, 93857705832448, 93857706102783, -STORE, 93857705832448, 93857706237951, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140735922421760, 140737488351231, -SNULL, 140735922429951, 140737488351231, -STORE, 140735922421760, 140735922429951, -STORE, 140735922290688, 140735922429951, -STORE, 94651136139264, 94651138363391, -SNULL, 94651136249855, 94651138363391, -STORE, 94651136139264, 94651136249855, -STORE, 94651136249856, 94651138363391, -ERASE, 94651136249856, 94651138363391, -STORE, 94651138342912, 94651138355199, -STORE, 94651138355200, 94651138363391, -STORE, 140325788266496, 140325790519295, -SNULL, 140325788409855, 140325790519295, -STORE, 140325788266496, 140325788409855, -STORE, 140325788409856, 140325790519295, -ERASE, 140325788409856, 140325790519295, -STORE, 140325790507008, 140325790515199, -STORE, 140325790515200, 140325790519295, -STORE, 140735923572736, 140735923576831, -STORE, 140735923560448, 140735923572735, -STORE, 140325790478336, 140325790507007, -STORE, 140325790470144, 140325790478335, -STORE, 140325784469504, 140325788266495, -SNULL, 140325784469504, 140325786128383, -STORE, 140325786128384, 140325788266495, -STORE, 140325784469504, 140325786128383, -SNULL, 140325788225535, 140325788266495, -STORE, 140325786128384, 140325788225535, -STORE, 140325788225536, 140325788266495, -SNULL, 140325788225536, 140325788250111, -STORE, 140325788250112, 140325788266495, -STORE, 140325788225536, 140325788250111, -ERASE, 140325788225536, 140325788250111, -STORE, 140325788225536, 140325788250111, -ERASE, 140325788250112, 140325788266495, -STORE, 140325788250112, 140325788266495, -SNULL, 140325788241919, 140325788250111, -STORE, 140325788225536, 140325788241919, -STORE, 140325788241920, 140325788250111, -SNULL, 94651138351103, 94651138355199, -STORE, 94651138342912, 94651138351103, -STORE, 94651138351104, 94651138355199, -SNULL, 140325790511103, 140325790515199, -STORE, 140325790507008, 140325790511103, -STORE, 140325790511104, 140325790515199, -ERASE, 140325790478336, 140325790507007, -STORE, 94651146297344, 94651146432511, -STORE, 94212330168320, 94212330381311, -STORE, 94212332478464, 94212332482559, -STORE, 94212332482560, 94212332490751, -STORE, 94212332490752, 94212332503039, -STORE, 94212348891136, 94212349825023, -STORE, 140611630604288, 140611632263167, -STORE, 140611632263168, 140611634360319, -STORE, 140611634360320, 140611634376703, -STORE, 140611634376704, 140611634384895, -STORE, 140611634384896, 140611634401279, -STORE, 140611634401280, 140611634413567, -STORE, 140611634413568, 140611636506623, -STORE, 140611636506624, 140611636510719, -STORE, 140611636510720, 140611636514815, -STORE, 140611636514816, 140611636658175, -STORE, 140611637026816, 140611638710271, -STORE, 140611638710272, 140611638726655, -STORE, 140611638755328, 140611638759423, -STORE, 140611638759424, 140611638763519, -STORE, 140611638763520, 140611638767615, -STORE, 140726974533632, 140726974672895, -STORE, 140726974943232, 140726974955519, -STORE, 140726974955520, 140726974959615, -STORE, 94572463521792, 94572463734783, -STORE, 94572465831936, 94572465836031, -STORE, 94572465836032, 94572465844223, -STORE, 94572465844224, 94572465856511, -STORE, 94572491534336, 94572492865535, -STORE, 140644351492096, 140644353150975, -STORE, 140644353150976, 140644355248127, -STORE, 140644355248128, 140644355264511, -STORE, 140644355264512, 140644355272703, -STORE, 140644355272704, 140644355289087, -STORE, 140644355289088, 140644355301375, -STORE, 140644355301376, 140644357394431, -STORE, 140644357394432, 140644357398527, -STORE, 140644357398528, 140644357402623, -STORE, 140644357402624, 140644357545983, -STORE, 140644357914624, 140644359598079, -STORE, 140644359598080, 140644359614463, -STORE, 140644359643136, 140644359647231, -STORE, 140644359647232, 140644359651327, -STORE, 140644359651328, 140644359655423, -STORE, 140727841824768, 140727841964031, -STORE, 140727843188736, 140727843201023, -STORE, 140727843201024, 140727843205119, -STORE, 94144315457536, 94144315670527, -STORE, 94144317767680, 94144317771775, -STORE, 94144317771776, 94144317779967, -STORE, 94144317779968, 94144317792255, -STORE, 94144318369792, 94144320815103, -STORE, 140316717645824, 140316719304703, -STORE, 140316719304704, 140316721401855, -STORE, 140316721401856, 140316721418239, -STORE, 140316721418240, 140316721426431, -STORE, 140316721426432, 140316721442815, -STORE, 140316721442816, 140316721455103, -STORE, 140316721455104, 140316723548159, -STORE, 140316723548160, 140316723552255, -STORE, 140316723552256, 140316723556351, -STORE, 140316723556352, 140316723699711, -STORE, 140316724068352, 140316725751807, -STORE, 140316725751808, 140316725768191, -STORE, 140316725796864, 140316725800959, -STORE, 140316725800960, 140316725805055, -STORE, 140316725805056, 140316725809151, -STORE, 140725744283648, 140725744422911, -STORE, 140725745852416, 140725745864703, -STORE, 140725745864704, 140725745868799, -STORE, 94646858846208, 94646859059199, -STORE, 94646861156352, 94646861160447, -STORE, 94646861160448, 94646861168639, -STORE, 94646861168640, 94646861180927, -STORE, 94646879805440, 94646881894399, -STORE, 140435449745408, 140435451404287, -STORE, 140435451404288, 140435453501439, -STORE, 140435453501440, 140435453517823, -STORE, 140435453517824, 140435453526015, -STORE, 140435453526016, 140435453542399, -STORE, 140435453542400, 140435453554687, -STORE, 140435453554688, 140435455647743, -STORE, 140435455647744, 140435455651839, -STORE, 140435455651840, 140435455655935, -STORE, 140435455655936, 140435455799295, -STORE, 140435456167936, 140435457851391, -STORE, 140435457851392, 140435457867775, -STORE, 140435457896448, 140435457900543, -STORE, 140435457900544, 140435457904639, -STORE, 140435457904640, 140435457908735, -STORE, 140721033818112, 140721033957375, -STORE, 140721034018816, 140721034031103, -STORE, 140721034031104, 140721034035199, -STORE, 94872903438336, 94872903651327, -STORE, 94872905748480, 94872905752575, -STORE, 94872905752576, 94872905760767, -STORE, 94872905760768, 94872905773055, -STORE, 94872931246080, 94872931651583, -STORE, 139771607810048, 139771609468927, -STORE, 139771609468928, 139771611566079, -STORE, 139771611566080, 139771611582463, -STORE, 139771611582464, 139771611590655, -STORE, 139771611590656, 139771611607039, -STORE, 139771611607040, 139771611619327, -STORE, 139771611619328, 139771613712383, -STORE, 139771613712384, 139771613716479, -STORE, 139771613716480, 139771613720575, -STORE, 139771613720576, 139771613863935, -STORE, 139771614232576, 139771615916031, -STORE, 139771615916032, 139771615932415, -STORE, 139771615961088, 139771615965183, -STORE, 139771615965184, 139771615969279, -STORE, 139771615969280, 139771615973375, -STORE, 140725402931200, 140725403070463, -STORE, 140725403852800, 140725403865087, -STORE, 140725403865088, 140725403869183, -STORE, 94740737736704, 94740737949695, -STORE, 94740740046848, 94740740050943, -STORE, 94740740050944, 94740740059135, -STORE, 94740740059136, 94740740071423, -STORE, 94740743249920, 94740744724479, -STORE, 140640287010816, 140640288669695, -STORE, 140640288669696, 140640290766847, -STORE, 140640290766848, 140640290783231, -STORE, 140640290783232, 140640290791423, -STORE, 140640290791424, 140640290807807, -STORE, 140640290807808, 140640290820095, -STORE, 140640290820096, 140640292913151, -STORE, 140640292913152, 140640292917247, -STORE, 140640292917248, 140640292921343, -STORE, 140640292921344, 140640293064703, -STORE, 140640293433344, 140640295116799, -STORE, 140640295116800, 140640295133183, -STORE, 140640295161856, 140640295165951, -STORE, 140640295165952, 140640295170047, -STORE, 140640295170048, 140640295174143, -STORE, 140725133303808, 140725133443071, -STORE, 140725133684736, 140725133697023, -STORE, 140725133697024, 140725133701119, -STORE, 140737488347136, 140737488351231, -STORE, 140722826371072, 140737488351231, -SNULL, 140722826375167, 140737488351231, -STORE, 140722826371072, 140722826375167, -STORE, 140722826240000, 140722826375167, -STORE, 94113818611712, 94113820835839, -SNULL, 94113818722303, 94113820835839, -STORE, 94113818611712, 94113818722303, -STORE, 94113818722304, 94113820835839, -ERASE, 94113818722304, 94113820835839, -STORE, 94113820815360, 94113820827647, -STORE, 94113820827648, 94113820835839, -STORE, 139628194508800, 139628196761599, -SNULL, 139628194652159, 139628196761599, -STORE, 139628194508800, 139628194652159, -STORE, 139628194652160, 139628196761599, -ERASE, 139628194652160, 139628196761599, -STORE, 139628196749312, 139628196757503, -STORE, 139628196757504, 139628196761599, -STORE, 140722826727424, 140722826731519, -STORE, 140722826715136, 140722826727423, -STORE, 139628196720640, 139628196749311, -STORE, 139628196712448, 139628196720639, -STORE, 139628190711808, 139628194508799, -SNULL, 139628190711808, 139628192370687, -STORE, 139628192370688, 139628194508799, -STORE, 139628190711808, 139628192370687, -SNULL, 139628194467839, 139628194508799, -STORE, 139628192370688, 139628194467839, -STORE, 139628194467840, 139628194508799, -SNULL, 139628194467840, 139628194492415, -STORE, 139628194492416, 139628194508799, -STORE, 139628194467840, 139628194492415, -ERASE, 139628194467840, 139628194492415, -STORE, 139628194467840, 139628194492415, -ERASE, 139628194492416, 139628194508799, -STORE, 139628194492416, 139628194508799, -SNULL, 139628194484223, 139628194492415, -STORE, 139628194467840, 139628194484223, -STORE, 139628194484224, 139628194492415, -SNULL, 94113820823551, 94113820827647, -STORE, 94113820815360, 94113820823551, -STORE, 94113820823552, 94113820827647, -SNULL, 139628196753407, 139628196757503, -STORE, 139628196749312, 139628196753407, -STORE, 139628196753408, 139628196757503, -ERASE, 139628196720640, 139628196749311, -STORE, 94113830850560, 94113830985727, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140731865833472, 140737488351231, -SNULL, 140731865841663, 140737488351231, -STORE, 140731865833472, 140731865841663, -STORE, 140731865702400, 140731865841663, -STORE, 94763339386880, 94763341611007, -SNULL, 94763339497471, 94763341611007, -STORE, 94763339386880, 94763339497471, -STORE, 94763339497472, 94763341611007, -ERASE, 94763339497472, 94763341611007, -STORE, 94763341590528, 94763341602815, -STORE, 94763341602816, 94763341611007, -STORE, 139778398486528, 139778400739327, -SNULL, 139778398629887, 139778400739327, -STORE, 139778398486528, 139778398629887, -STORE, 139778398629888, 139778400739327, -ERASE, 139778398629888, 139778400739327, -STORE, 139778400727040, 139778400735231, -STORE, 139778400735232, 139778400739327, -STORE, 140731865858048, 140731865862143, -STORE, 140731865845760, 140731865858047, -STORE, 139778400698368, 139778400727039, -STORE, 139778400690176, 139778400698367, -STORE, 139778394689536, 139778398486527, -SNULL, 139778394689536, 139778396348415, -STORE, 139778396348416, 139778398486527, -STORE, 139778394689536, 139778396348415, -SNULL, 139778398445567, 139778398486527, -STORE, 139778396348416, 139778398445567, -STORE, 139778398445568, 139778398486527, -SNULL, 139778398445568, 139778398470143, -STORE, 139778398470144, 139778398486527, -STORE, 139778398445568, 139778398470143, -ERASE, 139778398445568, 139778398470143, -STORE, 139778398445568, 139778398470143, -ERASE, 139778398470144, 139778398486527, -STORE, 139778398470144, 139778398486527, -SNULL, 139778398461951, 139778398470143, -STORE, 139778398445568, 139778398461951, -STORE, 139778398461952, 139778398470143, -SNULL, 94763341598719, 94763341602815, -STORE, 94763341590528, 94763341598719, -STORE, 94763341598720, 94763341602815, -SNULL, 139778400731135, 139778400735231, -STORE, 139778400727040, 139778400731135, -STORE, 139778400731136, 139778400735231, -ERASE, 139778400698368, 139778400727039, -STORE, 94763362197504, 94763362332671, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140737488338944, 140737488351231, -STORE, 140732053192704, 140737488351231, -SNULL, 140732053204991, 140737488351231, -STORE, 140732053192704, 140732053204991, -STORE, 140732053061632, 140732053204991, -STORE, 4194304, 26279935, -STORE, 28372992, 28454911, -STORE, 28454912, 29806591, -STORE, 140176018599936, 140176020852735, -SNULL, 140176018743295, 140176020852735, -STORE, 140176018599936, 140176018743295, -STORE, 140176018743296, 140176020852735, -ERASE, 140176018743296, 140176020852735, -STORE, 140176020840448, 140176020848639, -STORE, 140176020848640, 140176020852735, -STORE, 140732053381120, 140732053385215, -STORE, 140732053368832, 140732053381119, -STORE, 140176020811776, 140176020840447, -STORE, 140176020803584, 140176020811775, -STORE, 140176014766080, 140176018599935, -SNULL, 140176014766080, 140176016474111, -STORE, 140176016474112, 140176018599935, -STORE, 140176014766080, 140176016474111, -SNULL, 140176018567167, 140176018599935, -STORE, 140176016474112, 140176018567167, -STORE, 140176018567168, 140176018599935, -ERASE, 140176018567168, 140176018599935, -STORE, 140176018567168, 140176018599935, -STORE, 140176012570624, 140176014766079, -SNULL, 140176012570624, 140176012664831, -STORE, 140176012664832, 140176014766079, -STORE, 140176012570624, 140176012664831, -SNULL, 140176014757887, 140176014766079, -STORE, 140176012664832, 140176014757887, -STORE, 140176014757888, 140176014766079, -ERASE, 140176014757888, 140176014766079, -STORE, 140176014757888, 140176014766079, -STORE, 140176010051584, 140176012570623, -SNULL, 140176010051584, 140176010465279, -STORE, 140176010465280, 140176012570623, -STORE, 140176010051584, 140176010465279, -SNULL, 140176012558335, 140176012570623, -STORE, 140176010465280, 140176012558335, -STORE, 140176012558336, 140176012570623, -ERASE, 140176012558336, 140176012570623, -STORE, 140176012558336, 140176012570623, -STORE, 140176007417856, 140176010051583, -SNULL, 140176007417856, 140176007946239, -STORE, 140176007946240, 140176010051583, -STORE, 140176007417856, 140176007946239, -SNULL, 140176010043391, 140176010051583, -STORE, 140176007946240, 140176010043391, -STORE, 140176010043392, 140176010051583, -ERASE, 140176010043392, 140176010051583, -STORE, 140176010043392, 140176010051583, -STORE, 140176005304320, 140176007417855, -SNULL, 140176005304320, 140176005316607, -STORE, 140176005316608, 140176007417855, -STORE, 140176005304320, 140176005316607, -SNULL, 140176007409663, 140176007417855, -STORE, 140176005316608, 140176007409663, -STORE, 140176007409664, 140176007417855, -ERASE, 140176007409664, 140176007417855, -STORE, 140176007409664, 140176007417855, -STORE, 140176003100672, 140176005304319, -SNULL, 140176003100672, 140176003203071, -STORE, 140176003203072, 140176005304319, -STORE, 140176003100672, 140176003203071, -SNULL, 140176005296127, 140176005304319, -STORE, 140176003203072, 140176005296127, -STORE, 140176005296128, 140176005304319, -ERASE, 140176005296128, 140176005304319, -STORE, 140176005296128, 140176005304319, -STORE, 140176020795392, 140176020811775, -STORE, 140175999938560, 140176003100671, -SNULL, 140175999938560, 140176000999423, -STORE, 140176000999424, 140176003100671, -STORE, 140175999938560, 140176000999423, -SNULL, 140176003092479, 140176003100671, -STORE, 140176000999424, 140176003092479, -STORE, 140176003092480, 140176003100671, -ERASE, 140176003092480, 140176003100671, -STORE, 140176003092480, 140176003100671, -STORE, 140175996141568, 140175999938559, -SNULL, 140175996141568, 140175997800447, -STORE, 140175997800448, 140175999938559, -STORE, 140175996141568, 140175997800447, -SNULL, 140175999897599, 140175999938559, -STORE, 140175997800448, 140175999897599, -STORE, 140175999897600, 140175999938559, -SNULL, 140175999897600, 140175999922175, -STORE, 140175999922176, 140175999938559, -STORE, 140175999897600, 140175999922175, -ERASE, 140175999897600, 140175999922175, -STORE, 140175999897600, 140175999922175, -ERASE, 140175999922176, 140175999938559, -STORE, 140175999922176, 140175999938559, -STORE, 140176020783104, 140176020811775, -SNULL, 140175999913983, 140175999922175, -STORE, 140175999897600, 140175999913983, -STORE, 140175999913984, 140175999922175, -SNULL, 140176003096575, 140176003100671, -STORE, 140176003092480, 140176003096575, -STORE, 140176003096576, 140176003100671, -SNULL, 140176005300223, 140176005304319, -STORE, 140176005296128, 140176005300223, -STORE, 140176005300224, 140176005304319, -SNULL, 140176007413759, 140176007417855, -STORE, 140176007409664, 140176007413759, -STORE, 140176007413760, 140176007417855, -SNULL, 140176010047487, 140176010051583, -STORE, 140176010043392, 140176010047487, -STORE, 140176010047488, 140176010051583, -SNULL, 140176012566527, 140176012570623, -STORE, 140176012558336, 140176012566527, -STORE, 140176012566528, 140176012570623, -SNULL, 140176014761983, 140176014766079, -STORE, 140176014757888, 140176014761983, -STORE, 140176014761984, 140176014766079, -SNULL, 140176018571263, 140176018599935, -STORE, 140176018567168, 140176018571263, -STORE, 140176018571264, 140176018599935, -SNULL, 28405759, 28454911, -STORE, 28372992, 28405759, -STORE, 28405760, 28454911, -SNULL, 140176020844543, 140176020848639, -STORE, 140176020840448, 140176020844543, -STORE, 140176020844544, 140176020848639, -ERASE, 140176020811776, 140176020840447, -STORE, 53080064, 53215231, -STORE, 140176019099648, 140176020783103, -STORE, 140176020836352, 140176020840447, -STORE, 140176018964480, 140176019099647, -STORE, 53080064, 53358591, -STORE, 140175994044416, 140175996141567, -STORE, 140176020828160, 140176020840447, -STORE, 140176020819968, 140176020840447, -STORE, 140176020783104, 140176020819967, -STORE, 140176018948096, 140176019099647, -STORE, 53080064, 53493759, -STORE, 53080064, 53649407, -STORE, 140176018939904, 140176019099647, -STORE, 140176018931712, 140176019099647, -STORE, 53080064, 53784575, -STORE, 53080064, 53919743, -STORE, 140176018915328, 140176019099647, -STORE, 140176018907136, 140176019099647, -STORE, 53080064, 54059007, -STORE, 140175993769984, 140175996141567, -STORE, 140176018747392, 140176019099647, -STORE, 53080064, 54198271, -SNULL, 54190079, 54198271, -STORE, 53080064, 54190079, -STORE, 54190080, 54198271, -ERASE, 54190080, 54198271, -SNULL, 54181887, 54190079, -STORE, 53080064, 54181887, -STORE, 54181888, 54190079, -ERASE, 54181888, 54190079, -SNULL, 54173695, 54181887, -STORE, 53080064, 54173695, -STORE, 54173696, 54181887, -ERASE, 54173696, 54181887, -SNULL, 54165503, 54173695, -STORE, 53080064, 54165503, -STORE, 54165504, 54173695, -ERASE, 54165504, 54173695, -STORE, 140175993753600, 140175996141567, -STORE, 140175993688064, 140175996141567, -STORE, 140175993655296, 140175996141567, -STORE, 140175991558144, 140175996141567, -STORE, 140175991492608, 140175996141567, -STORE, 53080064, 54312959, -STORE, 140175991361536, 140175996141567, -STORE, 140175991099392, 140175996141567, -STORE, 140175991091200, 140175996141567, -STORE, 140175991074816, 140175996141567, -STORE, 140175991066624, 140175996141567, -STORE, 140175991058432, 140175996141567, -STORE, 53080064, 54448127, -SNULL, 54439935, 54448127, -STORE, 53080064, 54439935, -STORE, 54439936, 54448127, -ERASE, 54439936, 54448127, -SNULL, 54431743, 54439935, -STORE, 53080064, 54431743, -STORE, 54431744, 54439935, -ERASE, 54431744, 54439935, -SNULL, 54419455, 54431743, -STORE, 53080064, 54419455, -STORE, 54419456, 54431743, -ERASE, 54419456, 54431743, -SNULL, 54403071, 54419455, -STORE, 53080064, 54403071, -STORE, 54403072, 54419455, -ERASE, 54403072, 54419455, -STORE, 140175991042048, 140175996141567, -STORE, 53080064, 54538239, -SNULL, 54534143, 54538239, -STORE, 53080064, 54534143, -STORE, 54534144, 54538239, -ERASE, 54534144, 54538239, -SNULL, 54530047, 54534143, -STORE, 53080064, 54530047, -STORE, 54530048, 54534143, -ERASE, 54530048, 54534143, -SNULL, 54525951, 54530047, -STORE, 53080064, 54525951, -STORE, 54525952, 54530047, -ERASE, 54525952, 54530047, -SNULL, 54521855, 54525951, -STORE, 53080064, 54521855, -STORE, 54521856, 54525951, -ERASE, 54521856, 54525951, -SNULL, 54517759, 54521855, -STORE, 53080064, 54517759, -STORE, 54517760, 54521855, -ERASE, 54517760, 54521855, -SNULL, 54513663, 54517759, -STORE, 53080064, 54513663, -STORE, 54513664, 54517759, -ERASE, 54513664, 54517759, -SNULL, 54509567, 54513663, -STORE, 53080064, 54509567, -STORE, 54509568, 54513663, -ERASE, 54509568, 54513663, -STORE, 140175991025664, 140175996141567, -STORE, 140175990992896, 140175996141567, -STORE, 53080064, 54644735, -SNULL, 54628351, 54644735, -STORE, 53080064, 54628351, -STORE, 54628352, 54644735, -ERASE, 54628352, 54644735, -SNULL, 54616063, 54628351, -STORE, 53080064, 54616063, -STORE, 54616064, 54628351, -ERASE, 54616064, 54628351, -STORE, 140175988895744, 140175996141567, -STORE, 53080064, 54767615, -STORE, 140175988879360, 140175996141567, -STORE, 140175988617216, 140175996141567, -STORE, 140175988609024, 140175996141567, -STORE, 140175988600832, 140175996141567, -STORE, 53080064, 54906879, -SNULL, 54898687, 54906879, -STORE, 53080064, 54898687, -STORE, 54898688, 54906879, -ERASE, 54898688, 54906879, -SNULL, 54853631, 54898687, -STORE, 53080064, 54853631, -STORE, 54853632, 54898687, -ERASE, 54853632, 54898687, -STORE, 140175986503680, 140175996141567, -STORE, 53080064, 54996991, -STORE, 140175986495488, 140175996141567, -STORE, 140175986487296, 140175996141567, -STORE, 140175985438720, 140175996141567, -STORE, 53080064, 55136255, -STORE, 140175985405952, 140175996141567, -STORE, 140175985139712, 140175996141567, -SNULL, 140176018964479, 140176019099647, -STORE, 140176018747392, 140176018964479, -STORE, 140176018964480, 140176019099647, -ERASE, 140176018964480, 140176019099647, -STORE, 140175983042560, 140175996141567, -STORE, 140175982518272, 140175996141567, -STORE, 140175980421120, 140175996141567, -STORE, 53080064, 55287807, -STORE, 53080064, 55427071, -STORE, 140176019091456, 140176019099647, -STORE, 140176019083264, 140176019099647, -STORE, 140176019075072, 140176019099647, -STORE, 140176019066880, 140176019099647, -STORE, 140176019058688, 140176019099647, -STORE, 140175980158976, 140175996141567, -STORE, 140176019050496, 140176019099647, -STORE, 140176019042304, 140176019099647, -STORE, 140176019034112, 140176019099647, -STORE, 140176019025920, 140176019099647, -STORE, 140176019017728, 140176019099647, -STORE, 140176019009536, 140176019099647, -STORE, 140176019001344, 140176019099647, -STORE, 140176018993152, 140176019099647, -STORE, 140176018984960, 140176019099647, -STORE, 140176018976768, 140176019099647, -STORE, 140176018968576, 140176019099647, -STORE, 140175978061824, 140175996141567, -STORE, 53080064, 55603199, -STORE, 140175978029056, 140175996141567, -STORE, 140175977996288, 140175996141567, -STORE, 53080064, 55738367, -STORE, 53080064, 55881727, -STORE, 140175977963520, 140175996141567, -STORE, 140175977930752, 140175996141567, -STORE, 53080064, 56041471, -STORE, 140175977897984, 140175996141567, -STORE, 140175977865216, 140175996141567, -SNULL, 55881727, 56041471, -STORE, 53080064, 55881727, -STORE, 55881728, 56041471, -ERASE, 55881728, 56041471, -SNULL, 55721983, 55881727, -STORE, 53080064, 55721983, -STORE, 55721984, 55881727, -ERASE, 55721984, 55881727, -SNULL, 55570431, 55721983, -STORE, 53080064, 55570431, -STORE, 55570432, 55721983, -ERASE, 55570432, 55721983, -STORE, 140175977857024, 140175996141567, -STORE, 140175975759872, 140175996141567, -STORE, 53080064, 55754751, -STORE, 53080064, 55943167, -STORE, 140175975751680, 140175996141567, -STORE, 140175975743488, 140175996141567, -STORE, 140175975735296, 140175996141567, -STORE, 140175975727104, 140175996141567, -STORE, 140175975718912, 140175996141567, -STORE, 140175975710720, 140175996141567, -STORE, 140175975702528, 140175996141567, -STORE, 140175975694336, 140175996141567, -STORE, 140175975686144, 140175996141567, -STORE, 140175975677952, 140175996141567, -STORE, 140175975669760, 140175996141567, -STORE, 140175974621184, 140175996141567, -STORE, 140175974612992, 140175996141567, -STORE, 53080064, 56139775, -STORE, 140175972515840, 140175996141567, -STORE, 53080064, 56401919, -STORE, 140175970418688, 140175996141567, -STORE, 140175970410496, 140175996141567, -STORE, 140175970402304, 140175996141567, -STORE, 140175970394112, 140175996141567, -STORE, 53080064, 56569855, -STORE, 140175969865728, 140175996141567, -SNULL, 140175985139711, 140175996141567, -STORE, 140175969865728, 140175985139711, -STORE, 140175985139712, 140175996141567, -SNULL, 140175985139712, 140175985405951, -STORE, 140175985405952, 140175996141567, -STORE, 140175985139712, 140175985405951, -ERASE, 140175985139712, 140175985405951, -STORE, 140175965671424, 140175985139711, -STORE, 140175985397760, 140175996141567, -STORE, 140175985389568, 140175996141567, -STORE, 140175985381376, 140175996141567, -STORE, 140175985373184, 140175996141567, -STORE, 140175985364992, 140175996141567, -STORE, 140175985356800, 140175996141567, -STORE, 140175985348608, 140175996141567, -STORE, 140175985340416, 140175996141567, -STORE, 140175985332224, 140175996141567, -STORE, 140175985324032, 140175996141567, -STORE, 140175985315840, 140175996141567, -STORE, 140175985307648, 140175996141567, -STORE, 140175985299456, 140175996141567, -STORE, 140175985291264, 140175996141567, -STORE, 140175985283072, 140175996141567, -STORE, 140175985274880, 140175996141567, -STORE, 140175963574272, 140175985139711, -STORE, 140175985266688, 140175996141567, -STORE, 140175961477120, 140175985139711, -STORE, 53080064, 56831999, -STORE, 140175959379968, 140175985139711, -STORE, 140175985258496, 140175996141567, -STORE, 140175957282816, 140175985139711, -STORE, 140175985250304, 140175996141567, -STORE, 140175985242112, 140175996141567, -STORE, 140175985233920, 140175996141567, -STORE, 140175985225728, 140175996141567, -STORE, 140175985217536, 140175996141567, -STORE, 140175957151744, 140175985139711, -STORE, 140175956627456, 140175985139711, -SNULL, 140175980158975, 140175985139711, -STORE, 140175956627456, 140175980158975, -STORE, 140175980158976, 140175985139711, -SNULL, 140175980158976, 140175980421119, -STORE, 140175980421120, 140175985139711, -STORE, 140175980158976, 140175980421119, -ERASE, 140175980158976, 140175980421119, -STORE, 140175954530304, 140175980158975, -STORE, 140175985209344, 140175996141567, -STORE, 53080064, 57094143, -STORE, 140175952433152, 140175980158975, -STORE, 140175985192960, 140175996141567, -STORE, 140175985184768, 140175996141567, -STORE, 140175985176576, 140175996141567, -STORE, 140175985168384, 140175996141567, -STORE, 140175985160192, 140175996141567, -STORE, 140175985152000, 140175996141567, -STORE, 140175985143808, 140175996141567, -STORE, 140175980412928, 140175985139711, -STORE, 140175980404736, 140175985139711, -STORE, 140175980396544, 140175985139711, -STORE, 140175980388352, 140175985139711, -STORE, 140175980380160, 140175985139711, -STORE, 140175980371968, 140175985139711, -STORE, 140175980363776, 140175985139711, -STORE, 140175980355584, 140175985139711, -STORE, 140175980347392, 140175985139711, -STORE, 140175980339200, 140175985139711, -STORE, 53080064, 57356287, -SNULL, 140176018747392, 140176018907135, -STORE, 140176018907136, 140176018964479, -STORE, 140176018747392, 140176018907135, -ERASE, 140176018747392, 140176018907135, -STORE, 140175952146432, 140175980158975, -STORE, 140175950049280, 140175980158975, -SNULL, 140175952146431, 140175980158975, -STORE, 140175950049280, 140175952146431, -STORE, 140175952146432, 140175980158975, -SNULL, 140175952146432, 140175952433151, -STORE, 140175952433152, 140175980158975, -STORE, 140175952146432, 140175952433151, -ERASE, 140175952146432, 140175952433151, -STORE, 140176018898944, 140176018964479, -STORE, 53080064, 57749503, -STORE, 140175949520896, 140175952146431, -STORE, 140175947423744, 140175952146431, -SNULL, 140175993769983, 140175996141567, -STORE, 140175985143808, 140175993769983, -STORE, 140175993769984, 140175996141567, -SNULL, 140175993769984, 140175994044415, -STORE, 140175994044416, 140175996141567, -STORE, 140175993769984, 140175994044415, -ERASE, 140175993769984, 140175994044415, -STORE, 140176018890752, 140176018964479, -STORE, 140176018882560, 140176018964479, -STORE, 140176018874368, 140176018964479, -STORE, 140176018866176, 140176018964479, -STORE, 140176018849792, 140176018964479, -STORE, 140176018841600, 140176018964479, -STORE, 140176018825216, 140176018964479, -STORE, 140176018817024, 140176018964479, -STORE, 140176018800640, 140176018964479, -STORE, 140176018792448, 140176018964479, -STORE, 140176018759680, 140176018964479, -STORE, 140176018751488, 140176018964479, -STORE, 140175994028032, 140175996141567, -STORE, 140176018743296, 140176018964479, -STORE, 140175994011648, 140175996141567, -STORE, 140175994003456, 140175996141567, -STORE, 140175993987072, 140175996141567, -STORE, 140175993978880, 140175996141567, -STORE, 140175993946112, 140175996141567, -STORE, 140175993937920, 140175996141567, -STORE, 140175993921536, 140175996141567, -STORE, 140175993913344, 140175996141567, -STORE, 140175993896960, 140175996141567, -STORE, 140175993888768, 140175996141567, -STORE, 140175993872384, 140175996141567, -STORE, 140175993864192, 140175996141567, -STORE, 140175993831424, 140175996141567, -STORE, 140175993823232, 140175996141567, -STORE, 140175993806848, 140175996141567, -STORE, 140175993798656, 140175996141567, -STORE, 140175993782272, 140175996141567, -STORE, 140175993774080, 140175996141567, -STORE, 140175980322816, 140175985139711, -STORE, 140175980314624, 140175985139711, -STORE, 140175980281856, 140175985139711, -STORE, 140175980273664, 140175985139711, -STORE, 140175980257280, 140175985139711, -STORE, 140175945326592, 140175952146431, -STORE, 140175980249088, 140175985139711, -STORE, 140175980232704, 140175985139711, -STORE, 140175980224512, 140175985139711, -STORE, 140175980208128, 140175985139711, -STORE, 140175980199936, 140175985139711, -STORE, 140175980167168, 140175985139711, -STORE, 140175952433152, 140175985139711, -STORE, 140175952416768, 140175985139711, -STORE, 140175952408576, 140175985139711, -STORE, 140175952392192, 140175985139711, -STORE, 140175952384000, 140175985139711, -STORE, 140175952367616, 140175985139711, -STORE, 140175943229440, 140175952146431, -STORE, 140175952359424, 140175985139711, -STORE, 140175952326656, 140175985139711, -STORE, 140175952318464, 140175985139711, -STORE, 140175952302080, 140175985139711, -STORE, 140175952293888, 140175985139711, -STORE, 140175952277504, 140175985139711, -STORE, 140175952269312, 140175985139711, -STORE, 140175952252928, 140175985139711, -STORE, 140175952244736, 140175985139711, -STORE, 140175952211968, 140175985139711, -STORE, 140175952203776, 140175985139711, -STORE, 140175952187392, 140175985139711, -STORE, 140175952179200, 140175985139711, -STORE, 140175952162816, 140175985139711, -STORE, 140175952154624, 140175985139711, -STORE, 140175943213056, 140175952146431, -STORE, 140175943213056, 140175985139711, -STORE, 140175943180288, 140175985139711, -STORE, 140175943172096, 140175985139711, -STORE, 140175943155712, 140175985139711, -STORE, 140175943147520, 140175985139711, -STORE, 140175943131136, 140175985139711, -STORE, 140175943122944, 140175985139711, -STORE, 140175943106560, 140175985139711, -STORE, 140175943098368, 140175985139711, -STORE, 140175943065600, 140175985139711, -STORE, 140175943057408, 140175985139711, -STORE, 140175943041024, 140175985139711, -STORE, 140175943032832, 140175985139711, -STORE, 140175943016448, 140175985139711, -STORE, 140175943008256, 140175985139711, -STORE, 140175942991872, 140175985139711, -STORE, 140175942983680, 140175985139711, -STORE, 140175942950912, 140175985139711, -STORE, 140175942942720, 140175985139711, -STORE, 140175942926336, 140175985139711, -STORE, 140175942918144, 140175985139711, -STORE, 140175942901760, 140175985139711, -STORE, 140175942893568, 140175985139711, -STORE, 140175942877184, 140175985139711, -STORE, 140175942868992, 140175985139711, -STORE, 140175942836224, 140175985139711, -STORE, 140175942828032, 140175985139711, -STORE, 140175942811648, 140175985139711, -STORE, 140175942803456, 140175985139711, -STORE, 140175942787072, 140175985139711, -STORE, 140175942778880, 140175985139711, -STORE, 140175942762496, 140175985139711, -STORE, 140175942754304, 140175985139711, -STORE, 140175942721536, 140175985139711, -STORE, 140175942713344, 140175985139711, -STORE, 140175942696960, 140175985139711, -STORE, 140175942688768, 140175985139711, -STORE, 140175942672384, 140175985139711, -STORE, 140175942664192, 140175985139711, -STORE, 140175942647808, 140175985139711, -STORE, 140175942639616, 140175985139711, -STORE, 140175942606848, 140175985139711, -STORE, 140175942598656, 140175985139711, -STORE, 140175942582272, 140175985139711, -STORE, 140175942574080, 140175985139711, -STORE, 140175942557696, 140175985139711, -STORE, 140175942549504, 140175985139711, -STORE, 140175942533120, 140175985139711, -STORE, 140175942524928, 140175985139711, -STORE, 140175942492160, 140175985139711, -STORE, 140175942483968, 140175985139711, -STORE, 140175942467584, 140175985139711, -STORE, 140175942459392, 140175985139711, -STORE, 140175942443008, 140175985139711, -STORE, 140175942434816, 140175985139711, -STORE, 140175942418432, 140175985139711, -STORE, 140175942410240, 140175985139711, -STORE, 140175942377472, 140175985139711, -STORE, 140175942369280, 140175985139711, -STORE, 140175942352896, 140175985139711, -STORE, 140175942344704, 140175985139711, -STORE, 140175942328320, 140175985139711, -STORE, 140175942320128, 140175985139711, -STORE, 140175942303744, 140175985139711, -STORE, 140175942295552, 140175985139711, -STORE, 140175942262784, 140175985139711, -STORE, 140175942254592, 140175985139711, -STORE, 140175942238208, 140175985139711, -STORE, 140175942230016, 140175985139711, -STORE, 140175942213632, 140175985139711, -STORE, 140175942205440, 140175985139711, -STORE, 140175942189056, 140175985139711, -STORE, 140175942180864, 140175985139711, -STORE, 140175942148096, 140175985139711, -STORE, 140175942139904, 140175985139711, -STORE, 140175942123520, 140175985139711, -STORE, 140175942115328, 140175985139711, -STORE, 140175942098944, 140175985139711, -STORE, 140175942090752, 140175985139711, -STORE, 140175942074368, 140175985139711, -STORE, 140175942066176, 140175985139711, -STORE, 140175942033408, 140175985139711, -STORE, 140175942025216, 140175985139711, -STORE, 140175942008832, 140175985139711, -STORE, 140175942000640, 140175985139711, -STORE, 140175941984256, 140175985139711, -STORE, 140175941976064, 140175985139711, -STORE, 140175941959680, 140175985139711, -STORE, 140175939862528, 140175985139711, -STORE, 140175939854336, 140175985139711, -STORE, 140175939821568, 140175985139711, -STORE, 140175939813376, 140175985139711, -STORE, 140175939796992, 140175985139711, -STORE, 140175939788800, 140175985139711, -STORE, 140175939772416, 140175985139711, -STORE, 140175939764224, 140175985139711, -STORE, 140175939747840, 140175985139711, -STORE, 140175939739648, 140175985139711, -STORE, 140175939706880, 140175985139711, -STORE, 140175939698688, 140175985139711, -STORE, 140175939682304, 140175985139711, -STORE, 140175939674112, 140175985139711, -STORE, 140175939657728, 140175985139711, -STORE, 140175939649536, 140175985139711, -STORE, 140175939633152, 140175985139711, -STORE, 140175939624960, 140175985139711, -STORE, 140175939592192, 140175985139711, -STORE, 140175939584000, 140175985139711, -STORE, 140175939567616, 140175985139711, -STORE, 140175939559424, 140175985139711, -STORE, 140175939543040, 140175985139711, -STORE, 140175939534848, 140175985139711, -STORE, 140175939518464, 140175985139711, -STORE, 140175939510272, 140175985139711, -STORE, 140175939477504, 140175985139711, -STORE, 140175939469312, 140175985139711, -STORE, 140175939452928, 140175985139711, -STORE, 140175939444736, 140175985139711, -STORE, 140175939428352, 140175985139711, -STORE, 140175939420160, 140175985139711, -STORE, 140175939403776, 140175985139711, -STORE, 140175939395584, 140175985139711, -STORE, 140175939362816, 140175985139711, -STORE, 140175939354624, 140175985139711, -STORE, 140175939338240, 140175985139711, -STORE, 140175939330048, 140175985139711, -STORE, 140175939313664, 140175985139711, -STORE, 140175939305472, 140175985139711, -STORE, 140175939289088, 140175985139711, -STORE, 140175939280896, 140175985139711, -STORE, 140175939248128, 140175985139711, -STORE, 140175939239936, 140175985139711, -STORE, 140175939223552, 140175985139711, -STORE, 140175939215360, 140175985139711, -STORE, 140175939198976, 140175985139711, -STORE, 140175939190784, 140175985139711, -STORE, 140175939174400, 140175985139711, -STORE, 140175939166208, 140175985139711, -STORE, 140175939133440, 140175985139711, -STORE, 140175939125248, 140175985139711, -STORE, 140175939108864, 140175985139711, -STORE, 140175939100672, 140175985139711, -STORE, 140175939084288, 140175985139711, -STORE, 140175939076096, 140175985139711, -STORE, 140175939059712, 140175985139711, -STORE, 140175939051520, 140175985139711, -STORE, 140175939018752, 140175985139711, -STORE, 140175939010560, 140175985139711, -STORE, 140175938994176, 140175985139711, -STORE, 140175938985984, 140175985139711, -STORE, 140175938969600, 140175985139711, -STORE, 140175938961408, 140175985139711, -STORE, 140175938945024, 140175985139711, -STORE, 140175938936832, 140175985139711, -STORE, 140175938904064, 140175985139711, -STORE, 140175938895872, 140175985139711, -STORE, 140175938879488, 140175985139711, -STORE, 140175938871296, 140175985139711, -STORE, 140175938854912, 140175985139711, -STORE, 140175938846720, 140175985139711, -STORE, 140175938830336, 140175985139711, -STORE, 140175938822144, 140175985139711, -STORE, 140175938789376, 140175985139711, -STORE, 140175938781184, 140175985139711, -STORE, 140175938764800, 140175985139711, -STORE, 140175938756608, 140175985139711, -STORE, 140175938740224, 140175985139711, -STORE, 140175938732032, 140175985139711, -STORE, 140175938715648, 140175985139711, -STORE, 140175938707456, 140175985139711, -STORE, 140175938674688, 140175985139711, -STORE, 140175938666496, 140175985139711, -STORE, 140175938650112, 140175985139711, -STORE, 140175938641920, 140175985139711, -STORE, 140175938625536, 140175985139711, -STORE, 140175938617344, 140175985139711, -STORE, 140175938600960, 140175985139711, -STORE, 140175938592768, 140175985139711, -STORE, 140175938560000, 140175985139711, -STORE, 140175938551808, 140175985139711, -STORE, 140175938535424, 140175985139711, -STORE, 140175938527232, 140175985139711, -STORE, 140175938510848, 140175985139711, -STORE, 140175938502656, 140175985139711, -STORE, 140175938486272, 140175985139711, -STORE, 140175938478080, 140175985139711, -STORE, 140175938445312, 140175985139711, -STORE, 140175938437120, 140175985139711, -STORE, 140175938420736, 140175985139711, -STORE, 140175938412544, 140175985139711, -STORE, 140175938396160, 140175985139711, -STORE, 140175938387968, 140175985139711, -STORE, 140175938371584, 140175985139711, -STORE, 140175938363392, 140175985139711, -STORE, 140175938330624, 140175985139711, -STORE, 140175938322432, 140175985139711, -STORE, 140175938306048, 140175985139711, -STORE, 140175938297856, 140175985139711, -STORE, 140175938281472, 140175985139711, -STORE, 140175938273280, 140175985139711, -STORE, 140175938256896, 140175985139711, -STORE, 140175938248704, 140175985139711, -STORE, 140175938215936, 140175985139711, -STORE, 140175938207744, 140175985139711, -STORE, 140175938191360, 140175985139711, -STORE, 140175938183168, 140175985139711, -STORE, 140175938166784, 140175985139711, -STORE, 140175938158592, 140175985139711, -STORE, 140175938142208, 140175985139711, -STORE, 140175936045056, 140175985139711, -STORE, 140175936036864, 140175985139711, -STORE, 140175936004096, 140175985139711, -STORE, 140175935995904, 140175985139711, -STORE, 140175935979520, 140175985139711, -STORE, 140175935971328, 140175985139711, -STORE, 140175935954944, 140175985139711, -STORE, 140175935946752, 140175985139711, -STORE, 140175935930368, 140175985139711, -STORE, 140175935922176, 140175985139711, -STORE, 140175935889408, 140175985139711, -STORE, 140175935881216, 140175985139711, -STORE, 140175935864832, 140175985139711, -STORE, 140175935856640, 140175985139711, -STORE, 140175935840256, 140175985139711, -STORE, 140175935832064, 140175985139711, -STORE, 140175935815680, 140175985139711, -STORE, 140175935807488, 140175985139711, -STORE, 140175935774720, 140175985139711, -STORE, 140175935766528, 140175985139711, -STORE, 140175935750144, 140175985139711, -STORE, 140175935741952, 140175985139711, -STORE, 140175935725568, 140175985139711, -STORE, 140175935717376, 140175985139711, -STORE, 140175935700992, 140175985139711, -STORE, 140175935692800, 140175985139711, -STORE, 140175935660032, 140175985139711, -STORE, 140175935651840, 140175985139711, -STORE, 140175935635456, 140175985139711, -STORE, 140175935627264, 140175985139711, -STORE, 140175935610880, 140175985139711, -STORE, 140175935602688, 140175985139711, -STORE, 140175935586304, 140175985139711, -STORE, 140175935578112, 140175985139711, -STORE, 140175935545344, 140175985139711, -STORE, 140175935537152, 140175985139711, -STORE, 140175935520768, 140175985139711, -STORE, 140175935512576, 140175985139711, -STORE, 140175935496192, 140175985139711, -STORE, 140175935488000, 140175985139711, -STORE, 140175935471616, 140175985139711, -STORE, 140175935463424, 140175985139711, -STORE, 140175935430656, 140175985139711, -STORE, 140175935422464, 140175985139711, -STORE, 140175935406080, 140175985139711, -STORE, 140175935397888, 140175985139711, -STORE, 140175935381504, 140175985139711, -STORE, 140175935373312, 140175985139711, -STORE, 140175935356928, 140175985139711, -STORE, 140175935348736, 140175985139711, -STORE, 140175935315968, 140175985139711, -STORE, 140175935307776, 140175985139711, -STORE, 140175935291392, 140175985139711, -STORE, 140175935283200, 140175985139711, -STORE, 140175935266816, 140175985139711, -STORE, 140175935258624, 140175985139711, -STORE, 140175935242240, 140175985139711, -STORE, 140175935234048, 140175985139711, -STORE, 140175935201280, 140175985139711, -STORE, 140175935193088, 140175985139711, -STORE, 140175935176704, 140175985139711, -STORE, 140175935168512, 140175985139711, -STORE, 140175935152128, 140175985139711, -STORE, 140175935143936, 140175985139711, -STORE, 140175935127552, 140175985139711, -STORE, 140175935119360, 140175985139711, -STORE, 140175935086592, 140175985139711, -STORE, 140175935078400, 140175985139711, -STORE, 140175935062016, 140175985139711, -STORE, 140175935053824, 140175985139711, -STORE, 140175935037440, 140175985139711, -STORE, 140175935029248, 140175985139711, -STORE, 140175935012864, 140175985139711, -STORE, 140175935004672, 140175985139711, -STORE, 140175934971904, 140175985139711, -STORE, 140175934963712, 140175985139711, -STORE, 140175934947328, 140175985139711, -STORE, 140175934939136, 140175985139711, -STORE, 140175934922752, 140175985139711, -STORE, 140175934914560, 140175985139711, -STORE, 140175934898176, 140175985139711, -STORE, 140175934889984, 140175985139711, -STORE, 140175934857216, 140175985139711, -STORE, 140175934849024, 140175985139711, -STORE, 140175934832640, 140175985139711, -STORE, 140175934824448, 140175985139711, -STORE, 140175934808064, 140175985139711, -STORE, 140175934799872, 140175985139711, -STORE, 140175934783488, 140175985139711, -STORE, 140175934775296, 140175985139711, -STORE, 140175934742528, 140175985139711, -STORE, 140175934734336, 140175985139711, -STORE, 140175934717952, 140175985139711, -STORE, 140175934709760, 140175985139711, -STORE, 140175934693376, 140175985139711, -STORE, 140175934685184, 140175985139711, -STORE, 140175934668800, 140175985139711, -STORE, 140175934660608, 140175985139711, -STORE, 140175934627840, 140175985139711, -STORE, 140175934619648, 140175985139711, -STORE, 140175934603264, 140175985139711, -STORE, 140175934595072, 140175985139711, -STORE, 140175934578688, 140175985139711, -STORE, 140175934570496, 140175985139711, -STORE, 140175934554112, 140175985139711, -STORE, 140175934545920, 140175985139711, -STORE, 140175934513152, 140175985139711, -STORE, 140175934504960, 140175985139711, -STORE, 140175934488576, 140175985139711, -STORE, 140175934480384, 140175985139711, -STORE, 140175934464000, 140175985139711, -STORE, 140175934455808, 140175985139711, -STORE, 140175934439424, 140175985139711, -STORE, 140175934431232, 140175985139711, -STORE, 140175934398464, 140175985139711, -STORE, 140175934390272, 140175985139711, -STORE, 140175934373888, 140175985139711, -STORE, 140175934365696, 140175985139711, -STORE, 140175934349312, 140175985139711, -STORE, 140175934341120, 140175985139711, -STORE, 140175934324736, 140175985139711, -STORE, 140175932227584, 140175985139711, -STORE, 140175932219392, 140175985139711, -STORE, 140175932186624, 140175985139711, -STORE, 140175932178432, 140175985139711, -STORE, 140175932162048, 140175985139711, -STORE, 140175932153856, 140175985139711, -STORE, 140175932137472, 140175985139711, -STORE, 53080064, 57884671, -STORE, 140175932129280, 140175985139711, -STORE, 140175932112896, 140175985139711, -STORE, 140175932104704, 140175985139711, -STORE, 140175932071936, 140175985139711, -STORE, 140175932063744, 140175985139711, -STORE, 140175932047360, 140175985139711, -STORE, 140175932039168, 140175985139711, -STORE, 140175932022784, 140175985139711, -STORE, 140175932014592, 140175985139711, -STORE, 140175931998208, 140175985139711, -STORE, 140175931990016, 140175985139711, -STORE, 140175931957248, 140175985139711, -STORE, 140175931949056, 140175985139711, -STORE, 140175931932672, 140175985139711, -STORE, 140175931924480, 140175985139711, -STORE, 140175931908096, 140175985139711, -STORE, 140175931899904, 140175985139711, -STORE, 140175931883520, 140175985139711, -STORE, 140175931875328, 140175985139711, -STORE, 140175931842560, 140175985139711, -STORE, 140175931834368, 140175985139711, -STORE, 140175931817984, 140175985139711, -STORE, 140175931809792, 140175985139711, -STORE, 140175931793408, 140175985139711, -STORE, 140175931785216, 140175985139711, -STORE, 140175931768832, 140175985139711, -STORE, 140175931760640, 140175985139711, -STORE, 140175931727872, 140175985139711, -STORE, 140175931719680, 140175985139711, -STORE, 140175931703296, 140175985139711, -STORE, 140175931695104, 140175985139711, -STORE, 140175931678720, 140175985139711, -STORE, 140175931670528, 140175985139711, -STORE, 140175931654144, 140175985139711, -STORE, 140175931645952, 140175985139711, -STORE, 140175931613184, 140175985139711, -STORE, 140175931604992, 140175985139711, -STORE, 140175931588608, 140175985139711, -STORE, 140175931580416, 140175985139711, -STORE, 140175931564032, 140175985139711, -STORE, 140175931555840, 140175985139711, -STORE, 140175931539456, 140175985139711, -STORE, 140175931531264, 140175985139711, -STORE, 140175931498496, 140175985139711, -STORE, 140175931490304, 140175985139711, -STORE, 140175931473920, 140175985139711, -STORE, 140175931465728, 140175985139711, -STORE, 140175931449344, 140175985139711, -STORE, 140175931441152, 140175985139711, -STORE, 140175931424768, 140175985139711, -STORE, 140175931416576, 140175985139711, -STORE, 140175931383808, 140175985139711, -STORE, 140175931375616, 140175985139711, -STORE, 140175931359232, 140175985139711, -STORE, 140175931351040, 140175985139711, -STORE, 140175931334656, 140175985139711, -STORE, 140175931326464, 140175985139711, -STORE, 140175931310080, 140175985139711, -STORE, 140175931301888, 140175985139711, -STORE, 140175931269120, 140175985139711, -STORE, 140175931260928, 140175985139711, -STORE, 140175931244544, 140175985139711, -STORE, 140175931236352, 140175985139711, -STORE, 140175931219968, 140175985139711, -STORE, 140175931211776, 140175985139711, -STORE, 140175931195392, 140175985139711, -STORE, 140175931187200, 140175985139711, -STORE, 140175931154432, 140175985139711, -STORE, 140175931146240, 140175985139711, -STORE, 140175931129856, 140175985139711, -STORE, 140175931121664, 140175985139711, -STORE, 140175931105280, 140175985139711, -STORE, 140175931097088, 140175985139711, -STORE, 140175931080704, 140175985139711, -STORE, 140175931072512, 140175985139711, -STORE, 140175931039744, 140175985139711, -STORE, 140175931031552, 140175985139711, -STORE, 140175931015168, 140175985139711, -STORE, 140175931006976, 140175985139711, -STORE, 140175930990592, 140175985139711, -STORE, 140175930982400, 140175985139711, -STORE, 140175930966016, 140175985139711, -STORE, 140175930957824, 140175985139711, -STORE, 140175930925056, 140175985139711, -STORE, 140175930916864, 140175985139711, -STORE, 140175930900480, 140175985139711, -STORE, 140175930892288, 140175985139711, -STORE, 140175930875904, 140175985139711, -STORE, 140175930867712, 140175985139711, -STORE, 140175930851328, 140175985139711, -STORE, 140175930843136, 140175985139711, -STORE, 140175930810368, 140175985139711, -STORE, 140175930802176, 140175985139711, -STORE, 140175930785792, 140175985139711, -STORE, 140175930777600, 140175985139711, -STORE, 140175930761216, 140175985139711, -STORE, 140175930753024, 140175985139711, -STORE, 140175930736640, 140175985139711, -STORE, 140175930728448, 140175985139711, -STORE, 140175930695680, 140175985139711, -STORE, 140175930687488, 140175985139711, -STORE, 140175930671104, 140175985139711, -STORE, 140175930662912, 140175985139711, -STORE, 140175930646528, 140175985139711, -STORE, 140175930638336, 140175985139711, -STORE, 140175930621952, 140175985139711, -STORE, 140175930613760, 140175985139711, -STORE, 140175930580992, 140175985139711, -STORE, 140175930572800, 140175985139711, -STORE, 140175930556416, 140175985139711, -STORE, 140175930548224, 140175985139711, -STORE, 140175930531840, 140175985139711, -STORE, 140175930523648, 140175985139711, -STORE, 140175930507264, 140175985139711, -STORE, 140175928410112, 140175985139711, -STORE, 140175928401920, 140175985139711, -STORE, 140175928369152, 140175985139711, -STORE, 140175928360960, 140175985139711, -STORE, 140175928344576, 140175985139711, -STORE, 140175928336384, 140175985139711, -STORE, 140175928320000, 140175985139711, -STORE, 140175928311808, 140175985139711, -STORE, 140175928295424, 140175985139711, -STORE, 140175927242752, 140175985139711, -SNULL, 140175956627455, 140175985139711, -STORE, 140175927242752, 140175956627455, -STORE, 140175956627456, 140175985139711, - }; - unsigned long set24[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140735281639424, 140737488351231, -SNULL, 140735281643519, 140737488351231, -STORE, 140735281639424, 140735281643519, -STORE, 140735281508352, 140735281643519, -STORE, 94717834911744, 94717834928127, -SNULL, 94717834915839, 94717834928127, -STORE, 94717834911744, 94717834915839, -STORE, 94717834915840, 94717834928127, -ERASE, 94717834915840, 94717834928127, -STORE, 94717834919936, 94717834928127, -STORE, 140428246065152, 140428248317951, -SNULL, 140428246208511, 140428248317951, -STORE, 140428246065152, 140428246208511, -STORE, 140428246208512, 140428248317951, -ERASE, 140428246208512, 140428248317951, -STORE, 140428248305664, 140428248313855, -STORE, 140428248313856, 140428248317951, -STORE, 140735281811456, 140735281815551, -STORE, 140735281799168, 140735281811455, -STORE, 140428248297472, 140428248305663, -STORE, 140428243841024, 140428246065151, -SNULL, 140428245491711, 140428246065151, -STORE, 140428243841024, 140428245491711, -STORE, 140428245491712, 140428246065151, -SNULL, 140428245491712, 140428246061055, -STORE, 140428246061056, 140428246065151, -STORE, 140428245491712, 140428246061055, -ERASE, 140428245491712, 140428246061055, -STORE, 140428245491712, 140428246061055, -ERASE, 140428246061056, 140428246065151, -STORE, 140428246061056, 140428246065151, -STORE, 140428248268800, 140428248297471, -STORE, 140428241625088, 140428243841023, -SNULL, 140428241625088, 140428241723391, -STORE, 140428241723392, 140428243841023, -STORE, 140428241625088, 140428241723391, -SNULL, 140428243816447, 140428243841023, -STORE, 140428241723392, 140428243816447, -STORE, 140428243816448, 140428243841023, -SNULL, 140428243816448, 140428243824639, -STORE, 140428243824640, 140428243841023, -STORE, 140428243816448, 140428243824639, -ERASE, 140428243816448, 140428243824639, -STORE, 140428243816448, 140428243824639, -ERASE, 140428243824640, 140428243841023, -STORE, 140428243824640, 140428243841023, -STORE, 140428237828096, 140428241625087, -SNULL, 140428237828096, 140428239486975, -STORE, 140428239486976, 140428241625087, -STORE, 140428237828096, 140428239486975, -SNULL, 140428241584127, 140428241625087, -STORE, 140428239486976, 140428241584127, -STORE, 140428241584128, 140428241625087, -SNULL, 140428241584128, 140428241608703, -STORE, 140428241608704, 140428241625087, -STORE, 140428241584128, 140428241608703, -ERASE, 140428241584128, 140428241608703, -STORE, 140428241584128, 140428241608703, -ERASE, 140428241608704, 140428241625087, -STORE, 140428241608704, 140428241625087, -STORE, 140428235567104, 140428237828095, -SNULL, 140428235567104, 140428235718655, -STORE, 140428235718656, 140428237828095, -STORE, 140428235567104, 140428235718655, -SNULL, 140428237811711, 140428237828095, -STORE, 140428235718656, 140428237811711, -STORE, 140428237811712, 140428237828095, -SNULL, 140428237811712, 140428237819903, -STORE, 140428237819904, 140428237828095, -STORE, 140428237811712, 140428237819903, -ERASE, 140428237811712, 140428237819903, -STORE, 140428237811712, 140428237819903, -ERASE, 140428237819904, 140428237828095, -STORE, 140428237819904, 140428237828095, -STORE, 140428233445376, 140428235567103, -SNULL, 140428233445376, 140428233461759, -STORE, 140428233461760, 140428235567103, -STORE, 140428233445376, 140428233461759, -SNULL, 140428235558911, 140428235567103, -STORE, 140428233461760, 140428235558911, -STORE, 140428235558912, 140428235567103, -ERASE, 140428235558912, 140428235567103, -STORE, 140428235558912, 140428235567103, -STORE, 140428231315456, 140428233445375, -SNULL, 140428231315456, 140428231344127, -STORE, 140428231344128, 140428233445375, -STORE, 140428231315456, 140428231344127, -SNULL, 140428233437183, 140428233445375, -STORE, 140428231344128, 140428233437183, -STORE, 140428233437184, 140428233445375, -ERASE, 140428233437184, 140428233445375, -STORE, 140428233437184, 140428233445375, -STORE, 140428248260608, 140428248268799, -STORE, 140428229062656, 140428231315455, -SNULL, 140428229062656, 140428229214207, -STORE, 140428229214208, 140428231315455, -STORE, 140428229062656, 140428229214207, -SNULL, 140428231307263, 140428231315455, -STORE, 140428229214208, 140428231307263, -STORE, 140428231307264, 140428231315455, -ERASE, 140428231307264, 140428231315455, -STORE, 140428231307264, 140428231315455, -STORE, 140428226891776, 140428229062655, -SNULL, 140428226891776, 140428226961407, -STORE, 140428226961408, 140428229062655, -STORE, 140428226891776, 140428226961407, -SNULL, 140428229054463, 140428229062655, -STORE, 140428226961408, 140428229054463, -STORE, 140428229054464, 140428229062655, -ERASE, 140428229054464, 140428229062655, -STORE, 140428229054464, 140428229062655, -STORE, 140428223680512, 140428226891775, -SNULL, 140428223680512, 140428224757759, -STORE, 140428224757760, 140428226891775, -STORE, 140428223680512, 140428224757759, -SNULL, 140428226854911, 140428226891775, -STORE, 140428224757760, 140428226854911, -STORE, 140428226854912, 140428226891775, -ERASE, 140428226854912, 140428226891775, -STORE, 140428226854912, 140428226891775, -STORE, 140428221546496, 140428223680511, -SNULL, 140428221546496, 140428221575167, -STORE, 140428221575168, 140428223680511, -STORE, 140428221546496, 140428221575167, -SNULL, 140428223672319, 140428223680511, -STORE, 140428221575168, 140428223672319, -STORE, 140428223672320, 140428223680511, -ERASE, 140428223672320, 140428223680511, -STORE, 140428223672320, 140428223680511, -STORE, 140428219236352, 140428221546495, -SNULL, 140428219236352, 140428219441151, -STORE, 140428219441152, 140428221546495, -STORE, 140428219236352, 140428219441151, -SNULL, 140428221538303, 140428221546495, -STORE, 140428219441152, 140428221538303, -STORE, 140428221538304, 140428221546495, -ERASE, 140428221538304, 140428221546495, -STORE, 140428221538304, 140428221546495, -STORE, 140428216852480, 140428219236351, -SNULL, 140428216852480, 140428217044991, -STORE, 140428217044992, 140428219236351, -STORE, 140428216852480, 140428217044991, -SNULL, 140428219138047, 140428219236351, -STORE, 140428217044992, 140428219138047, -STORE, 140428219138048, 140428219236351, -ERASE, 140428219138048, 140428219236351, -STORE, 140428219138048, 140428219236351, -STORE, 140428248252416, 140428248268799, -STORE, 140428214284288, 140428216852479, -SNULL, 140428214284288, 140428214751231, -STORE, 140428214751232, 140428216852479, -STORE, 140428214284288, 140428214751231, -SNULL, 140428216844287, 140428216852479, -STORE, 140428214751232, 140428216844287, -STORE, 140428216844288, 140428216852479, -ERASE, 140428216844288, 140428216852479, -STORE, 140428216844288, 140428216852479, -STORE, 140428212170752, 140428214284287, -SNULL, 140428212170752, 140428212183039, -STORE, 140428212183040, 140428214284287, -STORE, 140428212170752, 140428212183039, -SNULL, 140428214276095, 140428214284287, -STORE, 140428212183040, 140428214276095, -STORE, 140428214276096, 140428214284287, -ERASE, 140428214276096, 140428214284287, -STORE, 140428214276096, 140428214284287, -STORE, 140428209991680, 140428212170751, -SNULL, 140428209991680, 140428210069503, -STORE, 140428210069504, 140428212170751, -STORE, 140428209991680, 140428210069503, -SNULL, 140428212162559, 140428212170751, -STORE, 140428210069504, 140428212162559, -STORE, 140428212162560, 140428212170751, -ERASE, 140428212162560, 140428212170751, -STORE, 140428212162560, 140428212170751, -STORE, 140428207874048, 140428209991679, -SNULL, 140428207874048, 140428207890431, -STORE, 140428207890432, 140428209991679, -STORE, 140428207874048, 140428207890431, -SNULL, 140428209983487, 140428209991679, -STORE, 140428207890432, 140428209983487, -STORE, 140428209983488, 140428209991679, -ERASE, 140428209983488, 140428209991679, -STORE, 140428209983488, 140428209991679, -STORE, 140428248244224, 140428248268799, -STORE, 140428248231936, 140428248268799, -SNULL, 140428241600511, 140428241608703, -STORE, 140428241584128, 140428241600511, -STORE, 140428241600512, 140428241608703, -SNULL, 140428209987583, 140428209991679, -STORE, 140428209983488, 140428209987583, -STORE, 140428209987584, 140428209991679, -SNULL, 140428212166655, 140428212170751, -STORE, 140428212162560, 140428212166655, -STORE, 140428212166656, 140428212170751, -SNULL, 140428214280191, 140428214284287, -STORE, 140428214276096, 140428214280191, -STORE, 140428214280192, 140428214284287, -SNULL, 140428243820543, 140428243824639, -STORE, 140428243816448, 140428243820543, -STORE, 140428243820544, 140428243824639, -SNULL, 140428216848383, 140428216852479, -STORE, 140428216844288, 140428216848383, -STORE, 140428216848384, 140428216852479, -SNULL, 140428219232255, 140428219236351, -STORE, 140428219138048, 140428219232255, -STORE, 140428219232256, 140428219236351, -SNULL, 140428221542399, 140428221546495, -STORE, 140428221538304, 140428221542399, -STORE, 140428221542400, 140428221546495, -SNULL, 140428223676415, 140428223680511, -STORE, 140428223672320, 140428223676415, -STORE, 140428223676416, 140428223680511, -SNULL, 140428226863103, 140428226891775, -STORE, 140428226854912, 140428226863103, -STORE, 140428226863104, 140428226891775, -SNULL, 140428229058559, 140428229062655, -STORE, 140428229054464, 140428229058559, -STORE, 140428229058560, 140428229062655, -SNULL, 140428231311359, 140428231315455, -STORE, 140428231307264, 140428231311359, -STORE, 140428231311360, 140428231315455, -SNULL, 140428233441279, 140428233445375, -STORE, 140428233437184, 140428233441279, -STORE, 140428233441280, 140428233445375, -SNULL, 140428235563007, 140428235567103, -STORE, 140428235558912, 140428235563007, -STORE, 140428235563008, 140428235567103, -SNULL, 140428237815807, 140428237819903, -STORE, 140428237811712, 140428237815807, -STORE, 140428237815808, 140428237819903, -SNULL, 140428246056959, 140428246061055, -STORE, 140428245491712, 140428246056959, -STORE, 140428246056960, 140428246061055, -SNULL, 94717834924031, 94717834928127, -STORE, 94717834919936, 94717834924031, -STORE, 94717834924032, 94717834928127, -SNULL, 140428248309759, 140428248313855, -STORE, 140428248305664, 140428248309759, -STORE, 140428248309760, 140428248313855, -ERASE, 140428248268800, 140428248297471, -STORE, 94717843058688, 94717843193855, -STORE, 94749677137920, 94749677559807, -STORE, 94749677563904, 94749677604863, -STORE, 94749677604864, 94749677608959, -STORE, 94749710970880, 94749711241215, -STORE, 140490884894720, 140490884935679, -STORE, 140490884935680, 140490887032831, -STORE, 140490887032832, 140490887036927, -STORE, 140490887036928, 140490887041023, -STORE, 140490887041024, 140490887065599, -STORE, 140490887065600, 140490887110655, -STORE, 140490887110656, 140490889203711, -STORE, 140490889203712, 140490889207807, -STORE, 140490889207808, 140490889211903, -STORE, 140490889211904, 140490889293823, -STORE, 140490889293824, 140490891390975, -STORE, 140490891390976, 140490891395071, -STORE, 140490891395072, 140490891399167, -STORE, 140490891399168, 140490891407359, -STORE, 140490891407360, 140490891436031, -STORE, 140490891436032, 140490893529087, -STORE, 140490893529088, 140490893533183, -STORE, 140490893533184, 140490893537279, -STORE, 140490893537280, 140490901979135, -STORE, 140490901979136, 140490901991423, -STORE, 140490901991424, 140490904084479, -STORE, 140490904084480, 140490904088575, -STORE, 140490904088576, 140490904092671, -STORE, 140490904092672, 140490904559615, -STORE, 140490904559616, 140490906652671, -STORE, 140490906652672, 140490906656767, -STORE, 140490906656768, 140490906660863, -STORE, 140490906660864, 140490906677247, -STORE, 140490906677248, 140490908770303, -STORE, 140490908770304, 140490908774399, -STORE, 140490908774400, 140490908778495, -STORE, 140490908778496, 140490908794879, -STORE, 140490908794880, 140490910887935, -STORE, 140490910887936, 140490910892031, -STORE, 140490910892032, 140490910896127, -STORE, 140490910896128, 140490912555007, -STORE, 140490912555008, 140490914652159, -STORE, 140490914652160, 140490914668543, -STORE, 140490914668544, 140490914676735, -STORE, 140490914676736, 140490914693119, -STORE, 140490914693120, 140490914791423, -STORE, 140490914791424, 140490916884479, -STORE, 140490916884480, 140490916888575, -STORE, 140490916888576, 140490916892671, -STORE, 140490916892672, 140490916909055, -STORE, 140490916909056, 140490916937727, -STORE, 140490916937728, 140490919030783, -STORE, 140490919030784, 140490919034879, -STORE, 140490919034880, 140490919038975, -STORE, 140490919038976, 140490919190527, -STORE, 140490919190528, 140490921283583, -STORE, 140490921283584, 140490921287679, -STORE, 140490921287680, 140490921291775, -STORE, 140490921291776, 140490921299967, -STORE, 140490921299968, 140490921390079, -STORE, 140490921390080, 140490923483135, -STORE, 140490923483136, 140490923487231, -STORE, 140490923487232, 140490923491327, -STORE, 140490923491328, 140490923757567, -STORE, 140490923757568, 140490925850623, -STORE, 140490925850624, 140490925867007, -STORE, 140490925867008, 140490925871103, -STORE, 140490925871104, 140490925875199, -STORE, 140490925875200, 140490925903871, -STORE, 140490925903872, 140490928001023, -STORE, 140490928001024, 140490928005119, -STORE, 140490928005120, 140490928009215, -STORE, 140490928009216, 140490928152575, -STORE, 140490930184192, 140490930221055, -STORE, 140490930221056, 140490930237439, -STORE, 140490930237440, 140490930241535, -STORE, 140490930241536, 140490930245631, -STORE, 140490930245632, 140490930249727, -STORE, 140490930249728, 140490930253823, -STORE, 140490930253824, 140490930257919, -STORE, 140490930257920, 140490930262015, -STORE, 140724611694592, 140724611829759, -STORE, 140724612427776, 140724612440063, -STORE, 140724612440064, 140724612444159, -STORE, 94103163662336, 94103163772927, -STORE, 94103165865984, 94103165874175, -STORE, 94103165874176, 94103165878271, -STORE, 94103165878272, 94103165886463, -STORE, 94103182548992, 94103182684159, -STORE, 140092694708224, 140092696367103, -STORE, 140092696367104, 140092698464255, -STORE, 140092698464256, 140092698480639, -STORE, 140092698480640, 140092698488831, -STORE, 140092698488832, 140092698505215, -STORE, 140092698505216, 140092698648575, -STORE, 140092700708864, 140092700717055, -STORE, 140092700745728, 140092700749823, -STORE, 140092700749824, 140092700753919, -STORE, 140092700753920, 140092700758015, -STORE, 140736800911360, 140736801046527, -STORE, 140736802308096, 140736802320383, -STORE, 140736802320384, 140736802324479, -STORE, 93948802064384, 93948802174975, -STORE, 93948804268032, 93948804276223, -STORE, 93948804276224, 93948804280319, -STORE, 93948804280320, 93948804288511, -STORE, 93948806266880, 93948806402047, -STORE, 140222999113728, 140223000772607, -STORE, 140223000772608, 140223002869759, -STORE, 140223002869760, 140223002886143, -STORE, 140223002886144, 140223002894335, -STORE, 140223002894336, 140223002910719, -STORE, 140223002910720, 140223003054079, -STORE, 140223005114368, 140223005122559, -STORE, 140223005151232, 140223005155327, -STORE, 140223005155328, 140223005159423, -STORE, 140223005159424, 140223005163519, -STORE, 140720877506560, 140720877641727, -STORE, 140720878231552, 140720878243839, -STORE, 140720878243840, 140720878247935, -STORE, 140737488347136, 140737488351231, -STORE, 140733232087040, 140737488351231, -SNULL, 140733232091135, 140737488351231, -STORE, 140733232087040, 140733232091135, -STORE, 140733231955968, 140733232091135, -STORE, 4194304, 5128191, -STORE, 7221248, 7241727, -STORE, 7241728, 7249919, -STORE, 140161681321984, 140161683574783, -SNULL, 140161681465343, 140161683574783, -STORE, 140161681321984, 140161681465343, -STORE, 140161681465344, 140161683574783, -ERASE, 140161681465344, 140161683574783, -STORE, 140161683562496, 140161683570687, -STORE, 140161683570688, 140161683574783, -STORE, 140733232214016, 140733232218111, -STORE, 140733232201728, 140733232214015, -STORE, 140161683533824, 140161683562495, -STORE, 140161683525632, 140161683533823, -STORE, 140161678159872, 140161681321983, -SNULL, 140161678159872, 140161679220735, -STORE, 140161679220736, 140161681321983, -STORE, 140161678159872, 140161679220735, -SNULL, 140161681313791, 140161681321983, -STORE, 140161679220736, 140161681313791, -STORE, 140161681313792, 140161681321983, -ERASE, 140161681313792, 140161681321983, -STORE, 140161681313792, 140161681321983, -STORE, 140161674362880, 140161678159871, -SNULL, 140161674362880, 140161676021759, -STORE, 140161676021760, 140161678159871, -STORE, 140161674362880, 140161676021759, -SNULL, 140161678118911, 140161678159871, -STORE, 140161676021760, 140161678118911, -STORE, 140161678118912, 140161678159871, -SNULL, 140161678118912, 140161678143487, -STORE, 140161678143488, 140161678159871, -STORE, 140161678118912, 140161678143487, -ERASE, 140161678118912, 140161678143487, -STORE, 140161678118912, 140161678143487, -ERASE, 140161678143488, 140161678159871, -STORE, 140161678143488, 140161678159871, -STORE, 140161683513344, 140161683533823, -SNULL, 140161678135295, 140161678143487, -STORE, 140161678118912, 140161678135295, -STORE, 140161678135296, 140161678143487, -SNULL, 140161681317887, 140161681321983, -STORE, 140161681313792, 140161681317887, -STORE, 140161681317888, 140161681321983, -SNULL, 7233535, 7241727, -STORE, 7221248, 7233535, -STORE, 7233536, 7241727, -SNULL, 140161683566591, 140161683570687, -STORE, 140161683562496, 140161683566591, -STORE, 140161683566592, 140161683570687, -ERASE, 140161683533824, 140161683562495, -STORE, 25477120, 25612287, -STORE, 25477120, 25759743, -STORE, 140161681829888, 140161683513343, -STORE, 25477120, 25915391, -STORE, 25477120, 26054655, -SNULL, 25800703, 26054655, -STORE, 25477120, 25800703, -STORE, 25800704, 26054655, -ERASE, 25800704, 26054655, -STORE, 140737488347136, 140737488351231, -STORE, 140723218452480, 140737488351231, -SNULL, 140723218456575, 140737488351231, -STORE, 140723218452480, 140723218456575, -STORE, 140723218321408, 140723218456575, -STORE, 4194304, 26279935, -STORE, 28372992, 28454911, -STORE, 28454912, 29806591, -STORE, 140398872264704, 140398874517503, -SNULL, 140398872408063, 140398874517503, -STORE, 140398872264704, 140398872408063, -STORE, 140398872408064, 140398874517503, -ERASE, 140398872408064, 140398874517503, -STORE, 140398874505216, 140398874513407, -STORE, 140398874513408, 140398874517503, -STORE, 140723219247104, 140723219251199, -STORE, 140723219234816, 140723219247103, -STORE, 140398874476544, 140398874505215, -STORE, 140398874468352, 140398874476543, -STORE, 140398868430848, 140398872264703, -SNULL, 140398868430848, 140398870138879, -STORE, 140398870138880, 140398872264703, -STORE, 140398868430848, 140398870138879, -SNULL, 140398872231935, 140398872264703, -STORE, 140398870138880, 140398872231935, -STORE, 140398872231936, 140398872264703, -ERASE, 140398872231936, 140398872264703, -STORE, 140398872231936, 140398872264703, -STORE, 140398866235392, 140398868430847, -SNULL, 140398866235392, 140398866329599, -STORE, 140398866329600, 140398868430847, -STORE, 140398866235392, 140398866329599, -SNULL, 140398868422655, 140398868430847, -STORE, 140398866329600, 140398868422655, -STORE, 140398868422656, 140398868430847, -ERASE, 140398868422656, 140398868430847, -STORE, 140398868422656, 140398868430847, -STORE, 140398863716352, 140398866235391, -SNULL, 140398863716352, 140398864130047, -STORE, 140398864130048, 140398866235391, -STORE, 140398863716352, 140398864130047, -SNULL, 140398866223103, 140398866235391, -STORE, 140398864130048, 140398866223103, -STORE, 140398866223104, 140398866235391, -ERASE, 140398866223104, 140398866235391, -STORE, 140398866223104, 140398866235391, -STORE, 140398861082624, 140398863716351, -SNULL, 140398861082624, 140398861611007, -STORE, 140398861611008, 140398863716351, -STORE, 140398861082624, 140398861611007, -SNULL, 140398863708159, 140398863716351, -STORE, 140398861611008, 140398863708159, -STORE, 140398863708160, 140398863716351, -ERASE, 140398863708160, 140398863716351, -STORE, 140398863708160, 140398863716351, -STORE, 140398858969088, 140398861082623, -SNULL, 140398858969088, 140398858981375, -STORE, 140398858981376, 140398861082623, -STORE, 140398858969088, 140398858981375, -SNULL, 140398861074431, 140398861082623, -STORE, 140398858981376, 140398861074431, -STORE, 140398861074432, 140398861082623, -ERASE, 140398861074432, 140398861082623, -STORE, 140398861074432, 140398861082623, -STORE, 140398856765440, 140398858969087, -SNULL, 140398856765440, 140398856867839, -STORE, 140398856867840, 140398858969087, -STORE, 140398856765440, 140398856867839, -SNULL, 140398858960895, 140398858969087, -STORE, 140398856867840, 140398858960895, -STORE, 140398858960896, 140398858969087, -ERASE, 140398858960896, 140398858969087, -STORE, 140398858960896, 140398858969087, -STORE, 140398874460160, 140398874476543, -STORE, 140398853603328, 140398856765439, -SNULL, 140398853603328, 140398854664191, -STORE, 140398854664192, 140398856765439, -STORE, 140398853603328, 140398854664191, -SNULL, 140398856757247, 140398856765439, -STORE, 140398854664192, 140398856757247, -STORE, 140398856757248, 140398856765439, -ERASE, 140398856757248, 140398856765439, -STORE, 140398856757248, 140398856765439, -STORE, 140398849806336, 140398853603327, -SNULL, 140398849806336, 140398851465215, -STORE, 140398851465216, 140398853603327, -STORE, 140398849806336, 140398851465215, -SNULL, 140398853562367, 140398853603327, -STORE, 140398851465216, 140398853562367, -STORE, 140398853562368, 140398853603327, -SNULL, 140398853562368, 140398853586943, -STORE, 140398853586944, 140398853603327, -STORE, 140398853562368, 140398853586943, -ERASE, 140398853562368, 140398853586943, -STORE, 140398853562368, 140398853586943, -ERASE, 140398853586944, 140398853603327, -STORE, 140398853586944, 140398853603327, -STORE, 140398874447872, 140398874476543, -SNULL, 140398853578751, 140398853586943, -STORE, 140398853562368, 140398853578751, -STORE, 140398853578752, 140398853586943, -SNULL, 140398856761343, 140398856765439, -STORE, 140398856757248, 140398856761343, -STORE, 140398856761344, 140398856765439, -SNULL, 140398858964991, 140398858969087, -STORE, 140398858960896, 140398858964991, -STORE, 140398858964992, 140398858969087, -SNULL, 140398861078527, 140398861082623, -STORE, 140398861074432, 140398861078527, -STORE, 140398861078528, 140398861082623, -SNULL, 140398863712255, 140398863716351, -STORE, 140398863708160, 140398863712255, -STORE, 140398863712256, 140398863716351, -SNULL, 140398866231295, 140398866235391, -STORE, 140398866223104, 140398866231295, -STORE, 140398866231296, 140398866235391, -SNULL, 140398868426751, 140398868430847, -STORE, 140398868422656, 140398868426751, -STORE, 140398868426752, 140398868430847, -SNULL, 140398872236031, 140398872264703, -STORE, 140398872231936, 140398872236031, -STORE, 140398872236032, 140398872264703, -SNULL, 28405759, 28454911, -STORE, 28372992, 28405759, -STORE, 28405760, 28454911, -SNULL, 140398874509311, 140398874513407, -STORE, 140398874505216, 140398874509311, -STORE, 140398874509312, 140398874513407, -ERASE, 140398874476544, 140398874505215, -STORE, 43278336, 43413503, -STORE, 140398872764416, 140398874447871, -STORE, 140398874501120, 140398874505215, -STORE, 140398872629248, 140398872764415, -STORE, 43278336, 43556863, -STORE, 140398847709184, 140398849806335, -STORE, 140398874492928, 140398874505215, -STORE, 140398874484736, 140398874505215, -STORE, 140398874447872, 140398874484735, -STORE, 140398872612864, 140398872764415, -STORE, 43278336, 43692031, -STORE, 43278336, 43880447, -STORE, 140398872604672, 140398872764415, -STORE, 140398872596480, 140398872764415, -STORE, 43278336, 44044287, -STORE, 140398872580096, 140398872764415, -STORE, 140737488347136, 140737488351231, -STORE, 140734403092480, 140737488351231, -SNULL, 140734403096575, 140737488351231, -STORE, 140734403092480, 140734403096575, -STORE, 140734402961408, 140734403096575, -STORE, 4194304, 5128191, -STORE, 7221248, 7241727, -STORE, 7241728, 7249919, -STORE, 140240662380544, 140240664633343, -SNULL, 140240662523903, 140240664633343, -STORE, 140240662380544, 140240662523903, -STORE, 140240662523904, 140240664633343, -ERASE, 140240662523904, 140240664633343, -STORE, 140240664621056, 140240664629247, -STORE, 140240664629248, 140240664633343, -STORE, 140734403145728, 140734403149823, -STORE, 140734403133440, 140734403145727, -STORE, 140240664592384, 140240664621055, -STORE, 140240664584192, 140240664592383, -STORE, 140240659218432, 140240662380543, -SNULL, 140240659218432, 140240660279295, -STORE, 140240660279296, 140240662380543, -STORE, 140240659218432, 140240660279295, -SNULL, 140240662372351, 140240662380543, -STORE, 140240660279296, 140240662372351, -STORE, 140240662372352, 140240662380543, -ERASE, 140240662372352, 140240662380543, -STORE, 140240662372352, 140240662380543, -STORE, 140240655421440, 140240659218431, -SNULL, 140240655421440, 140240657080319, -STORE, 140240657080320, 140240659218431, -STORE, 140240655421440, 140240657080319, -SNULL, 140240659177471, 140240659218431, -STORE, 140240657080320, 140240659177471, -STORE, 140240659177472, 140240659218431, -SNULL, 140240659177472, 140240659202047, -STORE, 140240659202048, 140240659218431, -STORE, 140240659177472, 140240659202047, -ERASE, 140240659177472, 140240659202047, -STORE, 140240659177472, 140240659202047, -ERASE, 140240659202048, 140240659218431, -STORE, 140240659202048, 140240659218431, -STORE, 140240664571904, 140240664592383, -SNULL, 140240659193855, 140240659202047, -STORE, 140240659177472, 140240659193855, -STORE, 140240659193856, 140240659202047, -SNULL, 140240662376447, 140240662380543, -STORE, 140240662372352, 140240662376447, -STORE, 140240662376448, 140240662380543, -SNULL, 7233535, 7241727, -STORE, 7221248, 7233535, -STORE, 7233536, 7241727, -SNULL, 140240664625151, 140240664629247, -STORE, 140240664621056, 140240664625151, -STORE, 140240664625152, 140240664629247, -ERASE, 140240664592384, 140240664621055, -STORE, 30646272, 30781439, -STORE, 30646272, 30928895, -STORE, 140240662888448, 140240664571903, -STORE, 94256659468288, 94256659578879, -STORE, 94256661671936, 94256661680127, -STORE, 94256661680128, 94256661684223, -STORE, 94256661684224, 94256661692415, -STORE, 94256687980544, 94256688115711, -STORE, 139801712504832, 139801714163711, -STORE, 139801714163712, 139801716260863, -STORE, 139801716260864, 139801716277247, -STORE, 139801716277248, 139801716285439, -STORE, 139801716285440, 139801716301823, -STORE, 139801716301824, 139801716445183, -STORE, 139801718505472, 139801718513663, -STORE, 139801718542336, 139801718546431, -STORE, 139801718546432, 139801718550527, -STORE, 139801718550528, 139801718554623, -STORE, 140721575538688, 140721575673855, -STORE, 140721577013248, 140721577025535, -STORE, 140721577025536, 140721577029631, -STORE, 140737488347136, 140737488351231, -STORE, 140729259393024, 140737488351231, -SNULL, 140729259397119, 140737488351231, -STORE, 140729259393024, 140729259397119, -STORE, 140729259261952, 140729259397119, -STORE, 4194304, 5128191, -STORE, 7221248, 7241727, -STORE, 7241728, 7249919, -STORE, 139682376638464, 139682378891263, -SNULL, 139682376781823, 139682378891263, -STORE, 139682376638464, 139682376781823, -STORE, 139682376781824, 139682378891263, -ERASE, 139682376781824, 139682378891263, -STORE, 139682378878976, 139682378887167, -STORE, 139682378887168, 139682378891263, -STORE, 140729260462080, 140729260466175, -STORE, 140729260449792, 140729260462079, -STORE, 139682378850304, 139682378878975, -STORE, 139682378842112, 139682378850303, -STORE, 139682373476352, 139682376638463, -SNULL, 139682373476352, 139682374537215, -STORE, 139682374537216, 139682376638463, -STORE, 139682373476352, 139682374537215, -SNULL, 139682376630271, 139682376638463, -STORE, 139682374537216, 139682376630271, -STORE, 139682376630272, 139682376638463, -ERASE, 139682376630272, 139682376638463, -STORE, 139682376630272, 139682376638463, -STORE, 139682369679360, 139682373476351, -SNULL, 139682369679360, 139682371338239, -STORE, 139682371338240, 139682373476351, -STORE, 139682369679360, 139682371338239, -SNULL, 139682373435391, 139682373476351, -STORE, 139682371338240, 139682373435391, -STORE, 139682373435392, 139682373476351, -SNULL, 139682373435392, 139682373459967, -STORE, 139682373459968, 139682373476351, -STORE, 139682373435392, 139682373459967, -ERASE, 139682373435392, 139682373459967, -STORE, 139682373435392, 139682373459967, -ERASE, 139682373459968, 139682373476351, -STORE, 139682373459968, 139682373476351, -STORE, 139682378829824, 139682378850303, -SNULL, 139682373451775, 139682373459967, -STORE, 139682373435392, 139682373451775, -STORE, 139682373451776, 139682373459967, -SNULL, 139682376634367, 139682376638463, -STORE, 139682376630272, 139682376634367, -STORE, 139682376634368, 139682376638463, -SNULL, 7233535, 7241727, -STORE, 7221248, 7233535, -STORE, 7233536, 7241727, -SNULL, 139682378883071, 139682378887167, -STORE, 139682378878976, 139682378883071, -STORE, 139682378883072, 139682378887167, -ERASE, 139682378850304, 139682378878975, -STORE, 10022912, 10158079, -STORE, 10022912, 10305535, -STORE, 139682377146368, 139682378829823, -STORE, 140737488347136, 140737488351231, -STORE, 140731831926784, 140737488351231, -SNULL, 140731831930879, 140737488351231, -STORE, 140731831926784, 140731831930879, -STORE, 140731831795712, 140731831930879, -STORE, 94615305261056, 94615307485183, -SNULL, 94615305371647, 94615307485183, -STORE, 94615305261056, 94615305371647, -STORE, 94615305371648, 94615307485183, -ERASE, 94615305371648, 94615307485183, -STORE, 94615307464704, 94615307476991, -STORE, 94615307476992, 94615307485183, -STORE, 140163912994816, 140163915247615, -SNULL, 140163913138175, 140163915247615, -STORE, 140163912994816, 140163913138175, -STORE, 140163913138176, 140163915247615, -ERASE, 140163913138176, 140163915247615, -STORE, 140163915235328, 140163915243519, -STORE, 140163915243520, 140163915247615, -STORE, 140731832217600, 140731832221695, -STORE, 140731832205312, 140731832217599, -STORE, 140163915206656, 140163915235327, -STORE, 140163915198464, 140163915206655, -STORE, 140163909197824, 140163912994815, -SNULL, 140163909197824, 140163910856703, -STORE, 140163910856704, 140163912994815, -STORE, 140163909197824, 140163910856703, -SNULL, 140163912953855, 140163912994815, -STORE, 140163910856704, 140163912953855, -STORE, 140163912953856, 140163912994815, -SNULL, 140163912953856, 140163912978431, -STORE, 140163912978432, 140163912994815, -STORE, 140163912953856, 140163912978431, -ERASE, 140163912953856, 140163912978431, -STORE, 140163912953856, 140163912978431, -ERASE, 140163912978432, 140163912994815, -STORE, 140163912978432, 140163912994815, -SNULL, 140163912970239, 140163912978431, -STORE, 140163912953856, 140163912970239, -STORE, 140163912970240, 140163912978431, -SNULL, 94615307472895, 94615307476991, -STORE, 94615307464704, 94615307472895, -STORE, 94615307472896, 94615307476991, -SNULL, 140163915239423, 140163915243519, -STORE, 140163915235328, 140163915239423, -STORE, 140163915239424, 140163915243519, -ERASE, 140163915206656, 140163915235327, -STORE, 94615330672640, 94615330807807, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140725254479872, 140737488351231, -SNULL, 140725254488063, 140737488351231, -STORE, 140725254479872, 140725254488063, -STORE, 140725254348800, 140725254488063, -STORE, 94572781277184, 94572785741823, -SNULL, 94572783312895, 94572785741823, -STORE, 94572781277184, 94572783312895, -STORE, 94572783312896, 94572785741823, -ERASE, 94572783312896, 94572785741823, -STORE, 94572785405952, 94572785455103, -STORE, 94572785455104, 94572785741823, -STORE, 139636001341440, 139636003594239, -SNULL, 139636001484799, 139636003594239, -STORE, 139636001341440, 139636001484799, -STORE, 139636001484800, 139636003594239, -ERASE, 139636001484800, 139636003594239, -STORE, 139636003581952, 139636003590143, -STORE, 139636003590144, 139636003594239, -STORE, 140725255557120, 140725255561215, -STORE, 140725255544832, 140725255557119, -STORE, 139636003553280, 139636003581951, -STORE, 139636003545088, 139636003553279, -STORE, 139635998773248, 139636001341439, -SNULL, 139635998773248, 139635999240191, -STORE, 139635999240192, 139636001341439, -STORE, 139635998773248, 139635999240191, -SNULL, 139636001333247, 139636001341439, -STORE, 139635999240192, 139636001333247, -STORE, 139636001333248, 139636001341439, -ERASE, 139636001333248, 139636001341439, -STORE, 139636001333248, 139636001341439, -STORE, 139635996569600, 139635998773247, -SNULL, 139635996569600, 139635996671999, -STORE, 139635996672000, 139635998773247, -STORE, 139635996569600, 139635996671999, -SNULL, 139635998765055, 139635998773247, -STORE, 139635996672000, 139635998765055, -STORE, 139635998765056, 139635998773247, -ERASE, 139635998765056, 139635998773247, -STORE, 139635998765056, 139635998773247, -STORE, 139635994353664, 139635996569599, -SNULL, 139635994353664, 139635994451967, -STORE, 139635994451968, 139635996569599, -STORE, 139635994353664, 139635994451967, -SNULL, 139635996545023, 139635996569599, -STORE, 139635994451968, 139635996545023, -STORE, 139635996545024, 139635996569599, -SNULL, 139635996545024, 139635996553215, -STORE, 139635996553216, 139635996569599, -STORE, 139635996545024, 139635996553215, -ERASE, 139635996545024, 139635996553215, -STORE, 139635996545024, 139635996553215, -ERASE, 139635996553216, 139635996569599, -STORE, 139635996553216, 139635996569599, -STORE, 139635992223744, 139635994353663, -SNULL, 139635992223744, 139635992252415, -STORE, 139635992252416, 139635994353663, -STORE, 139635992223744, 139635992252415, -SNULL, 139635994345471, 139635994353663, -STORE, 139635992252416, 139635994345471, -STORE, 139635994345472, 139635994353663, -ERASE, 139635994345472, 139635994353663, -STORE, 139635994345472, 139635994353663, -STORE, 139635988426752, 139635992223743, -SNULL, 139635988426752, 139635990085631, -STORE, 139635990085632, 139635992223743, -STORE, 139635988426752, 139635990085631, -SNULL, 139635992182783, 139635992223743, -STORE, 139635990085632, 139635992182783, -STORE, 139635992182784, 139635992223743, -SNULL, 139635992182784, 139635992207359, -STORE, 139635992207360, 139635992223743, -STORE, 139635992182784, 139635992207359, -ERASE, 139635992182784, 139635992207359, -STORE, 139635992182784, 139635992207359, -ERASE, 139635992207360, 139635992223743, -STORE, 139635992207360, 139635992223743, -STORE, 139636003536896, 139636003553279, -SNULL, 139635992199167, 139635992207359, -STORE, 139635992182784, 139635992199167, -STORE, 139635992199168, 139635992207359, -SNULL, 139635996549119, 139635996553215, -STORE, 139635996545024, 139635996549119, -STORE, 139635996549120, 139635996553215, -SNULL, 139635994349567, 139635994353663, -STORE, 139635994345472, 139635994349567, -STORE, 139635994349568, 139635994353663, -SNULL, 139635998769151, 139635998773247, -STORE, 139635998765056, 139635998769151, -STORE, 139635998769152, 139635998773247, -SNULL, 139636001337343, 139636001341439, -STORE, 139636001333248, 139636001337343, -STORE, 139636001337344, 139636001341439, -SNULL, 94572785418239, 94572785455103, -STORE, 94572785405952, 94572785418239, -STORE, 94572785418240, 94572785455103, -SNULL, 139636003586047, 139636003590143, -STORE, 139636003581952, 139636003586047, -STORE, 139636003586048, 139636003590143, -ERASE, 139636003553280, 139636003581951, -STORE, 94572798435328, 94572798570495, -STORE, 139636001853440, 139636003536895, -STORE, 139635981426688, 139635988426751, -STORE, 139635980615680, 139635981426687, -STORE, 94572798435328, 94572798705663, -STORE, 94572798435328, 94572798840831, -STORE, 94572798435328, 94572798975999, -STORE, 94572798435328, 94572799111167, -STORE, 94572798435328, 94572799246335, -STORE, 94572798435328, 94572799381503, -STORE, 94572798435328, 94572799516671, -STORE, 94572798435328, 94572799651839, -STORE, 94572798435328, 94572799787007, -STORE, 94572798435328, 94572799922175, -STORE, 94572798435328, 94572800057343, -STORE, 94572798435328, 94572800192511, -STORE, 94572798435328, 94572800327679, -STORE, 94572798435328, 94572800462847, -STORE, 94572798435328, 94572800598015, -STORE, 94572798435328, 94572800733183, -STORE, 94572798435328, 94572800868351, -STORE, 94572798435328, 94572801003519, -STORE, 94572798435328, 94572801138687, -STORE, 94572798435328, 94572801273855, -STORE, 94572798435328, 94572801409023, -STORE, 94572798435328, 94572801544191, -STORE, 94572798435328, 94572801679359, -STORE, 94572798435328, 94572801814527, -STORE, 94572798435328, 94572801949695, -STORE, 94572798435328, 94572802084863, -STORE, 94572798435328, 94572802220031, -STORE, 94572798435328, 94572802355199, -STORE, 94572798435328, 94572802490367, -STORE, 94572798435328, 94572802625535, -STORE, 94572798435328, 94572802760703, -STORE, 94572798435328, 94572802895871, -STORE, 94572798435328, 94572803031039, -STORE, 94572798435328, 94572803166207, -STORE, 94572798435328, 94572803301375, -STORE, 94572798435328, 94572803436543, -STORE, 94572798435328, 94572803571711, -STORE, 94572798435328, 94572803706879, -STORE, 94572798435328, 94572803842047, -STORE, 94572798435328, 94572803977215, -STORE, 94572798435328, 94572804112383, -STORE, 94572798435328, 94572804247551, -STORE, 94572798435328, 94572804382719, -STORE, 94572798435328, 94572804517887, -STORE, 94572798435328, 94572804653055, -STORE, 94572798435328, 94572804788223, -STORE, 94572798435328, 94572804923391, -STORE, 94572798435328, 94572805058559, -STORE, 94572798435328, 94572805193727, -STORE, 94572798435328, 94572805328895, -STORE, 94572798435328, 94572805464063, -STORE, 94572798435328, 94572805599231, -STORE, 94572798435328, 94572805734399, -STORE, 94572798435328, 94572805869567, -STORE, 94572798435328, 94572806004735, -STORE, 94572798435328, 94572806139903, -STORE, 94572798435328, 94572806275071, -STORE, 94572798435328, 94572806410239, -STORE, 94572798435328, 94572806545407, -STORE, 94572798435328, 94572806680575, -STORE, 94572798435328, 94572806815743, -STORE, 94572798435328, 94572806950911, -STORE, 94572798435328, 94572807086079, -STORE, 94572798435328, 94572807221247, -STORE, 94572798435328, 94572807356415, -STORE, 94572798435328, 94572807491583, -STORE, 94572798435328, 94572807626751, -STORE, 94572798435328, 94572807761919, -STORE, 94572798435328, 94572807897087, -STORE, 94572798435328, 94572808032255, -STORE, 94572798435328, 94572808167423, -STORE, 94572798435328, 94572808302591, -STORE, 94572798435328, 94572808437759, -STORE, 94572798435328, 94572808572927, -ERASE, 139635981426688, 139635988426751, -STORE, 139635985088512, 139635988426751, -STORE, 139635778273280, 139635980615679, -STORE, 139635567632384, 139635778273279, -STORE, 94572798435328, 94572808716287, -STORE, 139635984564224, 139635985088511, -STORE, 139635559239680, 139635567632383, -SNULL, 139635559243775, 139635567632383, -STORE, 139635559239680, 139635559243775, -STORE, 139635559243776, 139635567632383, -STORE, 139635550846976, 139635559239679, -SNULL, 139635550851071, 139635559239679, -STORE, 139635550846976, 139635550851071, -STORE, 139635550851072, 139635559239679, -STORE, 139635542454272, 139635550846975, -STORE, 139635408236544, 139635542454271, -SNULL, 139635408236544, 139635426590719, -STORE, 139635426590720, 139635542454271, -STORE, 139635408236544, 139635426590719, -ERASE, 139635408236544, 139635426590719, -STORE, 139635292372992, 139635542454271, -SNULL, 139635359481855, 139635542454271, -STORE, 139635292372992, 139635359481855, -STORE, 139635359481856, 139635542454271, -SNULL, 139635359481856, 139635426590719, -STORE, 139635426590720, 139635542454271, -STORE, 139635359481856, 139635426590719, -ERASE, 139635359481856, 139635426590719, -SNULL, 139635542458367, 139635550846975, -STORE, 139635542454272, 139635542458367, -STORE, 139635542458368, 139635550846975, -STORE, 139635418198016, 139635426590719, -SNULL, 139635493699583, 139635542454271, -STORE, 139635426590720, 139635493699583, -STORE, 139635493699584, 139635542454271, -ERASE, 139635493699584, 139635542454271, -SNULL, 139635426725887, 139635493699583, -STORE, 139635426590720, 139635426725887, -STORE, 139635426725888, 139635493699583, -SNULL, 139635292508159, 139635359481855, -STORE, 139635292372992, 139635292508159, -STORE, 139635292508160, 139635359481855, -SNULL, 139635418202111, 139635426590719, -STORE, 139635418198016, 139635418202111, -STORE, 139635418202112, 139635426590719, -STORE, 139635225264128, 139635292372991, -STORE, 139635534061568, 139635542454271, -SNULL, 139635534065663, 139635542454271, -STORE, 139635534061568, 139635534065663, -STORE, 139635534065664, 139635542454271, -STORE, 139635525668864, 139635534061567, -SNULL, 139635525672959, 139635534061567, -STORE, 139635525668864, 139635525672959, -STORE, 139635525672960, 139635534061567, -SNULL, 139635225399295, 139635292372991, -STORE, 139635225264128, 139635225399295, -STORE, 139635225399296, 139635292372991, -STORE, 139635091046400, 139635225264127, -SNULL, 139635158155263, 139635225264127, -STORE, 139635091046400, 139635158155263, -STORE, 139635158155264, 139635225264127, -ERASE, 139635158155264, 139635225264127, -STORE, 139634956828672, 139635158155263, -STORE, 139635517276160, 139635525668863, -SNULL, 139635517280255, 139635525668863, -STORE, 139635517276160, 139635517280255, -STORE, 139635517280256, 139635525668863, -SNULL, 139634956828672, 139635091046399, -STORE, 139635091046400, 139635158155263, -STORE, 139634956828672, 139635091046399, -SNULL, 139635091181567, 139635158155263, -STORE, 139635091046400, 139635091181567, -STORE, 139635091181568, 139635158155263, -SNULL, 139635023937535, 139635091046399, -STORE, 139634956828672, 139635023937535, -STORE, 139635023937536, 139635091046399, -ERASE, 139635023937536, 139635091046399, -STORE, 139634956828672, 139635091046399, -SNULL, 139634956828672, 139635023937535, -STORE, 139635023937536, 139635091046399, -STORE, 139634956828672, 139635023937535, -SNULL, 139635024072703, 139635091046399, -STORE, 139635023937536, 139635024072703, -STORE, 139635024072704, 139635091046399, -STORE, 139635508883456, 139635517276159, -SNULL, 139635508887551, 139635517276159, -STORE, 139635508883456, 139635508887551, -STORE, 139635508887552, 139635517276159, -STORE, 139634822610944, 139635023937535, -SNULL, 139634822610944, 139634956828671, -STORE, 139634956828672, 139635023937535, -STORE, 139634822610944, 139634956828671, -SNULL, 139634956963839, 139635023937535, -STORE, 139634956828672, 139634956963839, -STORE, 139634956963840, 139635023937535, -STORE, 139635500490752, 139635508883455, -SNULL, 139634889719807, 139634956828671, -STORE, 139634822610944, 139634889719807, -STORE, 139634889719808, 139634956828671, -ERASE, 139634889719808, 139634956828671, -SNULL, 139635500494847, 139635508883455, -STORE, 139635500490752, 139635500494847, -STORE, 139635500494848, 139635508883455, -SNULL, 139634822746111, 139634889719807, -STORE, 139634822610944, 139634822746111, -STORE, 139634822746112, 139634889719807, -STORE, 139635409805312, 139635418198015, -STORE, 139634822746112, 139634956828671, -SNULL, 139634822746112, 139634889719807, -STORE, 139634889719808, 139634956828671, -STORE, 139634822746112, 139634889719807, -SNULL, 139634889854975, 139634956828671, -STORE, 139634889719808, 139634889854975, -STORE, 139634889854976, 139634956828671, -SNULL, 139635409809407, 139635418198015, -STORE, 139635409805312, 139635409809407, -STORE, 139635409809408, 139635418198015, -STORE, 139635401412608, 139635409805311, -STORE, 139634688393216, 139634822610943, -SNULL, 139634755502079, 139634822610943, -STORE, 139634688393216, 139634755502079, -STORE, 139634755502080, 139634822610943, -ERASE, 139634755502080, 139634822610943, -SNULL, 139635401416703, 139635409805311, -STORE, 139635401412608, 139635401416703, -STORE, 139635401416704, 139635409805311, -STORE, 139634554175488, 139634755502079, -SNULL, 139634554175488, 139634688393215, -STORE, 139634688393216, 139634755502079, -STORE, 139634554175488, 139634688393215, -SNULL, 139634688528383, 139634755502079, -STORE, 139634688393216, 139634688528383, -STORE, 139634688528384, 139634755502079, -STORE, 139635393019904, 139635401412607, -SNULL, 139634621284351, 139634688393215, -STORE, 139634554175488, 139634621284351, -STORE, 139634621284352, 139634688393215, -ERASE, 139634621284352, 139634688393215, -SNULL, 139634554310655, 139634621284351, -STORE, 139634554175488, 139634554310655, -STORE, 139634554310656, 139634621284351, -STORE, 139634554310656, 139634688393215, -SNULL, 139635393023999, 139635401412607, -STORE, 139635393019904, 139635393023999, -STORE, 139635393024000, 139635401412607, -SNULL, 139634554310656, 139634621284351, -STORE, 139634621284352, 139634688393215, -STORE, 139634554310656, 139634621284351, -SNULL, 139634621419519, 139634688393215, -STORE, 139634621284352, 139634621419519, -STORE, 139634621419520, 139634688393215, -STORE, 139635384627200, 139635393019903, -SNULL, 139635384631295, 139635393019903, -STORE, 139635384627200, 139635384631295, -STORE, 139635384631296, 139635393019903, -STORE, 139635376234496, 139635384627199, -SNULL, 139635376238591, 139635384627199, -STORE, 139635376234496, 139635376238591, -STORE, 139635376238592, 139635384627199, -STORE, 139635367841792, 139635376234495, -SNULL, 139635367845887, 139635376234495, -STORE, 139635367841792, 139635367845887, -STORE, 139635367845888, 139635376234495, -STORE, 139634419957760, 139634554175487, -SNULL, 139634487066623, 139634554175487, -STORE, 139634419957760, 139634487066623, -STORE, 139634487066624, 139634554175487, -ERASE, 139634487066624, 139634554175487, -STORE, 139635216871424, 139635225264127, -SNULL, 139635216875519, 139635225264127, -STORE, 139635216871424, 139635216875519, -STORE, 139635216875520, 139635225264127, -SNULL, 139634420092927, 139634487066623, -STORE, 139634419957760, 139634420092927, -STORE, 139634420092928, 139634487066623, -STORE, 139635208478720, 139635216871423, -SNULL, 139635208482815, 139635216871423, -STORE, 139635208478720, 139635208482815, -STORE, 139635208482816, 139635216871423, -STORE, 139635200086016, 139635208478719, -SNULL, 139635200090111, 139635208478719, -STORE, 139635200086016, 139635200090111, -STORE, 139635200090112, 139635208478719, -STORE, 139635191693312, 139635200086015, -SNULL, 139635191697407, 139635200086015, -STORE, 139635191693312, 139635191697407, -STORE, 139635191697408, 139635200086015, -STORE, 139635183300608, 139635191693311, -SNULL, 139635183304703, 139635191693311, -STORE, 139635183300608, 139635183304703, -STORE, 139635183304704, 139635191693311, -STORE, 139634420092928, 139634554175487, -SNULL, 139634420092928, 139634487066623, -STORE, 139634487066624, 139634554175487, -STORE, 139634420092928, 139634487066623, -SNULL, 139634487201791, 139634554175487, -STORE, 139634487066624, 139634487201791, -STORE, 139634487201792, 139634554175487, -ERASE, 139635559239680, 139635559243775, -ERASE, 139635559243776, 139635567632383, -ERASE, 139635550846976, 139635550851071, -ERASE, 139635550851072, 139635559239679, -ERASE, 139635542454272, 139635542458367, -ERASE, 139635542458368, 139635550846975, -ERASE, 139635418198016, 139635418202111, -ERASE, 139635418202112, 139635426590719, -ERASE, 139635534061568, 139635534065663, -ERASE, 139635534065664, 139635542454271, -ERASE, 139635525668864, 139635525672959, -ERASE, 139635525672960, 139635534061567, -ERASE, 139635517276160, 139635517280255, -ERASE, 139635517280256, 139635525668863, -ERASE, 139635508883456, 139635508887551, -ERASE, 139635508887552, 139635517276159, -ERASE, 139635500490752, 139635500494847, -ERASE, 139635500494848, 139635508883455, -ERASE, 139635409805312, 139635409809407, -ERASE, 139635409809408, 139635418198015, -ERASE, 139635401412608, 139635401416703, -ERASE, 139635401416704, 139635409805311, -ERASE, 139635393019904, 139635393023999, -ERASE, 139635393024000, 139635401412607, -ERASE, 139635384627200, 139635384631295, -ERASE, 139635384631296, 139635393019903, - }; - unsigned long set25[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140722547441664, 140737488351231, -SNULL, 140722547449855, 140737488351231, -STORE, 140722547441664, 140722547449855, -STORE, 140722547310592, 140722547449855, -STORE, 94827521732608, 94827523956735, -SNULL, 94827521843199, 94827523956735, -STORE, 94827521732608, 94827521843199, -STORE, 94827521843200, 94827523956735, -ERASE, 94827521843200, 94827523956735, -STORE, 94827523936256, 94827523948543, -STORE, 94827523948544, 94827523956735, -STORE, 139816136847360, 139816139100159, -SNULL, 139816136990719, 139816139100159, -STORE, 139816136847360, 139816136990719, -STORE, 139816136990720, 139816139100159, -ERASE, 139816136990720, 139816139100159, -STORE, 139816139087872, 139816139096063, -STORE, 139816139096064, 139816139100159, -STORE, 140722548142080, 140722548146175, -STORE, 140722548129792, 140722548142079, -STORE, 139816139059200, 139816139087871, -STORE, 139816139051008, 139816139059199, -STORE, 139816133050368, 139816136847359, -SNULL, 139816133050368, 139816134709247, -STORE, 139816134709248, 139816136847359, -STORE, 139816133050368, 139816134709247, -SNULL, 139816136806399, 139816136847359, -STORE, 139816134709248, 139816136806399, -STORE, 139816136806400, 139816136847359, -SNULL, 139816136806400, 139816136830975, -STORE, 139816136830976, 139816136847359, -STORE, 139816136806400, 139816136830975, -ERASE, 139816136806400, 139816136830975, -STORE, 139816136806400, 139816136830975, -ERASE, 139816136830976, 139816136847359, -STORE, 139816136830976, 139816136847359, -SNULL, 139816136822783, 139816136830975, -STORE, 139816136806400, 139816136822783, -STORE, 139816136822784, 139816136830975, -SNULL, 94827523944447, 94827523948543, -STORE, 94827523936256, 94827523944447, -STORE, 94827523944448, 94827523948543, -SNULL, 139816139091967, 139816139096063, -STORE, 139816139087872, 139816139091967, -STORE, 139816139091968, 139816139096063, -ERASE, 139816139059200, 139816139087871, -STORE, 94827534970880, 94827535106047, -STORE, 94114394132480, 94114394345471, -STORE, 94114396442624, 94114396446719, -STORE, 94114396446720, 94114396454911, -STORE, 94114396454912, 94114396467199, -STORE, 94114421575680, 94114427715583, -STORE, 139934313955328, 139934315614207, -STORE, 139934315614208, 139934317711359, -STORE, 139934317711360, 139934317727743, -STORE, 139934317727744, 139934317735935, -STORE, 139934317735936, 139934317752319, -STORE, 139934317752320, 139934317764607, -STORE, 139934317764608, 139934319857663, -STORE, 139934319857664, 139934319861759, -STORE, 139934319861760, 139934319865855, -STORE, 139934319865856, 139934320009215, -STORE, 139934320377856, 139934322061311, -STORE, 139934322061312, 139934322077695, -STORE, 139934322106368, 139934322110463, -STORE, 139934322110464, 139934322114559, -STORE, 139934322114560, 139934322118655, -STORE, 140731200376832, 140731200516095, -STORE, 140731200929792, 140731200942079, -STORE, 140731200942080, 140731200946175, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140734133174272, 140737488351231, -SNULL, 140734133182463, 140737488351231, -STORE, 140734133174272, 140734133182463, -STORE, 140734133043200, 140734133182463, -STORE, 94412675600384, 94412677824511, -SNULL, 94412675710975, 94412677824511, -STORE, 94412675600384, 94412675710975, -STORE, 94412675710976, 94412677824511, -ERASE, 94412675710976, 94412677824511, -STORE, 94412677804032, 94412677816319, -STORE, 94412677816320, 94412677824511, -STORE, 140320087945216, 140320090198015, -SNULL, 140320088088575, 140320090198015, -STORE, 140320087945216, 140320088088575, -STORE, 140320088088576, 140320090198015, -ERASE, 140320088088576, 140320090198015, -STORE, 140320090185728, 140320090193919, -STORE, 140320090193920, 140320090198015, -STORE, 140734134591488, 140734134595583, -STORE, 140734134579200, 140734134591487, -STORE, 140320090157056, 140320090185727, -STORE, 140320090148864, 140320090157055, -STORE, 140320084148224, 140320087945215, -SNULL, 140320084148224, 140320085807103, -STORE, 140320085807104, 140320087945215, -STORE, 140320084148224, 140320085807103, -SNULL, 140320087904255, 140320087945215, -STORE, 140320085807104, 140320087904255, -STORE, 140320087904256, 140320087945215, -SNULL, 140320087904256, 140320087928831, -STORE, 140320087928832, 140320087945215, -STORE, 140320087904256, 140320087928831, -ERASE, 140320087904256, 140320087928831, -STORE, 140320087904256, 140320087928831, -ERASE, 140320087928832, 140320087945215, -STORE, 140320087928832, 140320087945215, -SNULL, 140320087920639, 140320087928831, -STORE, 140320087904256, 140320087920639, -STORE, 140320087920640, 140320087928831, -SNULL, 94412677812223, 94412677816319, -STORE, 94412677804032, 94412677812223, -STORE, 94412677812224, 94412677816319, -SNULL, 140320090189823, 140320090193919, -STORE, 140320090185728, 140320090189823, -STORE, 140320090189824, 140320090193919, -ERASE, 140320090157056, 140320090185727, -STORE, 94412684546048, 94412684681215, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140723005485056, 140737488351231, -SNULL, 140723005493247, 140737488351231, -STORE, 140723005485056, 140723005493247, -STORE, 140723005353984, 140723005493247, -STORE, 94387431936000, 94387434160127, -SNULL, 94387432046591, 94387434160127, -STORE, 94387431936000, 94387432046591, -STORE, 94387432046592, 94387434160127, -ERASE, 94387432046592, 94387434160127, -STORE, 94387434139648, 94387434151935, -STORE, 94387434151936, 94387434160127, -STORE, 140151675392000, 140151677644799, -SNULL, 140151675535359, 140151677644799, -STORE, 140151675392000, 140151675535359, -STORE, 140151675535360, 140151677644799, -ERASE, 140151675535360, 140151677644799, -STORE, 140151677632512, 140151677640703, -STORE, 140151677640704, 140151677644799, -STORE, 140723005784064, 140723005788159, -STORE, 140723005771776, 140723005784063, -STORE, 140151677603840, 140151677632511, -STORE, 140151677595648, 140151677603839, -STORE, 140151671595008, 140151675391999, -SNULL, 140151671595008, 140151673253887, -STORE, 140151673253888, 140151675391999, -STORE, 140151671595008, 140151673253887, -SNULL, 140151675351039, 140151675391999, -STORE, 140151673253888, 140151675351039, -STORE, 140151675351040, 140151675391999, -SNULL, 140151675351040, 140151675375615, -STORE, 140151675375616, 140151675391999, -STORE, 140151675351040, 140151675375615, -ERASE, 140151675351040, 140151675375615, -STORE, 140151675351040, 140151675375615, -ERASE, 140151675375616, 140151675391999, -STORE, 140151675375616, 140151675391999, -SNULL, 140151675367423, 140151675375615, -STORE, 140151675351040, 140151675367423, -STORE, 140151675367424, 140151675375615, -SNULL, 94387434147839, 94387434151935, -STORE, 94387434139648, 94387434147839, -STORE, 94387434147840, 94387434151935, -SNULL, 140151677636607, 140151677640703, -STORE, 140151677632512, 140151677636607, -STORE, 140151677636608, 140151677640703, -ERASE, 140151677603840, 140151677632511, -STORE, 94387458818048, 94387458953215, -STORE, 94909010997248, 94909011210239, -STORE, 94909013307392, 94909013311487, -STORE, 94909013311488, 94909013319679, -STORE, 94909013319680, 94909013331967, -STORE, 94909014827008, 94909023371263, -STORE, 140712411975680, 140712413634559, -STORE, 140712413634560, 140712415731711, -STORE, 140712415731712, 140712415748095, -STORE, 140712415748096, 140712415756287, -STORE, 140712415756288, 140712415772671, -STORE, 140712415772672, 140712415784959, -STORE, 140712415784960, 140712417878015, -STORE, 140712417878016, 140712417882111, -STORE, 140712417882112, 140712417886207, -STORE, 140712417886208, 140712418029567, -STORE, 140712418398208, 140712420081663, -STORE, 140712420081664, 140712420098047, -STORE, 140712420126720, 140712420130815, -STORE, 140712420130816, 140712420134911, -STORE, 140712420134912, 140712420139007, -STORE, 140729293111296, 140729293250559, -STORE, 140729293307904, 140729293320191, -STORE, 140729293320192, 140729293324287, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140720541691904, 140737488351231, -SNULL, 140720541700095, 140737488351231, -STORE, 140720541691904, 140720541700095, -STORE, 140720541560832, 140720541700095, -STORE, 94203603419136, 94203605643263, -SNULL, 94203603529727, 94203605643263, -STORE, 94203603419136, 94203603529727, -STORE, 94203603529728, 94203605643263, -ERASE, 94203603529728, 94203605643263, -STORE, 94203605622784, 94203605635071, -STORE, 94203605635072, 94203605643263, -STORE, 139847623081984, 139847625334783, -SNULL, 139847623225343, 139847625334783, -STORE, 139847623081984, 139847623225343, -STORE, 139847623225344, 139847625334783, -ERASE, 139847623225344, 139847625334783, -STORE, 139847625322496, 139847625330687, -STORE, 139847625330688, 139847625334783, -STORE, 140720542547968, 140720542552063, -STORE, 140720542535680, 140720542547967, -STORE, 139847625293824, 139847625322495, -STORE, 139847625285632, 139847625293823, -STORE, 139847619284992, 139847623081983, -SNULL, 139847619284992, 139847620943871, -STORE, 139847620943872, 139847623081983, -STORE, 139847619284992, 139847620943871, -SNULL, 139847623041023, 139847623081983, -STORE, 139847620943872, 139847623041023, -STORE, 139847623041024, 139847623081983, -SNULL, 139847623041024, 139847623065599, -STORE, 139847623065600, 139847623081983, -STORE, 139847623041024, 139847623065599, -ERASE, 139847623041024, 139847623065599, -STORE, 139847623041024, 139847623065599, -ERASE, 139847623065600, 139847623081983, -STORE, 139847623065600, 139847623081983, -SNULL, 139847623057407, 139847623065599, -STORE, 139847623041024, 139847623057407, -STORE, 139847623057408, 139847623065599, -SNULL, 94203605630975, 94203605635071, -STORE, 94203605622784, 94203605630975, -STORE, 94203605630976, 94203605635071, -SNULL, 139847625326591, 139847625330687, -STORE, 139847625322496, 139847625326591, -STORE, 139847625326592, 139847625330687, -ERASE, 139847625293824, 139847625322495, -STORE, 94203634880512, 94203635015679, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140721428738048, 140737488351231, -SNULL, 140721428746239, 140737488351231, -STORE, 140721428738048, 140721428746239, -STORE, 140721428606976, 140721428746239, -STORE, 93968808378368, 93968810602495, -SNULL, 93968808488959, 93968810602495, -STORE, 93968808378368, 93968808488959, -STORE, 93968808488960, 93968810602495, -ERASE, 93968808488960, 93968810602495, -STORE, 93968810582016, 93968810594303, -STORE, 93968810594304, 93968810602495, -STORE, 140397757026304, 140397759279103, -SNULL, 140397757169663, 140397759279103, -STORE, 140397757026304, 140397757169663, -STORE, 140397757169664, 140397759279103, -ERASE, 140397757169664, 140397759279103, -STORE, 140397759266816, 140397759275007, -STORE, 140397759275008, 140397759279103, -STORE, 140721430368256, 140721430372351, -STORE, 140721430355968, 140721430368255, -STORE, 140397759238144, 140397759266815, -STORE, 140397759229952, 140397759238143, -STORE, 140397753229312, 140397757026303, -SNULL, 140397753229312, 140397754888191, -STORE, 140397754888192, 140397757026303, -STORE, 140397753229312, 140397754888191, -SNULL, 140397756985343, 140397757026303, -STORE, 140397754888192, 140397756985343, -STORE, 140397756985344, 140397757026303, -SNULL, 140397756985344, 140397757009919, -STORE, 140397757009920, 140397757026303, -STORE, 140397756985344, 140397757009919, -ERASE, 140397756985344, 140397757009919, -STORE, 140397756985344, 140397757009919, -ERASE, 140397757009920, 140397757026303, -STORE, 140397757009920, 140397757026303, -SNULL, 140397757001727, 140397757009919, -STORE, 140397756985344, 140397757001727, -STORE, 140397757001728, 140397757009919, -SNULL, 93968810590207, 93968810594303, -STORE, 93968810582016, 93968810590207, -STORE, 93968810590208, 93968810594303, -SNULL, 140397759270911, 140397759275007, -STORE, 140397759266816, 140397759270911, -STORE, 140397759270912, 140397759275007, -ERASE, 140397759238144, 140397759266815, -STORE, 93968837025792, 93968837160959, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140721751044096, 140737488351231, -SNULL, 140721751052287, 140737488351231, -STORE, 140721751044096, 140721751052287, -STORE, 140721750913024, 140721751052287, -STORE, 94426051657728, 94426053881855, -SNULL, 94426051768319, 94426053881855, -STORE, 94426051657728, 94426051768319, -STORE, 94426051768320, 94426053881855, -ERASE, 94426051768320, 94426053881855, -STORE, 94426053861376, 94426053873663, -STORE, 94426053873664, 94426053881855, -STORE, 140228456181760, 140228458434559, -SNULL, 140228456325119, 140228458434559, -STORE, 140228456181760, 140228456325119, -STORE, 140228456325120, 140228458434559, -ERASE, 140228456325120, 140228458434559, -STORE, 140228458422272, 140228458430463, -STORE, 140228458430464, 140228458434559, -STORE, 140721751117824, 140721751121919, -STORE, 140721751105536, 140721751117823, -STORE, 140228458393600, 140228458422271, -STORE, 140228458385408, 140228458393599, -STORE, 140228452384768, 140228456181759, -SNULL, 140228452384768, 140228454043647, -STORE, 140228454043648, 140228456181759, -STORE, 140228452384768, 140228454043647, -SNULL, 140228456140799, 140228456181759, -STORE, 140228454043648, 140228456140799, -STORE, 140228456140800, 140228456181759, -SNULL, 140228456140800, 140228456165375, -STORE, 140228456165376, 140228456181759, -STORE, 140228456140800, 140228456165375, -ERASE, 140228456140800, 140228456165375, -STORE, 140228456140800, 140228456165375, -ERASE, 140228456165376, 140228456181759, -STORE, 140228456165376, 140228456181759, -SNULL, 140228456157183, 140228456165375, -STORE, 140228456140800, 140228456157183, -STORE, 140228456157184, 140228456165375, -SNULL, 94426053869567, 94426053873663, -STORE, 94426053861376, 94426053869567, -STORE, 94426053869568, 94426053873663, -SNULL, 140228458426367, 140228458430463, -STORE, 140228458422272, 140228458426367, -STORE, 140228458426368, 140228458430463, -ERASE, 140228458393600, 140228458422271, -STORE, 94426073681920, 94426073817087, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140732727623680, 140737488351231, -SNULL, 140732727631871, 140737488351231, -STORE, 140732727623680, 140732727631871, -STORE, 140732727492608, 140732727631871, -STORE, 94537485996032, 94537488220159, -SNULL, 94537486106623, 94537488220159, -STORE, 94537485996032, 94537486106623, -STORE, 94537486106624, 94537488220159, -ERASE, 94537486106624, 94537488220159, -STORE, 94537488199680, 94537488211967, -STORE, 94537488211968, 94537488220159, -STORE, 140446578036736, 140446580289535, -SNULL, 140446578180095, 140446580289535, -STORE, 140446578036736, 140446578180095, -STORE, 140446578180096, 140446580289535, -ERASE, 140446578180096, 140446580289535, -STORE, 140446580277248, 140446580285439, -STORE, 140446580285440, 140446580289535, -STORE, 140732727758848, 140732727762943, -STORE, 140732727746560, 140732727758847, -STORE, 140446580248576, 140446580277247, -STORE, 140446580240384, 140446580248575, -STORE, 140446574239744, 140446578036735, -SNULL, 140446574239744, 140446575898623, -STORE, 140446575898624, 140446578036735, -STORE, 140446574239744, 140446575898623, -SNULL, 140446577995775, 140446578036735, -STORE, 140446575898624, 140446577995775, -STORE, 140446577995776, 140446578036735, -SNULL, 140446577995776, 140446578020351, -STORE, 140446578020352, 140446578036735, -STORE, 140446577995776, 140446578020351, -ERASE, 140446577995776, 140446578020351, -STORE, 140446577995776, 140446578020351, -ERASE, 140446578020352, 140446578036735, -STORE, 140446578020352, 140446578036735, -SNULL, 140446578012159, 140446578020351, -STORE, 140446577995776, 140446578012159, -STORE, 140446578012160, 140446578020351, -SNULL, 94537488207871, 94537488211967, -STORE, 94537488199680, 94537488207871, -STORE, 94537488207872, 94537488211967, -SNULL, 140446580281343, 140446580285439, -STORE, 140446580277248, 140446580281343, -STORE, 140446580281344, 140446580285439, -ERASE, 140446580248576, 140446580277247, -STORE, 94537489014784, 94537489149951, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140728766808064, 140737488351231, -SNULL, 140728766816255, 140737488351231, -STORE, 140728766808064, 140728766816255, -STORE, 140728766676992, 140728766816255, -STORE, 94418513866752, 94418516090879, -SNULL, 94418513977343, 94418516090879, -STORE, 94418513866752, 94418513977343, -STORE, 94418513977344, 94418516090879, -ERASE, 94418513977344, 94418516090879, -STORE, 94418516070400, 94418516082687, -STORE, 94418516082688, 94418516090879, -STORE, 140556479520768, 140556481773567, -SNULL, 140556479664127, 140556481773567, -STORE, 140556479520768, 140556479664127, -STORE, 140556479664128, 140556481773567, -ERASE, 140556479664128, 140556481773567, -STORE, 140556481761280, 140556481769471, -STORE, 140556481769472, 140556481773567, -STORE, 140728767148032, 140728767152127, -STORE, 140728767135744, 140728767148031, -STORE, 140556481732608, 140556481761279, -STORE, 140556481724416, 140556481732607, -STORE, 140556475723776, 140556479520767, -SNULL, 140556475723776, 140556477382655, -STORE, 140556477382656, 140556479520767, -STORE, 140556475723776, 140556477382655, -SNULL, 140556479479807, 140556479520767, -STORE, 140556477382656, 140556479479807, -STORE, 140556479479808, 140556479520767, -SNULL, 140556479479808, 140556479504383, -STORE, 140556479504384, 140556479520767, -STORE, 140556479479808, 140556479504383, -ERASE, 140556479479808, 140556479504383, -STORE, 140556479479808, 140556479504383, -ERASE, 140556479504384, 140556479520767, -STORE, 140556479504384, 140556479520767, -SNULL, 140556479496191, 140556479504383, -STORE, 140556479479808, 140556479496191, -STORE, 140556479496192, 140556479504383, -SNULL, 94418516078591, 94418516082687, -STORE, 94418516070400, 94418516078591, -STORE, 94418516078592, 94418516082687, -SNULL, 140556481765375, 140556481769471, -STORE, 140556481761280, 140556481765375, -STORE, 140556481765376, 140556481769471, -ERASE, 140556481732608, 140556481761279, -STORE, 94418541113344, 94418541248511, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140723945873408, 140737488351231, -SNULL, 140723945881599, 140737488351231, -STORE, 140723945873408, 140723945881599, -STORE, 140723945742336, 140723945881599, -STORE, 94543169773568, 94543171997695, -SNULL, 94543169884159, 94543171997695, -STORE, 94543169773568, 94543169884159, -STORE, 94543169884160, 94543171997695, -ERASE, 94543169884160, 94543171997695, -STORE, 94543171977216, 94543171989503, -STORE, 94543171989504, 94543171997695, -STORE, 139890420883456, 139890423136255, -SNULL, 139890421026815, 139890423136255, -STORE, 139890420883456, 139890421026815, -STORE, 139890421026816, 139890423136255, -ERASE, 139890421026816, 139890423136255, -STORE, 139890423123968, 139890423132159, -STORE, 139890423132160, 139890423136255, -STORE, 140723946102784, 140723946106879, -STORE, 140723946090496, 140723946102783, -STORE, 139890423095296, 139890423123967, -STORE, 139890423087104, 139890423095295, -STORE, 139890417086464, 139890420883455, -SNULL, 139890417086464, 139890418745343, -STORE, 139890418745344, 139890420883455, -STORE, 139890417086464, 139890418745343, -SNULL, 139890420842495, 139890420883455, -STORE, 139890418745344, 139890420842495, -STORE, 139890420842496, 139890420883455, -SNULL, 139890420842496, 139890420867071, -STORE, 139890420867072, 139890420883455, -STORE, 139890420842496, 139890420867071, -ERASE, 139890420842496, 139890420867071, -STORE, 139890420842496, 139890420867071, -ERASE, 139890420867072, 139890420883455, -STORE, 139890420867072, 139890420883455, -SNULL, 139890420858879, 139890420867071, -STORE, 139890420842496, 139890420858879, -STORE, 139890420858880, 139890420867071, -SNULL, 94543171985407, 94543171989503, -STORE, 94543171977216, 94543171985407, -STORE, 94543171985408, 94543171989503, -SNULL, 139890423128063, 139890423132159, -STORE, 139890423123968, 139890423128063, -STORE, 139890423128064, 139890423132159, -ERASE, 139890423095296, 139890423123967, -STORE, 94543197097984, 94543197233151, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140736205979648, 140737488351231, -SNULL, 140736205987839, 140737488351231, -STORE, 140736205979648, 140736205987839, -STORE, 140736205848576, 140736205987839, -STORE, 94913209913344, 94913212137471, -SNULL, 94913210023935, 94913212137471, -STORE, 94913209913344, 94913210023935, -STORE, 94913210023936, 94913212137471, -ERASE, 94913210023936, 94913212137471, -STORE, 94913212116992, 94913212129279, -STORE, 94913212129280, 94913212137471, -STORE, 140006323052544, 140006325305343, -SNULL, 140006323195903, 140006325305343, -STORE, 140006323052544, 140006323195903, -STORE, 140006323195904, 140006325305343, -ERASE, 140006323195904, 140006325305343, -STORE, 140006325293056, 140006325301247, -STORE, 140006325301248, 140006325305343, -STORE, 140736206716928, 140736206721023, -STORE, 140736206704640, 140736206716927, -STORE, 140006325264384, 140006325293055, -STORE, 140006325256192, 140006325264383, -STORE, 140006319255552, 140006323052543, -SNULL, 140006319255552, 140006320914431, -STORE, 140006320914432, 140006323052543, -STORE, 140006319255552, 140006320914431, -SNULL, 140006323011583, 140006323052543, -STORE, 140006320914432, 140006323011583, -STORE, 140006323011584, 140006323052543, -SNULL, 140006323011584, 140006323036159, -STORE, 140006323036160, 140006323052543, -STORE, 140006323011584, 140006323036159, -ERASE, 140006323011584, 140006323036159, -STORE, 140006323011584, 140006323036159, -ERASE, 140006323036160, 140006323052543, -STORE, 140006323036160, 140006323052543, -SNULL, 140006323027967, 140006323036159, -STORE, 140006323011584, 140006323027967, -STORE, 140006323027968, 140006323036159, -SNULL, 94913212125183, 94913212129279, -STORE, 94913212116992, 94913212125183, -STORE, 94913212125184, 94913212129279, -SNULL, 140006325297151, 140006325301247, -STORE, 140006325293056, 140006325297151, -STORE, 140006325297152, 140006325301247, -ERASE, 140006325264384, 140006325293055, -STORE, 94913239932928, 94913240068095, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140726926897152, 140737488351231, -SNULL, 140726926905343, 140737488351231, -STORE, 140726926897152, 140726926905343, -STORE, 140726926766080, 140726926905343, -STORE, 94213246820352, 94213249044479, -SNULL, 94213246930943, 94213249044479, -STORE, 94213246820352, 94213246930943, -STORE, 94213246930944, 94213249044479, -ERASE, 94213246930944, 94213249044479, -STORE, 94213249024000, 94213249036287, -STORE, 94213249036288, 94213249044479, -STORE, 140368830242816, 140368832495615, -SNULL, 140368830386175, 140368832495615, -STORE, 140368830242816, 140368830386175, -STORE, 140368830386176, 140368832495615, -ERASE, 140368830386176, 140368832495615, -STORE, 140368832483328, 140368832491519, -STORE, 140368832491520, 140368832495615, -STORE, 140726926999552, 140726927003647, -STORE, 140726926987264, 140726926999551, -STORE, 140368832454656, 140368832483327, -STORE, 140368832446464, 140368832454655, -STORE, 140368826445824, 140368830242815, -SNULL, 140368826445824, 140368828104703, -STORE, 140368828104704, 140368830242815, -STORE, 140368826445824, 140368828104703, -SNULL, 140368830201855, 140368830242815, -STORE, 140368828104704, 140368830201855, -STORE, 140368830201856, 140368830242815, -SNULL, 140368830201856, 140368830226431, -STORE, 140368830226432, 140368830242815, -STORE, 140368830201856, 140368830226431, -ERASE, 140368830201856, 140368830226431, -STORE, 140368830201856, 140368830226431, -ERASE, 140368830226432, 140368830242815, -STORE, 140368830226432, 140368830242815, -SNULL, 140368830218239, 140368830226431, -STORE, 140368830201856, 140368830218239, -STORE, 140368830218240, 140368830226431, -SNULL, 94213249032191, 94213249036287, -STORE, 94213249024000, 94213249032191, -STORE, 94213249032192, 94213249036287, -SNULL, 140368832487423, 140368832491519, -STORE, 140368832483328, 140368832487423, -STORE, 140368832487424, 140368832491519, -ERASE, 140368832454656, 140368832483327, -STORE, 94213267435520, 94213267570687, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140728954130432, 140737488351231, -SNULL, 140728954138623, 140737488351231, -STORE, 140728954130432, 140728954138623, -STORE, 140728953999360, 140728954138623, -STORE, 94672570966016, 94672573190143, -SNULL, 94672571076607, 94672573190143, -STORE, 94672570966016, 94672571076607, -STORE, 94672571076608, 94672573190143, -ERASE, 94672571076608, 94672573190143, -STORE, 94672573169664, 94672573181951, -STORE, 94672573181952, 94672573190143, -STORE, 140201696735232, 140201698988031, -SNULL, 140201696878591, 140201698988031, -STORE, 140201696735232, 140201696878591, -STORE, 140201696878592, 140201698988031, -ERASE, 140201696878592, 140201698988031, -STORE, 140201698975744, 140201698983935, -STORE, 140201698983936, 140201698988031, -STORE, 140728954163200, 140728954167295, -STORE, 140728954150912, 140728954163199, -STORE, 140201698947072, 140201698975743, -STORE, 140201698938880, 140201698947071, -STORE, 140201692938240, 140201696735231, -SNULL, 140201692938240, 140201694597119, -STORE, 140201694597120, 140201696735231, -STORE, 140201692938240, 140201694597119, -SNULL, 140201696694271, 140201696735231, -STORE, 140201694597120, 140201696694271, -STORE, 140201696694272, 140201696735231, -SNULL, 140201696694272, 140201696718847, -STORE, 140201696718848, 140201696735231, -STORE, 140201696694272, 140201696718847, -ERASE, 140201696694272, 140201696718847, -STORE, 140201696694272, 140201696718847, -ERASE, 140201696718848, 140201696735231, -STORE, 140201696718848, 140201696735231, -SNULL, 140201696710655, 140201696718847, -STORE, 140201696694272, 140201696710655, -STORE, 140201696710656, 140201696718847, -SNULL, 94672573177855, 94672573181951, -STORE, 94672573169664, 94672573177855, -STORE, 94672573177856, 94672573181951, -SNULL, 140201698979839, 140201698983935, -STORE, 140201698975744, 140201698979839, -STORE, 140201698979840, 140201698983935, -ERASE, 140201698947072, 140201698975743, -STORE, 94672595689472, 94672595824639, -STORE, 94114394132480, 94114394345471, -STORE, 94114396442624, 94114396446719, -STORE, 94114396446720, 94114396454911, -STORE, 94114396454912, 94114396467199, -STORE, 94114421575680, 94114428256255, -STORE, 139934313955328, 139934315614207, -STORE, 139934315614208, 139934317711359, -STORE, 139934317711360, 139934317727743, -STORE, 139934317727744, 139934317735935, -STORE, 139934317735936, 139934317752319, -STORE, 139934317752320, 139934317764607, -STORE, 139934317764608, 139934319857663, -STORE, 139934319857664, 139934319861759, -STORE, 139934319861760, 139934319865855, -STORE, 139934319865856, 139934320009215, -STORE, 139934320377856, 139934322061311, -STORE, 139934322061312, 139934322077695, -STORE, 139934322106368, 139934322110463, -STORE, 139934322110464, 139934322114559, -STORE, 139934322114560, 139934322118655, -STORE, 140731200376832, 140731200516095, -STORE, 140731200929792, 140731200942079, -STORE, 140731200942080, 140731200946175, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140721532362752, 140737488351231, -SNULL, 140721532370943, 140737488351231, -STORE, 140721532362752, 140721532370943, -STORE, 140721532231680, 140721532370943, -STORE, 94467222597632, 94467224821759, -SNULL, 94467222708223, 94467224821759, -STORE, 94467222597632, 94467222708223, -STORE, 94467222708224, 94467224821759, -ERASE, 94467222708224, 94467224821759, -STORE, 94467224801280, 94467224813567, -STORE, 94467224813568, 94467224821759, -STORE, 140191433543680, 140191435796479, -SNULL, 140191433687039, 140191435796479, -STORE, 140191433543680, 140191433687039, -STORE, 140191433687040, 140191435796479, -ERASE, 140191433687040, 140191435796479, -STORE, 140191435784192, 140191435792383, -STORE, 140191435792384, 140191435796479, -STORE, 140721533034496, 140721533038591, -STORE, 140721533022208, 140721533034495, -STORE, 140191435755520, 140191435784191, -STORE, 140191435747328, 140191435755519, -STORE, 140191429746688, 140191433543679, -SNULL, 140191429746688, 140191431405567, -STORE, 140191431405568, 140191433543679, -STORE, 140191429746688, 140191431405567, -SNULL, 140191433502719, 140191433543679, -STORE, 140191431405568, 140191433502719, -STORE, 140191433502720, 140191433543679, -SNULL, 140191433502720, 140191433527295, -STORE, 140191433527296, 140191433543679, -STORE, 140191433502720, 140191433527295, -ERASE, 140191433502720, 140191433527295, -STORE, 140191433502720, 140191433527295, -ERASE, 140191433527296, 140191433543679, -STORE, 140191433527296, 140191433543679, -SNULL, 140191433519103, 140191433527295, -STORE, 140191433502720, 140191433519103, -STORE, 140191433519104, 140191433527295, -SNULL, 94467224809471, 94467224813567, -STORE, 94467224801280, 94467224809471, -STORE, 94467224809472, 94467224813567, -SNULL, 140191435788287, 140191435792383, -STORE, 140191435784192, 140191435788287, -STORE, 140191435788288, 140191435792383, -ERASE, 140191435755520, 140191435784191, -STORE, 94467251847168, 94467251982335, -STORE, 94367895400448, 94367895613439, -STORE, 94367897710592, 94367897714687, -STORE, 94367897714688, 94367897722879, -STORE, 94367897722880, 94367897735167, -STORE, 94367925264384, 94367926861823, -STORE, 139801317548032, 139801319206911, -STORE, 139801319206912, 139801321304063, -STORE, 139801321304064, 139801321320447, -STORE, 139801321320448, 139801321328639, -STORE, 139801321328640, 139801321345023, -STORE, 139801321345024, 139801321357311, -STORE, 139801321357312, 139801323450367, -STORE, 139801323450368, 139801323454463, -STORE, 139801323454464, 139801323458559, -STORE, 139801323458560, 139801323601919, -STORE, 139801323970560, 139801325654015, -STORE, 139801325654016, 139801325670399, -STORE, 139801325699072, 139801325703167, -STORE, 139801325703168, 139801325707263, -STORE, 139801325707264, 139801325711359, -STORE, 140724442861568, 140724443000831, -STORE, 140724443611136, 140724443623423, -STORE, 140724443623424, 140724443627519, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140731353149440, 140737488351231, -SNULL, 140731353157631, 140737488351231, -STORE, 140731353149440, 140731353157631, -STORE, 140731353018368, 140731353157631, -STORE, 94310379503616, 94310381838335, -SNULL, 94310379716607, 94310381838335, -STORE, 94310379503616, 94310379716607, -STORE, 94310379716608, 94310381838335, -ERASE, 94310379716608, 94310381838335, -STORE, 94310381813760, 94310381826047, -STORE, 94310381826048, 94310381838335, -STORE, 140515434659840, 140515436912639, -SNULL, 140515434803199, 140515436912639, -STORE, 140515434659840, 140515434803199, -STORE, 140515434803200, 140515436912639, -ERASE, 140515434803200, 140515436912639, -STORE, 140515436900352, 140515436908543, -STORE, 140515436908544, 140515436912639, -STORE, 140731353886720, 140731353890815, -STORE, 140731353874432, 140731353886719, -STORE, 140515436871680, 140515436900351, -STORE, 140515436863488, 140515436871679, -STORE, 140515432546304, 140515434659839, -SNULL, 140515432546304, 140515432558591, -STORE, 140515432558592, 140515434659839, -STORE, 140515432546304, 140515432558591, -SNULL, 140515434651647, 140515434659839, -STORE, 140515432558592, 140515434651647, -STORE, 140515434651648, 140515434659839, -ERASE, 140515434651648, 140515434659839, -STORE, 140515434651648, 140515434659839, -STORE, 140515428749312, 140515432546303, -SNULL, 140515428749312, 140515430408191, -STORE, 140515430408192, 140515432546303, -STORE, 140515428749312, 140515430408191, -SNULL, 140515432505343, 140515432546303, -STORE, 140515430408192, 140515432505343, -STORE, 140515432505344, 140515432546303, -SNULL, 140515432505344, 140515432529919, -STORE, 140515432529920, 140515432546303, -STORE, 140515432505344, 140515432529919, -ERASE, 140515432505344, 140515432529919, -STORE, 140515432505344, 140515432529919, -ERASE, 140515432529920, 140515432546303, -STORE, 140515432529920, 140515432546303, -STORE, 140515436855296, 140515436871679, -SNULL, 140515432521727, 140515432529919, -STORE, 140515432505344, 140515432521727, -STORE, 140515432521728, 140515432529919, -SNULL, 140515434655743, 140515434659839, -STORE, 140515434651648, 140515434655743, -STORE, 140515434655744, 140515434659839, -SNULL, 94310381817855, 94310381826047, -STORE, 94310381813760, 94310381817855, -STORE, 94310381817856, 94310381826047, -SNULL, 140515436904447, 140515436908543, -STORE, 140515436900352, 140515436904447, -STORE, 140515436904448, 140515436908543, -ERASE, 140515436871680, 140515436900351, -STORE, 94310395457536, 94310395592703, -STORE, 140515435171840, 140515436855295, -STORE, 94310395457536, 94310395727871, -STORE, 94310395457536, 94310395863039, -STORE, 94310395457536, 94310396047359, -SNULL, 94310396022783, 94310396047359, -STORE, 94310395457536, 94310396022783, -STORE, 94310396022784, 94310396047359, -ERASE, 94310396022784, 94310396047359, -STORE, 94310395457536, 94310396157951, -STORE, 94310395457536, 94310396293119, -SNULL, 94310396276735, 94310396293119, -STORE, 94310395457536, 94310396276735, -STORE, 94310396276736, 94310396293119, -ERASE, 94310396276736, 94310396293119, -STORE, 94310395457536, 94310396411903, -SNULL, 94310396383231, 94310396411903, -STORE, 94310395457536, 94310396383231, -STORE, 94310396383232, 94310396411903, -ERASE, 94310396383232, 94310396411903, -STORE, 94310395457536, 94310396522495, -STORE, 94310395457536, 94310396674047, -SNULL, 94310396657663, 94310396674047, -STORE, 94310395457536, 94310396657663, -STORE, 94310396657664, 94310396674047, -ERASE, 94310396657664, 94310396674047, -SNULL, 94310396624895, 94310396657663, -STORE, 94310395457536, 94310396624895, -STORE, 94310396624896, 94310396657663, -ERASE, 94310396624896, 94310396657663, -STORE, 94310395457536, 94310396776447, -SNULL, 94310396764159, 94310396776447, -STORE, 94310395457536, 94310396764159, -STORE, 94310396764160, 94310396776447, -ERASE, 94310396764160, 94310396776447, -SNULL, 94310396739583, 94310396764159, -STORE, 94310395457536, 94310396739583, -STORE, 94310396739584, 94310396764159, -ERASE, 94310396739584, 94310396764159, -STORE, 94310395457536, 94310396882943, -STORE, 94310395457536, 94310397018111, -STORE, 94310395457536, 94310397161471, -STORE, 94310395457536, 94310397300735, -SNULL, 94310397292543, 94310397300735, -STORE, 94310395457536, 94310397292543, -STORE, 94310397292544, 94310397300735, -ERASE, 94310397292544, 94310397300735, -STORE, 94359222210560, 94359222423551, -STORE, 94359224520704, 94359224524799, -STORE, 94359224524800, 94359224532991, -STORE, 94359224532992, 94359224545279, -STORE, 94359238348800, 94359239385087, -STORE, 140675699838976, 140675701497855, -STORE, 140675701497856, 140675703595007, -STORE, 140675703595008, 140675703611391, -STORE, 140675703611392, 140675703619583, -STORE, 140675703619584, 140675703635967, -STORE, 140675703635968, 140675703648255, -STORE, 140675703648256, 140675705741311, -STORE, 140675705741312, 140675705745407, -STORE, 140675705745408, 140675705749503, -STORE, 140675705749504, 140675705892863, -STORE, 140675706261504, 140675707944959, -STORE, 140675707944960, 140675707961343, -STORE, 140675707990016, 140675707994111, -STORE, 140675707994112, 140675707998207, -STORE, 140675707998208, 140675708002303, -STORE, 140721324634112, 140721324773375, -STORE, 140721324810240, 140721324822527, -STORE, 140721324822528, 140721324826623, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140724099678208, 140737488351231, -SNULL, 140724099686399, 140737488351231, -STORE, 140724099678208, 140724099686399, -STORE, 140724099547136, 140724099686399, -STORE, 94586638516224, 94586640850943, -SNULL, 94586638729215, 94586640850943, -STORE, 94586638516224, 94586638729215, -STORE, 94586638729216, 94586640850943, -ERASE, 94586638729216, 94586640850943, -STORE, 94586640826368, 94586640838655, -STORE, 94586640838656, 94586640850943, -STORE, 140371033796608, 140371036049407, -SNULL, 140371033939967, 140371036049407, -STORE, 140371033796608, 140371033939967, -STORE, 140371033939968, 140371036049407, -ERASE, 140371033939968, 140371036049407, -STORE, 140371036037120, 140371036045311, -STORE, 140371036045312, 140371036049407, -STORE, 140724100001792, 140724100005887, -STORE, 140724099989504, 140724100001791, -STORE, 140371036008448, 140371036037119, -STORE, 140371036000256, 140371036008447, -STORE, 140371031683072, 140371033796607, -SNULL, 140371031683072, 140371031695359, -STORE, 140371031695360, 140371033796607, -STORE, 140371031683072, 140371031695359, -SNULL, 140371033788415, 140371033796607, -STORE, 140371031695360, 140371033788415, -STORE, 140371033788416, 140371033796607, -ERASE, 140371033788416, 140371033796607, -STORE, 140371033788416, 140371033796607, -STORE, 140371027886080, 140371031683071, -SNULL, 140371027886080, 140371029544959, -STORE, 140371029544960, 140371031683071, -STORE, 140371027886080, 140371029544959, -SNULL, 140371031642111, 140371031683071, -STORE, 140371029544960, 140371031642111, -STORE, 140371031642112, 140371031683071, -SNULL, 140371031642112, 140371031666687, -STORE, 140371031666688, 140371031683071, -STORE, 140371031642112, 140371031666687, -ERASE, 140371031642112, 140371031666687, -STORE, 140371031642112, 140371031666687, -ERASE, 140371031666688, 140371031683071, -STORE, 140371031666688, 140371031683071, -STORE, 140371035992064, 140371036008447, -SNULL, 140371031658495, 140371031666687, -STORE, 140371031642112, 140371031658495, -STORE, 140371031658496, 140371031666687, -SNULL, 140371033792511, 140371033796607, -STORE, 140371033788416, 140371033792511, -STORE, 140371033792512, 140371033796607, -SNULL, 94586640830463, 94586640838655, -STORE, 94586640826368, 94586640830463, -STORE, 94586640830464, 94586640838655, -SNULL, 140371036041215, 140371036045311, -STORE, 140371036037120, 140371036041215, -STORE, 140371036041216, 140371036045311, -ERASE, 140371036008448, 140371036037119, -STORE, 94586663849984, 94586663985151, -STORE, 140371034308608, 140371035992063, -STORE, 94586663849984, 94586664120319, -STORE, 94586663849984, 94586664255487, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140727532937216, 140737488351231, -SNULL, 140727532945407, 140737488351231, -STORE, 140727532937216, 140727532945407, -STORE, 140727532806144, 140727532945407, -STORE, 94849780191232, 94849782525951, -SNULL, 94849780404223, 94849782525951, -STORE, 94849780191232, 94849780404223, -STORE, 94849780404224, 94849782525951, -ERASE, 94849780404224, 94849782525951, -STORE, 94849782501376, 94849782513663, -STORE, 94849782513664, 94849782525951, -STORE, 140382070218752, 140382072471551, -SNULL, 140382070362111, 140382072471551, -STORE, 140382070218752, 140382070362111, -STORE, 140382070362112, 140382072471551, -ERASE, 140382070362112, 140382072471551, -STORE, 140382072459264, 140382072467455, -STORE, 140382072467456, 140382072471551, -STORE, 140727533092864, 140727533096959, -STORE, 140727533080576, 140727533092863, -STORE, 140382072430592, 140382072459263, -STORE, 140382072422400, 140382072430591, -STORE, 140382068105216, 140382070218751, -SNULL, 140382068105216, 140382068117503, -STORE, 140382068117504, 140382070218751, -STORE, 140382068105216, 140382068117503, -SNULL, 140382070210559, 140382070218751, -STORE, 140382068117504, 140382070210559, -STORE, 140382070210560, 140382070218751, -ERASE, 140382070210560, 140382070218751, -STORE, 140382070210560, 140382070218751, -STORE, 140382064308224, 140382068105215, -SNULL, 140382064308224, 140382065967103, -STORE, 140382065967104, 140382068105215, -STORE, 140382064308224, 140382065967103, -SNULL, 140382068064255, 140382068105215, -STORE, 140382065967104, 140382068064255, -STORE, 140382068064256, 140382068105215, -SNULL, 140382068064256, 140382068088831, -STORE, 140382068088832, 140382068105215, -STORE, 140382068064256, 140382068088831, -ERASE, 140382068064256, 140382068088831, -STORE, 140382068064256, 140382068088831, -ERASE, 140382068088832, 140382068105215, -STORE, 140382068088832, 140382068105215, -STORE, 140382072414208, 140382072430591, -SNULL, 140382068080639, 140382068088831, -STORE, 140382068064256, 140382068080639, -STORE, 140382068080640, 140382068088831, -SNULL, 140382070214655, 140382070218751, -STORE, 140382070210560, 140382070214655, -STORE, 140382070214656, 140382070218751, -SNULL, 94849782505471, 94849782513663, -STORE, 94849782501376, 94849782505471, -STORE, 94849782505472, 94849782513663, -SNULL, 140382072463359, 140382072467455, -STORE, 140382072459264, 140382072463359, -STORE, 140382072463360, 140382072467455, -ERASE, 140382072430592, 140382072459263, -STORE, 94849782845440, 94849782980607, -STORE, 140382070730752, 140382072414207, -STORE, 94849782845440, 94849783115775, -STORE, 94849782845440, 94849783250943, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140722594377728, 140737488351231, -SNULL, 140722594385919, 140737488351231, -STORE, 140722594377728, 140722594385919, -STORE, 140722594246656, 140722594385919, -STORE, 94421466353664, 94421468577791, -SNULL, 94421466464255, 94421468577791, -STORE, 94421466353664, 94421466464255, -STORE, 94421466464256, 94421468577791, -ERASE, 94421466464256, 94421468577791, -STORE, 94421468557312, 94421468569599, -STORE, 94421468569600, 94421468577791, -STORE, 140345458057216, 140345460310015, -SNULL, 140345458200575, 140345460310015, -STORE, 140345458057216, 140345458200575, -STORE, 140345458200576, 140345460310015, -ERASE, 140345458200576, 140345460310015, -STORE, 140345460297728, 140345460305919, -STORE, 140345460305920, 140345460310015, -STORE, 140722595557376, 140722595561471, -STORE, 140722595545088, 140722595557375, -STORE, 140345460269056, 140345460297727, -STORE, 140345460260864, 140345460269055, -STORE, 140345454260224, 140345458057215, -SNULL, 140345454260224, 140345455919103, -STORE, 140345455919104, 140345458057215, -STORE, 140345454260224, 140345455919103, -SNULL, 140345458016255, 140345458057215, -STORE, 140345455919104, 140345458016255, -STORE, 140345458016256, 140345458057215, -SNULL, 140345458016256, 140345458040831, -STORE, 140345458040832, 140345458057215, -STORE, 140345458016256, 140345458040831, -ERASE, 140345458016256, 140345458040831, -STORE, 140345458016256, 140345458040831, -ERASE, 140345458040832, 140345458057215, -STORE, 140345458040832, 140345458057215, -SNULL, 140345458032639, 140345458040831, -STORE, 140345458016256, 140345458032639, -STORE, 140345458032640, 140345458040831, -SNULL, 94421468565503, 94421468569599, -STORE, 94421468557312, 94421468565503, -STORE, 94421468565504, 94421468569599, -SNULL, 140345460301823, 140345460305919, -STORE, 140345460297728, 140345460301823, -STORE, 140345460301824, 140345460305919, -ERASE, 140345460269056, 140345460297727, -STORE, 94421496004608, 94421496139775, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140726096302080, 140737488351231, -SNULL, 140726096310271, 140737488351231, -STORE, 140726096302080, 140726096310271, -STORE, 140726096171008, 140726096310271, -STORE, 94101992124416, 94101994459135, -SNULL, 94101992337407, 94101994459135, -STORE, 94101992124416, 94101992337407, -STORE, 94101992337408, 94101994459135, -ERASE, 94101992337408, 94101994459135, -STORE, 94101994434560, 94101994446847, -STORE, 94101994446848, 94101994459135, -STORE, 140192085594112, 140192087846911, -SNULL, 140192085737471, 140192087846911, -STORE, 140192085594112, 140192085737471, -STORE, 140192085737472, 140192087846911, -ERASE, 140192085737472, 140192087846911, -STORE, 140192087834624, 140192087842815, -STORE, 140192087842816, 140192087846911, -STORE, 140726096375808, 140726096379903, -STORE, 140726096363520, 140726096375807, -STORE, 140192087805952, 140192087834623, -STORE, 140192087797760, 140192087805951, -STORE, 140192083480576, 140192085594111, -SNULL, 140192083480576, 140192083492863, -STORE, 140192083492864, 140192085594111, -STORE, 140192083480576, 140192083492863, -SNULL, 140192085585919, 140192085594111, -STORE, 140192083492864, 140192085585919, -STORE, 140192085585920, 140192085594111, -ERASE, 140192085585920, 140192085594111, -STORE, 140192085585920, 140192085594111, -STORE, 140192079683584, 140192083480575, -SNULL, 140192079683584, 140192081342463, -STORE, 140192081342464, 140192083480575, -STORE, 140192079683584, 140192081342463, -SNULL, 140192083439615, 140192083480575, -STORE, 140192081342464, 140192083439615, -STORE, 140192083439616, 140192083480575, -SNULL, 140192083439616, 140192083464191, -STORE, 140192083464192, 140192083480575, -STORE, 140192083439616, 140192083464191, -ERASE, 140192083439616, 140192083464191, -STORE, 140192083439616, 140192083464191, -ERASE, 140192083464192, 140192083480575, -STORE, 140192083464192, 140192083480575, -STORE, 140192087789568, 140192087805951, -SNULL, 140192083455999, 140192083464191, -STORE, 140192083439616, 140192083455999, -STORE, 140192083456000, 140192083464191, -SNULL, 140192085590015, 140192085594111, -STORE, 140192085585920, 140192085590015, -STORE, 140192085590016, 140192085594111, -SNULL, 94101994438655, 94101994446847, -STORE, 94101994434560, 94101994438655, -STORE, 94101994438656, 94101994446847, -SNULL, 140192087838719, 140192087842815, -STORE, 140192087834624, 140192087838719, -STORE, 140192087838720, 140192087842815, -ERASE, 140192087805952, 140192087834623, -STORE, 94102011887616, 94102012022783, -STORE, 140192086106112, 140192087789567, -STORE, 94102011887616, 94102012157951, -STORE, 94102011887616, 94102012293119, -STORE, 94102011887616, 94102012440575, -SNULL, 94102012428287, 94102012440575, -STORE, 94102011887616, 94102012428287, -STORE, 94102012428288, 94102012440575, -ERASE, 94102012428288, 94102012440575, -STORE, 94102011887616, 94102012579839, -STORE, 94102011887616, 94102012715007, -SNULL, 94102012694527, 94102012715007, -STORE, 94102011887616, 94102012694527, -STORE, 94102012694528, 94102012715007, -ERASE, 94102012694528, 94102012715007, -STORE, 94102011887616, 94102012833791, -STORE, 94102011887616, 94102012968959, -SNULL, 94102012927999, 94102012968959, -STORE, 94102011887616, 94102012927999, -STORE, 94102012928000, 94102012968959, -ERASE, 94102012928000, 94102012968959, -STORE, 94102011887616, 94102013091839, -SNULL, 94102013075455, 94102013091839, -STORE, 94102011887616, 94102013075455, -STORE, 94102013075456, 94102013091839, -ERASE, 94102013075456, 94102013091839, -STORE, 94102011887616, 94102013210623, -STORE, 94102011887616, 94102013345791, -STORE, 93968727965696, 93968728178687, -STORE, 93968730275840, 93968730279935, -STORE, 93968730279936, 93968730288127, -STORE, 93968730288128, 93968730300415, -STORE, 93968731140096, 93968732704767, -STORE, 140588443168768, 140588444827647, -STORE, 140588444827648, 140588446924799, -STORE, 140588446924800, 140588446941183, -STORE, 140588446941184, 140588446949375, -STORE, 140588446949376, 140588446965759, -STORE, 140588446965760, 140588446978047, -STORE, 140588446978048, 140588449071103, -STORE, 140588449071104, 140588449075199, -STORE, 140588449075200, 140588449079295, -STORE, 140588449079296, 140588449222655, -STORE, 140588449591296, 140588451274751, -STORE, 140588451274752, 140588451291135, -STORE, 140588451319808, 140588451323903, -STORE, 140588451323904, 140588451327999, -STORE, 140588451328000, 140588451332095, -STORE, 140733877239808, 140733877379071, -STORE, 140733878702080, 140733878714367, -STORE, 140733878714368, 140733878718463, -STORE, 93968727965696, 93968728178687, -STORE, 93968730275840, 93968730279935, -STORE, 93968730279936, 93968730288127, -STORE, 93968730288128, 93968730300415, -STORE, 93968731140096, 93968732991487, -STORE, 140588443168768, 140588444827647, -STORE, 140588444827648, 140588446924799, -STORE, 140588446924800, 140588446941183, -STORE, 140588446941184, 140588446949375, -STORE, 140588446949376, 140588446965759, -STORE, 140588446965760, 140588446978047, -STORE, 140588446978048, 140588449071103, -STORE, 140588449071104, 140588449075199, -STORE, 140588449075200, 140588449079295, -STORE, 140588449079296, 140588449222655, -STORE, 140588449591296, 140588451274751, -STORE, 140588451274752, 140588451291135, -STORE, 140588451319808, 140588451323903, -STORE, 140588451323904, 140588451327999, -STORE, 140588451328000, 140588451332095, -STORE, 140733877239808, 140733877379071, -STORE, 140733878702080, 140733878714367, -STORE, 140733878714368, 140733878718463, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140733054472192, 140737488351231, -SNULL, 140733054480383, 140737488351231, -STORE, 140733054472192, 140733054480383, -STORE, 140733054341120, 140733054480383, -STORE, 93992873623552, 93992875847679, -SNULL, 93992873734143, 93992875847679, -STORE, 93992873623552, 93992873734143, -STORE, 93992873734144, 93992875847679, -ERASE, 93992873734144, 93992875847679, -STORE, 93992875827200, 93992875839487, -STORE, 93992875839488, 93992875847679, -STORE, 139790881488896, 139790883741695, -SNULL, 139790881632255, 139790883741695, -STORE, 139790881488896, 139790881632255, -STORE, 139790881632256, 139790883741695, -ERASE, 139790881632256, 139790883741695, -STORE, 139790883729408, 139790883737599, -STORE, 139790883737600, 139790883741695, -STORE, 140733054754816, 140733054758911, -STORE, 140733054742528, 140733054754815, -STORE, 139790883700736, 139790883729407, -STORE, 139790883692544, 139790883700735, -STORE, 139790877691904, 139790881488895, -SNULL, 139790877691904, 139790879350783, -STORE, 139790879350784, 139790881488895, -STORE, 139790877691904, 139790879350783, -SNULL, 139790881447935, 139790881488895, -STORE, 139790879350784, 139790881447935, -STORE, 139790881447936, 139790881488895, -SNULL, 139790881447936, 139790881472511, -STORE, 139790881472512, 139790881488895, -STORE, 139790881447936, 139790881472511, -ERASE, 139790881447936, 139790881472511, -STORE, 139790881447936, 139790881472511, -ERASE, 139790881472512, 139790881488895, -STORE, 139790881472512, 139790881488895, -SNULL, 139790881464319, 139790881472511, -STORE, 139790881447936, 139790881464319, -STORE, 139790881464320, 139790881472511, -SNULL, 93992875835391, 93992875839487, -STORE, 93992875827200, 93992875835391, -STORE, 93992875835392, 93992875839487, -SNULL, 139790883733503, 139790883737599, -STORE, 139790883729408, 139790883733503, -STORE, 139790883733504, 139790883737599, -ERASE, 139790883700736, 139790883729407, -STORE, 93992877031424, 93992877166591, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140728550887424, 140737488351231, -SNULL, 140728550895615, 140737488351231, -STORE, 140728550887424, 140728550895615, -STORE, 140728550756352, 140728550895615, -STORE, 94707634077696, 94707636301823, -SNULL, 94707634188287, 94707636301823, -STORE, 94707634077696, 94707634188287, -STORE, 94707634188288, 94707636301823, -ERASE, 94707634188288, 94707636301823, -STORE, 94707636281344, 94707636293631, -STORE, 94707636293632, 94707636301823, -STORE, 140553545666560, 140553547919359, -SNULL, 140553545809919, 140553547919359, -STORE, 140553545666560, 140553545809919, -STORE, 140553545809920, 140553547919359, -ERASE, 140553545809920, 140553547919359, -STORE, 140553547907072, 140553547915263, -STORE, 140553547915264, 140553547919359, -STORE, 140728552374272, 140728552378367, -STORE, 140728552361984, 140728552374271, -STORE, 140553547878400, 140553547907071, -STORE, 140553547870208, 140553547878399, -STORE, 140553541869568, 140553545666559, -SNULL, 140553541869568, 140553543528447, -STORE, 140553543528448, 140553545666559, -STORE, 140553541869568, 140553543528447, -SNULL, 140553545625599, 140553545666559, -STORE, 140553543528448, 140553545625599, -STORE, 140553545625600, 140553545666559, -SNULL, 140553545625600, 140553545650175, -STORE, 140553545650176, 140553545666559, -STORE, 140553545625600, 140553545650175, -ERASE, 140553545625600, 140553545650175, -STORE, 140553545625600, 140553545650175, -ERASE, 140553545650176, 140553545666559, -STORE, 140553545650176, 140553545666559, -SNULL, 140553545641983, 140553545650175, -STORE, 140553545625600, 140553545641983, -STORE, 140553545641984, 140553545650175, -SNULL, 94707636289535, 94707636293631, -STORE, 94707636281344, 94707636289535, -STORE, 94707636289536, 94707636293631, -SNULL, 140553547911167, 140553547915263, -STORE, 140553547907072, 140553547911167, -STORE, 140553547911168, 140553547915263, -ERASE, 140553547878400, 140553547907071, -STORE, 94707651411968, 94707651547135, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140732168695808, 140737488351231, -SNULL, 140732168703999, 140737488351231, -STORE, 140732168695808, 140732168703999, -STORE, 140732168564736, 140732168703999, -STORE, 94454287859712, 94454290083839, -SNULL, 94454287970303, 94454290083839, -STORE, 94454287859712, 94454287970303, -STORE, 94454287970304, 94454290083839, -ERASE, 94454287970304, 94454290083839, -STORE, 94454290063360, 94454290075647, -STORE, 94454290075648, 94454290083839, -STORE, 140564947107840, 140564949360639, -SNULL, 140564947251199, 140564949360639, -STORE, 140564947107840, 140564947251199, -STORE, 140564947251200, 140564949360639, -ERASE, 140564947251200, 140564949360639, -STORE, 140564949348352, 140564949356543, -STORE, 140564949356544, 140564949360639, -STORE, 140732168843264, 140732168847359, -STORE, 140732168830976, 140732168843263, -STORE, 140564949319680, 140564949348351, -STORE, 140564949311488, 140564949319679, -STORE, 140564943310848, 140564947107839, -SNULL, 140564943310848, 140564944969727, -STORE, 140564944969728, 140564947107839, -STORE, 140564943310848, 140564944969727, -SNULL, 140564947066879, 140564947107839, -STORE, 140564944969728, 140564947066879, -STORE, 140564947066880, 140564947107839, -SNULL, 140564947066880, 140564947091455, -STORE, 140564947091456, 140564947107839, -STORE, 140564947066880, 140564947091455, -ERASE, 140564947066880, 140564947091455, -STORE, 140564947066880, 140564947091455, -ERASE, 140564947091456, 140564947107839, -STORE, 140564947091456, 140564947107839, -SNULL, 140564947083263, 140564947091455, -STORE, 140564947066880, 140564947083263, -STORE, 140564947083264, 140564947091455, -SNULL, 94454290071551, 94454290075647, -STORE, 94454290063360, 94454290071551, -STORE, 94454290071552, 94454290075647, -SNULL, 140564949352447, 140564949356543, -STORE, 140564949348352, 140564949352447, -STORE, 140564949352448, 140564949356543, -ERASE, 140564949319680, 140564949348351, -STORE, 94454316236800, 94454316371967, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140735155617792, 140737488351231, -SNULL, 140735155625983, 140737488351231, -STORE, 140735155617792, 140735155625983, -STORE, 140735155486720, 140735155625983, -STORE, 93915969556480, 93915971780607, -SNULL, 93915969667071, 93915971780607, -STORE, 93915969556480, 93915969667071, -STORE, 93915969667072, 93915971780607, -ERASE, 93915969667072, 93915971780607, -STORE, 93915971760128, 93915971772415, -STORE, 93915971772416, 93915971780607, -STORE, 140141164605440, 140141166858239, -SNULL, 140141164748799, 140141166858239, -STORE, 140141164605440, 140141164748799, -STORE, 140141164748800, 140141166858239, -ERASE, 140141164748800, 140141166858239, -STORE, 140141166845952, 140141166854143, -STORE, 140141166854144, 140141166858239, -STORE, 140735155691520, 140735155695615, -STORE, 140735155679232, 140735155691519, -STORE, 140141166817280, 140141166845951, -STORE, 140141166809088, 140141166817279, -STORE, 140141160808448, 140141164605439, -SNULL, 140141160808448, 140141162467327, -STORE, 140141162467328, 140141164605439, -STORE, 140141160808448, 140141162467327, -SNULL, 140141164564479, 140141164605439, -STORE, 140141162467328, 140141164564479, -STORE, 140141164564480, 140141164605439, -SNULL, 140141164564480, 140141164589055, -STORE, 140141164589056, 140141164605439, -STORE, 140141164564480, 140141164589055, -ERASE, 140141164564480, 140141164589055, -STORE, 140141164564480, 140141164589055, -ERASE, 140141164589056, 140141164605439, -STORE, 140141164589056, 140141164605439, -SNULL, 140141164580863, 140141164589055, -STORE, 140141164564480, 140141164580863, -STORE, 140141164580864, 140141164589055, -SNULL, 93915971768319, 93915971772415, -STORE, 93915971760128, 93915971768319, -STORE, 93915971768320, 93915971772415, -SNULL, 140141166850047, 140141166854143, -STORE, 140141166845952, 140141166850047, -STORE, 140141166850048, 140141166854143, -ERASE, 140141166817280, 140141166845951, -STORE, 93916002775040, 93916002910207, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140728988409856, 140737488351231, -SNULL, 140728988418047, 140737488351231, -STORE, 140728988409856, 140728988418047, -STORE, 140728988278784, 140728988418047, -STORE, 94021634813952, 94021637038079, -SNULL, 94021634924543, 94021637038079, -STORE, 94021634813952, 94021634924543, -STORE, 94021634924544, 94021637038079, -ERASE, 94021634924544, 94021637038079, -STORE, 94021637017600, 94021637029887, -STORE, 94021637029888, 94021637038079, -STORE, 140638014038016, 140638016290815, -SNULL, 140638014181375, 140638016290815, -STORE, 140638014038016, 140638014181375, -STORE, 140638014181376, 140638016290815, -ERASE, 140638014181376, 140638016290815, -STORE, 140638016278528, 140638016286719, -STORE, 140638016286720, 140638016290815, -STORE, 140728988536832, 140728988540927, -STORE, 140728988524544, 140728988536831, -STORE, 140638016249856, 140638016278527, -STORE, 140638016241664, 140638016249855, -STORE, 140638010241024, 140638014038015, -SNULL, 140638010241024, 140638011899903, -STORE, 140638011899904, 140638014038015, -STORE, 140638010241024, 140638011899903, -SNULL, 140638013997055, 140638014038015, -STORE, 140638011899904, 140638013997055, -STORE, 140638013997056, 140638014038015, -SNULL, 140638013997056, 140638014021631, -STORE, 140638014021632, 140638014038015, -STORE, 140638013997056, 140638014021631, -ERASE, 140638013997056, 140638014021631, -STORE, 140638013997056, 140638014021631, -ERASE, 140638014021632, 140638014038015, -STORE, 140638014021632, 140638014038015, -SNULL, 140638014013439, 140638014021631, -STORE, 140638013997056, 140638014013439, -STORE, 140638014013440, 140638014021631, -SNULL, 94021637025791, 94021637029887, -STORE, 94021637017600, 94021637025791, -STORE, 94021637025792, 94021637029887, -SNULL, 140638016282623, 140638016286719, -STORE, 140638016278528, 140638016282623, -STORE, 140638016282624, 140638016286719, -ERASE, 140638016249856, 140638016278527, -STORE, 94021643124736, 94021643259903, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140731219275776, 140737488351231, -SNULL, 140731219283967, 140737488351231, -STORE, 140731219275776, 140731219283967, -STORE, 140731219144704, 140731219283967, -STORE, 93888803647488, 93888805871615, -SNULL, 93888803758079, 93888805871615, -STORE, 93888803647488, 93888803758079, -STORE, 93888803758080, 93888805871615, -ERASE, 93888803758080, 93888805871615, -STORE, 93888805851136, 93888805863423, -STORE, 93888805863424, 93888805871615, -STORE, 139630576934912, 139630579187711, -SNULL, 139630577078271, 139630579187711, -STORE, 139630576934912, 139630577078271, -STORE, 139630577078272, 139630579187711, -ERASE, 139630577078272, 139630579187711, -STORE, 139630579175424, 139630579183615, -STORE, 139630579183616, 139630579187711, -STORE, 140731219718144, 140731219722239, -STORE, 140731219705856, 140731219718143, -STORE, 139630579146752, 139630579175423, -STORE, 139630579138560, 139630579146751, -STORE, 139630573137920, 139630576934911, -SNULL, 139630573137920, 139630574796799, -STORE, 139630574796800, 139630576934911, -STORE, 139630573137920, 139630574796799, -SNULL, 139630576893951, 139630576934911, -STORE, 139630574796800, 139630576893951, -STORE, 139630576893952, 139630576934911, -SNULL, 139630576893952, 139630576918527, -STORE, 139630576918528, 139630576934911, -STORE, 139630576893952, 139630576918527, -ERASE, 139630576893952, 139630576918527, -STORE, 139630576893952, 139630576918527, -ERASE, 139630576918528, 139630576934911, -STORE, 139630576918528, 139630576934911, -SNULL, 139630576910335, 139630576918527, -STORE, 139630576893952, 139630576910335, -STORE, 139630576910336, 139630576918527, -SNULL, 93888805859327, 93888805863423, -STORE, 93888805851136, 93888805859327, -STORE, 93888805859328, 93888805863423, -SNULL, 139630579179519, 139630579183615, -STORE, 139630579175424, 139630579179519, -STORE, 139630579179520, 139630579183615, -ERASE, 139630579146752, 139630579175423, -STORE, 93888822235136, 93888822370303, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140733391151104, 140737488351231, -SNULL, 140733391159295, 140737488351231, -STORE, 140733391151104, 140733391159295, -STORE, 140733391020032, 140733391159295, -STORE, 94393875324928, 94393877549055, -SNULL, 94393875435519, 94393877549055, -STORE, 94393875324928, 94393875435519, -STORE, 94393875435520, 94393877549055, -ERASE, 94393875435520, 94393877549055, -STORE, 94393877528576, 94393877540863, -STORE, 94393877540864, 94393877549055, -STORE, 140292111740928, 140292113993727, -SNULL, 140292111884287, 140292113993727, -STORE, 140292111740928, 140292111884287, -STORE, 140292111884288, 140292113993727, -ERASE, 140292111884288, 140292113993727, -STORE, 140292113981440, 140292113989631, -STORE, 140292113989632, 140292113993727, -STORE, 140733391532032, 140733391536127, -STORE, 140733391519744, 140733391532031, -STORE, 140292113952768, 140292113981439, -STORE, 140292113944576, 140292113952767, -STORE, 140292107943936, 140292111740927, -SNULL, 140292107943936, 140292109602815, -STORE, 140292109602816, 140292111740927, -STORE, 140292107943936, 140292109602815, -SNULL, 140292111699967, 140292111740927, -STORE, 140292109602816, 140292111699967, -STORE, 140292111699968, 140292111740927, -SNULL, 140292111699968, 140292111724543, -STORE, 140292111724544, 140292111740927, -STORE, 140292111699968, 140292111724543, -ERASE, 140292111699968, 140292111724543, -STORE, 140292111699968, 140292111724543, -ERASE, 140292111724544, 140292111740927, -STORE, 140292111724544, 140292111740927, -SNULL, 140292111716351, 140292111724543, -STORE, 140292111699968, 140292111716351, -STORE, 140292111716352, 140292111724543, -SNULL, 94393877536767, 94393877540863, -STORE, 94393877528576, 94393877536767, -STORE, 94393877536768, 94393877540863, -SNULL, 140292113985535, 140292113989631, -STORE, 140292113981440, 140292113985535, -STORE, 140292113985536, 140292113989631, -ERASE, 140292113952768, 140292113981439, -STORE, 94393909342208, 94393909477375, -STORE, 94458367512576, 94458367725567, -STORE, 94458369822720, 94458369826815, -STORE, 94458369826816, 94458369835007, -STORE, 94458369835008, 94458369847295, -STORE, 94458393292800, 94458399666175, -STORE, 140619773841408, 140619775500287, -STORE, 140619775500288, 140619777597439, -STORE, 140619777597440, 140619777613823, -STORE, 140619777613824, 140619777622015, -STORE, 140619777622016, 140619777638399, -STORE, 140619777638400, 140619777650687, -STORE, 140619777650688, 140619779743743, -STORE, 140619779743744, 140619779747839, -STORE, 140619779747840, 140619779751935, -STORE, 140619779751936, 140619779895295, -STORE, 140619780263936, 140619781947391, -STORE, 140619781947392, 140619781963775, -STORE, 140619781992448, 140619781996543, -STORE, 140619781996544, 140619782000639, -STORE, 140619782000640, 140619782004735, -STORE, 140725811675136, 140725811814399, -STORE, 140725812813824, 140725812826111, -STORE, 140725812826112, 140725812830207, -STORE, 94458367512576, 94458367725567, -STORE, 94458369822720, 94458369826815, -STORE, 94458369826816, 94458369835007, -STORE, 94458369835008, 94458369847295, -STORE, 94458393292800, 94458400366591, -STORE, 140619773841408, 140619775500287, -STORE, 140619775500288, 140619777597439, -STORE, 140619777597440, 140619777613823, -STORE, 140619777613824, 140619777622015, -STORE, 140619777622016, 140619777638399, -STORE, 140619777638400, 140619777650687, -STORE, 140619777650688, 140619779743743, -STORE, 140619779743744, 140619779747839, -STORE, 140619779747840, 140619779751935, -STORE, 140619779751936, 140619779895295, -STORE, 140619780263936, 140619781947391, -STORE, 140619781947392, 140619781963775, -STORE, 140619781992448, 140619781996543, -STORE, 140619781996544, 140619782000639, -STORE, 140619782000640, 140619782004735, -STORE, 140725811675136, 140725811814399, -STORE, 140725812813824, 140725812826111, -STORE, 140725812826112, 140725812830207, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140728740679680, 140737488351231, -SNULL, 140728740687871, 140737488351231, -STORE, 140728740679680, 140728740687871, -STORE, 140728740548608, 140728740687871, -STORE, 94764075249664, 94764077473791, -SNULL, 94764075360255, 94764077473791, -STORE, 94764075249664, 94764075360255, -STORE, 94764075360256, 94764077473791, -ERASE, 94764075360256, 94764077473791, -STORE, 94764077453312, 94764077465599, -STORE, 94764077465600, 94764077473791, -STORE, 139766406791168, 139766409043967, -SNULL, 139766406934527, 139766409043967, -STORE, 139766406791168, 139766406934527, -STORE, 139766406934528, 139766409043967, -ERASE, 139766406934528, 139766409043967, -STORE, 139766409031680, 139766409039871, -STORE, 139766409039872, 139766409043967, -STORE, 140728740913152, 140728740917247, -STORE, 140728740900864, 140728740913151, -STORE, 139766409003008, 139766409031679, -STORE, 139766408994816, 139766409003007, -STORE, 139766402994176, 139766406791167, -SNULL, 139766402994176, 139766404653055, -STORE, 139766404653056, 139766406791167, -STORE, 139766402994176, 139766404653055, -SNULL, 139766406750207, 139766406791167, -STORE, 139766404653056, 139766406750207, -STORE, 139766406750208, 139766406791167, -SNULL, 139766406750208, 139766406774783, -STORE, 139766406774784, 139766406791167, -STORE, 139766406750208, 139766406774783, -ERASE, 139766406750208, 139766406774783, -STORE, 139766406750208, 139766406774783, -ERASE, 139766406774784, 139766406791167, -STORE, 139766406774784, 139766406791167, -SNULL, 139766406766591, 139766406774783, -STORE, 139766406750208, 139766406766591, -STORE, 139766406766592, 139766406774783, -SNULL, 94764077461503, 94764077465599, -STORE, 94764077453312, 94764077461503, -STORE, 94764077461504, 94764077465599, -SNULL, 139766409035775, 139766409039871, -STORE, 139766409031680, 139766409035775, -STORE, 139766409035776, 139766409039871, -ERASE, 139766409003008, 139766409031679, -STORE, 94764090458112, 94764090593279, -STORE, 94758057480192, 94758057590783, -STORE, 94758059683840, 94758059692031, -STORE, 94758059692032, 94758059696127, -STORE, 94758059696128, 94758059704319, -STORE, 94758083215360, 94758083350527, -STORE, 139951456772096, 139951458430975, -STORE, 139951458430976, 139951460528127, -STORE, 139951460528128, 139951460544511, -STORE, 139951460544512, 139951460552703, -STORE, 139951460552704, 139951460569087, -STORE, 139951460569088, 139951460712447, -STORE, 139951462772736, 139951462780927, -STORE, 139951462809600, 139951462813695, -STORE, 139951462813696, 139951462817791, -STORE, 139951462817792, 139951462821887, -STORE, 140734098313216, 140734098452479, -STORE, 140734098911232, 140734098923519, -STORE, 140734098923520, 140734098927615, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140724904095744, 140737488351231, -SNULL, 140724904103935, 140737488351231, -STORE, 140724904095744, 140724904103935, -STORE, 140724903964672, 140724904103935, -STORE, 4194304, 5128191, -STORE, 7221248, 7241727, -STORE, 7241728, 7249919, -STORE, 140408497864704, 140408500117503, -SNULL, 140408498008063, 140408500117503, -STORE, 140408497864704, 140408498008063, -STORE, 140408498008064, 140408500117503, -ERASE, 140408498008064, 140408500117503, -STORE, 140408500105216, 140408500113407, -STORE, 140408500113408, 140408500117503, -STORE, 140724905369600, 140724905373695, -STORE, 140724905357312, 140724905369599, -STORE, 140408500076544, 140408500105215, -STORE, 140408500068352, 140408500076543, -STORE, 140408494702592, 140408497864703, -SNULL, 140408494702592, 140408495763455, -STORE, 140408495763456, 140408497864703, -STORE, 140408494702592, 140408495763455, -SNULL, 140408497856511, 140408497864703, -STORE, 140408495763456, 140408497856511, -STORE, 140408497856512, 140408497864703, -ERASE, 140408497856512, 140408497864703, -STORE, 140408497856512, 140408497864703, -STORE, 140408490905600, 140408494702591, -SNULL, 140408490905600, 140408492564479, -STORE, 140408492564480, 140408494702591, -STORE, 140408490905600, 140408492564479, -SNULL, 140408494661631, 140408494702591, -STORE, 140408492564480, 140408494661631, -STORE, 140408494661632, 140408494702591, -SNULL, 140408494661632, 140408494686207, -STORE, 140408494686208, 140408494702591, -STORE, 140408494661632, 140408494686207, -ERASE, 140408494661632, 140408494686207, -STORE, 140408494661632, 140408494686207, -ERASE, 140408494686208, 140408494702591, -STORE, 140408494686208, 140408494702591, -STORE, 140408500056064, 140408500076543, -SNULL, 140408494678015, 140408494686207, -STORE, 140408494661632, 140408494678015, -STORE, 140408494678016, 140408494686207, -SNULL, 140408497860607, 140408497864703, -STORE, 140408497856512, 140408497860607, -STORE, 140408497860608, 140408497864703, -SNULL, 7233535, 7241727, -STORE, 7221248, 7233535, -STORE, 7233536, 7241727, -SNULL, 140408500109311, 140408500113407, -STORE, 140408500105216, 140408500109311, -STORE, 140408500109312, 140408500113407, -ERASE, 140408500076544, 140408500105215, -STORE, 25235456, 25370623, -STORE, 25235456, 25518079, -STORE, 140408498372608, 140408500056063, -STORE, 94543937388544, 94543937499135, -STORE, 94543939592192, 94543939600383, -STORE, 94543939600384, 94543939604479, -STORE, 94543939604480, 94543939612671, -STORE, 94543941447680, 94543941582847, -STORE, 140282621947904, 140282623606783, -STORE, 140282623606784, 140282625703935, -STORE, 140282625703936, 140282625720319, -STORE, 140282625720320, 140282625728511, -STORE, 140282625728512, 140282625744895, -STORE, 140282625744896, 140282625888255, -STORE, 140282627948544, 140282627956735, -STORE, 140282627985408, 140282627989503, -STORE, 140282627989504, 140282627993599, -STORE, 140282627993600, 140282627997695, -STORE, 140728295723008, 140728295862271, -STORE, 140728296476672, 140728296488959, -STORE, 140728296488960, 140728296493055, -STORE, 94431504838656, 94431505051647, -STORE, 94431507148800, 94431507152895, -STORE, 94431507152896, 94431507161087, -STORE, 94431507161088, 94431507173375, -STORE, 94431510286336, 94431510691839, -STORE, 139818797948928, 139818799607807, -STORE, 139818799607808, 139818801704959, -STORE, 139818801704960, 139818801721343, -STORE, 139818801721344, 139818801729535, -STORE, 139818801729536, 139818801745919, -STORE, 139818801745920, 139818801758207, -STORE, 139818801758208, 139818803851263, -STORE, 139818803851264, 139818803855359, -STORE, 139818803855360, 139818803859455, -STORE, 139818803859456, 139818804002815, -STORE, 139818804371456, 139818806054911, -STORE, 139818806054912, 139818806071295, -STORE, 139818806099968, 139818806104063, -STORE, 139818806104064, 139818806108159, -STORE, 139818806108160, 139818806112255, -STORE, 140731430457344, 140731430596607, -STORE, 140731431227392, 140731431239679, -STORE, 140731431239680, 140731431243775, -STORE, 94431504838656, 94431505051647, -STORE, 94431507148800, 94431507152895, -STORE, 94431507152896, 94431507161087, -STORE, 94431507161088, 94431507173375, -STORE, 94431510286336, 94431510691839, -STORE, 139818797948928, 139818799607807, -STORE, 139818799607808, 139818801704959, -STORE, 139818801704960, 139818801721343, -STORE, 139818801721344, 139818801729535, -STORE, 139818801729536, 139818801745919, -STORE, 139818801745920, 139818801758207, -STORE, 139818801758208, 139818803851263, -STORE, 139818803851264, 139818803855359, -STORE, 139818803855360, 139818803859455, -STORE, 139818803859456, 139818804002815, -STORE, 139818804371456, 139818806054911, -STORE, 139818806054912, 139818806071295, -STORE, 139818806099968, 139818806104063, -STORE, 139818806104064, 139818806108159, -STORE, 139818806108160, 139818806112255, -STORE, 140731430457344, 140731430596607, -STORE, 140731431227392, 140731431239679, -STORE, 140731431239680, 140731431243775, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140737488338944, 140737488351231, -STORE, 140736944451584, 140737488351231, -SNULL, 140736944463871, 140737488351231, -STORE, 140736944451584, 140736944463871, -STORE, 140736944320512, 140736944463871, -STORE, 4194304, 26279935, -STORE, 28372992, 28454911, -STORE, 28454912, 29806591, -STORE, 139693609893888, 139693612146687, -SNULL, 139693610037247, 139693612146687, -STORE, 139693609893888, 139693610037247, -STORE, 139693610037248, 139693612146687, -ERASE, 139693610037248, 139693612146687, -STORE, 139693612134400, 139693612142591, -STORE, 139693612142592, 139693612146687, -STORE, 140736945152000, 140736945156095, -STORE, 140736945139712, 140736945151999, -STORE, 139693612105728, 139693612134399, -STORE, 139693612097536, 139693612105727, -STORE, 139693606060032, 139693609893887, -SNULL, 139693606060032, 139693607768063, -STORE, 139693607768064, 139693609893887, -STORE, 139693606060032, 139693607768063, -SNULL, 139693609861119, 139693609893887, -STORE, 139693607768064, 139693609861119, -STORE, 139693609861120, 139693609893887, -ERASE, 139693609861120, 139693609893887, -STORE, 139693609861120, 139693609893887, -STORE, 139693603864576, 139693606060031, -SNULL, 139693603864576, 139693603958783, -STORE, 139693603958784, 139693606060031, -STORE, 139693603864576, 139693603958783, -SNULL, 139693606051839, 139693606060031, -STORE, 139693603958784, 139693606051839, -STORE, 139693606051840, 139693606060031, -ERASE, 139693606051840, 139693606060031, -STORE, 139693606051840, 139693606060031, -STORE, 139693601345536, 139693603864575, -SNULL, 139693601345536, 139693601759231, -STORE, 139693601759232, 139693603864575, -STORE, 139693601345536, 139693601759231, -SNULL, 139693603852287, 139693603864575, -STORE, 139693601759232, 139693603852287, -STORE, 139693603852288, 139693603864575, -ERASE, 139693603852288, 139693603864575, -STORE, 139693603852288, 139693603864575, -STORE, 139693598711808, 139693601345535, -SNULL, 139693598711808, 139693599240191, -STORE, 139693599240192, 139693601345535, -STORE, 139693598711808, 139693599240191, -SNULL, 139693601337343, 139693601345535, -STORE, 139693599240192, 139693601337343, -STORE, 139693601337344, 139693601345535, -ERASE, 139693601337344, 139693601345535, -STORE, 139693601337344, 139693601345535, -STORE, 139693596598272, 139693598711807, -SNULL, 139693596598272, 139693596610559, -STORE, 139693596610560, 139693598711807, -STORE, 139693596598272, 139693596610559, -SNULL, 139693598703615, 139693598711807, -STORE, 139693596610560, 139693598703615, -STORE, 139693598703616, 139693598711807, -ERASE, 139693598703616, 139693598711807, -STORE, 139693598703616, 139693598711807, -STORE, 139693594394624, 139693596598271, -SNULL, 139693594394624, 139693594497023, -STORE, 139693594497024, 139693596598271, -STORE, 139693594394624, 139693594497023, -SNULL, 139693596590079, 139693596598271, -STORE, 139693594497024, 139693596590079, -STORE, 139693596590080, 139693596598271, -ERASE, 139693596590080, 139693596598271, -STORE, 139693596590080, 139693596598271, -STORE, 139693612089344, 139693612105727, -STORE, 139693591232512, 139693594394623, -SNULL, 139693591232512, 139693592293375, -STORE, 139693592293376, 139693594394623, -STORE, 139693591232512, 139693592293375, -SNULL, 139693594386431, 139693594394623, -STORE, 139693592293376, 139693594386431, -STORE, 139693594386432, 139693594394623, -ERASE, 139693594386432, 139693594394623, -STORE, 139693594386432, 139693594394623, -STORE, 139693587435520, 139693591232511, -SNULL, 139693587435520, 139693589094399, -STORE, 139693589094400, 139693591232511, -STORE, 139693587435520, 139693589094399, -SNULL, 139693591191551, 139693591232511, -STORE, 139693589094400, 139693591191551, -STORE, 139693591191552, 139693591232511, -SNULL, 139693591191552, 139693591216127, -STORE, 139693591216128, 139693591232511, -STORE, 139693591191552, 139693591216127, -ERASE, 139693591191552, 139693591216127, -STORE, 139693591191552, 139693591216127, -ERASE, 139693591216128, 139693591232511, -STORE, 139693591216128, 139693591232511, -STORE, 139693612077056, 139693612105727, -SNULL, 139693591207935, 139693591216127, -STORE, 139693591191552, 139693591207935, -STORE, 139693591207936, 139693591216127, -SNULL, 139693594390527, 139693594394623, -STORE, 139693594386432, 139693594390527, -STORE, 139693594390528, 139693594394623, -SNULL, 139693596594175, 139693596598271, -STORE, 139693596590080, 139693596594175, -STORE, 139693596594176, 139693596598271, -SNULL, 139693598707711, 139693598711807, -STORE, 139693598703616, 139693598707711, -STORE, 139693598707712, 139693598711807, -SNULL, 139693601341439, 139693601345535, -STORE, 139693601337344, 139693601341439, -STORE, 139693601341440, 139693601345535, -SNULL, 139693603860479, 139693603864575, -STORE, 139693603852288, 139693603860479, -STORE, 139693603860480, 139693603864575, -SNULL, 139693606055935, 139693606060031, -STORE, 139693606051840, 139693606055935, -STORE, 139693606055936, 139693606060031, -SNULL, 139693609865215, 139693609893887, -STORE, 139693609861120, 139693609865215, -STORE, 139693609865216, 139693609893887, -SNULL, 28405759, 28454911, -STORE, 28372992, 28405759, -STORE, 28405760, 28454911, -SNULL, 139693612138495, 139693612142591, -STORE, 139693612134400, 139693612138495, -STORE, 139693612138496, 139693612142591, -ERASE, 139693612105728, 139693612134399, -STORE, 39976960, 40112127, -STORE, 139693610393600, 139693612077055, -STORE, 139693612130304, 139693612134399, -STORE, 139693610258432, 139693610393599, -STORE, 39976960, 40255487, -STORE, 139693585338368, 139693587435519, -STORE, 139693612122112, 139693612134399, -STORE, 139693612113920, 139693612134399, -STORE, 139693612077056, 139693612113919, -STORE, 139693610242048, 139693610393599, -STORE, 39976960, 40390655, -STORE, 39976960, 40546303, -STORE, 139693610233856, 139693610393599, -STORE, 139693610225664, 139693610393599, -STORE, 39976960, 40714239, -STORE, 139693610209280, 139693610393599, -STORE, 39976960, 40861695, -STORE, 94431504838656, 94431505051647, -STORE, 94431507148800, 94431507152895, -STORE, 94431507152896, 94431507161087, -STORE, 94431507161088, 94431507173375, -STORE, 94431510286336, 94431528759295, -STORE, 139818797948928, 139818799607807, -STORE, 139818799607808, 139818801704959, -STORE, 139818801704960, 139818801721343, -STORE, 139818801721344, 139818801729535, -STORE, 139818801729536, 139818801745919, -STORE, 139818801745920, 139818801758207, -STORE, 139818801758208, 139818803851263, -STORE, 139818803851264, 139818803855359, -STORE, 139818803855360, 139818803859455, -STORE, 139818803859456, 139818804002815, -STORE, 139818804371456, 139818806054911, -STORE, 139818806054912, 139818806071295, -STORE, 139818806099968, 139818806104063, -STORE, 139818806104064, 139818806108159, -STORE, 139818806108160, 139818806112255, -STORE, 140731430457344, 140731430596607, -STORE, 140731431227392, 140731431239679, -STORE, 140731431239680, 140731431243775, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140729993904128, 140737488351231, -SNULL, 140729993912319, 140737488351231, -STORE, 140729993904128, 140729993912319, -STORE, 140729993773056, 140729993912319, -STORE, 93926271991808, 93926274215935, -SNULL, 93926272102399, 93926274215935, -STORE, 93926271991808, 93926272102399, -STORE, 93926272102400, 93926274215935, -ERASE, 93926272102400, 93926274215935, -STORE, 93926274195456, 93926274207743, -STORE, 93926274207744, 93926274215935, -STORE, 139962167296000, 139962169548799, -SNULL, 139962167439359, 139962169548799, -STORE, 139962167296000, 139962167439359, -STORE, 139962167439360, 139962169548799, -ERASE, 139962167439360, 139962169548799, -STORE, 139962169536512, 139962169544703, -STORE, 139962169544704, 139962169548799, -STORE, 140729995096064, 140729995100159, -STORE, 140729995083776, 140729995096063, -STORE, 139962169507840, 139962169536511, -STORE, 139962169499648, 139962169507839, -STORE, 139962163499008, 139962167295999, -SNULL, 139962163499008, 139962165157887, -STORE, 139962165157888, 139962167295999, -STORE, 139962163499008, 139962165157887, -SNULL, 139962167255039, 139962167295999, -STORE, 139962165157888, 139962167255039, -STORE, 139962167255040, 139962167295999, -SNULL, 139962167255040, 139962167279615, -STORE, 139962167279616, 139962167295999, -STORE, 139962167255040, 139962167279615, -ERASE, 139962167255040, 139962167279615, -STORE, 139962167255040, 139962167279615, -ERASE, 139962167279616, 139962167295999, -STORE, 139962167279616, 139962167295999, -SNULL, 139962167271423, 139962167279615, -STORE, 139962167255040, 139962167271423, -STORE, 139962167271424, 139962167279615, -SNULL, 93926274203647, 93926274207743, -STORE, 93926274195456, 93926274203647, -STORE, 93926274203648, 93926274207743, -SNULL, 139962169540607, 139962169544703, -STORE, 139962169536512, 139962169540607, -STORE, 139962169540608, 139962169544703, -ERASE, 139962169507840, 139962169536511, -STORE, 93926291120128, 93926291255295, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140724960579584, 140737488351231, -SNULL, 140724960587775, 140737488351231, -STORE, 140724960579584, 140724960587775, -STORE, 140724960448512, 140724960587775, -STORE, 94246489489408, 94246491713535, -SNULL, 94246489599999, 94246491713535, -STORE, 94246489489408, 94246489599999, -STORE, 94246489600000, 94246491713535, -ERASE, 94246489600000, 94246491713535, -STORE, 94246491693056, 94246491705343, -STORE, 94246491705344, 94246491713535, -STORE, 140098174926848, 140098177179647, -SNULL, 140098175070207, 140098177179647, -STORE, 140098174926848, 140098175070207, -STORE, 140098175070208, 140098177179647, -ERASE, 140098175070208, 140098177179647, -STORE, 140098177167360, 140098177175551, -STORE, 140098177175552, 140098177179647, -STORE, 140724961439744, 140724961443839, -STORE, 140724961427456, 140724961439743, -STORE, 140098177138688, 140098177167359, -STORE, 140098177130496, 140098177138687, -STORE, 140098171129856, 140098174926847, -SNULL, 140098171129856, 140098172788735, -STORE, 140098172788736, 140098174926847, -STORE, 140098171129856, 140098172788735, -SNULL, 140098174885887, 140098174926847, -STORE, 140098172788736, 140098174885887, -STORE, 140098174885888, 140098174926847, -SNULL, 140098174885888, 140098174910463, -STORE, 140098174910464, 140098174926847, -STORE, 140098174885888, 140098174910463, -ERASE, 140098174885888, 140098174910463, -STORE, 140098174885888, 140098174910463, -ERASE, 140098174910464, 140098174926847, -STORE, 140098174910464, 140098174926847, -SNULL, 140098174902271, 140098174910463, -STORE, 140098174885888, 140098174902271, -STORE, 140098174902272, 140098174910463, -SNULL, 94246491701247, 94246491705343, -STORE, 94246491693056, 94246491701247, -STORE, 94246491701248, 94246491705343, -SNULL, 140098177171455, 140098177175551, -STORE, 140098177167360, 140098177171455, -STORE, 140098177171456, 140098177175551, -ERASE, 140098177138688, 140098177167359, -STORE, 94246516998144, 94246517133311, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140730522918912, 140737488351231, -SNULL, 140730522927103, 140737488351231, -STORE, 140730522918912, 140730522927103, -STORE, 140730522787840, 140730522927103, -STORE, 94196043120640, 94196045344767, -SNULL, 94196043231231, 94196045344767, -STORE, 94196043120640, 94196043231231, -STORE, 94196043231232, 94196045344767, -ERASE, 94196043231232, 94196045344767, -STORE, 94196045324288, 94196045336575, -STORE, 94196045336576, 94196045344767, -STORE, 139815918940160, 139815921192959, -SNULL, 139815919083519, 139815921192959, -STORE, 139815918940160, 139815919083519, -STORE, 139815919083520, 139815921192959, -ERASE, 139815919083520, 139815921192959, -STORE, 139815921180672, 139815921188863, -STORE, 139815921188864, 139815921192959, -STORE, 140730523344896, 140730523348991, -STORE, 140730523332608, 140730523344895, -STORE, 139815921152000, 139815921180671, -STORE, 139815921143808, 139815921151999, -STORE, 139815915143168, 139815918940159, -SNULL, 139815915143168, 139815916802047, -STORE, 139815916802048, 139815918940159, -STORE, 139815915143168, 139815916802047, -SNULL, 139815918899199, 139815918940159, -STORE, 139815916802048, 139815918899199, -STORE, 139815918899200, 139815918940159, -SNULL, 139815918899200, 139815918923775, -STORE, 139815918923776, 139815918940159, -STORE, 139815918899200, 139815918923775, -ERASE, 139815918899200, 139815918923775, -STORE, 139815918899200, 139815918923775, -ERASE, 139815918923776, 139815918940159, -STORE, 139815918923776, 139815918940159, -SNULL, 139815918915583, 139815918923775, -STORE, 139815918899200, 139815918915583, -STORE, 139815918915584, 139815918923775, -SNULL, 94196045332479, 94196045336575, -STORE, 94196045324288, 94196045332479, -STORE, 94196045332480, 94196045336575, -SNULL, 139815921184767, 139815921188863, -STORE, 139815921180672, 139815921184767, -STORE, 139815921184768, 139815921188863, -ERASE, 139815921152000, 139815921180671, -STORE, 94196076183552, 94196076318719, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140722460393472, 140737488351231, -SNULL, 140722460401663, 140737488351231, -STORE, 140722460393472, 140722460401663, -STORE, 140722460262400, 140722460401663, -STORE, 94569810399232, 94569812623359, -SNULL, 94569810509823, 94569812623359, -STORE, 94569810399232, 94569810509823, -STORE, 94569810509824, 94569812623359, -ERASE, 94569810509824, 94569812623359, -STORE, 94569812602880, 94569812615167, -STORE, 94569812615168, 94569812623359, -STORE, 139681565450240, 139681567703039, -SNULL, 139681565593599, 139681567703039, -STORE, 139681565450240, 139681565593599, -STORE, 139681565593600, 139681567703039, -ERASE, 139681565593600, 139681567703039, -STORE, 139681567690752, 139681567698943, -STORE, 139681567698944, 139681567703039, -STORE, 140722460569600, 140722460573695, -STORE, 140722460557312, 140722460569599, -STORE, 139681567662080, 139681567690751, -STORE, 139681567653888, 139681567662079, -STORE, 139681561653248, 139681565450239, -SNULL, 139681561653248, 139681563312127, -STORE, 139681563312128, 139681565450239, -STORE, 139681561653248, 139681563312127, -SNULL, 139681565409279, 139681565450239, -STORE, 139681563312128, 139681565409279, -STORE, 139681565409280, 139681565450239, -SNULL, 139681565409280, 139681565433855, -STORE, 139681565433856, 139681565450239, -STORE, 139681565409280, 139681565433855, -ERASE, 139681565409280, 139681565433855, -STORE, 139681565409280, 139681565433855, -ERASE, 139681565433856, 139681565450239, -STORE, 139681565433856, 139681565450239, -SNULL, 139681565425663, 139681565433855, -STORE, 139681565409280, 139681565425663, -STORE, 139681565425664, 139681565433855, -SNULL, 94569812611071, 94569812615167, -STORE, 94569812602880, 94569812611071, -STORE, 94569812611072, 94569812615167, -SNULL, 139681567694847, 139681567698943, -STORE, 139681567690752, 139681567694847, -STORE, 139681567694848, 139681567698943, -ERASE, 139681567662080, 139681567690751, -STORE, 94569818066944, 94569818202111, -STORE, 94431504838656, 94431505051647, -STORE, 94431507148800, 94431507152895, -STORE, 94431507152896, 94431507161087, -STORE, 94431507161088, 94431507173375, -STORE, 94431510286336, 94431534280703, -STORE, 139818797948928, 139818799607807, -STORE, 139818799607808, 139818801704959, -STORE, 139818801704960, 139818801721343, -STORE, 139818801721344, 139818801729535, -STORE, 139818801729536, 139818801745919, -STORE, 139818801745920, 139818801758207, -STORE, 139818801758208, 139818803851263, -STORE, 139818803851264, 139818803855359, -STORE, 139818803855360, 139818803859455, -STORE, 139818803859456, 139818804002815, -STORE, 139818804371456, 139818806054911, -STORE, 139818806054912, 139818806071295, -STORE, 139818806099968, 139818806104063, -STORE, 139818806104064, 139818806108159, -STORE, 139818806108160, 139818806112255, -STORE, 140731430457344, 140731430596607, -STORE, 140731431227392, 140731431239679, -STORE, 140731431239680, 140731431243775, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140725452365824, 140737488351231, -SNULL, 140725452374015, 140737488351231, -STORE, 140725452365824, 140725452374015, -STORE, 140725452234752, 140725452374015, -STORE, 94395067465728, 94395069689855, -SNULL, 94395067576319, 94395069689855, -STORE, 94395067465728, 94395067576319, -STORE, 94395067576320, 94395069689855, -ERASE, 94395067576320, 94395069689855, -STORE, 94395069669376, 94395069681663, -STORE, 94395069681664, 94395069689855, -STORE, 140269941211136, 140269943463935, -SNULL, 140269941354495, 140269943463935, -STORE, 140269941211136, 140269941354495, -STORE, 140269941354496, 140269943463935, -ERASE, 140269941354496, 140269943463935, -STORE, 140269943451648, 140269943459839, -STORE, 140269943459840, 140269943463935, -STORE, 140725452558336, 140725452562431, -STORE, 140725452546048, 140725452558335, -STORE, 140269943422976, 140269943451647, -STORE, 140269943414784, 140269943422975, -STORE, 140269937414144, 140269941211135, -SNULL, 140269937414144, 140269939073023, -STORE, 140269939073024, 140269941211135, -STORE, 140269937414144, 140269939073023, -SNULL, 140269941170175, 140269941211135, -STORE, 140269939073024, 140269941170175, -STORE, 140269941170176, 140269941211135, -SNULL, 140269941170176, 140269941194751, -STORE, 140269941194752, 140269941211135, -STORE, 140269941170176, 140269941194751, -ERASE, 140269941170176, 140269941194751, -STORE, 140269941170176, 140269941194751, -ERASE, 140269941194752, 140269941211135, -STORE, 140269941194752, 140269941211135, -SNULL, 140269941186559, 140269941194751, -STORE, 140269941170176, 140269941186559, -STORE, 140269941186560, 140269941194751, -SNULL, 94395069677567, 94395069681663, -STORE, 94395069669376, 94395069677567, -STORE, 94395069677568, 94395069681663, -SNULL, 140269943455743, 140269943459839, -STORE, 140269943451648, 140269943455743, -STORE, 140269943455744, 140269943459839, -ERASE, 140269943422976, 140269943451647, -STORE, 94395101691904, 94395101827071, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140733860118528, 140737488351231, -SNULL, 140733860126719, 140737488351231, -STORE, 140733860118528, 140733860126719, -STORE, 140733859987456, 140733860126719, -STORE, 94484752990208, 94484755214335, -SNULL, 94484753100799, 94484755214335, -STORE, 94484752990208, 94484753100799, -STORE, 94484753100800, 94484755214335, -ERASE, 94484753100800, 94484755214335, -STORE, 94484755193856, 94484755206143, -STORE, 94484755206144, 94484755214335, -STORE, 139958922309632, 139958924562431, -SNULL, 139958922452991, 139958924562431, -STORE, 139958922309632, 139958922452991, -STORE, 139958922452992, 139958924562431, -ERASE, 139958922452992, 139958924562431, -STORE, 139958924550144, 139958924558335, -STORE, 139958924558336, 139958924562431, -STORE, 140733860253696, 140733860257791, -STORE, 140733860241408, 140733860253695, -STORE, 139958924521472, 139958924550143, -STORE, 139958924513280, 139958924521471, -STORE, 139958918512640, 139958922309631, -SNULL, 139958918512640, 139958920171519, -STORE, 139958920171520, 139958922309631, -STORE, 139958918512640, 139958920171519, -SNULL, 139958922268671, 139958922309631, -STORE, 139958920171520, 139958922268671, -STORE, 139958922268672, 139958922309631, -SNULL, 139958922268672, 139958922293247, -STORE, 139958922293248, 139958922309631, -STORE, 139958922268672, 139958922293247, -ERASE, 139958922268672, 139958922293247, -STORE, 139958922268672, 139958922293247, -ERASE, 139958922293248, 139958922309631, -STORE, 139958922293248, 139958922309631, -SNULL, 139958922285055, 139958922293247, -STORE, 139958922268672, 139958922285055, -STORE, 139958922285056, 139958922293247, -SNULL, 94484755202047, 94484755206143, -STORE, 94484755193856, 94484755202047, -STORE, 94484755202048, 94484755206143, -SNULL, 139958924554239, 139958924558335, -STORE, 139958924550144, 139958924554239, -STORE, 139958924554240, 139958924558335, -ERASE, 139958924521472, 139958924550143, -STORE, 94484777615360, 94484777750527, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140731051036672, 140737488351231, -SNULL, 140731051044863, 140737488351231, -STORE, 140731051036672, 140731051044863, -STORE, 140731050905600, 140731051044863, -STORE, 93945822998528, 93945825222655, -SNULL, 93945823109119, 93945825222655, -STORE, 93945822998528, 93945823109119, -STORE, 93945823109120, 93945825222655, -ERASE, 93945823109120, 93945825222655, -STORE, 93945825202176, 93945825214463, -STORE, 93945825214464, 93945825222655, -STORE, 140153503997952, 140153506250751, -SNULL, 140153504141311, 140153506250751, -STORE, 140153503997952, 140153504141311, -STORE, 140153504141312, 140153506250751, -ERASE, 140153504141312, 140153506250751, -STORE, 140153506238464, 140153506246655, -STORE, 140153506246656, 140153506250751, -STORE, 140731051331584, 140731051335679, -STORE, 140731051319296, 140731051331583, -STORE, 140153506209792, 140153506238463, -STORE, 140153506201600, 140153506209791, -STORE, 140153500200960, 140153503997951, -SNULL, 140153500200960, 140153501859839, -STORE, 140153501859840, 140153503997951, -STORE, 140153500200960, 140153501859839, -SNULL, 140153503956991, 140153503997951, -STORE, 140153501859840, 140153503956991, -STORE, 140153503956992, 140153503997951, -SNULL, 140153503956992, 140153503981567, -STORE, 140153503981568, 140153503997951, -STORE, 140153503956992, 140153503981567, -ERASE, 140153503956992, 140153503981567, -STORE, 140153503956992, 140153503981567, -ERASE, 140153503981568, 140153503997951, -STORE, 140153503981568, 140153503997951, -SNULL, 140153503973375, 140153503981567, -STORE, 140153503956992, 140153503973375, -STORE, 140153503973376, 140153503981567, -SNULL, 93945825210367, 93945825214463, -STORE, 93945825202176, 93945825210367, -STORE, 93945825210368, 93945825214463, -SNULL, 140153506242559, 140153506246655, -STORE, 140153506238464, 140153506242559, -STORE, 140153506242560, 140153506246655, -ERASE, 140153506209792, 140153506238463, -STORE, 93945854537728, 93945854672895, -STORE, 94431504838656, 94431505051647, -STORE, 94431507148800, 94431507152895, -STORE, 94431507152896, 94431507161087, -STORE, 94431507161088, 94431507173375, -STORE, 94431510286336, 94431537885183, -STORE, 139818797948928, 139818799607807, -STORE, 139818799607808, 139818801704959, -STORE, 139818801704960, 139818801721343, -STORE, 139818801721344, 139818801729535, -STORE, 139818801729536, 139818801745919, -STORE, 139818801745920, 139818801758207, -STORE, 139818801758208, 139818803851263, -STORE, 139818803851264, 139818803855359, -STORE, 139818803855360, 139818803859455, -STORE, 139818803859456, 139818804002815, -STORE, 139818804371456, 139818806054911, -STORE, 139818806054912, 139818806071295, -STORE, 139818806099968, 139818806104063, -STORE, 139818806104064, 139818806108159, -STORE, 139818806108160, 139818806112255, -STORE, 140731430457344, 140731430596607, -STORE, 140731431227392, 140731431239679, -STORE, 140731431239680, 140731431243775, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140736025325568, 140737488351231, -SNULL, 140736025333759, 140737488351231, -STORE, 140736025325568, 140736025333759, -STORE, 140736025194496, 140736025333759, -STORE, 94809095172096, 94809097396223, -SNULL, 94809095282687, 94809097396223, -STORE, 94809095172096, 94809095282687, -STORE, 94809095282688, 94809097396223, -ERASE, 94809095282688, 94809097396223, -STORE, 94809097375744, 94809097388031, -STORE, 94809097388032, 94809097396223, -STORE, 140194992517120, 140194994769919, -SNULL, 140194992660479, 140194994769919, -STORE, 140194992517120, 140194992660479, -STORE, 140194992660480, 140194994769919, -ERASE, 140194992660480, 140194994769919, -STORE, 140194994757632, 140194994765823, -STORE, 140194994765824, 140194994769919, -STORE, 140736026173440, 140736026177535, -STORE, 140736026161152, 140736026173439, -STORE, 140194994728960, 140194994757631, -STORE, 140194994720768, 140194994728959, -STORE, 140194988720128, 140194992517119, -SNULL, 140194988720128, 140194990379007, -STORE, 140194990379008, 140194992517119, -STORE, 140194988720128, 140194990379007, -SNULL, 140194992476159, 140194992517119, -STORE, 140194990379008, 140194992476159, -STORE, 140194992476160, 140194992517119, -SNULL, 140194992476160, 140194992500735, -STORE, 140194992500736, 140194992517119, -STORE, 140194992476160, 140194992500735, -ERASE, 140194992476160, 140194992500735, -STORE, 140194992476160, 140194992500735, -ERASE, 140194992500736, 140194992517119, -STORE, 140194992500736, 140194992517119, -SNULL, 140194992492543, 140194992500735, -STORE, 140194992476160, 140194992492543, -STORE, 140194992492544, 140194992500735, -SNULL, 94809097383935, 94809097388031, -STORE, 94809097375744, 94809097383935, -STORE, 94809097383936, 94809097388031, -SNULL, 140194994761727, 140194994765823, -STORE, 140194994757632, 140194994761727, -STORE, 140194994761728, 140194994765823, -ERASE, 140194994728960, 140194994757631, -STORE, 94809124286464, 94809124421631, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140726342660096, 140737488351231, -SNULL, 140726342668287, 140737488351231, -STORE, 140726342660096, 140726342668287, -STORE, 140726342529024, 140726342668287, -STORE, 94140331462656, 94140333686783, -SNULL, 94140331573247, 94140333686783, -STORE, 94140331462656, 94140331573247, -STORE, 94140331573248, 94140333686783, -ERASE, 94140331573248, 94140333686783, -STORE, 94140333666304, 94140333678591, -STORE, 94140333678592, 94140333686783, -STORE, 140714077208576, 140714079461375, -SNULL, 140714077351935, 140714079461375, -STORE, 140714077208576, 140714077351935, -STORE, 140714077351936, 140714079461375, -ERASE, 140714077351936, 140714079461375, -STORE, 140714079449088, 140714079457279, -STORE, 140714079457280, 140714079461375, -STORE, 140726343933952, 140726343938047, -STORE, 140726343921664, 140726343933951, -STORE, 140714079420416, 140714079449087, -STORE, 140714079412224, 140714079420415, -STORE, 140714073411584, 140714077208575, -SNULL, 140714073411584, 140714075070463, -STORE, 140714075070464, 140714077208575, -STORE, 140714073411584, 140714075070463, -SNULL, 140714077167615, 140714077208575, -STORE, 140714075070464, 140714077167615, -STORE, 140714077167616, 140714077208575, -SNULL, 140714077167616, 140714077192191, -STORE, 140714077192192, 140714077208575, -STORE, 140714077167616, 140714077192191, -ERASE, 140714077167616, 140714077192191, -STORE, 140714077167616, 140714077192191, -ERASE, 140714077192192, 140714077208575, -STORE, 140714077192192, 140714077208575, -SNULL, 140714077183999, 140714077192191, -STORE, 140714077167616, 140714077183999, -STORE, 140714077184000, 140714077192191, -SNULL, 94140333674495, 94140333678591, -STORE, 94140333666304, 94140333674495, -STORE, 94140333674496, 94140333678591, -SNULL, 140714079453183, 140714079457279, -STORE, 140714079449088, 140714079453183, -STORE, 140714079453184, 140714079457279, -ERASE, 140714079420416, 140714079449087, -STORE, 94140341432320, 94140341567487, -STORE, 94431504838656, 94431505051647, -STORE, 94431507148800, 94431507152895, -STORE, 94431507152896, 94431507161087, -STORE, 94431507161088, 94431507173375, -STORE, 94431510286336, 94431539601407, -STORE, 139818797948928, 139818799607807, -STORE, 139818799607808, 139818801704959, -STORE, 139818801704960, 139818801721343, -STORE, 139818801721344, 139818801729535, -STORE, 139818801729536, 139818801745919, -STORE, 139818801745920, 139818801758207, -STORE, 139818801758208, 139818803851263, -STORE, 139818803851264, 139818803855359, -STORE, 139818803855360, 139818803859455, -STORE, 139818803859456, 139818804002815, -STORE, 139818804371456, 139818806054911, -STORE, 139818806054912, 139818806071295, -STORE, 139818806099968, 139818806104063, -STORE, 139818806104064, 139818806108159, -STORE, 139818806108160, 139818806112255, -STORE, 140731430457344, 140731430596607, -STORE, 140731431227392, 140731431239679, -STORE, 140731431239680, 140731431243775, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140725843607552, 140737488351231, -SNULL, 140725843615743, 140737488351231, -STORE, 140725843607552, 140725843615743, -STORE, 140725843476480, 140725843615743, -STORE, 94889043505152, 94889045839871, -SNULL, 94889043718143, 94889045839871, -STORE, 94889043505152, 94889043718143, -STORE, 94889043718144, 94889045839871, -ERASE, 94889043718144, 94889045839871, -STORE, 94889045815296, 94889045827583, -STORE, 94889045827584, 94889045839871, -STORE, 140250965946368, 140250968199167, -SNULL, 140250966089727, 140250968199167, -STORE, 140250965946368, 140250966089727, -STORE, 140250966089728, 140250968199167, -ERASE, 140250966089728, 140250968199167, -STORE, 140250968186880, 140250968195071, -STORE, 140250968195072, 140250968199167, -STORE, 140725844500480, 140725844504575, -STORE, 140725844488192, 140725844500479, -STORE, 140250968158208, 140250968186879, -STORE, 140250968150016, 140250968158207, -STORE, 140250963832832, 140250965946367, -SNULL, 140250963832832, 140250963845119, -STORE, 140250963845120, 140250965946367, -STORE, 140250963832832, 140250963845119, -SNULL, 140250965938175, 140250965946367, -STORE, 140250963845120, 140250965938175, -STORE, 140250965938176, 140250965946367, -ERASE, 140250965938176, 140250965946367, -STORE, 140250965938176, 140250965946367, -STORE, 140250960035840, 140250963832831, -SNULL, 140250960035840, 140250961694719, -STORE, 140250961694720, 140250963832831, -STORE, 140250960035840, 140250961694719, -SNULL, 140250963791871, 140250963832831, -STORE, 140250961694720, 140250963791871, -STORE, 140250963791872, 140250963832831, -SNULL, 140250963791872, 140250963816447, -STORE, 140250963816448, 140250963832831, -STORE, 140250963791872, 140250963816447, -ERASE, 140250963791872, 140250963816447, -STORE, 140250963791872, 140250963816447, -ERASE, 140250963816448, 140250963832831, -STORE, 140250963816448, 140250963832831, -STORE, 140250968141824, 140250968158207, -SNULL, 140250963808255, 140250963816447, -STORE, 140250963791872, 140250963808255, -STORE, 140250963808256, 140250963816447, -SNULL, 140250965942271, 140250965946367, -STORE, 140250965938176, 140250965942271, -STORE, 140250965942272, 140250965946367, -SNULL, 94889045819391, 94889045827583, -STORE, 94889045815296, 94889045819391, -STORE, 94889045819392, 94889045827583, -SNULL, 140250968190975, 140250968195071, -STORE, 140250968186880, 140250968190975, -STORE, 140250968190976, 140250968195071, -ERASE, 140250968158208, 140250968186879, -STORE, 94889052213248, 94889052348415, -STORE, 140250966458368, 140250968141823, -STORE, 94889052213248, 94889052483583, -STORE, 94889052213248, 94889052618751, -STORE, 94170851819520, 94170852032511, -STORE, 94170854129664, 94170854133759, -STORE, 94170854133760, 94170854141951, -STORE, 94170854141952, 94170854154239, -STORE, 94170866515968, 94170867740671, -STORE, 140062030422016, 140062032080895, -STORE, 140062032080896, 140062034178047, -STORE, 140062034178048, 140062034194431, -STORE, 140062034194432, 140062034202623, -STORE, 140062034202624, 140062034219007, -STORE, 140062034219008, 140062034231295, -STORE, 140062034231296, 140062036324351, -STORE, 140062036324352, 140062036328447, -STORE, 140062036328448, 140062036332543, -STORE, 140062036332544, 140062036475903, -STORE, 140062036844544, 140062038527999, -STORE, 140062038528000, 140062038544383, -STORE, 140062038573056, 140062038577151, -STORE, 140062038577152, 140062038581247, -STORE, 140062038581248, 140062038585343, -STORE, 140736210550784, 140736210690047, -STORE, 140736210759680, 140736210771967, -STORE, 140736210771968, 140736210776063, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140724272365568, 140737488351231, -SNULL, 140724272373759, 140737488351231, -STORE, 140724272365568, 140724272373759, -STORE, 140724272234496, 140724272373759, -STORE, 94607711965184, 94607714189311, -SNULL, 94607712075775, 94607714189311, -STORE, 94607711965184, 94607712075775, -STORE, 94607712075776, 94607714189311, -ERASE, 94607712075776, 94607714189311, -STORE, 94607714168832, 94607714181119, -STORE, 94607714181120, 94607714189311, -STORE, 140054949253120, 140054951505919, -SNULL, 140054949396479, 140054951505919, -STORE, 140054949253120, 140054949396479, -STORE, 140054949396480, 140054951505919, -ERASE, 140054949396480, 140054951505919, -STORE, 140054951493632, 140054951501823, -STORE, 140054951501824, 140054951505919, -STORE, 140724272992256, 140724272996351, -STORE, 140724272979968, 140724272992255, -STORE, 140054951464960, 140054951493631, -STORE, 140054951456768, 140054951464959, -STORE, 140054945456128, 140054949253119, -SNULL, 140054945456128, 140054947115007, -STORE, 140054947115008, 140054949253119, -STORE, 140054945456128, 140054947115007, -SNULL, 140054949212159, 140054949253119, -STORE, 140054947115008, 140054949212159, -STORE, 140054949212160, 140054949253119, -SNULL, 140054949212160, 140054949236735, -STORE, 140054949236736, 140054949253119, -STORE, 140054949212160, 140054949236735, -ERASE, 140054949212160, 140054949236735, -STORE, 140054949212160, 140054949236735, -ERASE, 140054949236736, 140054949253119, -STORE, 140054949236736, 140054949253119, -SNULL, 140054949228543, 140054949236735, -STORE, 140054949212160, 140054949228543, -STORE, 140054949228544, 140054949236735, -SNULL, 94607714177023, 94607714181119, -STORE, 94607714168832, 94607714177023, -STORE, 94607714177024, 94607714181119, -SNULL, 140054951497727, 140054951501823, -STORE, 140054951493632, 140054951497727, -STORE, 140054951497728, 140054951501823, -ERASE, 140054951464960, 140054951493631, -STORE, 94607733374976, 94607733510143, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140733586923520, 140737488351231, -SNULL, 140733586931711, 140737488351231, -STORE, 140733586923520, 140733586931711, -STORE, 140733586792448, 140733586931711, -STORE, 93901634904064, 93901637128191, -SNULL, 93901635014655, 93901637128191, -STORE, 93901634904064, 93901635014655, -STORE, 93901635014656, 93901637128191, -ERASE, 93901635014656, 93901637128191, -STORE, 93901637107712, 93901637119999, -STORE, 93901637120000, 93901637128191, -STORE, 140086104784896, 140086107037695, -SNULL, 140086104928255, 140086107037695, -STORE, 140086104784896, 140086104928255, -STORE, 140086104928256, 140086107037695, -ERASE, 140086104928256, 140086107037695, -STORE, 140086107025408, 140086107033599, -STORE, 140086107033600, 140086107037695, -STORE, 140733587263488, 140733587267583, -STORE, 140733587251200, 140733587263487, -STORE, 140086106996736, 140086107025407, -STORE, 140086106988544, 140086106996735, -STORE, 140086100987904, 140086104784895, -SNULL, 140086100987904, 140086102646783, -STORE, 140086102646784, 140086104784895, -STORE, 140086100987904, 140086102646783, -SNULL, 140086104743935, 140086104784895, -STORE, 140086102646784, 140086104743935, -STORE, 140086104743936, 140086104784895, -SNULL, 140086104743936, 140086104768511, -STORE, 140086104768512, 140086104784895, -STORE, 140086104743936, 140086104768511, -ERASE, 140086104743936, 140086104768511, -STORE, 140086104743936, 140086104768511, -ERASE, 140086104768512, 140086104784895, -STORE, 140086104768512, 140086104784895, -SNULL, 140086104760319, 140086104768511, -STORE, 140086104743936, 140086104760319, -STORE, 140086104760320, 140086104768511, -SNULL, 93901637115903, 93901637119999, -STORE, 93901637107712, 93901637115903, -STORE, 93901637115904, 93901637119999, -SNULL, 140086107029503, 140086107033599, -STORE, 140086107025408, 140086107029503, -STORE, 140086107029504, 140086107033599, -ERASE, 140086106996736, 140086107025407, -STORE, 93901662715904, 93901662851071, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140723365613568, 140737488351231, -SNULL, 140723365621759, 140737488351231, -STORE, 140723365613568, 140723365621759, -STORE, 140723365482496, 140723365621759, -STORE, 94759193546752, 94759195770879, -SNULL, 94759193657343, 94759195770879, -STORE, 94759193546752, 94759193657343, -STORE, 94759193657344, 94759195770879, -ERASE, 94759193657344, 94759195770879, -STORE, 94759195750400, 94759195762687, -STORE, 94759195762688, 94759195770879, -STORE, 140607636246528, 140607638499327, -SNULL, 140607636389887, 140607638499327, -STORE, 140607636246528, 140607636389887, -STORE, 140607636389888, 140607638499327, -ERASE, 140607636389888, 140607638499327, -STORE, 140607638487040, 140607638495231, -STORE, 140607638495232, 140607638499327, -STORE, 140723365900288, 140723365904383, -STORE, 140723365888000, 140723365900287, -STORE, 140607638458368, 140607638487039, -STORE, 140607638450176, 140607638458367, -STORE, 140607632449536, 140607636246527, -SNULL, 140607632449536, 140607634108415, -STORE, 140607634108416, 140607636246527, -STORE, 140607632449536, 140607634108415, -SNULL, 140607636205567, 140607636246527, -STORE, 140607634108416, 140607636205567, -STORE, 140607636205568, 140607636246527, -SNULL, 140607636205568, 140607636230143, -STORE, 140607636230144, 140607636246527, -STORE, 140607636205568, 140607636230143, -ERASE, 140607636205568, 140607636230143, -STORE, 140607636205568, 140607636230143, -ERASE, 140607636230144, 140607636246527, -STORE, 140607636230144, 140607636246527, -SNULL, 140607636221951, 140607636230143, -STORE, 140607636205568, 140607636221951, -STORE, 140607636221952, 140607636230143, -SNULL, 94759195758591, 94759195762687, -STORE, 94759195750400, 94759195758591, -STORE, 94759195758592, 94759195762687, -SNULL, 140607638491135, 140607638495231, -STORE, 140607638487040, 140607638491135, -STORE, 140607638491136, 140607638495231, -ERASE, 140607638458368, 140607638487039, -STORE, 94759204995072, 94759205130239, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140732503789568, 140737488351231, -SNULL, 140732503797759, 140737488351231, -STORE, 140732503789568, 140732503797759, -STORE, 140732503658496, 140732503797759, -STORE, 94077792956416, 94077795180543, -SNULL, 94077793067007, 94077795180543, -STORE, 94077792956416, 94077793067007, -STORE, 94077793067008, 94077795180543, -ERASE, 94077793067008, 94077795180543, -STORE, 94077795160064, 94077795172351, -STORE, 94077795172352, 94077795180543, -STORE, 140359874252800, 140359876505599, -SNULL, 140359874396159, 140359876505599, -STORE, 140359874252800, 140359874396159, -STORE, 140359874396160, 140359876505599, -ERASE, 140359874396160, 140359876505599, -STORE, 140359876493312, 140359876501503, -STORE, 140359876501504, 140359876505599, -STORE, 140732504465408, 140732504469503, -STORE, 140732504453120, 140732504465407, -STORE, 140359876464640, 140359876493311, -STORE, 140359876456448, 140359876464639, -STORE, 140359870455808, 140359874252799, -SNULL, 140359870455808, 140359872114687, -STORE, 140359872114688, 140359874252799, -STORE, 140359870455808, 140359872114687, -SNULL, 140359874211839, 140359874252799, -STORE, 140359872114688, 140359874211839, -STORE, 140359874211840, 140359874252799, -SNULL, 140359874211840, 140359874236415, -STORE, 140359874236416, 140359874252799, -STORE, 140359874211840, 140359874236415, -ERASE, 140359874211840, 140359874236415, -STORE, 140359874211840, 140359874236415, -ERASE, 140359874236416, 140359874252799, -STORE, 140359874236416, 140359874252799, -SNULL, 140359874228223, 140359874236415, -STORE, 140359874211840, 140359874228223, -STORE, 140359874228224, 140359874236415, -SNULL, 94077795168255, 94077795172351, -STORE, 94077795160064, 94077795168255, -STORE, 94077795168256, 94077795172351, -SNULL, 140359876497407, 140359876501503, -STORE, 140359876493312, 140359876497407, -STORE, 140359876497408, 140359876501503, -ERASE, 140359876464640, 140359876493311, -STORE, 94077808717824, 94077808852991, -STORE, 94549486252032, 94549486465023, -STORE, 94549488562176, 94549488566271, -STORE, 94549488566272, 94549488574463, -STORE, 94549488574464, 94549488586751, -STORE, 94549503492096, 94549506121727, -STORE, 140085800894464, 140085802553343, -STORE, 140085802553344, 140085804650495, -STORE, 140085804650496, 140085804666879, -STORE, 140085804666880, 140085804675071, -STORE, 140085804675072, 140085804691455, -STORE, 140085804691456, 140085804703743, -STORE, 140085804703744, 140085806796799, -STORE, 140085806796800, 140085806800895, -STORE, 140085806800896, 140085806804991, -STORE, 140085806804992, 140085806948351, -STORE, 140085807316992, 140085809000447, -STORE, 140085809000448, 140085809016831, -STORE, 140085809045504, 140085809049599, -STORE, 140085809049600, 140085809053695, -STORE, 140085809053696, 140085809057791, -STORE, 140731810545664, 140731810684927, -STORE, 140731810967552, 140731810979839, -STORE, 140731810979840, 140731810983935, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140724752330752, 140737488351231, -SNULL, 140724752338943, 140737488351231, -STORE, 140724752330752, 140724752338943, -STORE, 140724752199680, 140724752338943, -STORE, 94656357539840, 94656359874559, -SNULL, 94656357752831, 94656359874559, -STORE, 94656357539840, 94656357752831, -STORE, 94656357752832, 94656359874559, -ERASE, 94656357752832, 94656359874559, -STORE, 94656359849984, 94656359862271, -STORE, 94656359862272, 94656359874559, -STORE, 139632585203712, 139632587456511, -SNULL, 139632585347071, 139632587456511, -STORE, 139632585203712, 139632585347071, -STORE, 139632585347072, 139632587456511, -ERASE, 139632585347072, 139632587456511, -STORE, 139632587444224, 139632587452415, -STORE, 139632587452416, 139632587456511, -STORE, 139632587440128, 139632587444223, -STORE, 139632587427840, 139632587440127, -STORE, 139632587399168, 139632587427839, -STORE, 139632587390976, 139632587399167, -STORE, 139632583090176, 139632585203711, -SNULL, 139632583090176, 139632583102463, -STORE, 139632583102464, 139632585203711, -STORE, 139632583090176, 139632583102463, -SNULL, 139632585195519, 139632585203711, -STORE, 139632583102464, 139632585195519, -STORE, 139632585195520, 139632585203711, -ERASE, 139632585195520, 139632585203711, -STORE, 139632585195520, 139632585203711, -STORE, 139632579293184, 139632583090175, -SNULL, 139632579293184, 139632580952063, -STORE, 139632580952064, 139632583090175, -STORE, 139632579293184, 139632580952063, -SNULL, 139632583049215, 139632583090175, -STORE, 139632580952064, 139632583049215, -STORE, 139632583049216, 139632583090175, -SNULL, 139632583049216, 139632583073791, -STORE, 139632583073792, 139632583090175, -STORE, 139632583049216, 139632583073791, -ERASE, 139632583049216, 139632583073791, -STORE, 139632583049216, 139632583073791, -ERASE, 139632583073792, 139632583090175, -STORE, 139632583073792, 139632583090175, -STORE, 139632587382784, 139632587399167, -SNULL, 139632583065599, 139632583073791, -STORE, 139632583049216, 139632583065599, -STORE, 139632583065600, 139632583073791, -SNULL, 139632585199615, 139632585203711, -STORE, 139632585195520, 139632585199615, -STORE, 139632585199616, 139632585203711, -SNULL, 94656359854079, 94656359862271, -STORE, 94656359849984, 94656359854079, -STORE, 94656359854080, 94656359862271, -SNULL, 139632587448319, 139632587452415, -STORE, 139632587444224, 139632587448319, -STORE, 139632587448320, 139632587452415, -ERASE, 139632587399168, 139632587427839, -STORE, 94656378912768, 94656379047935, -STORE, 139632585699328, 139632587382783, -STORE, 94656378912768, 94656379183103, -STORE, 94656378912768, 94656379318271, -STORE, 94656378912768, 94656379494399, -SNULL, 94656379469823, 94656379494399, -STORE, 94656378912768, 94656379469823, -STORE, 94656379469824, 94656379494399, -ERASE, 94656379469824, 94656379494399, -STORE, 94656378912768, 94656379621375, -STORE, 94656378912768, 94656379756543, -STORE, 94656378912768, 94656379912191, -STORE, 94656378912768, 94656380055551, -STORE, 94656378912768, 94656380190719, -STORE, 94656378912768, 94656380338175, -SNULL, 94656380313599, 94656380338175, -STORE, 94656378912768, 94656380313599, -STORE, 94656380313600, 94656380338175, -ERASE, 94656380313600, 94656380338175, -STORE, 94656378912768, 94656380448767, -SNULL, 94656380432383, 94656380448767, -STORE, 94656378912768, 94656380432383, -STORE, 94656380432384, 94656380448767, -ERASE, 94656380432384, 94656380448767, -STORE, 94656378912768, 94656380567551, -STORE, 94656378912768, 94656380719103, -STORE, 94656378912768, 94656380858367, -STORE, 94656378912768, 94656380997631, -STORE, 94656378912768, 94656381132799, -SNULL, 94656381124607, 94656381132799, -STORE, 94656378912768, 94656381124607, -STORE, 94656381124608, 94656381132799, -ERASE, 94656381124608, 94656381132799, -STORE, 94656378912768, 94656381276159, -STORE, 94656378912768, 94656381427711, -STORE, 94604087611392, 94604087824383, -STORE, 94604089921536, 94604089925631, -STORE, 94604089925632, 94604089933823, -STORE, 94604089933824, 94604089946111, -STORE, 94604105125888, 94604106424319, -STORE, 140454937694208, 140454939353087, -STORE, 140454939353088, 140454941450239, -STORE, 140454941450240, 140454941466623, -STORE, 140454941466624, 140454941474815, -STORE, 140454941474816, 140454941491199, -STORE, 140454941491200, 140454941503487, -STORE, 140454941503488, 140454943596543, -STORE, 140454943596544, 140454943600639, -STORE, 140454943600640, 140454943604735, -STORE, 140454943604736, 140454943748095, -STORE, 140454944116736, 140454945800191, -STORE, 140454945800192, 140454945816575, -STORE, 140454945845248, 140454945849343, -STORE, 140454945849344, 140454945853439, -STORE, 140454945853440, 140454945857535, -STORE, 140728438214656, 140728438353919, -STORE, 140728439095296, 140728439107583, -STORE, 140728439107584, 140728439111679, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140727821099008, 140737488351231, -SNULL, 140727821107199, 140737488351231, -STORE, 140727821099008, 140727821107199, -STORE, 140727820967936, 140727821107199, -STORE, 94088457240576, 94088459575295, -SNULL, 94088457453567, 94088459575295, -STORE, 94088457240576, 94088457453567, -STORE, 94088457453568, 94088459575295, -ERASE, 94088457453568, 94088459575295, -STORE, 94088459550720, 94088459563007, -STORE, 94088459563008, 94088459575295, -STORE, 140234378989568, 140234381242367, -SNULL, 140234379132927, 140234381242367, -STORE, 140234378989568, 140234379132927, -STORE, 140234379132928, 140234381242367, -ERASE, 140234379132928, 140234381242367, -STORE, 140234381230080, 140234381238271, -STORE, 140234381238272, 140234381242367, -STORE, 140727822077952, 140727822082047, -STORE, 140727822065664, 140727822077951, -STORE, 140234381201408, 140234381230079, -STORE, 140234381193216, 140234381201407, -STORE, 140234376876032, 140234378989567, -SNULL, 140234376876032, 140234376888319, -STORE, 140234376888320, 140234378989567, -STORE, 140234376876032, 140234376888319, -SNULL, 140234378981375, 140234378989567, -STORE, 140234376888320, 140234378981375, -STORE, 140234378981376, 140234378989567, -ERASE, 140234378981376, 140234378989567, -STORE, 140234378981376, 140234378989567, -STORE, 140234373079040, 140234376876031, -SNULL, 140234373079040, 140234374737919, -STORE, 140234374737920, 140234376876031, -STORE, 140234373079040, 140234374737919, -SNULL, 140234376835071, 140234376876031, -STORE, 140234374737920, 140234376835071, -STORE, 140234376835072, 140234376876031, -SNULL, 140234376835072, 140234376859647, -STORE, 140234376859648, 140234376876031, -STORE, 140234376835072, 140234376859647, -ERASE, 140234376835072, 140234376859647, -STORE, 140234376835072, 140234376859647, -ERASE, 140234376859648, 140234376876031, -STORE, 140234376859648, 140234376876031, -STORE, 140234381185024, 140234381201407, -SNULL, 140234376851455, 140234376859647, -STORE, 140234376835072, 140234376851455, -STORE, 140234376851456, 140234376859647, -SNULL, 140234378985471, 140234378989567, -STORE, 140234378981376, 140234378985471, -STORE, 140234378985472, 140234378989567, -SNULL, 94088459554815, 94088459563007, -STORE, 94088459550720, 94088459554815, -STORE, 94088459554816, 94088459563007, -SNULL, 140234381234175, 140234381238271, -STORE, 140234381230080, 140234381234175, -STORE, 140234381234176, 140234381238271, -ERASE, 140234381201408, 140234381230079, -STORE, 94088468852736, 94088468987903, -STORE, 140234379501568, 140234381185023, -STORE, 94088468852736, 94088469123071, -STORE, 94088468852736, 94088469258239, -STORE, 94110050402304, 94110050615295, -STORE, 94110052712448, 94110052716543, -STORE, 94110052716544, 94110052724735, -STORE, 94110052724736, 94110052737023, -STORE, 94110061875200, 94110062415871, -STORE, 140139439357952, 140139441016831, -STORE, 140139441016832, 140139443113983, -STORE, 140139443113984, 140139443130367, -STORE, 140139443130368, 140139443138559, -STORE, 140139443138560, 140139443154943, -STORE, 140139443154944, 140139443167231, -STORE, 140139443167232, 140139445260287, -STORE, 140139445260288, 140139445264383, -STORE, 140139445264384, 140139445268479, -STORE, 140139445268480, 140139445411839, -STORE, 140139445780480, 140139447463935, -STORE, 140139447463936, 140139447480319, -STORE, 140139447508992, 140139447513087, -STORE, 140139447513088, 140139447517183, -STORE, 140139447517184, 140139447521279, -STORE, 140731901427712, 140731901566975, -STORE, 140731902259200, 140731902271487, -STORE, 140731902271488, 140731902275583, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140727282622464, 140737488351231, -SNULL, 140727282630655, 140737488351231, -STORE, 140727282622464, 140727282630655, -STORE, 140727282491392, 140727282630655, -STORE, 94266649866240, 94266652200959, -SNULL, 94266650079231, 94266652200959, -STORE, 94266649866240, 94266650079231, -STORE, 94266650079232, 94266652200959, -ERASE, 94266650079232, 94266652200959, -STORE, 94266652176384, 94266652188671, -STORE, 94266652188672, 94266652200959, -STORE, 139888497991680, 139888500244479, -SNULL, 139888498135039, 139888500244479, -STORE, 139888497991680, 139888498135039, -STORE, 139888498135040, 139888500244479, -ERASE, 139888498135040, 139888500244479, -STORE, 139888500232192, 139888500240383, -STORE, 139888500240384, 139888500244479, -STORE, 140727283113984, 140727283118079, -STORE, 140727283101696, 140727283113983, -STORE, 139888500203520, 139888500232191, -STORE, 139888500195328, 139888500203519, -STORE, 139888495878144, 139888497991679, -SNULL, 139888495878144, 139888495890431, -STORE, 139888495890432, 139888497991679, -STORE, 139888495878144, 139888495890431, -SNULL, 139888497983487, 139888497991679, -STORE, 139888495890432, 139888497983487, -STORE, 139888497983488, 139888497991679, -ERASE, 139888497983488, 139888497991679, -STORE, 139888497983488, 139888497991679, -STORE, 139888492081152, 139888495878143, -SNULL, 139888492081152, 139888493740031, -STORE, 139888493740032, 139888495878143, -STORE, 139888492081152, 139888493740031, -SNULL, 139888495837183, 139888495878143, -STORE, 139888493740032, 139888495837183, -STORE, 139888495837184, 139888495878143, -SNULL, 139888495837184, 139888495861759, -STORE, 139888495861760, 139888495878143, -STORE, 139888495837184, 139888495861759, -ERASE, 139888495837184, 139888495861759, -STORE, 139888495837184, 139888495861759, -ERASE, 139888495861760, 139888495878143, -STORE, 139888495861760, 139888495878143, -STORE, 139888500187136, 139888500203519, -SNULL, 139888495853567, 139888495861759, -STORE, 139888495837184, 139888495853567, -STORE, 139888495853568, 139888495861759, -SNULL, 139888497987583, 139888497991679, -STORE, 139888497983488, 139888497987583, -STORE, 139888497987584, 139888497991679, -SNULL, 94266652180479, 94266652188671, -STORE, 94266652176384, 94266652180479, -STORE, 94266652180480, 94266652188671, -SNULL, 139888500236287, 139888500240383, -STORE, 139888500232192, 139888500236287, -STORE, 139888500236288, 139888500240383, -ERASE, 139888500203520, 139888500232191, -STORE, 94266678542336, 94266678677503, -STORE, 139888498503680, 139888500187135, -STORE, 94266678542336, 94266678812671, -STORE, 94266678542336, 94266678947839, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140722507702272, 140737488351231, -SNULL, 140722507710463, 140737488351231, -STORE, 140722507702272, 140722507710463, -STORE, 140722507571200, 140722507710463, -STORE, 94313981394944, 94313983729663, -SNULL, 94313981607935, 94313983729663, -STORE, 94313981394944, 94313981607935, -STORE, 94313981607936, 94313983729663, -ERASE, 94313981607936, 94313983729663, -STORE, 94313983705088, 94313983717375, -STORE, 94313983717376, 94313983729663, -STORE, 140456286076928, 140456288329727, -SNULL, 140456286220287, 140456288329727, -STORE, 140456286076928, 140456286220287, -STORE, 140456286220288, 140456288329727, -ERASE, 140456286220288, 140456288329727, -STORE, 140456288317440, 140456288325631, -STORE, 140456288325632, 140456288329727, -STORE, 140722507997184, 140722508001279, -STORE, 140722507984896, 140722507997183, -STORE, 140456288288768, 140456288317439, -STORE, 140456288280576, 140456288288767, -STORE, 140456283963392, 140456286076927, -SNULL, 140456283963392, 140456283975679, -STORE, 140456283975680, 140456286076927, -STORE, 140456283963392, 140456283975679, -SNULL, 140456286068735, 140456286076927, -STORE, 140456283975680, 140456286068735, -STORE, 140456286068736, 140456286076927, -ERASE, 140456286068736, 140456286076927, -STORE, 140456286068736, 140456286076927, -STORE, 140456280166400, 140456283963391, -SNULL, 140456280166400, 140456281825279, -STORE, 140456281825280, 140456283963391, -STORE, 140456280166400, 140456281825279, -SNULL, 140456283922431, 140456283963391, -STORE, 140456281825280, 140456283922431, -STORE, 140456283922432, 140456283963391, -SNULL, 140456283922432, 140456283947007, -STORE, 140456283947008, 140456283963391, -STORE, 140456283922432, 140456283947007, -ERASE, 140456283922432, 140456283947007, -STORE, 140456283922432, 140456283947007, -ERASE, 140456283947008, 140456283963391, -STORE, 140456283947008, 140456283963391, -STORE, 140456288272384, 140456288288767, -SNULL, 140456283938815, 140456283947007, -STORE, 140456283922432, 140456283938815, -STORE, 140456283938816, 140456283947007, -SNULL, 140456286072831, 140456286076927, -STORE, 140456286068736, 140456286072831, -STORE, 140456286072832, 140456286076927, -SNULL, 94313983709183, 94313983717375, -STORE, 94313983705088, 94313983709183, -STORE, 94313983709184, 94313983717375, -SNULL, 140456288321535, 140456288325631, -STORE, 140456288317440, 140456288321535, -STORE, 140456288321536, 140456288325631, -ERASE, 140456288288768, 140456288317439, -STORE, 94314006716416, 94314006851583, -STORE, 140456286588928, 140456288272383, -STORE, 94314006716416, 94314006986751, -STORE, 94314006716416, 94314007121919, -STORE, 93948644454400, 93948644667391, -STORE, 93948646764544, 93948646768639, -STORE, 93948646768640, 93948646776831, -STORE, 93948646776832, 93948646789119, -STORE, 93948664999936, 93948667142143, -STORE, 140187350659072, 140187352317951, -STORE, 140187352317952, 140187354415103, -STORE, 140187354415104, 140187354431487, -STORE, 140187354431488, 140187354439679, -STORE, 140187354439680, 140187354456063, -STORE, 140187354456064, 140187354468351, -STORE, 140187354468352, 140187356561407, -STORE, 140187356561408, 140187356565503, -STORE, 140187356565504, 140187356569599, -STORE, 140187356569600, 140187356712959, -STORE, 140187357081600, 140187358765055, -STORE, 140187358765056, 140187358781439, -STORE, 140187358810112, 140187358814207, -STORE, 140187358814208, 140187358818303, -STORE, 140187358818304, 140187358822399, -STORE, 140730484518912, 140730484658175, -STORE, 140730485690368, 140730485702655, -STORE, 140730485702656, 140730485706751, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140721211551744, 140737488351231, -SNULL, 140721211559935, 140737488351231, -STORE, 140721211551744, 140721211559935, -STORE, 140721211420672, 140721211559935, -STORE, 94105221423104, 94105223757823, -SNULL, 94105221636095, 94105223757823, -STORE, 94105221423104, 94105221636095, -STORE, 94105221636096, 94105223757823, -ERASE, 94105221636096, 94105223757823, -STORE, 94105223733248, 94105223745535, -STORE, 94105223745536, 94105223757823, -STORE, 140474453676032, 140474455928831, -SNULL, 140474453819391, 140474455928831, -STORE, 140474453676032, 140474453819391, -STORE, 140474453819392, 140474455928831, -ERASE, 140474453819392, 140474455928831, -STORE, 140474455916544, 140474455924735, -STORE, 140474455924736, 140474455928831, -STORE, 140721211703296, 140721211707391, -STORE, 140721211691008, 140721211703295, -STORE, 140474455887872, 140474455916543, -STORE, 140474455879680, 140474455887871, -STORE, 140474451562496, 140474453676031, -SNULL, 140474451562496, 140474451574783, -STORE, 140474451574784, 140474453676031, -STORE, 140474451562496, 140474451574783, -SNULL, 140474453667839, 140474453676031, -STORE, 140474451574784, 140474453667839, -STORE, 140474453667840, 140474453676031, -ERASE, 140474453667840, 140474453676031, -STORE, 140474453667840, 140474453676031, -STORE, 140474447765504, 140474451562495, -SNULL, 140474447765504, 140474449424383, -STORE, 140474449424384, 140474451562495, -STORE, 140474447765504, 140474449424383, -SNULL, 140474451521535, 140474451562495, -STORE, 140474449424384, 140474451521535, -STORE, 140474451521536, 140474451562495, -SNULL, 140474451521536, 140474451546111, -STORE, 140474451546112, 140474451562495, -STORE, 140474451521536, 140474451546111, -ERASE, 140474451521536, 140474451546111, -STORE, 140474451521536, 140474451546111, -ERASE, 140474451546112, 140474451562495, -STORE, 140474451546112, 140474451562495, -STORE, 140474455871488, 140474455887871, -SNULL, 140474451537919, 140474451546111, -STORE, 140474451521536, 140474451537919, -STORE, 140474451537920, 140474451546111, -SNULL, 140474453671935, 140474453676031, -STORE, 140474453667840, 140474453671935, -STORE, 140474453671936, 140474453676031, -SNULL, 94105223737343, 94105223745535, -STORE, 94105223733248, 94105223737343, -STORE, 94105223737344, 94105223745535, -SNULL, 140474455920639, 140474455924735, -STORE, 140474455916544, 140474455920639, -STORE, 140474455920640, 140474455924735, -ERASE, 140474455887872, 140474455916543, -STORE, 94105238712320, 94105238847487, -STORE, 140474454188032, 140474455871487, -STORE, 94105238712320, 94105238982655, -STORE, 94105238712320, 94105239117823, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140732356354048, 140737488351231, -SNULL, 140732356362239, 140737488351231, -STORE, 140732356354048, 140732356362239, -STORE, 140732356222976, 140732356362239, -STORE, 94461165989888, 94461168324607, -SNULL, 94461166202879, 94461168324607, -STORE, 94461165989888, 94461166202879, -STORE, 94461166202880, 94461168324607, -ERASE, 94461166202880, 94461168324607, -STORE, 94461168300032, 94461168312319, -STORE, 94461168312320, 94461168324607, -STORE, 140317255110656, 140317257363455, -SNULL, 140317255254015, 140317257363455, -STORE, 140317255110656, 140317255254015, -STORE, 140317255254016, 140317257363455, -ERASE, 140317255254016, 140317257363455, -STORE, 140317257351168, 140317257359359, -STORE, 140317257359360, 140317257363455, -STORE, 140732356583424, 140732356587519, -STORE, 140732356571136, 140732356583423, -STORE, 140317257322496, 140317257351167, -STORE, 140317257314304, 140317257322495, -STORE, 140317252997120, 140317255110655, -SNULL, 140317252997120, 140317253009407, -STORE, 140317253009408, 140317255110655, -STORE, 140317252997120, 140317253009407, -SNULL, 140317255102463, 140317255110655, -STORE, 140317253009408, 140317255102463, -STORE, 140317255102464, 140317255110655, -ERASE, 140317255102464, 140317255110655, -STORE, 140317255102464, 140317255110655, -STORE, 140317249200128, 140317252997119, -SNULL, 140317249200128, 140317250859007, -STORE, 140317250859008, 140317252997119, -STORE, 140317249200128, 140317250859007, -SNULL, 140317252956159, 140317252997119, -STORE, 140317250859008, 140317252956159, -STORE, 140317252956160, 140317252997119, -SNULL, 140317252956160, 140317252980735, -STORE, 140317252980736, 140317252997119, -STORE, 140317252956160, 140317252980735, -ERASE, 140317252956160, 140317252980735, -STORE, 140317252956160, 140317252980735, -ERASE, 140317252980736, 140317252997119, -STORE, 140317252980736, 140317252997119, -STORE, 140317257306112, 140317257322495, -SNULL, 140317252972543, 140317252980735, -STORE, 140317252956160, 140317252972543, -STORE, 140317252972544, 140317252980735, -SNULL, 140317255106559, 140317255110655, -STORE, 140317255102464, 140317255106559, -STORE, 140317255106560, 140317255110655, -SNULL, 94461168304127, 94461168312319, -STORE, 94461168300032, 94461168304127, -STORE, 94461168304128, 94461168312319, -SNULL, 140317257355263, 140317257359359, -STORE, 140317257351168, 140317257355263, -STORE, 140317257355264, 140317257359359, -ERASE, 140317257322496, 140317257351167, -STORE, 94461195268096, 94461195403263, -STORE, 140317255622656, 140317257306111, -STORE, 94461195268096, 94461195538431, -STORE, 94461195268096, 94461195673599, -STORE, 94110050402304, 94110050615295, -STORE, 94110052712448, 94110052716543, -STORE, 94110052716544, 94110052724735, -STORE, 94110052724736, 94110052737023, -STORE, 94110061875200, 94110062415871, -STORE, 140139439357952, 140139441016831, -STORE, 140139441016832, 140139443113983, -STORE, 140139443113984, 140139443130367, -STORE, 140139443130368, 140139443138559, -STORE, 140139443138560, 140139443154943, -STORE, 140139443154944, 140139443167231, -STORE, 140139443167232, 140139445260287, -STORE, 140139445260288, 140139445264383, -STORE, 140139445264384, 140139445268479, -STORE, 140139445268480, 140139445411839, -STORE, 140139445780480, 140139447463935, -STORE, 140139447463936, 140139447480319, -STORE, 140139447508992, 140139447513087, -STORE, 140139447513088, 140139447517183, -STORE, 140139447517184, 140139447521279, -STORE, 140731901427712, 140731901566975, -STORE, 140731902259200, 140731902271487, -STORE, 140731902271488, 140731902275583, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140720941613056, 140737488351231, -SNULL, 140720941621247, 140737488351231, -STORE, 140720941613056, 140720941621247, -STORE, 140720941481984, 140720941621247, -STORE, 93902377721856, 93902379945983, -SNULL, 93902377832447, 93902379945983, -STORE, 93902377721856, 93902377832447, -STORE, 93902377832448, 93902379945983, -ERASE, 93902377832448, 93902379945983, -STORE, 93902379925504, 93902379937791, -STORE, 93902379937792, 93902379945983, -STORE, 139836543635456, 139836545888255, -SNULL, 139836543778815, 139836545888255, -STORE, 139836543635456, 139836543778815, -STORE, 139836543778816, 139836545888255, -ERASE, 139836543778816, 139836545888255, -STORE, 139836545875968, 139836545884159, -STORE, 139836545884160, 139836545888255, -STORE, 140720941711360, 140720941715455, -STORE, 140720941699072, 140720941711359, -STORE, 139836545847296, 139836545875967, -STORE, 139836545839104, 139836545847295, -STORE, 139836539838464, 139836543635455, -SNULL, 139836539838464, 139836541497343, -STORE, 139836541497344, 139836543635455, -STORE, 139836539838464, 139836541497343, -SNULL, 139836543594495, 139836543635455, -STORE, 139836541497344, 139836543594495, -STORE, 139836543594496, 139836543635455, -SNULL, 139836543594496, 139836543619071, -STORE, 139836543619072, 139836543635455, -STORE, 139836543594496, 139836543619071, -ERASE, 139836543594496, 139836543619071, -STORE, 139836543594496, 139836543619071, -ERASE, 139836543619072, 139836543635455, -STORE, 139836543619072, 139836543635455, -SNULL, 139836543610879, 139836543619071, -STORE, 139836543594496, 139836543610879, -STORE, 139836543610880, 139836543619071, -SNULL, 93902379933695, 93902379937791, -STORE, 93902379925504, 93902379933695, -STORE, 93902379933696, 93902379937791, -SNULL, 139836545880063, 139836545884159, -STORE, 139836545875968, 139836545880063, -STORE, 139836545880064, 139836545884159, -ERASE, 139836545847296, 139836545875967, -STORE, 93902396891136, 93902397026303, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140736538206208, 140737488351231, -SNULL, 140736538214399, 140737488351231, -STORE, 140736538206208, 140736538214399, -STORE, 140736538075136, 140736538214399, -STORE, 94173471399936, 94173473734655, -SNULL, 94173471612927, 94173473734655, -STORE, 94173471399936, 94173471612927, -STORE, 94173471612928, 94173473734655, -ERASE, 94173471612928, 94173473734655, -STORE, 94173473710080, 94173473722367, -STORE, 94173473722368, 94173473734655, -STORE, 140035513556992, 140035515809791, -SNULL, 140035513700351, 140035515809791, -STORE, 140035513556992, 140035513700351, -STORE, 140035513700352, 140035515809791, -ERASE, 140035513700352, 140035515809791, -STORE, 140035515797504, 140035515805695, -STORE, 140035515805696, 140035515809791, -STORE, 140736538329088, 140736538333183, -STORE, 140736538316800, 140736538329087, -STORE, 140035515768832, 140035515797503, -STORE, 140035515760640, 140035515768831, -STORE, 140035511443456, 140035513556991, -SNULL, 140035511443456, 140035511455743, -STORE, 140035511455744, 140035513556991, -STORE, 140035511443456, 140035511455743, -SNULL, 140035513548799, 140035513556991, -STORE, 140035511455744, 140035513548799, -STORE, 140035513548800, 140035513556991, -ERASE, 140035513548800, 140035513556991, -STORE, 140035513548800, 140035513556991, -STORE, 140035507646464, 140035511443455, -SNULL, 140035507646464, 140035509305343, -STORE, 140035509305344, 140035511443455, -STORE, 140035507646464, 140035509305343, -SNULL, 140035511402495, 140035511443455, -STORE, 140035509305344, 140035511402495, -STORE, 140035511402496, 140035511443455, -SNULL, 140035511402496, 140035511427071, -STORE, 140035511427072, 140035511443455, -STORE, 140035511402496, 140035511427071, -ERASE, 140035511402496, 140035511427071, -STORE, 140035511402496, 140035511427071, -ERASE, 140035511427072, 140035511443455, -STORE, 140035511427072, 140035511443455, -STORE, 140035515752448, 140035515768831, -SNULL, 140035511418879, 140035511427071, -STORE, 140035511402496, 140035511418879, -STORE, 140035511418880, 140035511427071, -SNULL, 140035513552895, 140035513556991, -STORE, 140035513548800, 140035513552895, -STORE, 140035513552896, 140035513556991, -SNULL, 94173473714175, 94173473722367, -STORE, 94173473710080, 94173473714175, -STORE, 94173473714176, 94173473722367, -SNULL, 140035515801599, 140035515805695, -STORE, 140035515797504, 140035515801599, -STORE, 140035515801600, 140035515805695, -ERASE, 140035515768832, 140035515797503, -STORE, 94173478645760, 94173478780927, -STORE, 140035514068992, 140035515752447, -STORE, 94173478645760, 94173478916095, -STORE, 94173478645760, 94173479051263, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140724216176640, 140737488351231, -SNULL, 140724216184831, 140737488351231, -STORE, 140724216176640, 140724216184831, -STORE, 140724216045568, 140724216184831, -STORE, 94870930628608, 94870932963327, -SNULL, 94870930841599, 94870932963327, -STORE, 94870930628608, 94870930841599, -STORE, 94870930841600, 94870932963327, -ERASE, 94870930841600, 94870932963327, -STORE, 94870932938752, 94870932951039, -STORE, 94870932951040, 94870932963327, -STORE, 140453683736576, 140453685989375, -SNULL, 140453683879935, 140453685989375, -STORE, 140453683736576, 140453683879935, -STORE, 140453683879936, 140453685989375, -ERASE, 140453683879936, 140453685989375, -STORE, 140453685977088, 140453685985279, -STORE, 140453685985280, 140453685989375, -STORE, 140724216832000, 140724216836095, -STORE, 140724216819712, 140724216831999, -STORE, 140453685948416, 140453685977087, -STORE, 140453685940224, 140453685948415, -STORE, 140453681623040, 140453683736575, -SNULL, 140453681623040, 140453681635327, -STORE, 140453681635328, 140453683736575, -STORE, 140453681623040, 140453681635327, -SNULL, 140453683728383, 140453683736575, -STORE, 140453681635328, 140453683728383, -STORE, 140453683728384, 140453683736575, -ERASE, 140453683728384, 140453683736575, -STORE, 140453683728384, 140453683736575, -STORE, 140453677826048, 140453681623039, -SNULL, 140453677826048, 140453679484927, -STORE, 140453679484928, 140453681623039, -STORE, 140453677826048, 140453679484927, -SNULL, 140453681582079, 140453681623039, -STORE, 140453679484928, 140453681582079, -STORE, 140453681582080, 140453681623039, -SNULL, 140453681582080, 140453681606655, -STORE, 140453681606656, 140453681623039, -STORE, 140453681582080, 140453681606655, -ERASE, 140453681582080, 140453681606655, -STORE, 140453681582080, 140453681606655, -ERASE, 140453681606656, 140453681623039, -STORE, 140453681606656, 140453681623039, -STORE, 140453685932032, 140453685948415, -SNULL, 140453681598463, 140453681606655, -STORE, 140453681582080, 140453681598463, -STORE, 140453681598464, 140453681606655, -SNULL, 140453683732479, 140453683736575, -STORE, 140453683728384, 140453683732479, -STORE, 140453683732480, 140453683736575, -SNULL, 94870932942847, 94870932951039, -STORE, 94870932938752, 94870932942847, -STORE, 94870932942848, 94870932951039, -SNULL, 140453685981183, 140453685985279, -STORE, 140453685977088, 140453685981183, -STORE, 140453685981184, 140453685985279, -ERASE, 140453685948416, 140453685977087, -STORE, 94870940565504, 94870940700671, -STORE, 140453684248576, 140453685932031, -STORE, 94870940565504, 94870940835839, -STORE, 94870940565504, 94870940971007, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140731275661312, 140737488351231, -SNULL, 140731275669503, 140737488351231, -STORE, 140731275661312, 140731275669503, -STORE, 140731275530240, 140731275669503, -STORE, 94642788548608, 94642790883327, -SNULL, 94642788761599, 94642790883327, -STORE, 94642788548608, 94642788761599, -STORE, 94642788761600, 94642790883327, -ERASE, 94642788761600, 94642790883327, -STORE, 94642790858752, 94642790871039, -STORE, 94642790871040, 94642790883327, -STORE, 140228458749952, 140228461002751, -SNULL, 140228458893311, 140228461002751, -STORE, 140228458749952, 140228458893311, -STORE, 140228458893312, 140228461002751, -ERASE, 140228458893312, 140228461002751, -STORE, 140228460990464, 140228460998655, -STORE, 140228460998656, 140228461002751, -STORE, 140731276349440, 140731276353535, -STORE, 140731276337152, 140731276349439, -STORE, 140228460961792, 140228460990463, -STORE, 140228460953600, 140228460961791, -STORE, 140228456636416, 140228458749951, -SNULL, 140228456636416, 140228456648703, -STORE, 140228456648704, 140228458749951, -STORE, 140228456636416, 140228456648703, -SNULL, 140228458741759, 140228458749951, -STORE, 140228456648704, 140228458741759, -STORE, 140228458741760, 140228458749951, -ERASE, 140228458741760, 140228458749951, -STORE, 140228458741760, 140228458749951, -STORE, 140228452839424, 140228456636415, -SNULL, 140228452839424, 140228454498303, -STORE, 140228454498304, 140228456636415, -STORE, 140228452839424, 140228454498303, -SNULL, 140228456595455, 140228456636415, -STORE, 140228454498304, 140228456595455, -STORE, 140228456595456, 140228456636415, -SNULL, 140228456595456, 140228456620031, -STORE, 140228456620032, 140228456636415, -STORE, 140228456595456, 140228456620031, -ERASE, 140228456595456, 140228456620031, -STORE, 140228456595456, 140228456620031, -ERASE, 140228456620032, 140228456636415, -STORE, 140228456620032, 140228456636415, -STORE, 140228460945408, 140228460961791, -SNULL, 140228456611839, 140228456620031, -STORE, 140228456595456, 140228456611839, -STORE, 140228456611840, 140228456620031, -SNULL, 140228458745855, 140228458749951, -STORE, 140228458741760, 140228458745855, -STORE, 140228458745856, 140228458749951, -SNULL, 94642790862847, 94642790871039, -STORE, 94642790858752, 94642790862847, -STORE, 94642790862848, 94642790871039, -SNULL, 140228460994559, 140228460998655, -STORE, 140228460990464, 140228460994559, -STORE, 140228460994560, 140228460998655, -ERASE, 140228460961792, 140228460990463, -STORE, 94642801549312, 94642801684479, -STORE, 140228459261952, 140228460945407, -STORE, 94642801549312, 94642801819647, -STORE, 94642801549312, 94642801954815, -STORE, 94604087611392, 94604087824383, -STORE, 94604089921536, 94604089925631, -STORE, 94604089925632, 94604089933823, -STORE, 94604089933824, 94604089946111, -STORE, 94604105125888, 94604106424319, -STORE, 140454937694208, 140454939353087, -STORE, 140454939353088, 140454941450239, -STORE, 140454941450240, 140454941466623, -STORE, 140454941466624, 140454941474815, -STORE, 140454941474816, 140454941491199, -STORE, 140454941491200, 140454941503487, -STORE, 140454941503488, 140454943596543, -STORE, 140454943596544, 140454943600639, -STORE, 140454943600640, 140454943604735, -STORE, 140454943604736, 140454943748095, -STORE, 140454944116736, 140454945800191, -STORE, 140454945800192, 140454945816575, -STORE, 140454945845248, 140454945849343, -STORE, 140454945849344, 140454945853439, -STORE, 140454945853440, 140454945857535, -STORE, 140728438214656, 140728438353919, -STORE, 140728439095296, 140728439107583, -STORE, 140728439107584, 140728439111679, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140721843453952, 140737488351231, -SNULL, 140721843462143, 140737488351231, -STORE, 140721843453952, 140721843462143, -STORE, 140721843322880, 140721843462143, -STORE, 94465962455040, 94465964789759, -SNULL, 94465962668031, 94465964789759, -STORE, 94465962455040, 94465962668031, -STORE, 94465962668032, 94465964789759, -ERASE, 94465962668032, 94465964789759, -STORE, 94465964765184, 94465964777471, -STORE, 94465964777472, 94465964789759, -STORE, 139913488314368, 139913490567167, -SNULL, 139913488457727, 139913490567167, -STORE, 139913488314368, 139913488457727, -STORE, 139913488457728, 139913490567167, -ERASE, 139913488457728, 139913490567167, -STORE, 139913490554880, 139913490563071, -STORE, 139913490563072, 139913490567167, -STORE, 140721843503104, 140721843507199, -STORE, 140721843490816, 140721843503103, -STORE, 139913490526208, 139913490554879, -STORE, 139913490518016, 139913490526207, -STORE, 139913486200832, 139913488314367, -SNULL, 139913486200832, 139913486213119, -STORE, 139913486213120, 139913488314367, -STORE, 139913486200832, 139913486213119, -SNULL, 139913488306175, 139913488314367, -STORE, 139913486213120, 139913488306175, -STORE, 139913488306176, 139913488314367, -ERASE, 139913488306176, 139913488314367, -STORE, 139913488306176, 139913488314367, -STORE, 139913482403840, 139913486200831, -SNULL, 139913482403840, 139913484062719, -STORE, 139913484062720, 139913486200831, -STORE, 139913482403840, 139913484062719, -SNULL, 139913486159871, 139913486200831, -STORE, 139913484062720, 139913486159871, -STORE, 139913486159872, 139913486200831, -SNULL, 139913486159872, 139913486184447, -STORE, 139913486184448, 139913486200831, -STORE, 139913486159872, 139913486184447, -ERASE, 139913486159872, 139913486184447, -STORE, 139913486159872, 139913486184447, -ERASE, 139913486184448, 139913486200831, -STORE, 139913486184448, 139913486200831, -STORE, 139913490509824, 139913490526207, -SNULL, 139913486176255, 139913486184447, -STORE, 139913486159872, 139913486176255, -STORE, 139913486176256, 139913486184447, -SNULL, 139913488310271, 139913488314367, -STORE, 139913488306176, 139913488310271, -STORE, 139913488310272, 139913488314367, -SNULL, 94465964769279, 94465964777471, -STORE, 94465964765184, 94465964769279, -STORE, 94465964769280, 94465964777471, -SNULL, 139913490558975, 139913490563071, -STORE, 139913490554880, 139913490558975, -STORE, 139913490558976, 139913490563071, -ERASE, 139913490526208, 139913490554879, -STORE, 94465970024448, 94465970159615, -STORE, 139913488826368, 139913490509823, -STORE, 94465970024448, 94465970294783, -STORE, 94465970024448, 94465970429951, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140720583307264, 140737488351231, -SNULL, 140720583315455, 140737488351231, -STORE, 140720583307264, 140720583315455, -STORE, 140720583176192, 140720583315455, -STORE, 94212322082816, 94212324417535, -SNULL, 94212322295807, 94212324417535, -STORE, 94212322082816, 94212322295807, -STORE, 94212322295808, 94212324417535, -ERASE, 94212322295808, 94212324417535, -STORE, 94212324392960, 94212324405247, -STORE, 94212324405248, 94212324417535, -STORE, 139659688538112, 139659690790911, -SNULL, 139659688681471, 139659690790911, -STORE, 139659688538112, 139659688681471, -STORE, 139659688681472, 139659690790911, -ERASE, 139659688681472, 139659690790911, -STORE, 139659690778624, 139659690786815, -STORE, 139659690786816, 139659690790911, -STORE, 140720584781824, 140720584785919, -STORE, 140720584769536, 140720584781823, -STORE, 139659690749952, 139659690778623, -STORE, 139659690741760, 139659690749951, -STORE, 139659686424576, 139659688538111, -SNULL, 139659686424576, 139659686436863, -STORE, 139659686436864, 139659688538111, -STORE, 139659686424576, 139659686436863, -SNULL, 139659688529919, 139659688538111, -STORE, 139659686436864, 139659688529919, -STORE, 139659688529920, 139659688538111, -ERASE, 139659688529920, 139659688538111, -STORE, 139659688529920, 139659688538111, -STORE, 139659682627584, 139659686424575, -SNULL, 139659682627584, 139659684286463, -STORE, 139659684286464, 139659686424575, -STORE, 139659682627584, 139659684286463, -SNULL, 139659686383615, 139659686424575, -STORE, 139659684286464, 139659686383615, -STORE, 139659686383616, 139659686424575, -SNULL, 139659686383616, 139659686408191, -STORE, 139659686408192, 139659686424575, -STORE, 139659686383616, 139659686408191, -ERASE, 139659686383616, 139659686408191, -STORE, 139659686383616, 139659686408191, -ERASE, 139659686408192, 139659686424575, -STORE, 139659686408192, 139659686424575, -STORE, 139659690733568, 139659690749951, -SNULL, 139659686399999, 139659686408191, -STORE, 139659686383616, 139659686399999, -STORE, 139659686400000, 139659686408191, -SNULL, 139659688534015, 139659688538111, -STORE, 139659688529920, 139659688534015, -STORE, 139659688534016, 139659688538111, -SNULL, 94212324397055, 94212324405247, -STORE, 94212324392960, 94212324397055, -STORE, 94212324397056, 94212324405247, -SNULL, 139659690782719, 139659690786815, -STORE, 139659690778624, 139659690782719, -STORE, 139659690782720, 139659690786815, -ERASE, 139659690749952, 139659690778623, -STORE, 94212355014656, 94212355149823, -STORE, 139659689050112, 139659690733567, -STORE, 94212355014656, 94212355284991, -STORE, 94212355014656, 94212355420159, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140727689830400, 140737488351231, -SNULL, 140727689838591, 140737488351231, -STORE, 140727689830400, 140727689838591, -STORE, 140727689699328, 140727689838591, -STORE, 94572390281216, 94572392615935, -SNULL, 94572390494207, 94572392615935, -STORE, 94572390281216, 94572390494207, -STORE, 94572390494208, 94572392615935, -ERASE, 94572390494208, 94572392615935, -STORE, 94572392591360, 94572392603647, -STORE, 94572392603648, 94572392615935, -STORE, 140575923769344, 140575926022143, -SNULL, 140575923912703, 140575926022143, -STORE, 140575923769344, 140575923912703, -STORE, 140575923912704, 140575926022143, -ERASE, 140575923912704, 140575926022143, -STORE, 140575926009856, 140575926018047, -STORE, 140575926018048, 140575926022143, -STORE, 140727689871360, 140727689875455, -STORE, 140727689859072, 140727689871359, -STORE, 140575925981184, 140575926009855, -STORE, 140575925972992, 140575925981183, -STORE, 140575921655808, 140575923769343, -SNULL, 140575921655808, 140575921668095, -STORE, 140575921668096, 140575923769343, -STORE, 140575921655808, 140575921668095, -SNULL, 140575923761151, 140575923769343, -STORE, 140575921668096, 140575923761151, -STORE, 140575923761152, 140575923769343, -ERASE, 140575923761152, 140575923769343, -STORE, 140575923761152, 140575923769343, -STORE, 140575917858816, 140575921655807, -SNULL, 140575917858816, 140575919517695, -STORE, 140575919517696, 140575921655807, -STORE, 140575917858816, 140575919517695, -SNULL, 140575921614847, 140575921655807, -STORE, 140575919517696, 140575921614847, -STORE, 140575921614848, 140575921655807, -SNULL, 140575921614848, 140575921639423, -STORE, 140575921639424, 140575921655807, -STORE, 140575921614848, 140575921639423, -ERASE, 140575921614848, 140575921639423, -STORE, 140575921614848, 140575921639423, -ERASE, 140575921639424, 140575921655807, -STORE, 140575921639424, 140575921655807, -STORE, 140575925964800, 140575925981183, -SNULL, 140575921631231, 140575921639423, -STORE, 140575921614848, 140575921631231, -STORE, 140575921631232, 140575921639423, -SNULL, 140575923765247, 140575923769343, -STORE, 140575923761152, 140575923765247, -STORE, 140575923765248, 140575923769343, -SNULL, 94572392595455, 94572392603647, -STORE, 94572392591360, 94572392595455, -STORE, 94572392595456, 94572392603647, -SNULL, 140575926013951, 140575926018047, -STORE, 140575926009856, 140575926013951, -STORE, 140575926013952, 140575926018047, -ERASE, 140575925981184, 140575926009855, -STORE, 94572402278400, 94572402413567, -STORE, 140575924281344, 140575925964799, -STORE, 94572402278400, 94572402548735, -STORE, 94572402278400, 94572402683903, -STORE, 94572402278400, 94572402851839, -SNULL, 94572402827263, 94572402851839, -STORE, 94572402278400, 94572402827263, -STORE, 94572402827264, 94572402851839, -ERASE, 94572402827264, 94572402851839, -STORE, 94572402278400, 94572402966527, -STORE, 94572402278400, 94572403109887, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140725520506880, 140737488351231, -SNULL, 140725520515071, 140737488351231, -STORE, 140725520506880, 140725520515071, -STORE, 140725520375808, 140725520515071, -STORE, 93829948788736, 93829951012863, -SNULL, 93829948899327, 93829951012863, -STORE, 93829948788736, 93829948899327, -STORE, 93829948899328, 93829951012863, -ERASE, 93829948899328, 93829951012863, -STORE, 93829950992384, 93829951004671, -STORE, 93829951004672, 93829951012863, -STORE, 140133696794624, 140133699047423, -SNULL, 140133696937983, 140133699047423, -STORE, 140133696794624, 140133696937983, -STORE, 140133696937984, 140133699047423, -ERASE, 140133696937984, 140133699047423, -STORE, 140133699035136, 140133699043327, -STORE, 140133699043328, 140133699047423, -STORE, 140725520875520, 140725520879615, -STORE, 140725520863232, 140725520875519, -STORE, 140133699006464, 140133699035135, -STORE, 140133698998272, 140133699006463, -STORE, 140133692997632, 140133696794623, -SNULL, 140133692997632, 140133694656511, -STORE, 140133694656512, 140133696794623, -STORE, 140133692997632, 140133694656511, -SNULL, 140133696753663, 140133696794623, -STORE, 140133694656512, 140133696753663, -STORE, 140133696753664, 140133696794623, -SNULL, 140133696753664, 140133696778239, -STORE, 140133696778240, 140133696794623, -STORE, 140133696753664, 140133696778239, -ERASE, 140133696753664, 140133696778239, -STORE, 140133696753664, 140133696778239, -ERASE, 140133696778240, 140133696794623, -STORE, 140133696778240, 140133696794623, -SNULL, 140133696770047, 140133696778239, -STORE, 140133696753664, 140133696770047, -STORE, 140133696770048, 140133696778239, -SNULL, 93829951000575, 93829951004671, -STORE, 93829950992384, 93829951000575, -STORE, 93829951000576, 93829951004671, -SNULL, 140133699039231, 140133699043327, -STORE, 140133699035136, 140133699039231, -STORE, 140133699039232, 140133699043327, -ERASE, 140133699006464, 140133699035135, -STORE, 93829978693632, 93829978828799, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140736118022144, 140737488351231, -SNULL, 140736118030335, 140737488351231, -STORE, 140736118022144, 140736118030335, -STORE, 140736117891072, 140736118030335, -STORE, 94467663982592, 94467666206719, -SNULL, 94467664093183, 94467666206719, -STORE, 94467663982592, 94467664093183, -STORE, 94467664093184, 94467666206719, -ERASE, 94467664093184, 94467666206719, -STORE, 94467666186240, 94467666198527, -STORE, 94467666198528, 94467666206719, -STORE, 140525377327104, 140525379579903, -SNULL, 140525377470463, 140525379579903, -STORE, 140525377327104, 140525377470463, -STORE, 140525377470464, 140525379579903, -ERASE, 140525377470464, 140525379579903, -STORE, 140525379567616, 140525379575807, -STORE, 140525379575808, 140525379579903, -STORE, 140736118771712, 140736118775807, -STORE, 140736118759424, 140736118771711, -STORE, 140525379538944, 140525379567615, -STORE, 140525379530752, 140525379538943, -STORE, 140525373530112, 140525377327103, -SNULL, 140525373530112, 140525375188991, -STORE, 140525375188992, 140525377327103, -STORE, 140525373530112, 140525375188991, -SNULL, 140525377286143, 140525377327103, -STORE, 140525375188992, 140525377286143, -STORE, 140525377286144, 140525377327103, -SNULL, 140525377286144, 140525377310719, -STORE, 140525377310720, 140525377327103, -STORE, 140525377286144, 140525377310719, -ERASE, 140525377286144, 140525377310719, -STORE, 140525377286144, 140525377310719, -ERASE, 140525377310720, 140525377327103, -STORE, 140525377310720, 140525377327103, -SNULL, 140525377302527, 140525377310719, -STORE, 140525377286144, 140525377302527, -STORE, 140525377302528, 140525377310719, -SNULL, 94467666194431, 94467666198527, -STORE, 94467666186240, 94467666194431, -STORE, 94467666194432, 94467666198527, -SNULL, 140525379571711, 140525379575807, -STORE, 140525379567616, 140525379571711, -STORE, 140525379571712, 140525379575807, -ERASE, 140525379538944, 140525379567615, -STORE, 94467693379584, 94467693514751, -STORE, 94200172744704, 94200172957695, -STORE, 94200175054848, 94200175058943, -STORE, 94200175058944, 94200175067135, -STORE, 94200175067136, 94200175079423, -STORE, 94200196673536, 94200198905855, -STORE, 140053867720704, 140053869379583, -STORE, 140053869379584, 140053871476735, -STORE, 140053871476736, 140053871493119, -STORE, 140053871493120, 140053871501311, -STORE, 140053871501312, 140053871517695, -STORE, 140053871517696, 140053871529983, -STORE, 140053871529984, 140053873623039, -STORE, 140053873623040, 140053873627135, -STORE, 140053873627136, 140053873631231, -STORE, 140053873631232, 140053873774591, -STORE, 140053874143232, 140053875826687, -STORE, 140053875826688, 140053875843071, -STORE, 140053875871744, 140053875875839, -STORE, 140053875875840, 140053875879935, -STORE, 140053875879936, 140053875884031, -STORE, 140728538484736, 140728538623999, -STORE, 140728538652672, 140728538664959, -STORE, 140728538664960, 140728538669055, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140732307775488, 140737488351231, -SNULL, 140732307783679, 140737488351231, -STORE, 140732307775488, 140732307783679, -STORE, 140732307644416, 140732307783679, -STORE, 93831417630720, 93831419965439, -SNULL, 93831417843711, 93831419965439, -STORE, 93831417630720, 93831417843711, -STORE, 93831417843712, 93831419965439, -ERASE, 93831417843712, 93831419965439, -STORE, 93831419940864, 93831419953151, -STORE, 93831419953152, 93831419965439, -STORE, 140241062088704, 140241064341503, -SNULL, 140241062232063, 140241064341503, -STORE, 140241062088704, 140241062232063, -STORE, 140241062232064, 140241064341503, -ERASE, 140241062232064, 140241064341503, -STORE, 140241064329216, 140241064337407, -STORE, 140241064337408, 140241064341503, -STORE, 140732308140032, 140732308144127, -STORE, 140732308127744, 140732308140031, -STORE, 140241064300544, 140241064329215, -STORE, 140241064292352, 140241064300543, -STORE, 140241059975168, 140241062088703, -SNULL, 140241059975168, 140241059987455, -STORE, 140241059987456, 140241062088703, -STORE, 140241059975168, 140241059987455, -SNULL, 140241062080511, 140241062088703, -STORE, 140241059987456, 140241062080511, -STORE, 140241062080512, 140241062088703, -ERASE, 140241062080512, 140241062088703, -STORE, 140241062080512, 140241062088703, -STORE, 140241056178176, 140241059975167, -SNULL, 140241056178176, 140241057837055, -STORE, 140241057837056, 140241059975167, -STORE, 140241056178176, 140241057837055, -SNULL, 140241059934207, 140241059975167, -STORE, 140241057837056, 140241059934207, -STORE, 140241059934208, 140241059975167, -SNULL, 140241059934208, 140241059958783, -STORE, 140241059958784, 140241059975167, -STORE, 140241059934208, 140241059958783, -ERASE, 140241059934208, 140241059958783, -STORE, 140241059934208, 140241059958783, -ERASE, 140241059958784, 140241059975167, -STORE, 140241059958784, 140241059975167, -STORE, 140241064284160, 140241064300543, -SNULL, 140241059950591, 140241059958783, -STORE, 140241059934208, 140241059950591, -STORE, 140241059950592, 140241059958783, -SNULL, 140241062084607, 140241062088703, -STORE, 140241062080512, 140241062084607, -STORE, 140241062084608, 140241062088703, -SNULL, 93831419944959, 93831419953151, -STORE, 93831419940864, 93831419944959, -STORE, 93831419944960, 93831419953151, -SNULL, 140241064333311, 140241064337407, -STORE, 140241064329216, 140241064333311, -STORE, 140241064333312, 140241064337407, -ERASE, 140241064300544, 140241064329215, -STORE, 93831435284480, 93831435419647, -STORE, 140241062600704, 140241064284159, -STORE, 93831435284480, 93831435554815, -STORE, 93831435284480, 93831435689983, -STORE, 93831435284480, 93831435862015, -SNULL, 93831435837439, 93831435862015, -STORE, 93831435284480, 93831435837439, -STORE, 93831435837440, 93831435862015, -ERASE, 93831435837440, 93831435862015, -STORE, 93831435284480, 93831435972607, -STORE, 93831435284480, 93831436107775, -SNULL, 93831436091391, 93831436107775, -STORE, 93831435284480, 93831436091391, -STORE, 93831436091392, 93831436107775, -ERASE, 93831436091392, 93831436107775, -STORE, 93831435284480, 93831436226559, -STORE, 93831435284480, 93831436361727, -STORE, 93831435284480, 93831436505087, -STORE, 93831435284480, 93831436652543, -STORE, 93831435284480, 93831436787711, -STORE, 93831435284480, 93831436926975, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140728546775040, 140737488351231, -SNULL, 140728546783231, 140737488351231, -STORE, 140728546775040, 140728546783231, -STORE, 140728546643968, 140728546783231, -STORE, 94456178786304, 94456181010431, -SNULL, 94456178896895, 94456181010431, -STORE, 94456178786304, 94456178896895, -STORE, 94456178896896, 94456181010431, -ERASE, 94456178896896, 94456181010431, -STORE, 94456180989952, 94456181002239, -STORE, 94456181002240, 94456181010431, -STORE, 140221893091328, 140221895344127, -SNULL, 140221893234687, 140221895344127, -STORE, 140221893091328, 140221893234687, -STORE, 140221893234688, 140221895344127, -ERASE, 140221893234688, 140221895344127, -STORE, 140221895331840, 140221895340031, -STORE, 140221895340032, 140221895344127, -STORE, 140728547803136, 140728547807231, -STORE, 140728547790848, 140728547803135, -STORE, 140221895303168, 140221895331839, -STORE, 140221895294976, 140221895303167, -STORE, 140221889294336, 140221893091327, -SNULL, 140221889294336, 140221890953215, -STORE, 140221890953216, 140221893091327, -STORE, 140221889294336, 140221890953215, -SNULL, 140221893050367, 140221893091327, -STORE, 140221890953216, 140221893050367, -STORE, 140221893050368, 140221893091327, -SNULL, 140221893050368, 140221893074943, -STORE, 140221893074944, 140221893091327, -STORE, 140221893050368, 140221893074943, -ERASE, 140221893050368, 140221893074943, -STORE, 140221893050368, 140221893074943, -ERASE, 140221893074944, 140221893091327, -STORE, 140221893074944, 140221893091327, -SNULL, 140221893066751, 140221893074943, -STORE, 140221893050368, 140221893066751, -STORE, 140221893066752, 140221893074943, -SNULL, 94456180998143, 94456181002239, -STORE, 94456180989952, 94456180998143, -STORE, 94456180998144, 94456181002239, -SNULL, 140221895335935, 140221895340031, -STORE, 140221895331840, 140221895335935, -STORE, 140221895335936, 140221895340031, -ERASE, 140221895303168, 140221895331839, -STORE, 94456203730944, 94456203866111, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140734438637568, 140737488351231, -SNULL, 140734438645759, 140737488351231, -STORE, 140734438637568, 140734438645759, -STORE, 140734438506496, 140734438645759, -STORE, 94652233351168, 94652235575295, -SNULL, 94652233461759, 94652235575295, -STORE, 94652233351168, 94652233461759, -STORE, 94652233461760, 94652235575295, -ERASE, 94652233461760, 94652235575295, -STORE, 94652235554816, 94652235567103, -STORE, 94652235567104, 94652235575295, -STORE, 140536493195264, 140536495448063, -SNULL, 140536493338623, 140536495448063, -STORE, 140536493195264, 140536493338623, -STORE, 140536493338624, 140536495448063, -ERASE, 140536493338624, 140536495448063, -STORE, 140536495435776, 140536495443967, -STORE, 140536495443968, 140536495448063, -STORE, 140734439002112, 140734439006207, -STORE, 140734438989824, 140734439002111, -STORE, 140536495407104, 140536495435775, -STORE, 140536495398912, 140536495407103, -STORE, 140536489398272, 140536493195263, -SNULL, 140536489398272, 140536491057151, -STORE, 140536491057152, 140536493195263, -STORE, 140536489398272, 140536491057151, -SNULL, 140536493154303, 140536493195263, -STORE, 140536491057152, 140536493154303, -STORE, 140536493154304, 140536493195263, -SNULL, 140536493154304, 140536493178879, -STORE, 140536493178880, 140536493195263, -STORE, 140536493154304, 140536493178879, -ERASE, 140536493154304, 140536493178879, -STORE, 140536493154304, 140536493178879, -ERASE, 140536493178880, 140536493195263, -STORE, 140536493178880, 140536493195263, -SNULL, 140536493170687, 140536493178879, -STORE, 140536493154304, 140536493170687, -STORE, 140536493170688, 140536493178879, -SNULL, 94652235563007, 94652235567103, -STORE, 94652235554816, 94652235563007, -STORE, 94652235563008, 94652235567103, -SNULL, 140536495439871, 140536495443967, -STORE, 140536495435776, 140536495439871, -STORE, 140536495439872, 140536495443967, -ERASE, 140536495407104, 140536495435775, -STORE, 94652265619456, 94652265754623, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140721814200320, 140737488351231, -SNULL, 140721814208511, 140737488351231, -STORE, 140721814200320, 140721814208511, -STORE, 140721814069248, 140721814208511, -STORE, 94062800691200, 94062802915327, -SNULL, 94062800801791, 94062802915327, -STORE, 94062800691200, 94062800801791, -STORE, 94062800801792, 94062802915327, -ERASE, 94062800801792, 94062802915327, -STORE, 94062802894848, 94062802907135, -STORE, 94062802907136, 94062802915327, -STORE, 139717739700224, 139717741953023, -SNULL, 139717739843583, 139717741953023, -STORE, 139717739700224, 139717739843583, -STORE, 139717739843584, 139717741953023, -ERASE, 139717739843584, 139717741953023, -STORE, 139717741940736, 139717741948927, -STORE, 139717741948928, 139717741953023, -STORE, 140721814224896, 140721814228991, -STORE, 140721814212608, 140721814224895, -STORE, 139717741912064, 139717741940735, -STORE, 139717741903872, 139717741912063, -STORE, 139717735903232, 139717739700223, -SNULL, 139717735903232, 139717737562111, -STORE, 139717737562112, 139717739700223, -STORE, 139717735903232, 139717737562111, -SNULL, 139717739659263, 139717739700223, -STORE, 139717737562112, 139717739659263, -STORE, 139717739659264, 139717739700223, -SNULL, 139717739659264, 139717739683839, -STORE, 139717739683840, 139717739700223, -STORE, 139717739659264, 139717739683839, -ERASE, 139717739659264, 139717739683839, -STORE, 139717739659264, 139717739683839, -ERASE, 139717739683840, 139717739700223, -STORE, 139717739683840, 139717739700223, -SNULL, 139717739675647, 139717739683839, -STORE, 139717739659264, 139717739675647, -STORE, 139717739675648, 139717739683839, -SNULL, 94062802903039, 94062802907135, -STORE, 94062802894848, 94062802903039, -STORE, 94062802903040, 94062802907135, -SNULL, 139717741944831, 139717741948927, -STORE, 139717741940736, 139717741944831, -STORE, 139717741944832, 139717741948927, -ERASE, 139717741912064, 139717741940735, -STORE, 94062814060544, 94062814195711, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140723945754624, 140737488351231, -SNULL, 140723945762815, 140737488351231, -STORE, 140723945754624, 140723945762815, -STORE, 140723945623552, 140723945762815, -STORE, 94886119305216, 94886121639935, -SNULL, 94886119518207, 94886121639935, -STORE, 94886119305216, 94886119518207, -STORE, 94886119518208, 94886121639935, -ERASE, 94886119518208, 94886121639935, -STORE, 94886121615360, 94886121627647, -STORE, 94886121627648, 94886121639935, -STORE, 140152532131840, 140152534384639, -SNULL, 140152532275199, 140152534384639, -STORE, 140152532131840, 140152532275199, -STORE, 140152532275200, 140152534384639, -ERASE, 140152532275200, 140152534384639, -STORE, 140152534372352, 140152534380543, -STORE, 140152534380544, 140152534384639, -STORE, 140723946213376, 140723946217471, -STORE, 140723946201088, 140723946213375, -STORE, 140152534343680, 140152534372351, -STORE, 140152534335488, 140152534343679, -STORE, 140152530018304, 140152532131839, -SNULL, 140152530018304, 140152530030591, -STORE, 140152530030592, 140152532131839, -STORE, 140152530018304, 140152530030591, -SNULL, 140152532123647, 140152532131839, -STORE, 140152530030592, 140152532123647, -STORE, 140152532123648, 140152532131839, -ERASE, 140152532123648, 140152532131839, -STORE, 140152532123648, 140152532131839, -STORE, 140152526221312, 140152530018303, -SNULL, 140152526221312, 140152527880191, -STORE, 140152527880192, 140152530018303, -STORE, 140152526221312, 140152527880191, -SNULL, 140152529977343, 140152530018303, -STORE, 140152527880192, 140152529977343, -STORE, 140152529977344, 140152530018303, -SNULL, 140152529977344, 140152530001919, -STORE, 140152530001920, 140152530018303, -STORE, 140152529977344, 140152530001919, -ERASE, 140152529977344, 140152530001919, -STORE, 140152529977344, 140152530001919, -ERASE, 140152530001920, 140152530018303, -STORE, 140152530001920, 140152530018303, -STORE, 140152534327296, 140152534343679, -SNULL, 140152529993727, 140152530001919, -STORE, 140152529977344, 140152529993727, -STORE, 140152529993728, 140152530001919, -SNULL, 140152532127743, 140152532131839, -STORE, 140152532123648, 140152532127743, -STORE, 140152532127744, 140152532131839, -SNULL, 94886121619455, 94886121627647, -STORE, 94886121615360, 94886121619455, -STORE, 94886121619456, 94886121627647, -SNULL, 140152534376447, 140152534380543, -STORE, 140152534372352, 140152534376447, -STORE, 140152534376448, 140152534380543, -ERASE, 140152534343680, 140152534372351, -STORE, 94886129770496, 94886129905663, -STORE, 140152532643840, 140152534327295, -STORE, 94886129770496, 94886130040831, -STORE, 94886129770496, 94886130175999, -STORE, 94886129770496, 94886130348031, -SNULL, 94886130323455, 94886130348031, -STORE, 94886129770496, 94886130323455, -STORE, 94886130323456, 94886130348031, -ERASE, 94886130323456, 94886130348031, -STORE, 94886129770496, 94886130458623, -STORE, 94886129770496, 94886130606079, -SNULL, 94886130573311, 94886130606079, -STORE, 94886129770496, 94886130573311, -STORE, 94886130573312, 94886130606079, -ERASE, 94886130573312, 94886130606079, -STORE, 94886129770496, 94886130724863, -STORE, 94886129770496, 94886130876415, -STORE, 94886129770496, 94886131023871, -STORE, 94886129770496, 94886131175423, -STORE, 94886129770496, 94886131318783, -STORE, 94886129770496, 94886131453951, -SNULL, 94886131449855, 94886131453951, -STORE, 94886129770496, 94886131449855, -STORE, 94886131449856, 94886131453951, -ERASE, 94886131449856, 94886131453951, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140735450779648, 140737488351231, -SNULL, 140735450787839, 140737488351231, -STORE, 140735450779648, 140735450787839, -STORE, 140735450648576, 140735450787839, -STORE, 93947794079744, 93947796414463, -SNULL, 93947794292735, 93947796414463, -STORE, 93947794079744, 93947794292735, -STORE, 93947794292736, 93947796414463, -ERASE, 93947794292736, 93947796414463, -STORE, 93947796389888, 93947796402175, -STORE, 93947796402176, 93947796414463, -STORE, 139841993433088, 139841995685887, -SNULL, 139841993576447, 139841995685887, -STORE, 139841993433088, 139841993576447, -STORE, 139841993576448, 139841995685887, -ERASE, 139841993576448, 139841995685887, -STORE, 139841995673600, 139841995681791, -STORE, 139841995681792, 139841995685887, -STORE, 140735451308032, 140735451312127, -STORE, 140735451295744, 140735451308031, -STORE, 139841995644928, 139841995673599, -STORE, 139841995636736, 139841995644927, -STORE, 139841991319552, 139841993433087, -SNULL, 139841991319552, 139841991331839, -STORE, 139841991331840, 139841993433087, -STORE, 139841991319552, 139841991331839, -SNULL, 139841993424895, 139841993433087, -STORE, 139841991331840, 139841993424895, -STORE, 139841993424896, 139841993433087, -ERASE, 139841993424896, 139841993433087, -STORE, 139841993424896, 139841993433087, -STORE, 139841987522560, 139841991319551, -SNULL, 139841987522560, 139841989181439, -STORE, 139841989181440, 139841991319551, -STORE, 139841987522560, 139841989181439, -SNULL, 139841991278591, 139841991319551, -STORE, 139841989181440, 139841991278591, -STORE, 139841991278592, 139841991319551, -SNULL, 139841991278592, 139841991303167, -STORE, 139841991303168, 139841991319551, -STORE, 139841991278592, 139841991303167, -ERASE, 139841991278592, 139841991303167, -STORE, 139841991278592, 139841991303167, -ERASE, 139841991303168, 139841991319551, -STORE, 139841991303168, 139841991319551, -STORE, 139841995628544, 139841995644927, -SNULL, 139841991294975, 139841991303167, -STORE, 139841991278592, 139841991294975, -STORE, 139841991294976, 139841991303167, -SNULL, 139841993428991, 139841993433087, -STORE, 139841993424896, 139841993428991, -STORE, 139841993428992, 139841993433087, -SNULL, 93947796393983, 93947796402175, -STORE, 93947796389888, 93947796393983, -STORE, 93947796393984, 93947796402175, -SNULL, 139841995677695, 139841995681791, -STORE, 139841995673600, 139841995677695, -STORE, 139841995677696, 139841995681791, -ERASE, 139841995644928, 139841995673599, -STORE, 93947829739520, 93947829874687, -STORE, 139841993945088, 139841995628543, -STORE, 93947829739520, 93947830009855, -STORE, 93947829739520, 93947830145023, -STORE, 94659351814144, 94659352027135, -STORE, 94659354124288, 94659354128383, -STORE, 94659354128384, 94659354136575, -STORE, 94659354136576, 94659354148863, -STORE, 94659383476224, 94659385057279, -STORE, 139959054557184, 139959056216063, -STORE, 139959056216064, 139959058313215, -STORE, 139959058313216, 139959058329599, -STORE, 139959058329600, 139959058337791, -STORE, 139959058337792, 139959058354175, -STORE, 139959058354176, 139959058366463, -STORE, 139959058366464, 139959060459519, -STORE, 139959060459520, 139959060463615, -STORE, 139959060463616, 139959060467711, -STORE, 139959060467712, 139959060611071, -STORE, 139959060979712, 139959062663167, -STORE, 139959062663168, 139959062679551, -STORE, 139959062708224, 139959062712319, -STORE, 139959062712320, 139959062716415, -STORE, 139959062716416, 139959062720511, -STORE, 140735532539904, 140735532679167, -STORE, 140735532830720, 140735532843007, -STORE, 140735532843008, 140735532847103, -STORE, 93894361829376, 93894362042367, -STORE, 93894364139520, 93894364143615, -STORE, 93894364143616, 93894364151807, -STORE, 93894364151808, 93894364164095, -STORE, 93894396944384, 93894397624319, -STORE, 140075612573696, 140075614232575, -STORE, 140075614232576, 140075616329727, -STORE, 140075616329728, 140075616346111, -STORE, 140075616346112, 140075616354303, -STORE, 140075616354304, 140075616370687, -STORE, 140075616370688, 140075616382975, -STORE, 140075616382976, 140075618476031, -STORE, 140075618476032, 140075618480127, -STORE, 140075618480128, 140075618484223, -STORE, 140075618484224, 140075618627583, -STORE, 140075618996224, 140075620679679, -STORE, 140075620679680, 140075620696063, -STORE, 140075620724736, 140075620728831, -STORE, 140075620728832, 140075620732927, -STORE, 140075620732928, 140075620737023, -STORE, 140720830312448, 140720830451711, -STORE, 140720830631936, 140720830644223, -STORE, 140720830644224, 140720830648319, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140735116226560, 140737488351231, -SNULL, 140735116234751, 140737488351231, -STORE, 140735116226560, 140735116234751, -STORE, 140735116095488, 140735116234751, -STORE, 94873398054912, 94873400279039, -SNULL, 94873398165503, 94873400279039, -STORE, 94873398054912, 94873398165503, -STORE, 94873398165504, 94873400279039, -ERASE, 94873398165504, 94873400279039, -STORE, 94873400258560, 94873400270847, -STORE, 94873400270848, 94873400279039, -STORE, 140303828606976, 140303830859775, -SNULL, 140303828750335, 140303830859775, -STORE, 140303828606976, 140303828750335, -STORE, 140303828750336, 140303830859775, -ERASE, 140303828750336, 140303830859775, -STORE, 140303830847488, 140303830855679, -STORE, 140303830855680, 140303830859775, -STORE, 140735116251136, 140735116255231, -STORE, 140735116238848, 140735116251135, -STORE, 140303830818816, 140303830847487, -STORE, 140303830810624, 140303830818815, -STORE, 140303824809984, 140303828606975, -SNULL, 140303824809984, 140303826468863, -STORE, 140303826468864, 140303828606975, -STORE, 140303824809984, 140303826468863, -SNULL, 140303828566015, 140303828606975, -STORE, 140303826468864, 140303828566015, -STORE, 140303828566016, 140303828606975, -SNULL, 140303828566016, 140303828590591, -STORE, 140303828590592, 140303828606975, -STORE, 140303828566016, 140303828590591, -ERASE, 140303828566016, 140303828590591, -STORE, 140303828566016, 140303828590591, -ERASE, 140303828590592, 140303828606975, -STORE, 140303828590592, 140303828606975, -SNULL, 140303828582399, 140303828590591, -STORE, 140303828566016, 140303828582399, -STORE, 140303828582400, 140303828590591, -SNULL, 94873400266751, 94873400270847, -STORE, 94873400258560, 94873400266751, -STORE, 94873400266752, 94873400270847, -SNULL, 140303830851583, 140303830855679, -STORE, 140303830847488, 140303830851583, -STORE, 140303830851584, 140303830855679, -ERASE, 140303830818816, 140303830847487, -STORE, 94873413713920, 94873413849087, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140732349956096, 140737488351231, -SNULL, 140732349964287, 140737488351231, -STORE, 140732349956096, 140732349964287, -STORE, 140732349825024, 140732349964287, -STORE, 94009652736000, 94009655070719, -SNULL, 94009652948991, 94009655070719, -STORE, 94009652736000, 94009652948991, -STORE, 94009652948992, 94009655070719, -ERASE, 94009652948992, 94009655070719, -STORE, 94009655046144, 94009655058431, -STORE, 94009655058432, 94009655070719, -STORE, 140295688531968, 140295690784767, -SNULL, 140295688675327, 140295690784767, -STORE, 140295688531968, 140295688675327, -STORE, 140295688675328, 140295690784767, -ERASE, 140295688675328, 140295690784767, -STORE, 140295690772480, 140295690780671, -STORE, 140295690780672, 140295690784767, -STORE, 140732350005248, 140732350009343, -STORE, 140732349992960, 140732350005247, -STORE, 140295690743808, 140295690772479, -STORE, 140295690735616, 140295690743807, -STORE, 140295686418432, 140295688531967, -SNULL, 140295686418432, 140295686430719, -STORE, 140295686430720, 140295688531967, -STORE, 140295686418432, 140295686430719, -SNULL, 140295688523775, 140295688531967, -STORE, 140295686430720, 140295688523775, -STORE, 140295688523776, 140295688531967, -ERASE, 140295688523776, 140295688531967, -STORE, 140295688523776, 140295688531967, -STORE, 140295682621440, 140295686418431, -SNULL, 140295682621440, 140295684280319, -STORE, 140295684280320, 140295686418431, -STORE, 140295682621440, 140295684280319, -SNULL, 140295686377471, 140295686418431, -STORE, 140295684280320, 140295686377471, -STORE, 140295686377472, 140295686418431, -SNULL, 140295686377472, 140295686402047, -STORE, 140295686402048, 140295686418431, -STORE, 140295686377472, 140295686402047, -ERASE, 140295686377472, 140295686402047, -STORE, 140295686377472, 140295686402047, -ERASE, 140295686402048, 140295686418431, -STORE, 140295686402048, 140295686418431, -STORE, 140295690727424, 140295690743807, -SNULL, 140295686393855, 140295686402047, -STORE, 140295686377472, 140295686393855, -STORE, 140295686393856, 140295686402047, -SNULL, 140295688527871, 140295688531967, -STORE, 140295688523776, 140295688527871, -STORE, 140295688527872, 140295688531967, -SNULL, 94009655050239, 94009655058431, -STORE, 94009655046144, 94009655050239, -STORE, 94009655050240, 94009655058431, -SNULL, 140295690776575, 140295690780671, -STORE, 140295690772480, 140295690776575, -STORE, 140295690776576, 140295690780671, -ERASE, 140295690743808, 140295690772479, -STORE, 94009672114176, 94009672249343, -STORE, 140295689043968, 140295690727423, -STORE, 94009672114176, 94009672384511, -STORE, 94009672114176, 94009672519679, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140722376515584, 140737488351231, -SNULL, 140722376523775, 140737488351231, -STORE, 140722376515584, 140722376523775, -STORE, 140722376384512, 140722376523775, -STORE, 94089815773184, 94089818107903, -SNULL, 94089815986175, 94089818107903, -STORE, 94089815773184, 94089815986175, -STORE, 94089815986176, 94089818107903, -ERASE, 94089815986176, 94089818107903, -STORE, 94089818083328, 94089818095615, -STORE, 94089818095616, 94089818107903, -STORE, 140265595711488, 140265597964287, -SNULL, 140265595854847, 140265597964287, -STORE, 140265595711488, 140265595854847, -STORE, 140265595854848, 140265597964287, -ERASE, 140265595854848, 140265597964287, -STORE, 140265597952000, 140265597960191, -STORE, 140265597960192, 140265597964287, -STORE, 140722378297344, 140722378301439, -STORE, 140722378285056, 140722378297343, -STORE, 140265597923328, 140265597951999, -STORE, 140265597915136, 140265597923327, -STORE, 140265593597952, 140265595711487, -SNULL, 140265593597952, 140265593610239, -STORE, 140265593610240, 140265595711487, -STORE, 140265593597952, 140265593610239, -SNULL, 140265595703295, 140265595711487, -STORE, 140265593610240, 140265595703295, -STORE, 140265595703296, 140265595711487, -ERASE, 140265595703296, 140265595711487, -STORE, 140265595703296, 140265595711487, -STORE, 140265589800960, 140265593597951, -SNULL, 140265589800960, 140265591459839, -STORE, 140265591459840, 140265593597951, -STORE, 140265589800960, 140265591459839, -SNULL, 140265593556991, 140265593597951, -STORE, 140265591459840, 140265593556991, -STORE, 140265593556992, 140265593597951, -SNULL, 140265593556992, 140265593581567, -STORE, 140265593581568, 140265593597951, -STORE, 140265593556992, 140265593581567, -ERASE, 140265593556992, 140265593581567, -STORE, 140265593556992, 140265593581567, -ERASE, 140265593581568, 140265593597951, -STORE, 140265593581568, 140265593597951, -STORE, 140265597906944, 140265597923327, -SNULL, 140265593573375, 140265593581567, -STORE, 140265593556992, 140265593573375, -STORE, 140265593573376, 140265593581567, -SNULL, 140265595707391, 140265595711487, -STORE, 140265595703296, 140265595707391, -STORE, 140265595707392, 140265595711487, -SNULL, 94089818087423, 94089818095615, -STORE, 94089818083328, 94089818087423, -STORE, 94089818087424, 94089818095615, -SNULL, 140265597956095, 140265597960191, -STORE, 140265597952000, 140265597956095, -STORE, 140265597956096, 140265597960191, -ERASE, 140265597923328, 140265597951999, -STORE, 94089837146112, 94089837281279, -STORE, 140265596223488, 140265597906943, -STORE, 94089837146112, 94089837416447, -STORE, 94089837146112, 94089837551615, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140735265218560, 140737488351231, -SNULL, 140735265226751, 140737488351231, -STORE, 140735265218560, 140735265226751, -STORE, 140735265087488, 140735265226751, -STORE, 94250422370304, 94250424705023, -SNULL, 94250422583295, 94250424705023, -STORE, 94250422370304, 94250422583295, -STORE, 94250422583296, 94250424705023, -ERASE, 94250422583296, 94250424705023, -STORE, 94250424680448, 94250424692735, -STORE, 94250424692736, 94250424705023, -STORE, 140344442474496, 140344444727295, -SNULL, 140344442617855, 140344444727295, -STORE, 140344442474496, 140344442617855, -STORE, 140344442617856, 140344444727295, -ERASE, 140344442617856, 140344444727295, -STORE, 140344444715008, 140344444723199, -STORE, 140344444723200, 140344444727295, -STORE, 140735265341440, 140735265345535, -STORE, 140735265329152, 140735265341439, -STORE, 140344444686336, 140344444715007, -STORE, 140344444678144, 140344444686335, -STORE, 140344440360960, 140344442474495, -SNULL, 140344440360960, 140344440373247, -STORE, 140344440373248, 140344442474495, -STORE, 140344440360960, 140344440373247, -SNULL, 140344442466303, 140344442474495, -STORE, 140344440373248, 140344442466303, -STORE, 140344442466304, 140344442474495, -ERASE, 140344442466304, 140344442474495, -STORE, 140344442466304, 140344442474495, -STORE, 140344436563968, 140344440360959, -SNULL, 140344436563968, 140344438222847, -STORE, 140344438222848, 140344440360959, -STORE, 140344436563968, 140344438222847, -SNULL, 140344440319999, 140344440360959, -STORE, 140344438222848, 140344440319999, -STORE, 140344440320000, 140344440360959, -SNULL, 140344440320000, 140344440344575, -STORE, 140344440344576, 140344440360959, -STORE, 140344440320000, 140344440344575, -ERASE, 140344440320000, 140344440344575, -STORE, 140344440320000, 140344440344575, -ERASE, 140344440344576, 140344440360959, -STORE, 140344440344576, 140344440360959, -STORE, 140344444669952, 140344444686335, -SNULL, 140344440336383, 140344440344575, -STORE, 140344440320000, 140344440336383, -STORE, 140344440336384, 140344440344575, -SNULL, 140344442470399, 140344442474495, -STORE, 140344442466304, 140344442470399, -STORE, 140344442470400, 140344442474495, -SNULL, 94250424684543, 94250424692735, -STORE, 94250424680448, 94250424684543, -STORE, 94250424684544, 94250424692735, -SNULL, 140344444719103, 140344444723199, -STORE, 140344444715008, 140344444719103, -STORE, 140344444719104, 140344444723199, -ERASE, 140344444686336, 140344444715007, -STORE, 94250445512704, 94250445647871, -STORE, 140344442986496, 140344444669951, -STORE, 94250445512704, 94250445783039, -STORE, 94250445512704, 94250445918207, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140725762719744, 140737488351231, -SNULL, 140725762727935, 140737488351231, -STORE, 140725762719744, 140725762727935, -STORE, 140725762588672, 140725762727935, -STORE, 94819009097728, 94819011432447, -SNULL, 94819009310719, 94819011432447, -STORE, 94819009097728, 94819009310719, -STORE, 94819009310720, 94819011432447, -ERASE, 94819009310720, 94819011432447, -STORE, 94819011407872, 94819011420159, -STORE, 94819011420160, 94819011432447, -STORE, 139987985596416, 139987987849215, -SNULL, 139987985739775, 139987987849215, -STORE, 139987985596416, 139987985739775, -STORE, 139987985739776, 139987987849215, -ERASE, 139987985739776, 139987987849215, -STORE, 139987987836928, 139987987845119, -STORE, 139987987845120, 139987987849215, -STORE, 140725763072000, 140725763076095, -STORE, 140725763059712, 140725763071999, -STORE, 139987987808256, 139987987836927, -STORE, 139987987800064, 139987987808255, -STORE, 139987983482880, 139987985596415, -SNULL, 139987983482880, 139987983495167, -STORE, 139987983495168, 139987985596415, -STORE, 139987983482880, 139987983495167, -SNULL, 139987985588223, 139987985596415, -STORE, 139987983495168, 139987985588223, -STORE, 139987985588224, 139987985596415, -ERASE, 139987985588224, 139987985596415, -STORE, 139987985588224, 139987985596415, -STORE, 139987979685888, 139987983482879, -SNULL, 139987979685888, 139987981344767, -STORE, 139987981344768, 139987983482879, -STORE, 139987979685888, 139987981344767, -SNULL, 139987983441919, 139987983482879, -STORE, 139987981344768, 139987983441919, -STORE, 139987983441920, 139987983482879, -SNULL, 139987983441920, 139987983466495, -STORE, 139987983466496, 139987983482879, -STORE, 139987983441920, 139987983466495, -ERASE, 139987983441920, 139987983466495, -STORE, 139987983441920, 139987983466495, -ERASE, 139987983466496, 139987983482879, -STORE, 139987983466496, 139987983482879, -STORE, 139987987791872, 139987987808255, -SNULL, 139987983458303, 139987983466495, -STORE, 139987983441920, 139987983458303, -STORE, 139987983458304, 139987983466495, -SNULL, 139987985592319, 139987985596415, -STORE, 139987985588224, 139987985592319, -STORE, 139987985592320, 139987985596415, -SNULL, 94819011411967, 94819011420159, -STORE, 94819011407872, 94819011411967, -STORE, 94819011411968, 94819011420159, -SNULL, 139987987841023, 139987987845119, -STORE, 139987987836928, 139987987841023, -STORE, 139987987841024, 139987987845119, -ERASE, 139987987808256, 139987987836927, -STORE, 94819028176896, 94819028312063, -STORE, 139987986108416, 139987987791871, -STORE, 94819028176896, 94819028447231, -STORE, 94819028176896, 94819028582399, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140722475413504, 140737488351231, -SNULL, 140722475421695, 140737488351231, -STORE, 140722475413504, 140722475421695, -STORE, 140722475282432, 140722475421695, -STORE, 94620599119872, 94620601343999, -SNULL, 94620599230463, 94620601343999, -STORE, 94620599119872, 94620599230463, -STORE, 94620599230464, 94620601343999, -ERASE, 94620599230464, 94620601343999, -STORE, 94620601323520, 94620601335807, -STORE, 94620601335808, 94620601343999, -STORE, 139891763060736, 139891765313535, -SNULL, 139891763204095, 139891765313535, -STORE, 139891763060736, 139891763204095, -STORE, 139891763204096, 139891765313535, -ERASE, 139891763204096, 139891765313535, -STORE, 139891765301248, 139891765309439, -STORE, 139891765309440, 139891765313535, -STORE, 140722475700224, 140722475704319, -STORE, 140722475687936, 140722475700223, -STORE, 139891765272576, 139891765301247, -STORE, 139891765264384, 139891765272575, -STORE, 139891759263744, 139891763060735, -SNULL, 139891759263744, 139891760922623, -STORE, 139891760922624, 139891763060735, -STORE, 139891759263744, 139891760922623, -SNULL, 139891763019775, 139891763060735, -STORE, 139891760922624, 139891763019775, -STORE, 139891763019776, 139891763060735, -SNULL, 139891763019776, 139891763044351, -STORE, 139891763044352, 139891763060735, -STORE, 139891763019776, 139891763044351, -ERASE, 139891763019776, 139891763044351, -STORE, 139891763019776, 139891763044351, -ERASE, 139891763044352, 139891763060735, -STORE, 139891763044352, 139891763060735, -SNULL, 139891763036159, 139891763044351, -STORE, 139891763019776, 139891763036159, -STORE, 139891763036160, 139891763044351, -SNULL, 94620601331711, 94620601335807, -STORE, 94620601323520, 94620601331711, -STORE, 94620601331712, 94620601335807, -SNULL, 139891765305343, 139891765309439, -STORE, 139891765301248, 139891765305343, -STORE, 139891765305344, 139891765309439, -ERASE, 139891765272576, 139891765301247, -STORE, 94620610027520, 94620610162687, -STORE, 94031976210432, 94031976423423, -STORE, 94031978520576, 94031978524671, -STORE, 94031978524672, 94031978532863, -STORE, 94031978532864, 94031978545151, -STORE, 94031990398976, 94031992565759, -STORE, 140336240640000, 140336242298879, -STORE, 140336242298880, 140336244396031, -STORE, 140336244396032, 140336244412415, -STORE, 140336244412416, 140336244420607, -STORE, 140336244420608, 140336244436991, -STORE, 140336244436992, 140336244449279, -STORE, 140336244449280, 140336246542335, -STORE, 140336246542336, 140336246546431, -STORE, 140336246546432, 140336246550527, -STORE, 140336246550528, 140336246693887, -STORE, 140336247062528, 140336248745983, -STORE, 140336248745984, 140336248762367, -STORE, 140336248791040, 140336248795135, -STORE, 140336248795136, 140336248799231, -STORE, 140336248799232, 140336248803327, -STORE, 140728500064256, 140728500203519, -STORE, 140728501501952, 140728501514239, -STORE, 140728501514240, 140728501518335, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140730503987200, 140737488351231, -SNULL, 140730503995391, 140737488351231, -STORE, 140730503987200, 140730503995391, -STORE, 140730503856128, 140730503995391, -STORE, 93866544205824, 93866546429951, -SNULL, 93866544316415, 93866546429951, -STORE, 93866544205824, 93866544316415, -STORE, 93866544316416, 93866546429951, -ERASE, 93866544316416, 93866546429951, -STORE, 93866546409472, 93866546421759, -STORE, 93866546421760, 93866546429951, -STORE, 140216311959552, 140216314212351, -SNULL, 140216312102911, 140216314212351, -STORE, 140216311959552, 140216312102911, -STORE, 140216312102912, 140216314212351, -ERASE, 140216312102912, 140216314212351, -STORE, 140216314200064, 140216314208255, -STORE, 140216314208256, 140216314212351, -STORE, 140730504626176, 140730504630271, -STORE, 140730504613888, 140730504626175, -STORE, 140216314171392, 140216314200063, -STORE, 140216314163200, 140216314171391, -STORE, 140216308162560, 140216311959551, -SNULL, 140216308162560, 140216309821439, -STORE, 140216309821440, 140216311959551, -STORE, 140216308162560, 140216309821439, -SNULL, 140216311918591, 140216311959551, -STORE, 140216309821440, 140216311918591, -STORE, 140216311918592, 140216311959551, -SNULL, 140216311918592, 140216311943167, -STORE, 140216311943168, 140216311959551, -STORE, 140216311918592, 140216311943167, -ERASE, 140216311918592, 140216311943167, -STORE, 140216311918592, 140216311943167, -ERASE, 140216311943168, 140216311959551, -STORE, 140216311943168, 140216311959551, -SNULL, 140216311934975, 140216311943167, -STORE, 140216311918592, 140216311934975, -STORE, 140216311934976, 140216311943167, -SNULL, 93866546417663, 93866546421759, -STORE, 93866546409472, 93866546417663, -STORE, 93866546417664, 93866546421759, -SNULL, 140216314204159, 140216314208255, -STORE, 140216314200064, 140216314204159, -STORE, 140216314204160, 140216314208255, -ERASE, 140216314171392, 140216314200063, -STORE, 93866550386688, 93866550521855, -STORE, 94074292674560, 94074292887551, -STORE, 94074294984704, 94074294988799, -STORE, 94074294988800, 94074294996991, -STORE, 94074294996992, 94074295009279, -STORE, 94074300219392, 94074301378559, -STORE, 139781563256832, 139781564915711, -STORE, 139781564915712, 139781567012863, -STORE, 139781567012864, 139781567029247, -STORE, 139781567029248, 139781567037439, -STORE, 139781567037440, 139781567053823, -STORE, 139781567053824, 139781567066111, -STORE, 139781567066112, 139781569159167, -STORE, 139781569159168, 139781569163263, -STORE, 139781569163264, 139781569167359, -STORE, 139781569167360, 139781569310719, -STORE, 139781569679360, 139781571362815, -STORE, 139781571362816, 139781571379199, -STORE, 139781571407872, 139781571411967, -STORE, 139781571411968, 139781571416063, -STORE, 139781571416064, 139781571420159, -STORE, 140723688488960, 140723688628223, -STORE, 140723689005056, 140723689017343, -STORE, 140723689017344, 140723689021439, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140735189745664, 140737488351231, -SNULL, 140735189753855, 140737488351231, -STORE, 140735189745664, 140735189753855, -STORE, 140735189614592, 140735189753855, -STORE, 94172072177664, 94172074512383, -SNULL, 94172072390655, 94172074512383, -STORE, 94172072177664, 94172072390655, -STORE, 94172072390656, 94172074512383, -ERASE, 94172072390656, 94172074512383, -STORE, 94172074487808, 94172074500095, -STORE, 94172074500096, 94172074512383, -STORE, 140687827263488, 140687829516287, -SNULL, 140687827406847, 140687829516287, -STORE, 140687827263488, 140687827406847, -STORE, 140687827406848, 140687829516287, -ERASE, 140687827406848, 140687829516287, -STORE, 140687829504000, 140687829512191, -STORE, 140687829512192, 140687829516287, -STORE, 140735189766144, 140735189770239, -STORE, 140735189753856, 140735189766143, -STORE, 140687829475328, 140687829503999, -STORE, 140687829467136, 140687829475327, -STORE, 140687825149952, 140687827263487, -SNULL, 140687825149952, 140687825162239, -STORE, 140687825162240, 140687827263487, -STORE, 140687825149952, 140687825162239, -SNULL, 140687827255295, 140687827263487, -STORE, 140687825162240, 140687827255295, -STORE, 140687827255296, 140687827263487, -ERASE, 140687827255296, 140687827263487, -STORE, 140687827255296, 140687827263487, -STORE, 140687821352960, 140687825149951, -SNULL, 140687821352960, 140687823011839, -STORE, 140687823011840, 140687825149951, -STORE, 140687821352960, 140687823011839, -SNULL, 140687825108991, 140687825149951, -STORE, 140687823011840, 140687825108991, -STORE, 140687825108992, 140687825149951, -SNULL, 140687825108992, 140687825133567, -STORE, 140687825133568, 140687825149951, -STORE, 140687825108992, 140687825133567, -ERASE, 140687825108992, 140687825133567, -STORE, 140687825108992, 140687825133567, -ERASE, 140687825133568, 140687825149951, -STORE, 140687825133568, 140687825149951, -STORE, 140687829458944, 140687829475327, -SNULL, 140687825125375, 140687825133567, -STORE, 140687825108992, 140687825125375, -STORE, 140687825125376, 140687825133567, -SNULL, 140687827259391, 140687827263487, -STORE, 140687827255296, 140687827259391, -STORE, 140687827259392, 140687827263487, -SNULL, 94172074491903, 94172074500095, -STORE, 94172074487808, 94172074491903, -STORE, 94172074491904, 94172074500095, -SNULL, 140687829508095, 140687829512191, -STORE, 140687829504000, 140687829508095, -STORE, 140687829508096, 140687829512191, -ERASE, 140687829475328, 140687829503999, -STORE, 94172092432384, 94172092567551, -STORE, 140687827775488, 140687829458943, -STORE, 94172092432384, 94172092702719, -STORE, 94172092432384, 94172092837887, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140737229504512, 140737488351231, -SNULL, 140737229512703, 140737488351231, -STORE, 140737229504512, 140737229512703, -STORE, 140737229373440, 140737229512703, -STORE, 94155246866432, 94155249090559, -SNULL, 94155246977023, 94155249090559, -STORE, 94155246866432, 94155246977023, -STORE, 94155246977024, 94155249090559, -ERASE, 94155246977024, 94155249090559, -STORE, 94155249070080, 94155249082367, -STORE, 94155249082368, 94155249090559, -STORE, 140640993693696, 140640995946495, -SNULL, 140640993837055, 140640995946495, -STORE, 140640993693696, 140640993837055, -STORE, 140640993837056, 140640995946495, -ERASE, 140640993837056, 140640995946495, -STORE, 140640995934208, 140640995942399, -STORE, 140640995942400, 140640995946495, -STORE, 140737230004224, 140737230008319, -STORE, 140737229991936, 140737230004223, -STORE, 140640995905536, 140640995934207, -STORE, 140640995897344, 140640995905535, -STORE, 140640989896704, 140640993693695, -SNULL, 140640989896704, 140640991555583, -STORE, 140640991555584, 140640993693695, -STORE, 140640989896704, 140640991555583, -SNULL, 140640993652735, 140640993693695, -STORE, 140640991555584, 140640993652735, -STORE, 140640993652736, 140640993693695, -SNULL, 140640993652736, 140640993677311, -STORE, 140640993677312, 140640993693695, -STORE, 140640993652736, 140640993677311, -ERASE, 140640993652736, 140640993677311, -STORE, 140640993652736, 140640993677311, -ERASE, 140640993677312, 140640993693695, -STORE, 140640993677312, 140640993693695, -SNULL, 140640993669119, 140640993677311, -STORE, 140640993652736, 140640993669119, -STORE, 140640993669120, 140640993677311, -SNULL, 94155249078271, 94155249082367, -STORE, 94155249070080, 94155249078271, -STORE, 94155249078272, 94155249082367, -SNULL, 140640995938303, 140640995942399, -STORE, 140640995934208, 140640995938303, -STORE, 140640995938304, 140640995942399, -ERASE, 140640995905536, 140640995934207, -STORE, 94155281035264, 94155281170431, -STORE, 94088066453504, 94088066564095, -STORE, 94088068657152, 94088068665343, -STORE, 94088068665344, 94088068669439, -STORE, 94088068669440, 94088068677631, -STORE, 94088090214400, 94088090349567, -STORE, 140503024627712, 140503026286591, -STORE, 140503026286592, 140503028383743, -STORE, 140503028383744, 140503028400127, -STORE, 140503028400128, 140503028408319, -STORE, 140503028408320, 140503028424703, -STORE, 140503028424704, 140503028568063, -STORE, 140503030628352, 140503030636543, -STORE, 140503030665216, 140503030669311, -STORE, 140503030669312, 140503030673407, -STORE, 140503030673408, 140503030677503, -STORE, 140730894725120, 140730894864383, -STORE, 140730894880768, 140730894893055, -STORE, 140730894893056, 140730894897151, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140730434342912, 140737488351231, -SNULL, 140730434351103, 140737488351231, -STORE, 140730434342912, 140730434351103, -STORE, 140730434211840, 140730434351103, -STORE, 4194304, 5128191, -STORE, 7221248, 7241727, -STORE, 7241728, 7249919, -STORE, 140109041938432, 140109044191231, -SNULL, 140109042081791, 140109044191231, -STORE, 140109041938432, 140109042081791, -STORE, 140109042081792, 140109044191231, -ERASE, 140109042081792, 140109044191231, -STORE, 140109044178944, 140109044187135, -STORE, 140109044187136, 140109044191231, -STORE, 140730434850816, 140730434854911, -STORE, 140730434838528, 140730434850815, -STORE, 140109044150272, 140109044178943, -STORE, 140109044142080, 140109044150271, -STORE, 140109038776320, 140109041938431, -SNULL, 140109038776320, 140109039837183, -STORE, 140109039837184, 140109041938431, -STORE, 140109038776320, 140109039837183, -SNULL, 140109041930239, 140109041938431, -STORE, 140109039837184, 140109041930239, -STORE, 140109041930240, 140109041938431, -ERASE, 140109041930240, 140109041938431, -STORE, 140109041930240, 140109041938431, -STORE, 140109034979328, 140109038776319, -SNULL, 140109034979328, 140109036638207, -STORE, 140109036638208, 140109038776319, -STORE, 140109034979328, 140109036638207, -SNULL, 140109038735359, 140109038776319, -STORE, 140109036638208, 140109038735359, -STORE, 140109038735360, 140109038776319, -SNULL, 140109038735360, 140109038759935, -STORE, 140109038759936, 140109038776319, -STORE, 140109038735360, 140109038759935, -ERASE, 140109038735360, 140109038759935, -STORE, 140109038735360, 140109038759935, -ERASE, 140109038759936, 140109038776319, -STORE, 140109038759936, 140109038776319, -STORE, 140109044129792, 140109044150271, -SNULL, 140109038751743, 140109038759935, -STORE, 140109038735360, 140109038751743, -STORE, 140109038751744, 140109038759935, -SNULL, 140109041934335, 140109041938431, -STORE, 140109041930240, 140109041934335, -STORE, 140109041934336, 140109041938431, -SNULL, 7233535, 7241727, -STORE, 7221248, 7233535, -STORE, 7233536, 7241727, -SNULL, 140109044183039, 140109044187135, -STORE, 140109044178944, 140109044183039, -STORE, 140109044183040, 140109044187135, -ERASE, 140109044150272, 140109044178943, -STORE, 20000768, 20135935, -STORE, 20000768, 20283391, -STORE, 140109042446336, 140109044129791, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140730853408768, 140737488351231, -SNULL, 140730853416959, 140737488351231, -STORE, 140730853408768, 140730853416959, -STORE, 140730853277696, 140730853416959, -STORE, 94865902977024, 94865905311743, -SNULL, 94865903190015, 94865905311743, -STORE, 94865902977024, 94865903190015, -STORE, 94865903190016, 94865905311743, -ERASE, 94865903190016, 94865905311743, -STORE, 94865905287168, 94865905299455, -STORE, 94865905299456, 94865905311743, -STORE, 139768865738752, 139768867991551, -SNULL, 139768865882111, 139768867991551, -STORE, 139768865738752, 139768865882111, -STORE, 139768865882112, 139768867991551, -ERASE, 139768865882112, 139768867991551, -STORE, 139768867979264, 139768867987455, -STORE, 139768867987456, 139768867991551, -STORE, 140730853957632, 140730853961727, -STORE, 140730853945344, 140730853957631, -STORE, 139768867950592, 139768867979263, -STORE, 139768867942400, 139768867950591, -STORE, 139768863625216, 139768865738751, -SNULL, 139768863625216, 139768863637503, -STORE, 139768863637504, 139768865738751, -STORE, 139768863625216, 139768863637503, -SNULL, 139768865730559, 139768865738751, -STORE, 139768863637504, 139768865730559, -STORE, 139768865730560, 139768865738751, -ERASE, 139768865730560, 139768865738751, -STORE, 139768865730560, 139768865738751, -STORE, 139768859828224, 139768863625215, -SNULL, 139768859828224, 139768861487103, -STORE, 139768861487104, 139768863625215, -STORE, 139768859828224, 139768861487103, -SNULL, 139768863584255, 139768863625215, -STORE, 139768861487104, 139768863584255, -STORE, 139768863584256, 139768863625215, -SNULL, 139768863584256, 139768863608831, -STORE, 139768863608832, 139768863625215, -STORE, 139768863584256, 139768863608831, -ERASE, 139768863584256, 139768863608831, -STORE, 139768863584256, 139768863608831, -ERASE, 139768863608832, 139768863625215, -STORE, 139768863608832, 139768863625215, -STORE, 139768867934208, 139768867950591, -SNULL, 139768863600639, 139768863608831, -STORE, 139768863584256, 139768863600639, -STORE, 139768863600640, 139768863608831, -SNULL, 139768865734655, 139768865738751, -STORE, 139768865730560, 139768865734655, -STORE, 139768865734656, 139768865738751, -SNULL, 94865905291263, 94865905299455, -STORE, 94865905287168, 94865905291263, -STORE, 94865905291264, 94865905299455, -SNULL, 139768867983359, 139768867987455, -STORE, 139768867979264, 139768867983359, -STORE, 139768867983360, 139768867987455, -ERASE, 139768867950592, 139768867979263, -STORE, 94865923670016, 94865923805183, -STORE, 139768866250752, 139768867934207, -STORE, 94865923670016, 94865923940351, -STORE, 94865923670016, 94865924075519, -STORE, 94865923670016, 94865924222975, -SNULL, 94865924210687, 94865924222975, -STORE, 94865923670016, 94865924210687, -STORE, 94865924210688, 94865924222975, -ERASE, 94865924210688, 94865924222975, -STORE, 94865923670016, 94865924349951, -STORE, 94865923670016, 94865924493311, -STORE, 94865923670016, 94865924640767, -SNULL, 94865924603903, 94865924640767, -STORE, 94865923670016, 94865924603903, -STORE, 94865924603904, 94865924640767, -ERASE, 94865924603904, 94865924640767, -STORE, 94865923670016, 94865924747263, -STORE, 94865923670016, 94865924898815, -SNULL, 94865924874239, 94865924898815, -STORE, 94865923670016, 94865924874239, -STORE, 94865924874240, 94865924898815, -ERASE, 94865924874240, 94865924898815, -STORE, 94865923670016, 94865925025791, -SNULL, 94865925013503, 94865925025791, -STORE, 94865923670016, 94865925013503, -STORE, 94865925013504, 94865925025791, -ERASE, 94865925013504, 94865925025791, -SNULL, 94865924988927, 94865925013503, -STORE, 94865923670016, 94865924988927, -STORE, 94865924988928, 94865925013503, -ERASE, 94865924988928, 94865925013503, -STORE, 94865923670016, 94865925152767, -SNULL, 94865925136383, 94865925152767, -STORE, 94865923670016, 94865925136383, -STORE, 94865925136384, 94865925152767, -ERASE, 94865925136384, 94865925152767, -STORE, 94865923670016, 94865925292031, -SNULL, 94865925279743, 94865925292031, -STORE, 94865923670016, 94865925279743, -STORE, 94865925279744, 94865925292031, -ERASE, 94865925279744, 94865925292031, -SNULL, 94865925255167, 94865925279743, -STORE, 94865923670016, 94865925255167, -STORE, 94865925255168, 94865925279743, -ERASE, 94865925255168, 94865925279743, -STORE, 94865923670016, 94865925406719, -SNULL, 94865925394431, 94865925406719, -STORE, 94865923670016, 94865925394431, -STORE, 94865925394432, 94865925406719, -ERASE, 94865925394432, 94865925406719, -STORE, 94865923670016, 94865925545983, -SNULL, 94865925533695, 94865925545983, -STORE, 94865923670016, 94865925533695, -STORE, 94865925533696, 94865925545983, -ERASE, 94865925533696, 94865925545983, -SNULL, 94865925492735, 94865925533695, -STORE, 94865923670016, 94865925492735, -STORE, 94865925492736, 94865925533695, -ERASE, 94865925492736, 94865925533695, -STORE, 94865923670016, 94865925627903, -SNULL, 94865925599231, 94865925627903, -STORE, 94865923670016, 94865925599231, -STORE, 94865925599232, 94865925627903, -ERASE, 94865925599232, 94865925627903, -STORE, 94865923670016, 94865925738495, -SNULL, 94865925726207, 94865925738495, -STORE, 94865923670016, 94865925726207, -STORE, 94865925726208, 94865925738495, -ERASE, 94865925726208, 94865925738495, -STORE, 94865923670016, 94865925877759, -SNULL, 94865925865471, 94865925877759, -STORE, 94865923670016, 94865925865471, -STORE, 94865925865472, 94865925877759, -ERASE, 94865925865472, 94865925877759, -STORE, 94865923670016, 94865926021119, -SNULL, 94865926008831, 94865926021119, -STORE, 94865923670016, 94865926008831, -STORE, 94865926008832, 94865926021119, -ERASE, 94865926008832, 94865926021119, -SNULL, 94865925971967, 94865926008831, -STORE, 94865923670016, 94865925971967, -STORE, 94865925971968, 94865926008831, -ERASE, 94865925971968, 94865926008831, -STORE, 94865923670016, 94865926115327, -STORE, 94865923670016, 94865926254591, -SNULL, 94865926246399, 94865926254591, -STORE, 94865923670016, 94865926246399, -STORE, 94865926246400, 94865926254591, -ERASE, 94865926246400, 94865926254591, -STORE, 94865923670016, 94865926385663, -STORE, 94865923670016, 94865926537215, -STORE, 94865923670016, 94865926672383, -STORE, 94865923670016, 94865926815743, -STORE, 94865923670016, 94865926955007, -STORE, 94865923670016, 94865927094271, -STORE, 94865923670016, 94865927233535, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140731148435456, 140737488351231, -SNULL, 140731148443647, 140737488351231, -STORE, 140731148435456, 140731148443647, -STORE, 140731148304384, 140731148443647, -STORE, 94090775400448, 94090777735167, -SNULL, 94090775613439, 94090777735167, -STORE, 94090775400448, 94090775613439, -STORE, 94090775613440, 94090777735167, -ERASE, 94090775613440, 94090777735167, -STORE, 94090777710592, 94090777722879, -STORE, 94090777722880, 94090777735167, -STORE, 140301090283520, 140301092536319, -SNULL, 140301090426879, 140301092536319, -STORE, 140301090283520, 140301090426879, -STORE, 140301090426880, 140301092536319, -ERASE, 140301090426880, 140301092536319, -STORE, 140301092524032, 140301092532223, -STORE, 140301092532224, 140301092536319, -STORE, 140731148570624, 140731148574719, -STORE, 140731148558336, 140731148570623, -STORE, 140301092495360, 140301092524031, -STORE, 140301092487168, 140301092495359, -STORE, 140301088169984, 140301090283519, -SNULL, 140301088169984, 140301088182271, -STORE, 140301088182272, 140301090283519, -STORE, 140301088169984, 140301088182271, -SNULL, 140301090275327, 140301090283519, -STORE, 140301088182272, 140301090275327, -STORE, 140301090275328, 140301090283519, -ERASE, 140301090275328, 140301090283519, -STORE, 140301090275328, 140301090283519, -STORE, 140301084372992, 140301088169983, -SNULL, 140301084372992, 140301086031871, -STORE, 140301086031872, 140301088169983, -STORE, 140301084372992, 140301086031871, -SNULL, 140301088129023, 140301088169983, -STORE, 140301086031872, 140301088129023, -STORE, 140301088129024, 140301088169983, -SNULL, 140301088129024, 140301088153599, -STORE, 140301088153600, 140301088169983, -STORE, 140301088129024, 140301088153599, -ERASE, 140301088129024, 140301088153599, -STORE, 140301088129024, 140301088153599, -ERASE, 140301088153600, 140301088169983, -STORE, 140301088153600, 140301088169983, -STORE, 140301092478976, 140301092495359, -SNULL, 140301088145407, 140301088153599, -STORE, 140301088129024, 140301088145407, -STORE, 140301088145408, 140301088153599, -SNULL, 140301090279423, 140301090283519, -STORE, 140301090275328, 140301090279423, -STORE, 140301090279424, 140301090283519, -SNULL, 94090777714687, 94090777722879, -STORE, 94090777710592, 94090777714687, -STORE, 94090777714688, 94090777722879, -SNULL, 140301092528127, 140301092532223, -STORE, 140301092524032, 140301092528127, -STORE, 140301092528128, 140301092532223, -ERASE, 140301092495360, 140301092524031, -STORE, 94090794590208, 94090794725375, -STORE, 140301090795520, 140301092478975, -STORE, 94090794590208, 94090794860543, -STORE, 94090794590208, 94090794995711, -STORE, 94090794590208, 94090795163647, -SNULL, 94090795139071, 94090795163647, -STORE, 94090794590208, 94090795139071, -STORE, 94090795139072, 94090795163647, -ERASE, 94090795139072, 94090795163647, -STORE, 94090794590208, 94090795278335, -STORE, 94090794590208, 94090795425791, -SNULL, 94090795388927, 94090795425791, -STORE, 94090794590208, 94090795388927, -STORE, 94090795388928, 94090795425791, -ERASE, 94090795388928, 94090795425791, -STORE, 94090794590208, 94090795528191, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140733084430336, 140737488351231, -SNULL, 140733084438527, 140737488351231, -STORE, 140733084430336, 140733084438527, -STORE, 140733084299264, 140733084438527, -STORE, 94116169183232, 94116171517951, -SNULL, 94116169396223, 94116171517951, -STORE, 94116169183232, 94116169396223, -STORE, 94116169396224, 94116171517951, -ERASE, 94116169396224, 94116171517951, -STORE, 94116171493376, 94116171505663, -STORE, 94116171505664, 94116171517951, -STORE, 139772214128640, 139772216381439, -SNULL, 139772214271999, 139772216381439, -STORE, 139772214128640, 139772214271999, -STORE, 139772214272000, 139772216381439, -ERASE, 139772214272000, 139772216381439, -STORE, 139772216369152, 139772216377343, -STORE, 139772216377344, 139772216381439, -STORE, 140733085270016, 140733085274111, -STORE, 140733085257728, 140733085270015, -STORE, 139772216340480, 139772216369151, -STORE, 139772216332288, 139772216340479, -STORE, 139772212015104, 139772214128639, -SNULL, 139772212015104, 139772212027391, -STORE, 139772212027392, 139772214128639, -STORE, 139772212015104, 139772212027391, -SNULL, 139772214120447, 139772214128639, -STORE, 139772212027392, 139772214120447, -STORE, 139772214120448, 139772214128639, -ERASE, 139772214120448, 139772214128639, -STORE, 139772214120448, 139772214128639, -STORE, 139772208218112, 139772212015103, -SNULL, 139772208218112, 139772209876991, -STORE, 139772209876992, 139772212015103, -STORE, 139772208218112, 139772209876991, -SNULL, 139772211974143, 139772212015103, -STORE, 139772209876992, 139772211974143, -STORE, 139772211974144, 139772212015103, -SNULL, 139772211974144, 139772211998719, -STORE, 139772211998720, 139772212015103, -STORE, 139772211974144, 139772211998719, -ERASE, 139772211974144, 139772211998719, -STORE, 139772211974144, 139772211998719, -ERASE, 139772211998720, 139772212015103, -STORE, 139772211998720, 139772212015103, -STORE, 139772216324096, 139772216340479, -SNULL, 139772211990527, 139772211998719, -STORE, 139772211974144, 139772211990527, -STORE, 139772211990528, 139772211998719, -SNULL, 139772214124543, 139772214128639, -STORE, 139772214120448, 139772214124543, -STORE, 139772214124544, 139772214128639, -SNULL, 94116171497471, 94116171505663, -STORE, 94116171493376, 94116171497471, -STORE, 94116171497472, 94116171505663, -SNULL, 139772216373247, 139772216377343, -STORE, 139772216369152, 139772216373247, -STORE, 139772216373248, 139772216377343, -ERASE, 139772216340480, 139772216369151, -STORE, 94116199383040, 94116199518207, -STORE, 139772214640640, 139772216324095, -STORE, 94116199383040, 94116199653375, -STORE, 94116199383040, 94116199788543, -STORE, 140737488347136, 140737488351231, -STORE, 140726067826688, 140737488351231, -SNULL, 140726067830783, 140737488351231, -STORE, 140726067826688, 140726067830783, -STORE, 140726067695616, 140726067830783, -STORE, 94535150673920, 94535152898047, -SNULL, 94535150784511, 94535152898047, -STORE, 94535150673920, 94535150784511, -STORE, 94535150784512, 94535152898047, -ERASE, 94535150784512, 94535152898047, -STORE, 94535152877568, 94535152889855, -STORE, 94535152889856, 94535152898047, -STORE, 140381257314304, 140381259567103, -SNULL, 140381257457663, 140381259567103, -STORE, 140381257314304, 140381257457663, -STORE, 140381257457664, 140381259567103, -ERASE, 140381257457664, 140381259567103, -STORE, 140381259554816, 140381259563007, -STORE, 140381259563008, 140381259567103, -STORE, 140726068060160, 140726068064255, -STORE, 140726068047872, 140726068060159, -STORE, 140381259526144, 140381259554815, -STORE, 140381259517952, 140381259526143, -STORE, 140381253517312, 140381257314303, -SNULL, 140381253517312, 140381255176191, -STORE, 140381255176192, 140381257314303, -STORE, 140381253517312, 140381255176191, -SNULL, 140381257273343, 140381257314303, -STORE, 140381255176192, 140381257273343, -STORE, 140381257273344, 140381257314303, -SNULL, 140381257273344, 140381257297919, -STORE, 140381257297920, 140381257314303, -STORE, 140381257273344, 140381257297919, -ERASE, 140381257273344, 140381257297919, -STORE, 140381257273344, 140381257297919, -ERASE, 140381257297920, 140381257314303, -STORE, 140381257297920, 140381257314303, -SNULL, 140381257289727, 140381257297919, -STORE, 140381257273344, 140381257289727, -STORE, 140381257289728, 140381257297919, -SNULL, 94535152885759, 94535152889855, -STORE, 94535152877568, 94535152885759, -STORE, 94535152885760, 94535152889855, -SNULL, 140381259558911, 140381259563007, -STORE, 140381259554816, 140381259558911, -STORE, 140381259558912, 140381259563007, -ERASE, 140381259526144, 140381259554815, -STORE, 94535186296832, 94535186431999, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140729189425152, 140737488351231, -SNULL, 140729189433343, 140737488351231, -STORE, 140729189425152, 140729189433343, -STORE, 140729189294080, 140729189433343, -STORE, 94428200128512, 94428202352639, -SNULL, 94428200239103, 94428202352639, -STORE, 94428200128512, 94428200239103, -STORE, 94428200239104, 94428202352639, -ERASE, 94428200239104, 94428202352639, -STORE, 94428202332160, 94428202344447, -STORE, 94428202344448, 94428202352639, -STORE, 139707216986112, 139707219238911, -SNULL, 139707217129471, 139707219238911, -STORE, 139707216986112, 139707217129471, -STORE, 139707217129472, 139707219238911, -ERASE, 139707217129472, 139707219238911, -STORE, 139707219226624, 139707219234815, -STORE, 139707219234816, 139707219238911, -STORE, 140729189785600, 140729189789695, -STORE, 140729189773312, 140729189785599, -STORE, 139707219197952, 139707219226623, -STORE, 139707219189760, 139707219197951, -STORE, 139707213189120, 139707216986111, -SNULL, 139707213189120, 139707214847999, -STORE, 139707214848000, 139707216986111, -STORE, 139707213189120, 139707214847999, -SNULL, 139707216945151, 139707216986111, -STORE, 139707214848000, 139707216945151, -STORE, 139707216945152, 139707216986111, -SNULL, 139707216945152, 139707216969727, -STORE, 139707216969728, 139707216986111, -STORE, 139707216945152, 139707216969727, -ERASE, 139707216945152, 139707216969727, -STORE, 139707216945152, 139707216969727, -ERASE, 139707216969728, 139707216986111, -STORE, 139707216969728, 139707216986111, -SNULL, 139707216961535, 139707216969727, -STORE, 139707216945152, 139707216961535, -STORE, 139707216961536, 139707216969727, -SNULL, 94428202340351, 94428202344447, -STORE, 94428202332160, 94428202340351, -STORE, 94428202340352, 94428202344447, -SNULL, 139707219230719, 139707219234815, -STORE, 139707219226624, 139707219230719, -STORE, 139707219230720, 139707219234815, -ERASE, 139707219197952, 139707219226623, -STORE, 94428208599040, 94428208734207, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140722000953344, 140737488351231, -SNULL, 140722000961535, 140737488351231, -STORE, 140722000953344, 140722000961535, -STORE, 140722000822272, 140722000961535, -STORE, 94636494757888, 94636496982015, -SNULL, 94636494868479, 94636496982015, -STORE, 94636494757888, 94636494868479, -STORE, 94636494868480, 94636496982015, -ERASE, 94636494868480, 94636496982015, -STORE, 94636496961536, 94636496973823, -STORE, 94636496973824, 94636496982015, -STORE, 140142275100672, 140142277353471, -SNULL, 140142275244031, 140142277353471, -STORE, 140142275100672, 140142275244031, -STORE, 140142275244032, 140142277353471, -ERASE, 140142275244032, 140142277353471, -STORE, 140142277341184, 140142277349375, -STORE, 140142277349376, 140142277353471, -STORE, 140722002747392, 140722002751487, -STORE, 140722002735104, 140722002747391, -STORE, 140142277312512, 140142277341183, -STORE, 140142277304320, 140142277312511, -STORE, 140142271303680, 140142275100671, -SNULL, 140142271303680, 140142272962559, -STORE, 140142272962560, 140142275100671, -STORE, 140142271303680, 140142272962559, -SNULL, 140142275059711, 140142275100671, -STORE, 140142272962560, 140142275059711, -STORE, 140142275059712, 140142275100671, -SNULL, 140142275059712, 140142275084287, -STORE, 140142275084288, 140142275100671, -STORE, 140142275059712, 140142275084287, -ERASE, 140142275059712, 140142275084287, -STORE, 140142275059712, 140142275084287, -ERASE, 140142275084288, 140142275100671, -STORE, 140142275084288, 140142275100671, -SNULL, 140142275076095, 140142275084287, -STORE, 140142275059712, 140142275076095, -STORE, 140142275076096, 140142275084287, -SNULL, 94636496969727, 94636496973823, -STORE, 94636496961536, 94636496969727, -STORE, 94636496969728, 94636496973823, -SNULL, 140142277345279, 140142277349375, -STORE, 140142277341184, 140142277345279, -STORE, 140142277345280, 140142277349375, -ERASE, 140142277312512, 140142277341183, -STORE, 94636516286464, 94636516421631, -STORE, 94071103692800, 94071103905791, -STORE, 94071106002944, 94071106007039, -STORE, 94071106007040, 94071106015231, -STORE, 94071106015232, 94071106027519, -STORE, 94071138521088, 94071140368383, -STORE, 140145668190208, 140145669849087, -STORE, 140145669849088, 140145671946239, -STORE, 140145671946240, 140145671962623, -STORE, 140145671962624, 140145671970815, -STORE, 140145671970816, 140145671987199, -STORE, 140145671987200, 140145671999487, -STORE, 140145671999488, 140145674092543, -STORE, 140145674092544, 140145674096639, -STORE, 140145674096640, 140145674100735, -STORE, 140145674100736, 140145674244095, -STORE, 140145674612736, 140145676296191, -STORE, 140145676296192, 140145676312575, -STORE, 140145676341248, 140145676345343, -STORE, 140145676345344, 140145676349439, -STORE, 140145676349440, 140145676353535, -STORE, 140734927740928, 140734927880191, -STORE, 140734928842752, 140734928855039, -STORE, 140734928855040, 140734928859135, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140722342535168, 140737488351231, -SNULL, 140722342543359, 140737488351231, -STORE, 140722342535168, 140722342543359, -STORE, 140722342404096, 140722342543359, -STORE, 94399699714048, 94399702048767, -SNULL, 94399699927039, 94399702048767, -STORE, 94399699714048, 94399699927039, -STORE, 94399699927040, 94399702048767, -ERASE, 94399699927040, 94399702048767, -STORE, 94399702024192, 94399702036479, -STORE, 94399702036480, 94399702048767, -STORE, 139811024748544, 139811027001343, -SNULL, 139811024891903, 139811027001343, -STORE, 139811024748544, 139811024891903, -STORE, 139811024891904, 139811027001343, -ERASE, 139811024891904, 139811027001343, -STORE, 139811026989056, 139811026997247, -STORE, 139811026997248, 139811027001343, -STORE, 140722342707200, 140722342711295, -STORE, 140722342694912, 140722342707199, -STORE, 139811026960384, 139811026989055, -STORE, 139811026952192, 139811026960383, -STORE, 139811022635008, 139811024748543, -SNULL, 139811022635008, 139811022647295, -STORE, 139811022647296, 139811024748543, -STORE, 139811022635008, 139811022647295, -SNULL, 139811024740351, 139811024748543, -STORE, 139811022647296, 139811024740351, -STORE, 139811024740352, 139811024748543, -ERASE, 139811024740352, 139811024748543, -STORE, 139811024740352, 139811024748543, -STORE, 139811018838016, 139811022635007, -SNULL, 139811018838016, 139811020496895, -STORE, 139811020496896, 139811022635007, -STORE, 139811018838016, 139811020496895, -SNULL, 139811022594047, 139811022635007, -STORE, 139811020496896, 139811022594047, -STORE, 139811022594048, 139811022635007, -SNULL, 139811022594048, 139811022618623, -STORE, 139811022618624, 139811022635007, -STORE, 139811022594048, 139811022618623, -ERASE, 139811022594048, 139811022618623, -STORE, 139811022594048, 139811022618623, -ERASE, 139811022618624, 139811022635007, -STORE, 139811022618624, 139811022635007, -STORE, 139811026944000, 139811026960383, -SNULL, 139811022610431, 139811022618623, -STORE, 139811022594048, 139811022610431, -STORE, 139811022610432, 139811022618623, -SNULL, 139811024744447, 139811024748543, -STORE, 139811024740352, 139811024744447, -STORE, 139811024744448, 139811024748543, -SNULL, 94399702028287, 94399702036479, -STORE, 94399702024192, 94399702028287, -STORE, 94399702028288, 94399702036479, -SNULL, 139811026993151, 139811026997247, -STORE, 139811026989056, 139811026993151, -STORE, 139811026993152, 139811026997247, -ERASE, 139811026960384, 139811026989055, -STORE, 94399723880448, 94399724015615, -STORE, 139811025260544, 139811026943999, -STORE, 94399723880448, 94399724150783, -STORE, 94399723880448, 94399724285951, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140735364939776, 140737488351231, -SNULL, 140735364947967, 140737488351231, -STORE, 140735364939776, 140735364947967, -STORE, 140735364808704, 140735364947967, -STORE, 94421528674304, 94421531009023, -SNULL, 94421528887295, 94421531009023, -STORE, 94421528674304, 94421528887295, -STORE, 94421528887296, 94421531009023, -ERASE, 94421528887296, 94421531009023, -STORE, 94421530984448, 94421530996735, -STORE, 94421530996736, 94421531009023, -STORE, 140162004742144, 140162006994943, -SNULL, 140162004885503, 140162006994943, -STORE, 140162004742144, 140162004885503, -STORE, 140162004885504, 140162006994943, -ERASE, 140162004885504, 140162006994943, -STORE, 140162006982656, 140162006990847, -STORE, 140162006990848, 140162006994943, -STORE, 140735365402624, 140735365406719, -STORE, 140735365390336, 140735365402623, -STORE, 140162006953984, 140162006982655, -STORE, 140162006945792, 140162006953983, -STORE, 140162002628608, 140162004742143, -SNULL, 140162002628608, 140162002640895, -STORE, 140162002640896, 140162004742143, -STORE, 140162002628608, 140162002640895, -SNULL, 140162004733951, 140162004742143, -STORE, 140162002640896, 140162004733951, -STORE, 140162004733952, 140162004742143, -ERASE, 140162004733952, 140162004742143, -STORE, 140162004733952, 140162004742143, -STORE, 140161998831616, 140162002628607, -SNULL, 140161998831616, 140162000490495, -STORE, 140162000490496, 140162002628607, -STORE, 140161998831616, 140162000490495, -SNULL, 140162002587647, 140162002628607, -STORE, 140162000490496, 140162002587647, -STORE, 140162002587648, 140162002628607, -SNULL, 140162002587648, 140162002612223, -STORE, 140162002612224, 140162002628607, -STORE, 140162002587648, 140162002612223, -ERASE, 140162002587648, 140162002612223, -STORE, 140162002587648, 140162002612223, -ERASE, 140162002612224, 140162002628607, -STORE, 140162002612224, 140162002628607, -STORE, 140162006937600, 140162006953983, -SNULL, 140162002604031, 140162002612223, -STORE, 140162002587648, 140162002604031, -STORE, 140162002604032, 140162002612223, -SNULL, 140162004738047, 140162004742143, -STORE, 140162004733952, 140162004738047, -STORE, 140162004738048, 140162004742143, -SNULL, 94421530988543, 94421530996735, -STORE, 94421530984448, 94421530988543, -STORE, 94421530988544, 94421530996735, -SNULL, 140162006986751, 140162006990847, -STORE, 140162006982656, 140162006986751, -STORE, 140162006986752, 140162006990847, -ERASE, 140162006953984, 140162006982655, -STORE, 94421551697920, 94421551833087, -STORE, 140162005254144, 140162006937599, -STORE, 94421551697920, 94421551968255, -STORE, 94421551697920, 94421552103423, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140733498486784, 140737488351231, -SNULL, 140733498494975, 140737488351231, -STORE, 140733498486784, 140733498494975, -STORE, 140733498355712, 140733498494975, -STORE, 94567985836032, 94567988170751, -SNULL, 94567986049023, 94567988170751, -STORE, 94567985836032, 94567986049023, -STORE, 94567986049024, 94567988170751, -ERASE, 94567986049024, 94567988170751, -STORE, 94567988146176, 94567988158463, -STORE, 94567988158464, 94567988170751, -STORE, 139634278572032, 139634280824831, -SNULL, 139634278715391, 139634280824831, -STORE, 139634278572032, 139634278715391, -STORE, 139634278715392, 139634280824831, -ERASE, 139634278715392, 139634280824831, -STORE, 139634280812544, 139634280820735, -STORE, 139634280820736, 139634280824831, -STORE, 140733498544128, 140733498548223, -STORE, 140733498531840, 140733498544127, -STORE, 139634280783872, 139634280812543, -STORE, 139634280775680, 139634280783871, -STORE, 139634276458496, 139634278572031, -SNULL, 139634276458496, 139634276470783, -STORE, 139634276470784, 139634278572031, -STORE, 139634276458496, 139634276470783, -SNULL, 139634278563839, 139634278572031, -STORE, 139634276470784, 139634278563839, -STORE, 139634278563840, 139634278572031, -ERASE, 139634278563840, 139634278572031, -STORE, 139634278563840, 139634278572031, -STORE, 139634272661504, 139634276458495, -SNULL, 139634272661504, 139634274320383, -STORE, 139634274320384, 139634276458495, -STORE, 139634272661504, 139634274320383, -SNULL, 139634276417535, 139634276458495, -STORE, 139634274320384, 139634276417535, -STORE, 139634276417536, 139634276458495, -SNULL, 139634276417536, 139634276442111, -STORE, 139634276442112, 139634276458495, -STORE, 139634276417536, 139634276442111, -ERASE, 139634276417536, 139634276442111, -STORE, 139634276417536, 139634276442111, -ERASE, 139634276442112, 139634276458495, -STORE, 139634276442112, 139634276458495, -STORE, 139634280767488, 139634280783871, -SNULL, 139634276433919, 139634276442111, -STORE, 139634276417536, 139634276433919, -STORE, 139634276433920, 139634276442111, -SNULL, 139634278567935, 139634278572031, -STORE, 139634278563840, 139634278567935, -STORE, 139634278567936, 139634278572031, -SNULL, 94567988150271, 94567988158463, -STORE, 94567988146176, 94567988150271, -STORE, 94567988150272, 94567988158463, -SNULL, 139634280816639, 139634280820735, -STORE, 139634280812544, 139634280816639, -STORE, 139634280816640, 139634280820735, -ERASE, 139634280783872, 139634280812543, -STORE, 94567996379136, 94567996514303, -STORE, 139634279084032, 139634280767487, -STORE, 94567996379136, 94567996649471, -STORE, 94567996379136, 94567996784639, -STORE, 94567996379136, 94567996960767, -SNULL, 94567996932095, 94567996960767, -STORE, 94567996379136, 94567996932095, -STORE, 94567996932096, 94567996960767, -ERASE, 94567996932096, 94567996960767, -STORE, 94567996379136, 94567997071359, -STORE, 94567996379136, 94567997206527, -SNULL, 94567997186047, 94567997206527, -STORE, 94567996379136, 94567997186047, -STORE, 94567997186048, 94567997206527, -ERASE, 94567997186048, 94567997206527, -STORE, 94567996379136, 94567997358079, -STORE, 94567996379136, 94567997493247, -SNULL, 94567997476863, 94567997493247, -STORE, 94567996379136, 94567997476863, -STORE, 94567997476864, 94567997493247, -ERASE, 94567997476864, 94567997493247, -STORE, 94567996379136, 94567997612031, -STORE, 94567996379136, 94567997767679, -SNULL, 94567997739007, 94567997767679, -STORE, 94567996379136, 94567997739007, -STORE, 94567997739008, 94567997767679, -ERASE, 94567997739008, 94567997767679, -SNULL, 94567997698047, 94567997739007, -STORE, 94567996379136, 94567997698047, -STORE, 94567997698048, 94567997739007, -ERASE, 94567997698048, 94567997739007, -STORE, 94567996379136, 94567997853695, -STORE, 94567996379136, 94567997988863, -STORE, 94567996379136, 94567998132223, -STORE, 94567996379136, 94567998275583, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140723667759104, 140737488351231, -SNULL, 140723667767295, 140737488351231, -STORE, 140723667759104, 140723667767295, -STORE, 140723667628032, 140723667767295, -STORE, 94231598800896, 94231601135615, -SNULL, 94231599013887, 94231601135615, -STORE, 94231598800896, 94231599013887, -STORE, 94231599013888, 94231601135615, -ERASE, 94231599013888, 94231601135615, -STORE, 94231601111040, 94231601123327, -STORE, 94231601123328, 94231601135615, -STORE, 140269472649216, 140269474902015, -SNULL, 140269472792575, 140269474902015, -STORE, 140269472649216, 140269472792575, -STORE, 140269472792576, 140269474902015, -ERASE, 140269472792576, 140269474902015, -STORE, 140269474889728, 140269474897919, -STORE, 140269474897920, 140269474902015, -STORE, 140723667836928, 140723667841023, -STORE, 140723667824640, 140723667836927, -STORE, 140269474861056, 140269474889727, -STORE, 140269474852864, 140269474861055, -STORE, 140269470535680, 140269472649215, -SNULL, 140269470535680, 140269470547967, -STORE, 140269470547968, 140269472649215, -STORE, 140269470535680, 140269470547967, -SNULL, 140269472641023, 140269472649215, -STORE, 140269470547968, 140269472641023, -STORE, 140269472641024, 140269472649215, -ERASE, 140269472641024, 140269472649215, -STORE, 140269472641024, 140269472649215, -STORE, 140269466738688, 140269470535679, -SNULL, 140269466738688, 140269468397567, -STORE, 140269468397568, 140269470535679, -STORE, 140269466738688, 140269468397567, -SNULL, 140269470494719, 140269470535679, -STORE, 140269468397568, 140269470494719, -STORE, 140269470494720, 140269470535679, -SNULL, 140269470494720, 140269470519295, -STORE, 140269470519296, 140269470535679, -STORE, 140269470494720, 140269470519295, -ERASE, 140269470494720, 140269470519295, -STORE, 140269470494720, 140269470519295, -ERASE, 140269470519296, 140269470535679, -STORE, 140269470519296, 140269470535679, -STORE, 140269474844672, 140269474861055, -SNULL, 140269470511103, 140269470519295, -STORE, 140269470494720, 140269470511103, -STORE, 140269470511104, 140269470519295, -SNULL, 140269472645119, 140269472649215, -STORE, 140269472641024, 140269472645119, -STORE, 140269472645120, 140269472649215, -SNULL, 94231601115135, 94231601123327, -STORE, 94231601111040, 94231601115135, -STORE, 94231601115136, 94231601123327, -SNULL, 140269474893823, 140269474897919, -STORE, 140269474889728, 140269474893823, -STORE, 140269474893824, 140269474897919, -ERASE, 140269474861056, 140269474889727, -STORE, 94231626592256, 94231626727423, -STORE, 140269473161216, 140269474844671, -STORE, 94231626592256, 94231626862591, -STORE, 94231626592256, 94231626997759, -STORE, 94327178862592, 94327179075583, -STORE, 94327181172736, 94327181176831, -STORE, 94327181176832, 94327181185023, -STORE, 94327181185024, 94327181197311, -STORE, 94327185715200, 94327186685951, -STORE, 140172071755776, 140172073414655, -STORE, 140172073414656, 140172075511807, -STORE, 140172075511808, 140172075528191, -STORE, 140172075528192, 140172075536383, -STORE, 140172075536384, 140172075552767, -STORE, 140172075552768, 140172075565055, -STORE, 140172075565056, 140172077658111, -STORE, 140172077658112, 140172077662207, -STORE, 140172077662208, 140172077666303, -STORE, 140172077666304, 140172077809663, -STORE, 140172078178304, 140172079861759, -STORE, 140172079861760, 140172079878143, -STORE, 140172079878144, 140172079906815, -STORE, 140172079906816, 140172079910911, -STORE, 140172079910912, 140172079915007, -STORE, 140172079915008, 140172079919103, -STORE, 140720358359040, 140720358494207, -STORE, 140720358498304, 140720358510591, -STORE, 140720358510592, 140720358514687, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140722548621312, 140737488351231, -SNULL, 140722548629503, 140737488351231, -STORE, 140722548621312, 140722548629503, -STORE, 140722548490240, 140722548629503, -STORE, 93949289504768, 93949291728895, -SNULL, 93949289615359, 93949291728895, -STORE, 93949289504768, 93949289615359, -STORE, 93949289615360, 93949291728895, -ERASE, 93949289615360, 93949291728895, -STORE, 93949291708416, 93949291720703, -STORE, 93949291720704, 93949291728895, -STORE, 140305861902336, 140305864155135, -SNULL, 140305862045695, 140305864155135, -STORE, 140305861902336, 140305862045695, -STORE, 140305862045696, 140305864155135, -ERASE, 140305862045696, 140305864155135, -STORE, 140305864142848, 140305864151039, -STORE, 140305864151040, 140305864155135, -STORE, 140722549821440, 140722549825535, -STORE, 140722549809152, 140722549821439, -STORE, 140305864114176, 140305864142847, -STORE, 140305864105984, 140305864114175, -STORE, 140305858105344, 140305861902335, -SNULL, 140305858105344, 140305859764223, -STORE, 140305859764224, 140305861902335, -STORE, 140305858105344, 140305859764223, -SNULL, 140305861861375, 140305861902335, -STORE, 140305859764224, 140305861861375, -STORE, 140305861861376, 140305861902335, -SNULL, 140305861861376, 140305861885951, -STORE, 140305861885952, 140305861902335, -STORE, 140305861861376, 140305861885951, -ERASE, 140305861861376, 140305861885951, -STORE, 140305861861376, 140305861885951, -ERASE, 140305861885952, 140305861902335, -STORE, 140305861885952, 140305861902335, -SNULL, 140305861877759, 140305861885951, -STORE, 140305861861376, 140305861877759, -STORE, 140305861877760, 140305861885951, -SNULL, 93949291716607, 93949291720703, -STORE, 93949291708416, 93949291716607, -STORE, 93949291716608, 93949291720703, -SNULL, 140305864146943, 140305864151039, -STORE, 140305864142848, 140305864146943, -STORE, 140305864146944, 140305864151039, -ERASE, 140305864114176, 140305864142847, -STORE, 93949324136448, 93949324271615, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140725754908672, 140737488351231, -SNULL, 140725754916863, 140737488351231, -STORE, 140725754908672, 140725754916863, -STORE, 140725754777600, 140725754916863, -STORE, 94831184375808, 94831186599935, -SNULL, 94831184486399, 94831186599935, -STORE, 94831184375808, 94831184486399, -STORE, 94831184486400, 94831186599935, -ERASE, 94831184486400, 94831186599935, -STORE, 94831186579456, 94831186591743, -STORE, 94831186591744, 94831186599935, -STORE, 140605482479616, 140605484732415, -SNULL, 140605482622975, 140605484732415, -STORE, 140605482479616, 140605482622975, -STORE, 140605482622976, 140605484732415, -ERASE, 140605482622976, 140605484732415, -STORE, 140605484720128, 140605484728319, -STORE, 140605484728320, 140605484732415, -STORE, 140725755670528, 140725755674623, -STORE, 140725755658240, 140725755670527, -STORE, 140605484691456, 140605484720127, -STORE, 140605484683264, 140605484691455, -STORE, 140605478682624, 140605482479615, -SNULL, 140605478682624, 140605480341503, -STORE, 140605480341504, 140605482479615, -STORE, 140605478682624, 140605480341503, -SNULL, 140605482438655, 140605482479615, -STORE, 140605480341504, 140605482438655, -STORE, 140605482438656, 140605482479615, -SNULL, 140605482438656, 140605482463231, -STORE, 140605482463232, 140605482479615, -STORE, 140605482438656, 140605482463231, -ERASE, 140605482438656, 140605482463231, -STORE, 140605482438656, 140605482463231, -ERASE, 140605482463232, 140605482479615, -STORE, 140605482463232, 140605482479615, -SNULL, 140605482455039, 140605482463231, -STORE, 140605482438656, 140605482455039, -STORE, 140605482455040, 140605482463231, -SNULL, 94831186587647, 94831186591743, -STORE, 94831186579456, 94831186587647, -STORE, 94831186587648, 94831186591743, -SNULL, 140605484724223, 140605484728319, -STORE, 140605484720128, 140605484724223, -STORE, 140605484724224, 140605484728319, -ERASE, 140605484691456, 140605484720127, -STORE, 94831217156096, 94831217291263, -STORE, 94327178862592, 94327179075583, -STORE, 94327181172736, 94327181176831, -STORE, 94327181176832, 94327181185023, -STORE, 94327181185024, 94327181197311, -STORE, 94327185715200, 94327186685951, -STORE, 140172071755776, 140172073414655, -STORE, 140172073414656, 140172075511807, -STORE, 140172075511808, 140172075528191, -STORE, 140172075528192, 140172075536383, -STORE, 140172075536384, 140172075552767, -STORE, 140172075552768, 140172075565055, -STORE, 140172075565056, 140172077658111, -STORE, 140172077658112, 140172077662207, -STORE, 140172077662208, 140172077666303, -STORE, 140172077666304, 140172077809663, -STORE, 140172078178304, 140172079861759, -STORE, 140172079861760, 140172079878143, -STORE, 140172079878144, 140172079906815, -STORE, 140172079906816, 140172079910911, -STORE, 140172079910912, 140172079915007, -STORE, 140172079915008, 140172079919103, -STORE, 140720358359040, 140720358494207, -STORE, 140720358498304, 140720358510591, -STORE, 140720358510592, 140720358514687, -STORE, 140737488347136, 140737488351231, -STORE, 140737488343040, 140737488351231, -STORE, 140737488338944, 140737488351231, -STORE, 140734529933312, 140737488351231, -SNULL, 140734529945599, 140737488351231, -STORE, 140734529933312, 140734529945599, -STORE, 140734529802240, 140734529945599, -STORE, 4194304, 26279935, -STORE, 28372992, 28454911, -STORE, 28454912, 29806591, -STORE, 140249744060416, 140249746313215, -SNULL, 140249744203775, 140249746313215, -STORE, 140249744060416, 140249744203775, -STORE, 140249744203776, 140249746313215, -ERASE, 140249744203776, 140249746313215, -STORE, 140249746300928, 140249746309119, -STORE, 140249746309120, 140249746313215, -STORE, 140734530174976, 140734530179071, -STORE, 140734530162688, 140734530174975, -STORE, 140249746272256, 140249746300927, -STORE, 140249746264064, 140249746272255, -STORE, 140249740226560, 140249744060415, -SNULL, 140249740226560, 140249741934591, -STORE, 140249741934592, 140249744060415, -STORE, 140249740226560, 140249741934591, -SNULL, 140249744027647, 140249744060415, -STORE, 140249741934592, 140249744027647, -STORE, 140249744027648, 140249744060415, -ERASE, 140249744027648, 140249744060415, -STORE, 140249744027648, 140249744060415, -STORE, 140249738031104, 140249740226559, -SNULL, 140249738031104, 140249738125311, -STORE, 140249738125312, 140249740226559, -STORE, 140249738031104, 140249738125311, -SNULL, 140249740218367, 140249740226559, -STORE, 140249738125312, 140249740218367, -STORE, 140249740218368, 140249740226559, -ERASE, 140249740218368, 140249740226559, -STORE, 140249740218368, 140249740226559, -STORE, 140249735512064, 140249738031103, -SNULL, 140249735512064, 140249735925759, -STORE, 140249735925760, 140249738031103, -STORE, 140249735512064, 140249735925759, -SNULL, 140249738018815, 140249738031103, -STORE, 140249735925760, 140249738018815, -STORE, 140249738018816, 140249738031103, -ERASE, 140249738018816, 140249738031103, -STORE, 140249738018816, 140249738031103, -STORE, 140249732878336, 140249735512063, -SNULL, 140249732878336, 140249733406719, -STORE, 140249733406720, 140249735512063, -STORE, 140249732878336, 140249733406719, -SNULL, 140249735503871, 140249735512063, -STORE, 140249733406720, 140249735503871, -STORE, 140249735503872, 140249735512063, -ERASE, 140249735503872, 140249735512063, -STORE, 140249735503872, 140249735512063, -STORE, 140249730764800, 140249732878335, -SNULL, 140249730764800, 140249730777087, -STORE, 140249730777088, 140249732878335, -STORE, 140249730764800, 140249730777087, -SNULL, 140249732870143, 140249732878335, -STORE, 140249730777088, 140249732870143, -STORE, 140249732870144, 140249732878335, -ERASE, 140249732870144, 140249732878335, -STORE, 140249732870144, 140249732878335, -STORE, 140249728561152, 140249730764799, -SNULL, 140249728561152, 140249728663551, -STORE, 140249728663552, 140249730764799, -STORE, 140249728561152, 140249728663551, -SNULL, 140249730756607, 140249730764799, -STORE, 140249728663552, 140249730756607, -STORE, 140249730756608, 140249730764799, -ERASE, 140249730756608, 140249730764799, -STORE, 140249730756608, 140249730764799, -STORE, 140249746255872, 140249746272255, -STORE, 140249725399040, 140249728561151, -SNULL, 140249725399040, 140249726459903, -STORE, 140249726459904, 140249728561151, -STORE, 140249725399040, 140249726459903, -SNULL, 140249728552959, 140249728561151, -STORE, 140249726459904, 140249728552959, -STORE, 140249728552960, 140249728561151, -ERASE, 140249728552960, 140249728561151, -STORE, 140249728552960, 140249728561151, -STORE, 140249721602048, 140249725399039, -SNULL, 140249721602048, 140249723260927, -STORE, 140249723260928, 140249725399039, -STORE, 140249721602048, 140249723260927, -SNULL, 140249725358079, 140249725399039, -STORE, 140249723260928, 140249725358079, -STORE, 140249725358080, 140249725399039, -SNULL, 140249725358080, 140249725382655, -STORE, 140249725382656, 140249725399039, -STORE, 140249725358080, 140249725382655, -ERASE, 140249725358080, 140249725382655, -STORE, 140249725358080, 140249725382655, -ERASE, 140249725382656, 140249725399039, -STORE, 140249725382656, 140249725399039, -STORE, 140249746243584, 140249746272255, -SNULL, 140249725374463, 140249725382655, -STORE, 140249725358080, 140249725374463, -STORE, 140249725374464, 140249725382655, -SNULL, 140249728557055, 140249728561151, -STORE, 140249728552960, 140249728557055, -STORE, 140249728557056, 140249728561151, -SNULL, 140249730760703, 140249730764799, -STORE, 140249730756608, 140249730760703, -STORE, 140249730760704, 140249730764799, -SNULL, 140249732874239, 140249732878335, -STORE, 140249732870144, 140249732874239, -STORE, 140249732874240, 140249732878335, -SNULL, 140249735507967, 140249735512063, -STORE, 140249735503872, 140249735507967, -STORE, 140249735507968, 140249735512063, -SNULL, 140249738027007, 140249738031103, -STORE, 140249738018816, 140249738027007, -STORE, 140249738027008, 140249738031103, -SNULL, 140249740222463, 140249740226559, -STORE, 140249740218368, 140249740222463, -STORE, 140249740222464, 140249740226559, -SNULL, 140249744031743, 140249744060415, -STORE, 140249744027648, 140249744031743, -STORE, 140249744031744, 140249744060415, -SNULL, 28405759, 28454911, -STORE, 28372992, 28405759, -STORE, 28405760, 28454911, -SNULL, 140249746305023, 140249746309119, -STORE, 140249746300928, 140249746305023, -STORE, 140249746305024, 140249746309119, -ERASE, 140249746272256, 140249746300927, -STORE, 33853440, 33988607, -STORE, 140249744560128, 140249746243583, -STORE, 140249746296832, 140249746300927, -STORE, 140249744424960, 140249744560127, -STORE, 33853440, 34131967, -STORE, 140249719504896, 140249721602047, -STORE, 140249746288640, 140249746300927, -STORE, 140249746280448, 140249746300927, -STORE, 140249746243584, 140249746280447, -STORE, 140249744408576, 140249744560127, -STORE, 33853440, 34267135, -STORE, 33853440, 34422783, -STORE, 140249744400384, 140249744560127, -STORE, 140249744392192, 140249744560127, -STORE, 33853440, 34557951, -STORE, 33853440, 34693119, -STORE, 140249744375808, 140249744560127, -STORE, 140249744367616, 140249744560127, -STORE, 33853440, 34832383, -STORE, 140249719230464, 140249721602047, -STORE, 140249744207872, 140249744560127, -STORE, 33853440, 34971647, -SNULL, 34963455, 34971647, -STORE, 33853440, 34963455, -STORE, 34963456, 34971647, -ERASE, 34963456, 34971647, -SNULL, 34955263, 34963455, -STORE, 33853440, 34955263, -STORE, 34955264, 34963455, -ERASE, 34955264, 34963455, -SNULL, 34947071, 34955263, -STORE, 33853440, 34947071, -STORE, 34947072, 34955263, -ERASE, 34947072, 34955263, -SNULL, 34938879, 34947071, -STORE, 33853440, 34938879, -STORE, 34938880, 34947071, -ERASE, 34938880, 34947071, -STORE, 140249719214080, 140249721602047, -STORE, 140249719148544, 140249721602047, -STORE, 140249719115776, 140249721602047, -STORE, 140249717018624, 140249721602047, -STORE, 140249716953088, 140249721602047, -STORE, 33853440, 35086335, -STORE, 140249716822016, 140249721602047, -STORE, 140249716559872, 140249721602047, -STORE, 140249716551680, 140249721602047, -STORE, 140249716535296, 140249721602047, -STORE, 140249716527104, 140249721602047, -STORE, 140249716518912, 140249721602047, -STORE, 33853440, 35221503, -SNULL, 35213311, 35221503, -STORE, 33853440, 35213311, -STORE, 35213312, 35221503, -ERASE, 35213312, 35221503, -SNULL, 35205119, 35213311, -STORE, 33853440, 35205119, -STORE, 35205120, 35213311, -ERASE, 35205120, 35213311, -SNULL, 35192831, 35205119, -STORE, 33853440, 35192831, -STORE, 35192832, 35205119, -ERASE, 35192832, 35205119, -SNULL, 35176447, 35192831, -STORE, 33853440, 35176447, -STORE, 35176448, 35192831, -ERASE, 35176448, 35192831, -STORE, 140249716502528, 140249721602047, -STORE, 33853440, 35311615, -SNULL, 35307519, 35311615, -STORE, 33853440, 35307519, -STORE, 35307520, 35311615, -ERASE, 35307520, 35311615, -SNULL, 35303423, 35307519, -STORE, 33853440, 35303423, -STORE, 35303424, 35307519, -ERASE, 35303424, 35307519, -SNULL, 35299327, 35303423, -STORE, 33853440, 35299327, -STORE, 35299328, 35303423, -ERASE, 35299328, 35303423, -SNULL, 35295231, 35299327, -STORE, 33853440, 35295231, -STORE, 35295232, 35299327, -ERASE, 35295232, 35299327, -SNULL, 35291135, 35295231, -STORE, 33853440, 35291135, -STORE, 35291136, 35295231, -ERASE, 35291136, 35295231, -SNULL, 35287039, 35291135, -STORE, 33853440, 35287039, -STORE, 35287040, 35291135, -ERASE, 35287040, 35291135, -SNULL, 35282943, 35287039, -STORE, 33853440, 35282943, -STORE, 35282944, 35287039, -ERASE, 35282944, 35287039, -STORE, 140249716486144, 140249721602047, -STORE, 140249716453376, 140249721602047, -STORE, 33853440, 35418111, -SNULL, 35401727, 35418111, -STORE, 33853440, 35401727, -STORE, 35401728, 35418111, -ERASE, 35401728, 35418111, -SNULL, 35389439, 35401727, -STORE, 33853440, 35389439, -STORE, 35389440, 35401727, -ERASE, 35389440, 35401727, -STORE, 140249714356224, 140249721602047, -STORE, 33853440, 35540991, -STORE, 140249714339840, 140249721602047, -STORE, 140249714077696, 140249721602047, -STORE, 140249714069504, 140249721602047, -STORE, 140249714061312, 140249721602047, -STORE, 33853440, 35680255, -SNULL, 35672063, 35680255, -STORE, 33853440, 35672063, -STORE, 35672064, 35680255, -ERASE, 35672064, 35680255, -SNULL, 35627007, 35672063, -STORE, 33853440, 35627007, -STORE, 35627008, 35672063, -ERASE, 35627008, 35672063, -STORE, 140249711964160, 140249721602047, -STORE, 33853440, 35762175, -SNULL, 35753983, 35762175, -STORE, 33853440, 35753983, -STORE, 35753984, 35762175, -ERASE, 35753984, 35762175, -SNULL, 35745791, 35753983, -STORE, 33853440, 35745791, -STORE, 35745792, 35753983, -ERASE, 35745792, 35753983, -STORE, 140249711955968, 140249721602047, -STORE, 140249711947776, 140249721602047, -STORE, 140249710899200, 140249721602047, -STORE, 140249710866432, 140249721602047, -STORE, 140249710600192, 140249721602047, -SNULL, 140249744424959, 140249744560127, -STORE, 140249744207872, 140249744424959, -STORE, 140249744424960, 140249744560127, -ERASE, 140249744424960, 140249744560127, -STORE, 140249708503040, 140249721602047, -STORE, 33853440, 35885055, -STORE, 140249707978752, 140249721602047, -STORE, 140249705881600, 140249721602047, -STORE, 33853440, 36036607, -STORE, 33853440, 36175871, -STORE, 140249744551936, 140249744560127, -STORE, 140249744543744, 140249744560127, -STORE, 140249744535552, 140249744560127, -STORE, 140249744527360, 140249744560127, -STORE, 140249744519168, 140249744560127, -STORE, 140249705619456, 140249721602047, -STORE, 140249744510976, 140249744560127, -STORE, 140249744502784, 140249744560127, -STORE, 140249744494592, 140249744560127, -STORE, 140249744486400, 140249744560127, -STORE, 140249744478208, 140249744560127, -STORE, 140249744470016, 140249744560127, -STORE, 140249744461824, 140249744560127, -STORE, 140249744453632, 140249744560127, -STORE, 140249744445440, 140249744560127, -STORE, 140249744437248, 140249744560127, -STORE, 140249744429056, 140249744560127, -STORE, 140249703522304, 140249721602047, -STORE, 33853440, 36311039, -STORE, 140249703489536, 140249721602047, -STORE, 33853440, 36474879, -STORE, 140249703456768, 140249721602047, -STORE, 33853440, 36622335, -STORE, 140249703424000, 140249721602047, -STORE, 140249703391232, 140249721602047, -STORE, 33853440, 36810751, -STORE, 140249703358464, 140249721602047, -STORE, 140249703325696, 140249721602047, -SNULL, 36655103, 36810751, -STORE, 33853440, 36655103, -STORE, 36655104, 36810751, -ERASE, 36655104, 36810751, -SNULL, 36438015, 36655103, -STORE, 33853440, 36438015, -STORE, 36438016, 36655103, -ERASE, 36438016, 36655103, -STORE, 140249703317504, 140249721602047, -STORE, 140249701220352, 140249721602047, -STORE, 33853440, 36585471, -STORE, 33853440, 36782079, -STORE, 140249701212160, 140249721602047, -STORE, 140249701203968, 140249721602047, -STORE, 140249701195776, 140249721602047, -STORE, 140249701187584, 140249721602047, -STORE, 140249701179392, 140249721602047, -STORE, 140249701171200, 140249721602047, -STORE, 140249701163008, 140249721602047, -STORE, 140249701154816, 140249721602047, -STORE, 140249701146624, 140249721602047, -STORE, 140249701138432, 140249721602047, -STORE, 140249701130240, 140249721602047, -STORE, 140249700081664, 140249721602047, -STORE, 140249700073472, 140249721602047, -STORE, 33853440, 36978687, -STORE, 140249697976320, 140249721602047, -STORE, 33853440, 37240831, -STORE, 140249695879168, 140249721602047, -STORE, 140249695870976, 140249721602047, -STORE, 140249695862784, 140249721602047, -STORE, 140249695854592, 140249721602047, -STORE, 140249695326208, 140249721602047, -SNULL, 140249710600191, 140249721602047, -STORE, 140249695326208, 140249710600191, -STORE, 140249710600192, 140249721602047, -SNULL, 140249710600192, 140249710866431, -STORE, 140249710866432, 140249721602047, -STORE, 140249710600192, 140249710866431, -ERASE, 140249710600192, 140249710866431, -STORE, 140249691131904, 140249710600191, -STORE, 33853440, 37474303, -STORE, 140249710858240, 140249721602047, -STORE, 140249710850048, 140249721602047, -STORE, 140249710841856, 140249721602047, -STORE, 140249710833664, 140249721602047, -STORE, 140249710825472, 140249721602047, -STORE, 140249710817280, 140249721602047, -STORE, 140249710809088, 140249721602047, -STORE, 140249710800896, 140249721602047, -STORE, 140249710792704, 140249721602047, -STORE, 140249710784512, 140249721602047, -STORE, 140249710776320, 140249721602047, -STORE, 140249710768128, 140249721602047, -STORE, 140249710759936, 140249721602047, -STORE, 140249710751744, 140249721602047, -STORE, 140249710743552, 140249721602047, -STORE, 140249710735360, 140249721602047, -STORE, 140249689034752, 140249710600191, -STORE, 140249710727168, 140249721602047, -STORE, 140249686937600, 140249710600191, -STORE, 33853440, 37867519, -STORE, 140249684840448, 140249710600191, -STORE, 140249710718976, 140249721602047, -STORE, 140249682743296, 140249710600191, -STORE, 140249710710784, 140249721602047, -STORE, 140249710702592, 140249721602047, -STORE, 140249710694400, 140249721602047, -STORE, 140249710686208, 140249721602047, -STORE, 140249710678016, 140249721602047, -STORE, 140249682612224, 140249710600191, -STORE, 140249682087936, 140249710600191, -SNULL, 140249705619455, 140249710600191, -STORE, 140249682087936, 140249705619455, -STORE, 140249705619456, 140249710600191, -SNULL, 140249705619456, 140249705881599, -STORE, 140249705881600, 140249710600191, -STORE, 140249705619456, 140249705881599, -ERASE, 140249705619456, 140249705881599, -STORE, 140249679990784, 140249705619455, -STORE, 140249710669824, 140249721602047, -STORE, 140249677893632, 140249705619455, -STORE, 140249710653440, 140249721602047, -STORE, 140249710645248, 140249721602047, -STORE, 140249710637056, 140249721602047, -STORE, 140249710628864, 140249721602047, -STORE, 140249710620672, 140249721602047, -STORE, 140249710612480, 140249721602047, -STORE, 140249710604288, 140249721602047, -STORE, 140249705873408, 140249710600191, -STORE, 140249705865216, 140249710600191, -STORE, 140249705857024, 140249710600191, -STORE, 140249705848832, 140249710600191, -STORE, 140249705840640, 140249710600191, -STORE, 140249705832448, 140249710600191, -STORE, 140249705824256, 140249710600191, -STORE, 140249705816064, 140249710600191, -STORE, 140249705807872, 140249710600191, -STORE, 140249705799680, 140249710600191, -STORE, 33853440, 38129663, -SNULL, 140249744207872, 140249744367615, -STORE, 140249744367616, 140249744424959, -STORE, 140249744207872, 140249744367615, -ERASE, 140249744207872, 140249744367615, -STORE, 140249677606912, 140249705619455, -STORE, 140249675509760, 140249705619455, -SNULL, 140249677606911, 140249705619455, -STORE, 140249675509760, 140249677606911, -STORE, 140249677606912, 140249705619455, -SNULL, 140249677606912, 140249677893631, -STORE, 140249677893632, 140249705619455, -STORE, 140249677606912, 140249677893631, -ERASE, 140249677606912, 140249677893631, -STORE, 140249744359424, 140249744424959, -STORE, 33853440, 38391807, -STORE, 140249674981376, 140249677606911, -STORE, 140249672884224, 140249677606911, -SNULL, 140249719230463, 140249721602047, -STORE, 140249710604288, 140249719230463, -STORE, 140249719230464, 140249721602047, -SNULL, 140249719230464, 140249719504895, -STORE, 140249719504896, 140249721602047, -STORE, 140249719230464, 140249719504895, -ERASE, 140249719230464, 140249719504895, -STORE, 140249744351232, 140249744424959, -STORE, 140249744343040, 140249744424959, -STORE, 140249744334848, 140249744424959, -STORE, 140249744326656, 140249744424959, -STORE, 140249744310272, 140249744424959, -STORE, 140249744302080, 140249744424959, -STORE, 140249744285696, 140249744424959, -STORE, 140249744277504, 140249744424959, -STORE, 140249744261120, 140249744424959, -STORE, 140249744252928, 140249744424959, -STORE, 140249744220160, 140249744424959, -STORE, 140249744211968, 140249744424959, -STORE, 140249719488512, 140249721602047, -STORE, 140249744203776, 140249744424959, -STORE, 140249719472128, 140249721602047, -STORE, 140249719463936, 140249721602047, -STORE, 140249719447552, 140249721602047, -STORE, 140249719439360, 140249721602047, -STORE, 140249719406592, 140249721602047, -STORE, 140249719398400, 140249721602047, -STORE, 140249719382016, 140249721602047, -STORE, 140249719373824, 140249721602047, -STORE, 140249719357440, 140249721602047, -STORE, 140249719349248, 140249721602047, -STORE, 140249719332864, 140249721602047, -STORE, 140249719324672, 140249721602047, -STORE, 140249719291904, 140249721602047, -STORE, 140249719283712, 140249721602047, -STORE, 140249719267328, 140249721602047, -STORE, 140249719259136, 140249721602047, -STORE, 140249719242752, 140249721602047, -STORE, 140249719234560, 140249721602047, -STORE, 140249705783296, 140249710600191, -STORE, 140249705775104, 140249710600191, -STORE, 140249705742336, 140249710600191, -STORE, 140249705734144, 140249710600191, -STORE, 140249705717760, 140249710600191, -STORE, 140249670787072, 140249677606911, -STORE, 140249705709568, 140249710600191, -STORE, 140249705693184, 140249710600191, -STORE, 140249705684992, 140249710600191, -STORE, 140249705668608, 140249710600191, -STORE, 140249705660416, 140249710600191, -STORE, 140249705627648, 140249710600191, -STORE, 140249677893632, 140249710600191, -STORE, 140249677877248, 140249710600191, -STORE, 140249677869056, 140249710600191, -STORE, 140249677852672, 140249710600191, -STORE, 140249677844480, 140249710600191, -STORE, 140249677828096, 140249710600191, -STORE, 140249668689920, 140249677606911, -STORE, 140249677819904, 140249710600191, -STORE, 140249677787136, 140249710600191, -STORE, 140249677778944, 140249710600191, -STORE, 140249677762560, 140249710600191, -STORE, 140249677754368, 140249710600191, -STORE, 140249677737984, 140249710600191, -STORE, 140249677729792, 140249710600191, -STORE, 140249677713408, 140249710600191, -STORE, 140249677705216, 140249710600191, -STORE, 140249677672448, 140249710600191, -STORE, 140249677664256, 140249710600191, -STORE, 140249677647872, 140249710600191, -STORE, 140249677639680, 140249710600191, -STORE, 140249677623296, 140249710600191, -STORE, 140249677615104, 140249710600191, -STORE, 140249668673536, 140249677606911, -STORE, 140249668673536, 140249710600191, -STORE, 140249668640768, 140249710600191, -STORE, 140249668632576, 140249710600191, -STORE, 140249668616192, 140249710600191, -STORE, 140249668608000, 140249710600191, -STORE, 140249668591616, 140249710600191, -STORE, 140249668583424, 140249710600191, -STORE, 140249668567040, 140249710600191, -STORE, 140249668558848, 140249710600191, -STORE, 140249668526080, 140249710600191, -STORE, 140249668517888, 140249710600191, -STORE, 140249668501504, 140249710600191, -STORE, 140249668493312, 140249710600191, -STORE, 140249668476928, 140249710600191, -STORE, 140249668468736, 140249710600191, -STORE, 140249668452352, 140249710600191, -STORE, 140249668444160, 140249710600191, -STORE, 140249668411392, 140249710600191, -STORE, 140249668403200, 140249710600191, -STORE, 140249668386816, 140249710600191, -STORE, 140249668378624, 140249710600191, -STORE, 140249668362240, 140249710600191, -STORE, 140249668354048, 140249710600191, -STORE, 140249668337664, 140249710600191, -STORE, 140249668329472, 140249710600191, -STORE, 140249668296704, 140249710600191, -STORE, 140249668288512, 140249710600191, -STORE, 140249668272128, 140249710600191, -STORE, 140249668263936, 140249710600191, -STORE, 140249668247552, 140249710600191, -STORE, 140249668239360, 140249710600191, -STORE, 140249668222976, 140249710600191, -STORE, 140249668214784, 140249710600191, -STORE, 140249668182016, 140249710600191, -STORE, 140249668173824, 140249710600191, -STORE, 140249668157440, 140249710600191, -STORE, 140249668149248, 140249710600191, -STORE, 140249668132864, 140249710600191, -STORE, 140249668124672, 140249710600191, -STORE, 140249668108288, 140249710600191, -STORE, 140249668100096, 140249710600191, -STORE, 140249668067328, 140249710600191, -STORE, 140249668059136, 140249710600191, -STORE, 140249668042752, 140249710600191, -STORE, 140249668034560, 140249710600191, -STORE, 140249668018176, 140249710600191, -STORE, 140249668009984, 140249710600191, -STORE, 140249667993600, 140249710600191, -STORE, 140249667985408, 140249710600191, -STORE, 140249667952640, 140249710600191, -STORE, 140249667944448, 140249710600191, -STORE, 140249667928064, 140249710600191, -STORE, 140249667919872, 140249710600191, -STORE, 140249667903488, 140249710600191, -STORE, 140249667895296, 140249710600191, -STORE, 140249667878912, 140249710600191, -STORE, 140249667870720, 140249710600191, -STORE, 140249667837952, 140249710600191, -STORE, 140249667829760, 140249710600191, -STORE, 140249667813376, 140249710600191, -STORE, 140249667805184, 140249710600191, -STORE, 140249667788800, 140249710600191, -STORE, 140249667780608, 140249710600191, -STORE, 140249667764224, 140249710600191, -STORE, 140249667756032, 140249710600191, -STORE, 140249667723264, 140249710600191, -STORE, 140249667715072, 140249710600191, -STORE, 140249667698688, 140249710600191, -STORE, 140249667690496, 140249710600191, -STORE, 140249667674112, 140249710600191, -STORE, 140249667665920, 140249710600191, -STORE, 140249667649536, 140249710600191, -STORE, 140249667641344, 140249710600191, -STORE, 140249667608576, 140249710600191, -STORE, 140249667600384, 140249710600191, -STORE, 140249667584000, 140249710600191, -STORE, 140249667575808, 140249710600191, -STORE, 140249667559424, 140249710600191, -STORE, 140249667551232, 140249710600191, -STORE, 140249667534848, 140249710600191, -STORE, 140249667526656, 140249710600191, -STORE, 140249667493888, 140249710600191, -STORE, 140249667485696, 140249710600191, -STORE, 140249667469312, 140249710600191, -STORE, 140249667461120, 140249710600191, -STORE, 140249667444736, 140249710600191, -STORE, 140249667436544, 140249710600191, -STORE, 140249667420160, 140249710600191, -STORE, 140249665323008, 140249710600191, -STORE, 140249665314816, 140249710600191, -STORE, 140249665282048, 140249710600191, -STORE, 140249665273856, 140249710600191, -STORE, 140249665257472, 140249710600191, -STORE, 140249665249280, 140249710600191, -STORE, 140249665232896, 140249710600191, -STORE, 140249665224704, 140249710600191, -STORE, 140249665208320, 140249710600191, -STORE, 140249665200128, 140249710600191, -STORE, 140249665167360, 140249710600191, -STORE, 140249665159168, 140249710600191, -STORE, 140249665142784, 140249710600191, -STORE, 140249665134592, 140249710600191, -STORE, 140249665118208, 140249710600191, -STORE, 140249665110016, 140249710600191, -STORE, 140249665093632, 140249710600191, -STORE, 140249665085440, 140249710600191, -STORE, 140249665052672, 140249710600191, -STORE, 140249665044480, 140249710600191, -STORE, 140249665028096, 140249710600191, -STORE, 140249665019904, 140249710600191, -STORE, 140249665003520, 140249710600191, -STORE, 140249664995328, 140249710600191, -STORE, 140249664978944, 140249710600191, -STORE, 140249664970752, 140249710600191, -STORE, 140249664937984, 140249710600191, -STORE, 140249664929792, 140249710600191, -STORE, 140249664913408, 140249710600191, -STORE, 140249664905216, 140249710600191, -STORE, 140249664888832, 140249710600191, -STORE, 140249664880640, 140249710600191, -STORE, 140249664864256, 140249710600191, -STORE, 140249664856064, 140249710600191, -STORE, 140249664823296, 140249710600191, -STORE, 140249664815104, 140249710600191, -STORE, 140249664798720, 140249710600191, -STORE, 140249664790528, 140249710600191, -STORE, 140249664774144, 140249710600191, -STORE, 140249664765952, 140249710600191, -STORE, 140249664749568, 140249710600191, -STORE, 140249664741376, 140249710600191, -STORE, 140249664708608, 140249710600191, -STORE, 140249664700416, 140249710600191, -STORE, 140249664684032, 140249710600191, -STORE, 140249664675840, 140249710600191, -STORE, 140249664659456, 140249710600191, -STORE, 140249664651264, 140249710600191, -STORE, 140249664634880, 140249710600191, -STORE, 140249664626688, 140249710600191, -STORE, 140249664593920, 140249710600191, -STORE, 140249664585728, 140249710600191, -STORE, 140249664569344, 140249710600191, -STORE, 140249664561152, 140249710600191, -STORE, 140249664544768, 140249710600191, -STORE, 140249664536576, 140249710600191, -STORE, 140249664520192, 140249710600191, -STORE, 140249664512000, 140249710600191, -STORE, 140249664479232, 140249710600191, -STORE, 140249664471040, 140249710600191, -STORE, 140249664454656, 140249710600191, -STORE, 140249664446464, 140249710600191, -STORE, 140249664430080, 140249710600191, -STORE, 140249664421888, 140249710600191, -STORE, 140249664405504, 140249710600191, -STORE, 140249664397312, 140249710600191, -STORE, 140249664364544, 140249710600191, -STORE, 140249664356352, 140249710600191, -STORE, 140249664339968, 140249710600191, -STORE, 140249664331776, 140249710600191, -STORE, 140249664315392, 140249710600191, -STORE, 140249664307200, 140249710600191, -STORE, 140249664290816, 140249710600191, -STORE, 140249664282624, 140249710600191, -STORE, 140249664249856, 140249710600191, -STORE, 140249664241664, 140249710600191, -STORE, 140249664225280, 140249710600191, -STORE, 140249664217088, 140249710600191, -STORE, 140249664200704, 140249710600191, -STORE, 140249664192512, 140249710600191, -STORE, 140249664176128, 140249710600191, -STORE, 140249664167936, 140249710600191, -STORE, 140249664135168, 140249710600191, -STORE, 140249664126976, 140249710600191, -STORE, 140249664110592, 140249710600191, -STORE, 140249664102400, 140249710600191, -STORE, 140249664086016, 140249710600191, -STORE, 140249664077824, 140249710600191, -STORE, 140249664061440, 140249710600191, -STORE, 140249664053248, 140249710600191, -STORE, 140249664020480, 140249710600191, -STORE, 140249664012288, 140249710600191, -STORE, 140249663995904, 140249710600191, -STORE, 140249663987712, 140249710600191, -STORE, 140249663971328, 140249710600191, -STORE, 140249663963136, 140249710600191, -STORE, 140249663946752, 140249710600191, -STORE, 140249663938560, 140249710600191, -STORE, 140249663905792, 140249710600191, -STORE, 140249663897600, 140249710600191, -STORE, 140249663881216, 140249710600191, -STORE, 140249663873024, 140249710600191, -STORE, 140249663856640, 140249710600191, -STORE, 140249663848448, 140249710600191, -STORE, 140249663832064, 140249710600191, -STORE, 140249663823872, 140249710600191, -STORE, 140249663791104, 140249710600191, -STORE, 140249663782912, 140249710600191, -STORE, 140249663766528, 140249710600191, -STORE, 140249663758336, 140249710600191, -STORE, 140249663741952, 140249710600191, -STORE, 140249663733760, 140249710600191, -STORE, 140249663717376, 140249710600191, -STORE, 140249663709184, 140249710600191, -STORE, 140249663676416, 140249710600191, -STORE, 140249663668224, 140249710600191, -STORE, 140249663651840, 140249710600191, -STORE, 140249663643648, 140249710600191, -STORE, 140249663627264, 140249710600191, -STORE, 33853440, 38526975, -STORE, 140249663619072, 140249710600191, -STORE, 140249663602688, 140249710600191, -STORE, 140249661505536, 140249710600191, -STORE, 140249661497344, 140249710600191, -STORE, 140249661464576, 140249710600191, -STORE, 140249661456384, 140249710600191, -STORE, 140249661440000, 140249710600191, -STORE, 140249661431808, 140249710600191, -STORE, 140249661415424, 140249710600191, -STORE, 140249661407232, 140249710600191, -STORE, 140249661390848, 140249710600191, -STORE, 140249661382656, 140249710600191, -STORE, 140249661349888, 140249710600191, -STORE, 140249661341696, 140249710600191, -STORE, 140249661325312, 140249710600191, -STORE, 140249661317120, 140249710600191, -STORE, 140249661300736, 140249710600191, -STORE, 140249661292544, 140249710600191, -STORE, 140249661276160, 140249710600191, -STORE, 140249661267968, 140249710600191, -STORE, 140249661235200, 140249710600191, -STORE, 140249661227008, 140249710600191, -STORE, 140249661210624, 140249710600191, -STORE, 140249661202432, 140249710600191, -STORE, 140249661186048, 140249710600191, -STORE, 140249661177856, 140249710600191, -STORE, 140249661161472, 140249710600191, -STORE, 140249661153280, 140249710600191, -STORE, 140249661120512, 140249710600191, -STORE, 140249661112320, 140249710600191, -STORE, 140249661095936, 140249710600191, -STORE, 140249661087744, 140249710600191, -STORE, 140249661071360, 140249710600191, -STORE, 140249661063168, 140249710600191, -STORE, 140249661046784, 140249710600191, -STORE, 140249661038592, 140249710600191, -STORE, 140249661005824, 140249710600191, -STORE, 140249660997632, 140249710600191, -STORE, 140249660981248, 140249710600191, -STORE, 140249660973056, 140249710600191, -STORE, 140249660956672, 140249710600191, -STORE, 140249660948480, 140249710600191, -STORE, 140249660932096, 140249710600191, -STORE, 140249660923904, 140249710600191, -STORE, 140249660891136, 140249710600191, -STORE, 140249660882944, 140249710600191, -STORE, 140249660866560, 140249710600191, -STORE, 140249660858368, 140249710600191, -STORE, 140249660841984, 140249710600191, -STORE, 140249660833792, 140249710600191, -STORE, 140249660817408, 140249710600191, -STORE, 140249660809216, 140249710600191, -STORE, 140249660776448, 140249710600191, -STORE, 140249660768256, 140249710600191, -STORE, 140249660751872, 140249710600191, -STORE, 140249660743680, 140249710600191, -STORE, 140249660727296, 140249710600191, -STORE, 140249660719104, 140249710600191, -STORE, 140249660702720, 140249710600191, -STORE, 140249660694528, 140249710600191, -STORE, 140249660661760, 140249710600191, -STORE, 140249660653568, 140249710600191, -STORE, 140249660637184, 140249710600191, -STORE, 140249660628992, 140249710600191, -STORE, 140249660612608, 140249710600191, -STORE, 140249660604416, 140249710600191, -STORE, 140249660588032, 140249710600191, -STORE, 140249660579840, 140249710600191, -STORE, 140249660547072, 140249710600191, -STORE, 140249660538880, 140249710600191, -STORE, 140249660522496, 140249710600191, -STORE, 140249660514304, 140249710600191, -STORE, 140249660497920, 140249710600191, -STORE, 140249660489728, 140249710600191, -STORE, 140249660473344, 140249710600191, -STORE, 140249660465152, 140249710600191, -STORE, 140249660432384, 140249710600191, -STORE, 140249660424192, 140249710600191, -STORE, 140249660407808, 140249710600191, -STORE, 140249660399616, 140249710600191, -STORE, 140249660383232, 140249710600191, -STORE, 140249660375040, 140249710600191, -STORE, 140249660358656, 140249710600191, -STORE, 140249660350464, 140249710600191, -STORE, 140249660317696, 140249710600191, -STORE, 140249660309504, 140249710600191, -STORE, 140249660293120, 140249710600191, -STORE, 140249660284928, 140249710600191, -STORE, 140249660268544, 140249710600191, -STORE, 140249660260352, 140249710600191, -STORE, 140249660243968, 140249710600191, -STORE, 140249660235776, 140249710600191, -STORE, 140249660203008, 140249710600191, -STORE, 140249660194816, 140249710600191, -STORE, 140249660178432, 140249710600191, -STORE, 140249660170240, 140249710600191, -STORE, 140249660153856, 140249710600191, -STORE, 140249660145664, 140249710600191, -STORE, 140249660129280, 140249710600191, -STORE, 140249660121088, 140249710600191, -STORE, 140249660088320, 140249710600191, -STORE, 140249660080128, 140249710600191, -STORE, 140249660063744, 140249710600191, -STORE, 140249660055552, 140249710600191, -STORE, 140249660039168, 140249710600191, -STORE, 140249660030976, 140249710600191, -STORE, 140249660014592, 140249710600191, -STORE, 140249660006400, 140249710600191, -STORE, 140249659973632, 140249710600191, -STORE, 140249659965440, 140249710600191, -STORE, 140249659949056, 140249710600191, -STORE, 140249659940864, 140249710600191, -STORE, 140249659924480, 140249710600191, -STORE, 140249659916288, 140249710600191, -STORE, 140249659899904, 140249710600191, -STORE, 140249659891712, 140249710600191, -STORE, 140249659858944, 140249710600191, -STORE, 140249659850752, 140249710600191, -STORE, 140249659834368, 140249710600191, -STORE, 140249659826176, 140249710600191, -STORE, 140249659809792, 140249710600191, -STORE, 140249659801600, 140249710600191, -STORE, 140249659785216, 140249710600191, -STORE, 140249657688064, 140249710600191, -STORE, 140249657679872, 140249710600191, -STORE, 140249657647104, 140249710600191, -STORE, 140249657638912, 140249710600191, -STORE, 140249657622528, 140249710600191, -STORE, 140249657614336, 140249710600191, -STORE, 140249657597952, 140249710600191, -STORE, 140249657589760, 140249710600191, -STORE, 140249657573376, 140249710600191, -STORE, 140249657565184, 140249710600191, -STORE, 140249657532416, 140249710600191, -STORE, 140249657524224, 140249710600191, -STORE, 140249657507840, 140249710600191, -STORE, 140249657499648, 140249710600191, -STORE, 140249657483264, 140249710600191, -STORE, 140249657475072, 140249710600191, -STORE, 140249657458688, 140249710600191, -STORE, 140249657450496, 140249710600191, -STORE, 140249657417728, 140249710600191, -STORE, 140249657409536, 140249710600191, -STORE, 140249657393152, 140249710600191, -STORE, 140249657384960, 140249710600191, -STORE, 140249657368576, 140249710600191, -STORE, 140249657360384, 140249710600191, -STORE, 140249657344000, 140249710600191, -STORE, 140249657335808, 140249710600191, -STORE, 140249657303040, 140249710600191, -STORE, 140249657294848, 140249710600191, -STORE, 140249657278464, 140249710600191, -STORE, 140249657270272, 140249710600191, -STORE, 140249657253888, 140249710600191, -STORE, 140249657245696, 140249710600191, -STORE, 140249657229312, 140249710600191, -STORE, 140249657221120, 140249710600191, -STORE, 140249657188352, 140249710600191, -STORE, 140249657180160, 140249710600191, -STORE, 140249657163776, 140249710600191, -STORE, 140249657155584, 140249710600191, -STORE, 140249657139200, 140249710600191, -STORE, 140249657131008, 140249710600191, -STORE, 140249657114624, 140249710600191, -STORE, 140249657106432, 140249710600191, -STORE, 140249657073664, 140249710600191, -STORE, 140249657065472, 140249710600191, -STORE, 140249657049088, 140249710600191, -STORE, 140249657040896, 140249710600191, -STORE, 140249657024512, 140249710600191, -STORE, 140249657016320, 140249710600191, -STORE, 140249656999936, 140249710600191, -STORE, 140249656991744, 140249710600191, -STORE, 140249656958976, 140249710600191, -STORE, 140249656950784, 140249710600191, -STORE, 140249656934400, 140249710600191, -STORE, 140249656926208, 140249710600191, -STORE, 140249656909824, 140249710600191, -STORE, 140249656901632, 140249710600191, -STORE, 140249656885248, 140249710600191, -STORE, 140249656877056, 140249710600191, -STORE, 140249656844288, 140249710600191, -STORE, 140249656836096, 140249710600191, -STORE, 140249656819712, 140249710600191, -STORE, 140249656811520, 140249710600191, -STORE, 140249656795136, 140249710600191, -STORE, 33853440, 38662143, -STORE, 140249656786944, 140249710600191, -STORE, 140249656770560, 140249710600191, -STORE, 140249656762368, 140249710600191, -STORE, 140249656729600, 140249710600191, -STORE, 140249656721408, 140249710600191, -STORE, 140249656705024, 140249710600191, -STORE, 140249656696832, 140249710600191, -STORE, 140249656680448, 140249710600191, -STORE, 140249656672256, 140249710600191, -STORE, 140249656655872, 140249710600191, -STORE, 140249656647680, 140249710600191, -STORE, 140249656614912, 140249710600191, -STORE, 140249656606720, 140249710600191, -STORE, 140249656590336, 140249710600191, -STORE, 140249656582144, 140249710600191, -STORE, 140249656565760, 140249710600191, -STORE, 140249656557568, 140249710600191, -STORE, 140249656541184, 140249710600191, -STORE, 140249656532992, 140249710600191, -STORE, 140249656500224, 140249710600191, -STORE, 140249656492032, 140249710600191, -STORE, 140249656475648, 140249710600191, -STORE, 140249656467456, 140249710600191, -STORE, 140249656451072, 140249710600191, -STORE, 140249656442880, 140249710600191, -STORE, 140249656426496, 140249710600191, -STORE, 140249656418304, 140249710600191, -STORE, 140249656385536, 140249710600191, -STORE, 140249656377344, 140249710600191, -STORE, 140249656360960, 140249710600191, -STORE, 140249656352768, 140249710600191, -STORE, 140249656336384, 140249710600191, -STORE, 140249656328192, 140249710600191, -STORE, 140249656311808, 140249710600191, -STORE, 140249656303616, 140249710600191, -STORE, 140249656270848, 140249710600191, -STORE, 140249656262656, 140249710600191, -STORE, 140249656246272, 140249710600191, -STORE, 140249656238080, 140249710600191, -STORE, 140249656221696, 140249710600191, -STORE, 140249656213504, 140249710600191, -STORE, 140249656197120, 140249710600191, -STORE, 140249656188928, 140249710600191, -STORE, 140249656156160, 140249710600191, -STORE, 140249656147968, 140249710600191, -STORE, 140249656131584, 140249710600191, -STORE, 140249656123392, 140249710600191, -STORE, 140249656107008, 140249710600191, -STORE, 140249656098816, 140249710600191, -STORE, 140249656082432, 140249710600191, -STORE, 140249656074240, 140249710600191, -STORE, 140249656041472, 140249710600191, -STORE, 140249656033280, 140249710600191, -STORE, 140249656016896, 140249710600191, -STORE, 140249656008704, 140249710600191, -STORE, 140249655992320, 140249710600191, -STORE, 140249655984128, 140249710600191, -STORE, 140249655967744, 140249710600191, -STORE, 140249653870592, 140249710600191, -STORE, 140249653862400, 140249710600191, -STORE, 140249653829632, 140249710600191, -STORE, 140249653821440, 140249710600191, -STORE, 140249653805056, 140249710600191, -STORE, 140249653796864, 140249710600191, -STORE, 140249653780480, 140249710600191, -STORE, 140249653772288, 140249710600191, -STORE, 140249653755904, 140249710600191, -STORE, 140249652703232, 140249710600191, -SNULL, 140249682087935, 140249710600191, -STORE, 140249652703232, 140249682087935, -STORE, 140249682087936, 140249710600191, - }; - - unsigned long set26[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140729464770560, 140737488351231, -SNULL, 140729464774655, 140737488351231, -STORE, 140729464770560, 140729464774655, -STORE, 140729464639488, 140729464774655, -STORE, 4194304, 5066751, -STORE, 7159808, 7172095, -STORE, 7172096, 7180287, -STORE, 140729465114624, 140729465118719, -STORE, 140729465102336, 140729465114623, -STORE, 30867456, 30875647, -STORE, 30867456, 31010815, -STORE, 140109040988160, 140109042671615, -STORE, 140109040959488, 140109040988159, -STORE, 140109040943104, 140109040959487, -ERASE, 140109040943104, 140109040959487, -STORE, 140109040840704, 140109040959487, -ERASE, 140109040840704, 140109040959487, -STORE, 140109040951296, 140109040959487, -ERASE, 140109040951296, 140109040959487, -STORE, 140109040955392, 140109040959487, -ERASE, 140109040955392, 140109040959487, - }; - unsigned long set27[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140726128070656, 140737488351231, -SNULL, 140726128074751, 140737488351231, -STORE, 140726128070656, 140726128074751, -STORE, 140726127939584, 140726128074751, -STORE, 94478497189888, 94478499303423, -SNULL, 94478497202175, 94478499303423, -STORE, 94478497189888, 94478497202175, -STORE, 94478497202176, 94478499303423, -ERASE, 94478497202176, 94478499303423, -STORE, 94478499295232, 94478499303423, -STORE, 140415605723136, 140415607975935, -SNULL, 140415605866495, 140415607975935, -STORE, 140415605723136, 140415605866495, -STORE, 140415605866496, 140415607975935, -ERASE, 140415605866496, 140415607975935, -STORE, 140415607963648, 140415607971839, -STORE, 140415607971840, 140415607975935, -STORE, 140726130024448, 140726130028543, -STORE, 140726130012160, 140726130024447, -STORE, 140415607934976, 140415607963647, -STORE, 140415607926784, 140415607934975, -STORE, 140415603245056, 140415605723135, -SNULL, 140415603245056, 140415603613695, -STORE, 140415603613696, 140415605723135, -STORE, 140415603245056, 140415603613695, -SNULL, 140415605710847, 140415605723135, -STORE, 140415603613696, 140415605710847, -STORE, 140415605710848, 140415605723135, -ERASE, 140415605710848, 140415605723135, -STORE, 140415605710848, 140415605723135, -STORE, 140415599370240, 140415603245055, -SNULL, 140415599370240, 140415601111039, -STORE, 140415601111040, 140415603245055, -STORE, 140415599370240, 140415601111039, -SNULL, 140415603208191, 140415603245055, -STORE, 140415601111040, 140415603208191, -STORE, 140415603208192, 140415603245055, -ERASE, 140415603208192, 140415603245055, -STORE, 140415603208192, 140415603245055, -STORE, 140415595692032, 140415599370239, -SNULL, 140415595692032, 140415597207551, -STORE, 140415597207552, 140415599370239, -STORE, 140415595692032, 140415597207551, -SNULL, 140415599304703, 140415599370239, -STORE, 140415597207552, 140415599304703, -STORE, 140415599304704, 140415599370239, -SNULL, 140415599304704, 140415599353855, -STORE, 140415599353856, 140415599370239, -STORE, 140415599304704, 140415599353855, -ERASE, 140415599304704, 140415599353855, -STORE, 140415599304704, 140415599353855, -ERASE, 140415599353856, 140415599370239, -STORE, 140415599353856, 140415599370239, -STORE, 140415593500672, 140415595692031, -SNULL, 140415593500672, 140415593590783, -STORE, 140415593590784, 140415595692031, -STORE, 140415593500672, 140415593590783, -SNULL, 140415595683839, 140415595692031, -STORE, 140415593590784, 140415595683839, -STORE, 140415595683840, 140415595692031, -ERASE, 140415595683840, 140415595692031, -STORE, 140415595683840, 140415595692031, -STORE, 140415589703680, 140415593500671, -SNULL, 140415589703680, 140415591362559, -STORE, 140415591362560, 140415593500671, -STORE, 140415589703680, 140415591362559, -SNULL, 140415593459711, 140415593500671, -STORE, 140415591362560, 140415593459711, -STORE, 140415593459712, 140415593500671, -SNULL, 140415593459712, 140415593484287, -STORE, 140415593484288, 140415593500671, -STORE, 140415593459712, 140415593484287, -ERASE, 140415593459712, 140415593484287, -STORE, 140415593459712, 140415593484287, -ERASE, 140415593484288, 140415593500671, -STORE, 140415593484288, 140415593500671, -STORE, 140415587590144, 140415589703679, -SNULL, 140415587590144, 140415587602431, -STORE, 140415587602432, 140415589703679, -STORE, 140415587590144, 140415587602431, -SNULL, 140415589695487, 140415589703679, -STORE, 140415587602432, 140415589695487, -STORE, 140415589695488, 140415589703679, -ERASE, 140415589695488, 140415589703679, -STORE, 140415589695488, 140415589703679, -STORE, 140415607918592, 140415607934975, -STORE, 140415585398784, 140415587590143, -SNULL, 140415585398784, 140415585480703, -STORE, 140415585480704, 140415587590143, -STORE, 140415585398784, 140415585480703, -SNULL, 140415587573759, 140415587590143, -STORE, 140415585480704, 140415587573759, -STORE, 140415587573760, 140415587590143, -SNULL, 140415587573760, 140415587581951, -STORE, 140415587581952, 140415587590143, -STORE, 140415587573760, 140415587581951, -ERASE, 140415587573760, 140415587581951, -STORE, 140415587573760, 140415587581951, -ERASE, 140415587581952, 140415587590143, -STORE, 140415587581952, 140415587590143, -STORE, 140415583182848, 140415585398783, -SNULL, 140415583182848, 140415583281151, -STORE, 140415583281152, 140415585398783, -STORE, 140415583182848, 140415583281151, -SNULL, 140415585374207, 140415585398783, -STORE, 140415583281152, 140415585374207, -STORE, 140415585374208, 140415585398783, -SNULL, 140415585374208, 140415585382399, -STORE, 140415585382400, 140415585398783, -STORE, 140415585374208, 140415585382399, -ERASE, 140415585374208, 140415585382399, -STORE, 140415585374208, 140415585382399, -ERASE, 140415585382400, 140415585398783, -STORE, 140415585382400, 140415585398783, -STORE, 140415580979200, 140415583182847, -SNULL, 140415580979200, 140415581081599, -STORE, 140415581081600, 140415583182847, -STORE, 140415580979200, 140415581081599, -SNULL, 140415583174655, 140415583182847, -STORE, 140415581081600, 140415583174655, -STORE, 140415583174656, 140415583182847, -ERASE, 140415583174656, 140415583182847, -STORE, 140415583174656, 140415583182847, -STORE, 140415578816512, 140415580979199, -SNULL, 140415578816512, 140415578877951, -STORE, 140415578877952, 140415580979199, -STORE, 140415578816512, 140415578877951, -SNULL, 140415580971007, 140415580979199, -STORE, 140415578877952, 140415580971007, -STORE, 140415580971008, 140415580979199, -ERASE, 140415580971008, 140415580979199, -STORE, 140415580971008, 140415580979199, -STORE, 140415576563712, 140415578816511, -SNULL, 140415576563712, 140415576715263, -STORE, 140415576715264, 140415578816511, -STORE, 140415576563712, 140415576715263, -SNULL, 140415578808319, 140415578816511, -STORE, 140415576715264, 140415578808319, -STORE, 140415578808320, 140415578816511, -ERASE, 140415578808320, 140415578816511, -STORE, 140415578808320, 140415578816511, -STORE, 140415574392832, 140415576563711, -SNULL, 140415574392832, 140415574462463, -STORE, 140415574462464, 140415576563711, -STORE, 140415574392832, 140415574462463, -SNULL, 140415576555519, 140415576563711, -STORE, 140415574462464, 140415576555519, -STORE, 140415576555520, 140415576563711, -ERASE, 140415576555520, 140415576563711, -STORE, 140415576555520, 140415576563711, -STORE, 140415607910400, 140415607934975, -STORE, 140415571230720, 140415574392831, -SNULL, 140415571230720, 140415572291583, -STORE, 140415572291584, 140415574392831, -STORE, 140415571230720, 140415572291583, -SNULL, 140415574384639, 140415574392831, -STORE, 140415572291584, 140415574384639, -STORE, 140415574384640, 140415574392831, -ERASE, 140415574384640, 140415574392831, -STORE, 140415574384640, 140415574392831, -STORE, 140415607902208, 140415607934975, -SNULL, 140415593476095, 140415593484287, -STORE, 140415593459712, 140415593476095, -STORE, 140415593476096, 140415593484287, -SNULL, 140415574388735, 140415574392831, -STORE, 140415574384640, 140415574388735, -STORE, 140415574388736, 140415574392831, -SNULL, 140415576559615, 140415576563711, -STORE, 140415576555520, 140415576559615, -STORE, 140415576559616, 140415576563711, -SNULL, 140415589699583, 140415589703679, -STORE, 140415589695488, 140415589699583, -STORE, 140415589699584, 140415589703679, -SNULL, 140415585378303, 140415585382399, -STORE, 140415585374208, 140415585378303, -STORE, 140415585378304, 140415585382399, -SNULL, 140415578812415, 140415578816511, -STORE, 140415578808320, 140415578812415, -STORE, 140415578812416, 140415578816511, -SNULL, 140415580975103, 140415580979199, -STORE, 140415580971008, 140415580975103, -STORE, 140415580975104, 140415580979199, -SNULL, 140415583178751, 140415583182847, -STORE, 140415583174656, 140415583178751, -STORE, 140415583178752, 140415583182847, -SNULL, 140415587577855, 140415587581951, -STORE, 140415587573760, 140415587577855, -STORE, 140415587577856, 140415587581951, -SNULL, 140415595687935, 140415595692031, -STORE, 140415595683840, 140415595687935, -STORE, 140415595687936, 140415595692031, -STORE, 140415607894016, 140415607934975, -SNULL, 140415599345663, 140415599353855, -STORE, 140415599304704, 140415599345663, -STORE, 140415599345664, 140415599353855, -SNULL, 140415603240959, 140415603245055, -STORE, 140415603208192, 140415603240959, -STORE, 140415603240960, 140415603245055, -SNULL, 140415605719039, 140415605723135, -STORE, 140415605710848, 140415605719039, -STORE, 140415605719040, 140415605723135, -SNULL, 94478499299327, 94478499303423, -STORE, 94478499295232, 94478499299327, -STORE, 94478499299328, 94478499303423, -SNULL, 140415607967743, 140415607971839, -STORE, 140415607963648, 140415607967743, -STORE, 140415607967744, 140415607971839, -ERASE, 140415607934976, 140415607963647, -STORE, 94478511173632, 94478511378431, -STORE, 140415606210560, 140415607894015, -STORE, 140415607934976, 140415607963647, -STORE, 94478511173632, 94478511513599, -STORE, 94478511173632, 94478511648767, -SNULL, 94478511615999, 94478511648767, -STORE, 94478511173632, 94478511615999, -STORE, 94478511616000, 94478511648767, -ERASE, 94478511616000, 94478511648767, -STORE, 94478511173632, 94478511751167, -SNULL, 94478511747071, 94478511751167, -STORE, 94478511173632, 94478511747071, -STORE, 94478511747072, 94478511751167, -ERASE, 94478511747072, 94478511751167, -STORE, 94478511173632, 94478511882239, -SNULL, 94478511878143, 94478511882239, -STORE, 94478511173632, 94478511878143, -STORE, 94478511878144, 94478511882239, -ERASE, 94478511878144, 94478511882239, -STORE, 94478511173632, 94478512013311, -SNULL, 94478512009215, 94478512013311, -STORE, 94478511173632, 94478512009215, -STORE, 94478512009216, 94478512013311, -ERASE, 94478512009216, 94478512013311, -STORE, 94478511173632, 94478512144383, -STORE, 94478511173632, 94478512279551, -STORE, 140415606181888, 140415606210559, -STORE, 140415569100800, 140415571230719, -SNULL, 140415569100800, 140415569129471, -STORE, 140415569129472, 140415571230719, -STORE, 140415569100800, 140415569129471, -SNULL, 140415571222527, 140415571230719, -STORE, 140415569129472, 140415571222527, -STORE, 140415571222528, 140415571230719, -ERASE, 140415571222528, 140415571230719, -STORE, 140415571222528, 140415571230719, -STORE, 140415566905344, 140415569100799, -SNULL, 140415566905344, 140415566987263, -STORE, 140415566987264, 140415569100799, -STORE, 140415566905344, 140415566987263, -SNULL, 140415569084415, 140415569100799, -STORE, 140415566987264, 140415569084415, -STORE, 140415569084416, 140415569100799, -SNULL, 140415569084416, 140415569092607, -STORE, 140415569092608, 140415569100799, -STORE, 140415569084416, 140415569092607, -ERASE, 140415569084416, 140415569092607, -STORE, 140415569084416, 140415569092607, -ERASE, 140415569092608, 140415569100799, -STORE, 140415569092608, 140415569100799, -SNULL, 140415569088511, 140415569092607, -STORE, 140415569084416, 140415569088511, -STORE, 140415569088512, 140415569092607, -SNULL, 140415571226623, 140415571230719, -STORE, 140415571222528, 140415571226623, -STORE, 140415571226624, 140415571230719, -ERASE, 140415606181888, 140415606210559, -STORE, 140415606181888, 140415606210559, -STORE, 140415564759040, 140415566905343, -SNULL, 140415564759040, 140415564804095, -STORE, 140415564804096, 140415566905343, -STORE, 140415564759040, 140415564804095, -SNULL, 140415566897151, 140415566905343, -STORE, 140415564804096, 140415566897151, -STORE, 140415566897152, 140415566905343, -ERASE, 140415566897152, 140415566905343, -STORE, 140415566897152, 140415566905343, -STORE, 140415562588160, 140415564759039, -SNULL, 140415562588160, 140415562629119, -STORE, 140415562629120, 140415564759039, -STORE, 140415562588160, 140415562629119, -SNULL, 140415564726271, 140415564759039, -STORE, 140415562629120, 140415564726271, -STORE, 140415564726272, 140415564759039, -SNULL, 140415564726272, 140415564734463, -STORE, 140415564734464, 140415564759039, -STORE, 140415564726272, 140415564734463, -ERASE, 140415564726272, 140415564734463, -STORE, 140415564726272, 140415564734463, -ERASE, 140415564734464, 140415564759039, -STORE, 140415564734464, 140415564759039, -SNULL, 140415564730367, 140415564734463, -STORE, 140415564726272, 140415564730367, -STORE, 140415564730368, 140415564734463, -SNULL, 140415566901247, 140415566905343, -STORE, 140415566897152, 140415566901247, -STORE, 140415566901248, 140415566905343, -ERASE, 140415606181888, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415605944320, 140415606210559, -ERASE, 140415605944320, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 94478511173632, 94478512414719, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 140415606206464, 140415606210559, -ERASE, 140415606206464, 140415606210559, -STORE, 94478511173632, 94478512652287, -STORE, 94478511173632, 94478512787455, -STORE, 94478511173632, 94478512922623, -STORE, 94478511173632, 94478513057791, -STORE, 140415537422336, 140415562588159, -STORE, 94478511173632, 94478513192959, -STORE, 94478511173632, 94478513356799, -STORE, 94478511173632, 94478513491967, -STORE, 94478511173632, 94478513627135, -STORE, 94478511173632, 94478513790975, -STORE, 94478511173632, 94478513926143, -STORE, 94478511173632, 94478514061311, -STORE, 94478511173632, 94478514196479, -STORE, 94478511173632, 94478514331647, -STORE, 94478511173632, 94478514606079, -STORE, 94478511173632, 94478514741247, -STORE, 94478511173632, 94478514876415, -STORE, 94478511173632, 94478515011583, -STORE, 94478511173632, 94478515146751, -STORE, 94478511173632, 94478515281919, -STORE, 94478511173632, 94478515474431, -STORE, 94478511173632, 94478515609599, -STORE, 94478511173632, 94478515744767, -STORE, 140415536922624, 140415562588159, -STORE, 94478511173632, 94478515879935, -STORE, 94478511173632, 94478516015103, -STORE, 94478511173632, 94478516150271, -STORE, 94478511173632, 94478516285439, -STORE, 94478511173632, 94478516420607, -STORE, 94478511173632, 94478516555775, -STORE, 94478511173632, 94478516690943, -STORE, 94478511173632, 94478516826111, -STORE, 94478511173632, 94478516961279, -STORE, 94478511173632, 94478517231615, -STORE, 94478511173632, 94478517366783, -STORE, 94478511173632, 94478517501951, -STORE, 94478511173632, 94478517637119, -STORE, 94478511173632, 94478517772287, -STORE, 94478511173632, 94478517907455, -STORE, 94478511173632, 94478518042623, -STORE, 94478511173632, 94478518177791, -STORE, 94478511173632, 94478518312959, -STORE, 94478511173632, 94478518448127, -STORE, 140415535910912, 140415562588159, -SNULL, 140415536922623, 140415562588159, -STORE, 140415535910912, 140415536922623, -STORE, 140415536922624, 140415562588159, -SNULL, 140415536922624, 140415537422335, -STORE, 140415537422336, 140415562588159, -STORE, 140415536922624, 140415537422335, -ERASE, 140415536922624, 140415537422335, -STORE, 94478511173632, 94478518583295, -STORE, 94478511173632, 94478518718463, -STORE, 94478511173632, 94478518853631, -STORE, 94478511173632, 94478518988799, -STORE, 94478511173632, 94478519123967, -STORE, 94478511173632, 94478519259135, -STORE, 140415509696512, 140415535910911, -ERASE, 140415537422336, 140415562588159, -STORE, 140415482433536, 140415509696511, - }; - unsigned long set28[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140722475622400, 140737488351231, -SNULL, 140722475626495, 140737488351231, -STORE, 140722475622400, 140722475626495, -STORE, 140722475491328, 140722475626495, -STORE, 93865834291200, 93865836548095, -SNULL, 93865834422271, 93865836548095, -STORE, 93865834291200, 93865834422271, -STORE, 93865834422272, 93865836548095, -ERASE, 93865834422272, 93865836548095, -STORE, 93865836519424, 93865836527615, -STORE, 93865836527616, 93865836548095, -STORE, 139918411104256, 139918413357055, -SNULL, 139918411247615, 139918413357055, -STORE, 139918411104256, 139918411247615, -STORE, 139918411247616, 139918413357055, -ERASE, 139918411247616, 139918413357055, -STORE, 139918413344768, 139918413352959, -STORE, 139918413352960, 139918413357055, -STORE, 140722476642304, 140722476646399, -STORE, 140722476630016, 140722476642303, -STORE, 139918413316096, 139918413344767, -STORE, 139918413307904, 139918413316095, -STORE, 139918408888320, 139918411104255, -SNULL, 139918408888320, 139918408986623, -STORE, 139918408986624, 139918411104255, -STORE, 139918408888320, 139918408986623, -SNULL, 139918411079679, 139918411104255, -STORE, 139918408986624, 139918411079679, -STORE, 139918411079680, 139918411104255, -SNULL, 139918411079680, 139918411087871, -STORE, 139918411087872, 139918411104255, -STORE, 139918411079680, 139918411087871, -ERASE, 139918411079680, 139918411087871, -STORE, 139918411079680, 139918411087871, -ERASE, 139918411087872, 139918411104255, -STORE, 139918411087872, 139918411104255, -STORE, 139918405091328, 139918408888319, -SNULL, 139918405091328, 139918406750207, -STORE, 139918406750208, 139918408888319, -STORE, 139918405091328, 139918406750207, -SNULL, 139918408847359, 139918408888319, -STORE, 139918406750208, 139918408847359, -STORE, 139918408847360, 139918408888319, -SNULL, 139918408847360, 139918408871935, -STORE, 139918408871936, 139918408888319, -STORE, 139918408847360, 139918408871935, -ERASE, 139918408847360, 139918408871935, -STORE, 139918408847360, 139918408871935, -ERASE, 139918408871936, 139918408888319, -STORE, 139918408871936, 139918408888319, -STORE, 139918413299712, 139918413316095, -SNULL, 139918408863743, 139918408871935, -STORE, 139918408847360, 139918408863743, -STORE, 139918408863744, 139918408871935, -SNULL, 139918411083775, 139918411087871, -STORE, 139918411079680, 139918411083775, -STORE, 139918411083776, 139918411087871, -SNULL, 93865836523519, 93865836527615, -STORE, 93865836519424, 93865836523519, -STORE, 93865836523520, 93865836527615, -SNULL, 139918413348863, 139918413352959, -STORE, 139918413344768, 139918413348863, -STORE, 139918413348864, 139918413352959, -ERASE, 139918413316096, 139918413344767, -STORE, 93865848528896, 93865848664063, - }; - unsigned long set29[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140734467944448, 140737488351231, -SNULL, 140734467948543, 140737488351231, -STORE, 140734467944448, 140734467948543, -STORE, 140734467813376, 140734467948543, -STORE, 94880407924736, 94880410177535, -SNULL, 94880408055807, 94880410177535, -STORE, 94880407924736, 94880408055807, -STORE, 94880408055808, 94880410177535, -ERASE, 94880408055808, 94880410177535, -STORE, 94880410148864, 94880410157055, -STORE, 94880410157056, 94880410177535, -STORE, 140143367815168, 140143370067967, -SNULL, 140143367958527, 140143370067967, -STORE, 140143367815168, 140143367958527, -STORE, 140143367958528, 140143370067967, -ERASE, 140143367958528, 140143370067967, -STORE, 140143370055680, 140143370063871, -STORE, 140143370063872, 140143370067967, -STORE, 140734468329472, 140734468333567, -STORE, 140734468317184, 140734468329471, -STORE, 140143370027008, 140143370055679, -STORE, 140143370018816, 140143370027007, -STORE, 140143365599232, 140143367815167, -SNULL, 140143365599232, 140143365697535, -STORE, 140143365697536, 140143367815167, -STORE, 140143365599232, 140143365697535, -SNULL, 140143367790591, 140143367815167, -STORE, 140143365697536, 140143367790591, -STORE, 140143367790592, 140143367815167, -SNULL, 140143367790592, 140143367798783, -STORE, 140143367798784, 140143367815167, -STORE, 140143367790592, 140143367798783, -ERASE, 140143367790592, 140143367798783, -STORE, 140143367790592, 140143367798783, -ERASE, 140143367798784, 140143367815167, -STORE, 140143367798784, 140143367815167, -STORE, 140143361802240, 140143365599231, -SNULL, 140143361802240, 140143363461119, -STORE, 140143363461120, 140143365599231, -STORE, 140143361802240, 140143363461119, -SNULL, 140143365558271, 140143365599231, -STORE, 140143363461120, 140143365558271, -STORE, 140143365558272, 140143365599231, -SNULL, 140143365558272, 140143365582847, -STORE, 140143365582848, 140143365599231, -STORE, 140143365558272, 140143365582847, -ERASE, 140143365558272, 140143365582847, -STORE, 140143365558272, 140143365582847, -ERASE, 140143365582848, 140143365599231, -STORE, 140143365582848, 140143365599231, -STORE, 140143370010624, 140143370027007, -SNULL, 140143365574655, 140143365582847, -STORE, 140143365558272, 140143365574655, -STORE, 140143365574656, 140143365582847, -SNULL, 140143367794687, 140143367798783, -STORE, 140143367790592, 140143367794687, -STORE, 140143367794688, 140143367798783, -SNULL, 94880410152959, 94880410157055, -STORE, 94880410148864, 94880410152959, -STORE, 94880410152960, 94880410157055, -SNULL, 140143370059775, 140143370063871, -STORE, 140143370055680, 140143370059775, -STORE, 140143370059776, 140143370063871, -ERASE, 140143370027008, 140143370055679, -STORE, 94880442400768, 94880442535935, -STORE, 140143353409536, 140143361802239, -SNULL, 140143353413631, 140143361802239, -STORE, 140143353409536, 140143353413631, -STORE, 140143353413632, 140143361802239, -STORE, 140143345016832, 140143353409535, -STORE, 140143210799104, 140143345016831, -SNULL, 140143210799104, 140143239364607, -STORE, 140143239364608, 140143345016831, -STORE, 140143210799104, 140143239364607, -ERASE, 140143210799104, 140143239364607, -SNULL, 140143306473471, 140143345016831, -STORE, 140143239364608, 140143306473471, -STORE, 140143306473472, 140143345016831, -ERASE, 140143306473472, 140143345016831, -SNULL, 140143239499775, 140143306473471, -STORE, 140143239364608, 140143239499775, -STORE, 140143239499776, 140143306473471, -SNULL, 140143345020927, 140143353409535, -STORE, 140143345016832, 140143345020927, -STORE, 140143345020928, 140143353409535, -STORE, 140143336624128, 140143345016831, -SNULL, 140143336628223, 140143345016831, -STORE, 140143336624128, 140143336628223, -STORE, 140143336628224, 140143345016831, -STORE, 140143328231424, 140143336624127, -SNULL, 140143328235519, 140143336624127, -STORE, 140143328231424, 140143328235519, -STORE, 140143328235520, 140143336624127, -STORE, 140143319838720, 140143328231423, -SNULL, 140143319842815, 140143328231423, -STORE, 140143319838720, 140143319842815, -STORE, 140143319842816, 140143328231423, -STORE, 140143311446016, 140143319838719, -STORE, 140143105146880, 140143239364607, -STORE, 140143096754176, 140143105146879, -STORE, 140143029645312, 140143096754175, -ERASE, 140143029645312, 140143096754175, -STORE, 140142962536448, 140143096754175, -SNULL, 140142962536448, 140142970929151, -STORE, 140142970929152, 140143096754175, -STORE, 140142962536448, 140142970929151, -ERASE, 140142962536448, 140142970929151, -STORE, 140142962536448, 140142970929151, -STORE, 140142828318720, 140142962536447, -STORE, 140142819926016, 140142828318719, -SNULL, 140142828318720, 140142836711423, -STORE, 140142836711424, 140142962536447, -STORE, 140142828318720, 140142836711423, -ERASE, 140142828318720, 140142836711423, -SNULL, 140143172255743, 140143239364607, -STORE, 140143105146880, 140143172255743, -STORE, 140143172255744, 140143239364607, -ERASE, 140143172255744, 140143239364607, -SNULL, 140143105282047, 140143172255743, -STORE, 140143105146880, 140143105282047, -STORE, 140143105282048, 140143172255743, -SNULL, 140143038038015, 140143096754175, -STORE, 140142970929152, 140143038038015, -STORE, 140143038038016, 140143096754175, -ERASE, 140143038038016, 140143096754175, -SNULL, 140142971064319, 140143038038015, -STORE, 140142970929152, 140142971064319, -STORE, 140142971064320, 140143038038015, -SNULL, 140142903820287, 140142962536447, -STORE, 140142836711424, 140142903820287, -STORE, 140142903820288, 140142962536447, -ERASE, 140142903820288, 140142962536447, -SNULL, 140142836846591, 140142903820287, -STORE, 140142836711424, 140142836846591, -STORE, 140142836846592, 140142903820287, -STORE, 140142685708288, 140142819926015, -SNULL, 140143311450111, 140143319838719, -STORE, 140143311446016, 140143311450111, -STORE, 140143311450112, 140143319838719, -SNULL, 140142962540543, 140142970929151, -STORE, 140142962536448, 140142962540543, -STORE, 140142962540544, 140142970929151, -SNULL, 140142685708288, 140142702493695, -STORE, 140142702493696, 140142819926015, -STORE, 140142685708288, 140142702493695, -ERASE, 140142685708288, 140142702493695, -SNULL, 140142769602559, 140142819926015, -STORE, 140142702493696, 140142769602559, -STORE, 140142769602560, 140142819926015, -ERASE, 140142769602560, 140142819926015, -SNULL, 140142702628863, 140142769602559, -STORE, 140142702493696, 140142702628863, -STORE, 140142702628864, 140142769602559, -STORE, 140143230971904, 140143239364607, -SNULL, 140143230975999, 140143239364607, -STORE, 140143230971904, 140143230975999, -STORE, 140143230976000, 140143239364607, -SNULL, 140143096758271, 140143105146879, -STORE, 140143096754176, 140143096758271, -STORE, 140143096758272, 140143105146879, -STORE, 140143222579200, 140143230971903, -SNULL, 140143222583295, 140143230971903, -STORE, 140143222579200, 140143222583295, -STORE, 140143222583296, 140143230971903, -STORE, 140143214186496, 140143222579199, -SNULL, 140142819930111, 140142828318719, -STORE, 140142819926016, 140142819930111, -STORE, 140142819930112, 140142828318719, -STORE, 140143205793792, 140143222579199, -SNULL, 140143205793792, 140143214186495, -STORE, 140143214186496, 140143222579199, -STORE, 140143205793792, 140143214186495, -SNULL, 140143214190591, 140143222579199, -STORE, 140143214186496, 140143214190591, -STORE, 140143214190592, 140143222579199, -SNULL, 140143205797887, 140143214186495, -STORE, 140143205793792, 140143205797887, -STORE, 140143205797888, 140143214186495, -STORE, 140143197401088, 140143205793791, -SNULL, 140143197405183, 140143205793791, -STORE, 140143197401088, 140143197405183, -STORE, 140143197405184, 140143205793791, -STORE, 140143189008384, 140143197401087, -STORE, 140143180615680, 140143197401087, -STORE, 140143088361472, 140143096754175, -SNULL, 140143180619775, 140143197401087, -STORE, 140143180615680, 140143180619775, -STORE, 140143180619776, 140143197401087, -SNULL, 140143180619776, 140143189008383, -STORE, 140143189008384, 140143197401087, -STORE, 140143180619776, 140143189008383, -SNULL, 140143189012479, 140143197401087, -STORE, 140143189008384, 140143189012479, -STORE, 140143189012480, 140143197401087, -SNULL, 140143088365567, 140143096754175, -STORE, 140143088361472, 140143088365567, -STORE, 140143088365568, 140143096754175, -STORE, 140143079968768, 140143088361471, -SNULL, 140143079972863, 140143088361471, -STORE, 140143079968768, 140143079972863, -STORE, 140143079972864, 140143088361471, -STORE, 140143071576064, 140143079968767, -SNULL, 140143071580159, 140143079968767, -STORE, 140143071576064, 140143071580159, -STORE, 140143071580160, 140143079968767, -STORE, 140143063183360, 140143071576063, -STORE, 140143054790656, 140143071576063, -SNULL, 140143054794751, 140143071576063, -STORE, 140143054790656, 140143054794751, -STORE, 140143054794752, 140143071576063, -SNULL, 140143054794752, 140143063183359, -STORE, 140143063183360, 140143071576063, -STORE, 140143054794752, 140143063183359, -SNULL, 140143063187455, 140143071576063, -STORE, 140143063183360, 140143063187455, -STORE, 140143063187456, 140143071576063, -STORE, 140143046397952, 140143054790655, -STORE, 140142954143744, 140142962536447, -STORE, 140142945751040, 140142962536447, -STORE, 140142937358336, 140142962536447, -STORE, 140142928965632, 140142962536447, -STORE, 140142568275968, 140142702493695, -SNULL, 140142635384831, 140142702493695, -STORE, 140142568275968, 140142635384831, -STORE, 140142635384832, 140142702493695, -ERASE, 140142635384832, 140142702493695, -STORE, 140142920572928, 140142962536447, -STORE, 140142912180224, 140142962536447, -STORE, 140142568275968, 140142702493695, -SNULL, 140142568275968, 140142635384831, -STORE, 140142635384832, 140142702493695, -STORE, 140142568275968, 140142635384831, -SNULL, 140142635519999, 140142702493695, -STORE, 140142635384832, 140142635519999, -STORE, 140142635520000, 140142702493695, -STORE, 140142819930112, 140142836711423, -STORE, 140142811533312, 140142819926015, -STORE, 140142434058240, 140142635384831, -SNULL, 140142501167103, 140142635384831, -STORE, 140142434058240, 140142501167103, -STORE, 140142501167104, 140142635384831, -SNULL, 140142501167104, 140142568275967, -STORE, 140142568275968, 140142635384831, -STORE, 140142501167104, 140142568275967, -ERASE, 140142501167104, 140142568275967, -STORE, 140142299840512, 140142501167103, -STORE, 140142803140608, 140142819926015, -SNULL, 140142366949375, 140142501167103, -STORE, 140142299840512, 140142366949375, -STORE, 140142366949376, 140142501167103, -SNULL, 140142366949376, 140142434058239, -STORE, 140142434058240, 140142501167103, -STORE, 140142366949376, 140142434058239, -ERASE, 140142366949376, 140142434058239, -STORE, 140142794747904, 140142819926015, -STORE, 140142786355200, 140142819926015, -STORE, 140142299840512, 140142501167103, -STORE, 140142777962496, 140142819926015, -STORE, 140142559883264, 140142568275967, -STORE, 140142232731648, 140142501167103, -STORE, 140142551490560, 140142568275967, -SNULL, 140142777962496, 140142803140607, -STORE, 140142803140608, 140142819926015, -STORE, 140142777962496, 140142803140607, -SNULL, 140142803144703, 140142819926015, -STORE, 140142803140608, 140142803144703, -STORE, 140142803144704, 140142819926015, -STORE, 140142543097856, 140142568275967, -STORE, 140142098513920, 140142501167103, -SNULL, 140142165622783, 140142501167103, -STORE, 140142098513920, 140142165622783, -STORE, 140142165622784, 140142501167103, -SNULL, 140142165622784, 140142232731647, -STORE, 140142232731648, 140142501167103, -STORE, 140142165622784, 140142232731647, -ERASE, 140142165622784, 140142232731647, -SNULL, 140142568411135, 140142635384831, -STORE, 140142568275968, 140142568411135, -STORE, 140142568411136, 140142635384831, -STORE, 140141964296192, 140142165622783, -SNULL, 140142912180224, 140142928965631, -STORE, 140142928965632, 140142962536447, -STORE, 140142912180224, 140142928965631, -SNULL, 140142928969727, 140142962536447, -STORE, 140142928965632, 140142928969727, -STORE, 140142928969728, 140142962536447, -STORE, 140141830078464, 140142165622783, -SNULL, 140142912184319, 140142928965631, -STORE, 140142912180224, 140142912184319, -STORE, 140142912184320, 140142928965631, -SNULL, 140142232731648, 140142434058239, -STORE, 140142434058240, 140142501167103, -STORE, 140142232731648, 140142434058239, -SNULL, 140142434193407, 140142501167103, -STORE, 140142434058240, 140142434193407, -STORE, 140142434193408, 140142501167103, -SNULL, 140142232731648, 140142299840511, -STORE, 140142299840512, 140142434058239, -STORE, 140142232731648, 140142299840511, -SNULL, 140142299975679, 140142434058239, -STORE, 140142299840512, 140142299975679, -STORE, 140142299975680, 140142434058239, -SNULL, 140142928969728, 140142954143743, -STORE, 140142954143744, 140142962536447, -STORE, 140142928969728, 140142954143743, -SNULL, 140142954147839, 140142962536447, -STORE, 140142954143744, 140142954147839, -STORE, 140142954147840, 140142962536447, -STORE, 140141830078464, 140142299840511, -SNULL, 140142543097856, 140142559883263, -STORE, 140142559883264, 140142568275967, -STORE, 140142543097856, 140142559883263, -SNULL, 140142559887359, 140142568275967, -STORE, 140142559883264, 140142559887359, -STORE, 140142559887360, 140142568275967, -STORE, 140142534705152, 140142559883263, -SNULL, 140142928969728, 140142945751039, -STORE, 140142945751040, 140142954143743, -STORE, 140142928969728, 140142945751039, -SNULL, 140142945755135, 140142954143743, -STORE, 140142945751040, 140142945755135, -STORE, 140142945755136, 140142954143743, -SNULL, 140142299975680, 140142366949375, -STORE, 140142366949376, 140142434058239, -STORE, 140142299975680, 140142366949375, -SNULL, 140142367084543, 140142434058239, -STORE, 140142366949376, 140142367084543, -STORE, 140142367084544, 140142434058239, -SNULL, 140142928969728, 140142937358335, -STORE, 140142937358336, 140142945751039, -STORE, 140142928969728, 140142937358335, -SNULL, 140142937362431, 140142945751039, -STORE, 140142937358336, 140142937362431, -STORE, 140142937362432, 140142945751039, -SNULL, 140141830078464, 140142232731647, -STORE, 140142232731648, 140142299840511, -STORE, 140141830078464, 140142232731647, -SNULL, 140142232866815, 140142299840511, -STORE, 140142232731648, 140142232866815, -STORE, 140142232866816, 140142299840511, -SNULL, 140142534705152, 140142543097855, -STORE, 140142543097856, 140142559883263, -STORE, 140142534705152, 140142543097855, -SNULL, 140142543101951, 140142559883263, -STORE, 140142543097856, 140142543101951, -STORE, 140142543101952, 140142559883263, -STORE, 140142526312448, 140142543097855, -STORE, 140142517919744, 140142543097855, -SNULL, 140141830078464, 140142098513919, -STORE, 140142098513920, 140142232731647, -STORE, 140141830078464, 140142098513919, -SNULL, 140142098649087, 140142232731647, -STORE, 140142098513920, 140142098649087, -STORE, 140142098649088, 140142232731647, -SNULL, 140142031405055, 140142098513919, -STORE, 140141830078464, 140142031405055, -STORE, 140142031405056, 140142098513919, -ERASE, 140142031405056, 140142098513919, -SNULL, 140141830078464, 140141964296191, -STORE, 140141964296192, 140142031405055, -STORE, 140141830078464, 140141964296191, -SNULL, 140141964431359, 140142031405055, -STORE, 140141964296192, 140141964431359, -STORE, 140141964431360, 140142031405055, -STORE, 140142509527040, 140142543097855, -SNULL, 140141897187327, 140141964296191, -STORE, 140141830078464, 140141897187327, -STORE, 140141897187328, 140141964296191, -ERASE, 140141897187328, 140141964296191, -SNULL, 140141830213631, 140141897187327, -STORE, 140141830078464, 140141830213631, -STORE, 140141830213632, 140141897187327, -SNULL, 140142803144704, 140142811533311, -STORE, 140142811533312, 140142819926015, -STORE, 140142803144704, 140142811533311, -SNULL, 140142811537407, 140142819926015, -STORE, 140142811533312, 140142811537407, -STORE, 140142811537408, 140142819926015, -SNULL, 140142098649088, 140142165622783, -STORE, 140142165622784, 140142232731647, -STORE, 140142098649088, 140142165622783, -SNULL, 140142165757951, 140142232731647, -STORE, 140142165622784, 140142165757951, -STORE, 140142165757952, 140142232731647, -STORE, 140142090121216, 140142098513919, -SNULL, 140142777962496, 140142786355199, -STORE, 140142786355200, 140142803140607, -STORE, 140142777962496, 140142786355199, -SNULL, 140142786359295, 140142803140607, -STORE, 140142786355200, 140142786359295, -STORE, 140142786359296, 140142803140607, -SNULL, 140142509527040, 140142534705151, -STORE, 140142534705152, 140142543097855, -STORE, 140142509527040, 140142534705151, -SNULL, 140142534709247, 140142543097855, -STORE, 140142534705152, 140142534709247, -STORE, 140142534709248, 140142543097855, -STORE, 140142081728512, 140142098513919, -SNULL, 140142786359296, 140142794747903, -STORE, 140142794747904, 140142803140607, -STORE, 140142786359296, 140142794747903, -SNULL, 140142794751999, 140142803140607, -STORE, 140142794747904, 140142794751999, -STORE, 140142794752000, 140142803140607, -STORE, 140142073335808, 140142098513919, -SNULL, 140142073339903, 140142098513919, -STORE, 140142073335808, 140142073339903, -STORE, 140142073339904, 140142098513919, -SNULL, 140142543101952, 140142551490559, -STORE, 140142551490560, 140142559883263, -STORE, 140142543101952, 140142551490559, -SNULL, 140142551494655, 140142559883263, -STORE, 140142551490560, 140142551494655, -STORE, 140142551494656, 140142559883263, -SNULL, 140142509527040, 140142517919743, -STORE, 140142517919744, 140142534705151, -STORE, 140142509527040, 140142517919743, -SNULL, 140142517923839, 140142534705151, -STORE, 140142517919744, 140142517923839, -STORE, 140142517923840, 140142534705151, -STORE, 140142064943104, 140142073335807, -SNULL, 140142073339904, 140142090121215, -STORE, 140142090121216, 140142098513919, -STORE, 140142073339904, 140142090121215, -SNULL, 140142090125311, 140142098513919, -STORE, 140142090121216, 140142090125311, -STORE, 140142090125312, 140142098513919, -STORE, 140142056550400, 140142073335807, -SNULL, 140142056554495, 140142073335807, -STORE, 140142056550400, 140142056554495, -STORE, 140142056554496, 140142073335807, -STORE, 140142048157696, 140142056550399, -SNULL, 140142509531135, 140142517919743, -STORE, 140142509527040, 140142509531135, -STORE, 140142509531136, 140142517919743, -SNULL, 140142777966591, 140142786355199, -STORE, 140142777962496, 140142777966591, -STORE, 140142777966592, 140142786355199, -SNULL, 140143046402047, 140143054790655, -STORE, 140143046397952, 140143046402047, -STORE, 140143046402048, 140143054790655, -SNULL, 140142912184320, 140142920572927, -STORE, 140142920572928, 140142928965631, -STORE, 140142912184320, 140142920572927, -SNULL, 140142920577023, 140142928965631, -STORE, 140142920572928, 140142920577023, -STORE, 140142920577024, 140142928965631, -STORE, 140142039764992, 140142056550399, -STORE, 140141955903488, 140141964296191, -SNULL, 140142819930112, 140142828318719, -STORE, 140142828318720, 140142836711423, -STORE, 140142819930112, 140142828318719, -SNULL, 140142828322815, 140142836711423, -STORE, 140142828318720, 140142828322815, -STORE, 140142828322816, 140142836711423, -SNULL, 140142517923840, 140142526312447, -STORE, 140142526312448, 140142534705151, -STORE, 140142517923840, 140142526312447, -SNULL, 140142526316543, 140142534705151, -STORE, 140142526312448, 140142526316543, -STORE, 140142526316544, 140142534705151, -STORE, 140141947510784, 140141964296191, -SNULL, 140142056554496, 140142064943103, -STORE, 140142064943104, 140142073335807, -STORE, 140142056554496, 140142064943103, -SNULL, 140142064947199, 140142073335807, -STORE, 140142064943104, 140142064947199, -STORE, 140142064947200, 140142073335807, -SNULL, 140142073339904, 140142081728511, -STORE, 140142081728512, 140142090121215, -STORE, 140142073339904, 140142081728511, -SNULL, 140142081732607, 140142090121215, -STORE, 140142081728512, 140142081732607, -STORE, 140142081732608, 140142090121215, -STORE, 140141939118080, 140141964296191, -STORE, 140141930725376, 140141964296191, -STORE, 140141922332672, 140141964296191, -STORE, 140141913939968, 140141964296191, -SNULL, 140141913939968, 140141922332671, -STORE, 140141922332672, 140141964296191, -STORE, 140141913939968, 140141922332671, -SNULL, 140141922336767, 140141964296191, -STORE, 140141922332672, 140141922336767, -STORE, 140141922336768, 140141964296191, -STORE, 140141905547264, 140141922332671, -SNULL, 140141905551359, 140141922332671, -STORE, 140141905547264, 140141905551359, -STORE, 140141905551360, 140141922332671, -STORE, 140141821685760, 140141830078463, -STORE, 140141813293056, 140141830078463, -STORE, 140141804900352, 140141830078463, -STORE, 140141796507648, 140141830078463, -SNULL, 140141796511743, 140141830078463, -STORE, 140141796507648, 140141796511743, -STORE, 140141796511744, 140141830078463, -SNULL, 140141922336768, 140141955903487, -STORE, 140141955903488, 140141964296191, -STORE, 140141922336768, 140141955903487, -SNULL, 140141955907583, 140141964296191, -STORE, 140141955903488, 140141955907583, -STORE, 140141955907584, 140141964296191, -STORE, 140141788114944, 140141796507647, -STORE, 140141779722240, 140141796507647, -SNULL, 140141779722240, 140141788114943, -STORE, 140141788114944, 140141796507647, -STORE, 140141779722240, 140141788114943, -SNULL, 140141788119039, 140141796507647, -STORE, 140141788114944, 140141788119039, -STORE, 140141788119040, 140141796507647, -SNULL, 140141922336768, 140141947510783, -STORE, 140141947510784, 140141955903487, -STORE, 140141922336768, 140141947510783, -SNULL, 140141947514879, 140141955903487, -STORE, 140141947510784, 140141947514879, -STORE, 140141947514880, 140141955903487, -SNULL, 140142039764992, 140142048157695, -STORE, 140142048157696, 140142056550399, -STORE, 140142039764992, 140142048157695, -SNULL, 140142048161791, 140142056550399, -STORE, 140142048157696, 140142048161791, -STORE, 140142048161792, 140142056550399, -SNULL, 140142039769087, 140142048157695, -STORE, 140142039764992, 140142039769087, -STORE, 140142039769088, 140142048157695, -SNULL, 140141796511744, 140141804900351, -STORE, 140141804900352, 140141830078463, -STORE, 140141796511744, 140141804900351, -SNULL, 140141804904447, 140141830078463, -STORE, 140141804900352, 140141804904447, -STORE, 140141804904448, 140141830078463, -STORE, 140141771329536, 140141788114943, -STORE, 140141762936832, 140141788114943, -STORE, 140141754544128, 140141788114943, -SNULL, 140141804904448, 140141821685759, -STORE, 140141821685760, 140141830078463, -STORE, 140141804904448, 140141821685759, -SNULL, 140141821689855, 140141830078463, -STORE, 140141821685760, 140141821689855, -STORE, 140141821689856, 140141830078463, -SNULL, 140141922336768, 140141939118079, -STORE, 140141939118080, 140141947510783, -STORE, 140141922336768, 140141939118079, -SNULL, 140141939122175, 140141947510783, -STORE, 140141939118080, 140141939122175, -STORE, 140141939122176, 140141947510783, -SNULL, 140141905551360, 140141913939967, -STORE, 140141913939968, 140141922332671, -STORE, 140141905551360, 140141913939967, -SNULL, 140141913944063, 140141922332671, -STORE, 140141913939968, 140141913944063, -STORE, 140141913944064, 140141922332671, -STORE, 140141746151424, 140141788114943, -STORE, 140141737758720, 140141788114943, -SNULL, 140141804904448, 140141813293055, -STORE, 140141813293056, 140141821685759, -STORE, 140141804904448, 140141813293055, -SNULL, 140141813297151, 140141821685759, -STORE, 140141813293056, 140141813297151, -STORE, 140141813297152, 140141821685759, -STORE, 140141729366016, 140141788114943, -STORE, 140141720973312, 140141788114943, -STORE, 140141712580608, 140141788114943, -SNULL, 140141712584703, 140141788114943, -STORE, 140141712580608, 140141712584703, -STORE, 140141712584704, 140141788114943, -SNULL, 140141922336768, 140141930725375, -STORE, 140141930725376, 140141939118079, -STORE, 140141922336768, 140141930725375, -SNULL, 140141930729471, 140141939118079, -STORE, 140141930725376, 140141930729471, -STORE, 140141930729472, 140141939118079, -STORE, 140141704187904, 140141712580607, -SNULL, 140141704191999, 140141712580607, -STORE, 140141704187904, 140141704191999, -STORE, 140141704192000, 140141712580607, -STORE, 140141695795200, 140141704187903, -STORE, 140141687402496, 140141704187903, -SNULL, 140141712584704, 140141771329535, -STORE, 140141771329536, 140141788114943, -STORE, 140141712584704, 140141771329535, -SNULL, 140141771333631, 140141788114943, -STORE, 140141771329536, 140141771333631, -STORE, 140141771333632, 140141788114943, -SNULL, 140141771333632, 140141779722239, -STORE, 140141779722240, 140141788114943, -STORE, 140141771333632, 140141779722239, -SNULL, 140141779726335, 140141788114943, -STORE, 140141779722240, 140141779726335, -STORE, 140141779726336, 140141788114943, -STORE, 140141679009792, 140141704187903, -SNULL, 140141679013887, 140141704187903, -STORE, 140141679009792, 140141679013887, -STORE, 140141679013888, 140141704187903, -STORE, 140141670617088, 140141679009791, -SNULL, 140141670621183, 140141679009791, -STORE, 140141670617088, 140141670621183, -STORE, 140141670621184, 140141679009791, -STORE, 140141662224384, 140141670617087, -SNULL, 140141712584704, 140141737758719, -STORE, 140141737758720, 140141771329535, -STORE, 140141712584704, 140141737758719, -SNULL, 140141737762815, 140141771329535, -STORE, 140141737758720, 140141737762815, -STORE, 140141737762816, 140141771329535, -SNULL, 140141712584704, 140141729366015, -STORE, 140141729366016, 140141737758719, -STORE, 140141712584704, 140141729366015, -SNULL, 140141729370111, 140141737758719, -STORE, 140141729366016, 140141729370111, -STORE, 140141729370112, 140141737758719, -SNULL, 140141737762816, 140141746151423, -STORE, 140141746151424, 140141771329535, -STORE, 140141737762816, 140141746151423, -SNULL, 140141746155519, 140141771329535, -STORE, 140141746151424, 140141746155519, -STORE, 140141746155520, 140141771329535, -STORE, 140141653831680, 140141670617087, -SNULL, 140141746155520, 140141762936831, -STORE, 140141762936832, 140141771329535, -STORE, 140141746155520, 140141762936831, -SNULL, 140141762940927, 140141771329535, -STORE, 140141762936832, 140141762940927, -STORE, 140141762940928, 140141771329535, -STORE, 140141645438976, 140141670617087, -SNULL, 140141645443071, 140141670617087, -STORE, 140141645438976, 140141645443071, -STORE, 140141645443072, 140141670617087, -SNULL, 140141712584704, 140141720973311, -STORE, 140141720973312, 140141729366015, -STORE, 140141712584704, 140141720973311, -SNULL, 140141720977407, 140141729366015, -STORE, 140141720973312, 140141720977407, -STORE, 140141720977408, 140141729366015, -STORE, 140141637046272, 140141645438975, -SNULL, 140141637050367, 140141645438975, -STORE, 140141637046272, 140141637050367, -STORE, 140141637050368, 140141645438975, -STORE, 140141628653568, 140141637046271, -SNULL, 140141628657663, 140141637046271, -STORE, 140141628653568, 140141628657663, -STORE, 140141628657664, 140141637046271, -STORE, 140141620260864, 140141628653567, -SNULL, 140141679013888, 140141687402495, -STORE, 140141687402496, 140141704187903, -STORE, 140141679013888, 140141687402495, -SNULL, 140141687406591, 140141704187903, -STORE, 140141687402496, 140141687406591, -STORE, 140141687406592, 140141704187903, -SNULL, 140141746155520, 140141754544127, -STORE, 140141754544128, 140141762936831, -STORE, 140141746155520, 140141754544127, -SNULL, 140141754548223, 140141762936831, -STORE, 140141754544128, 140141754548223, -STORE, 140141754548224, 140141762936831, -SNULL, 140141687406592, 140141695795199, -STORE, 140141695795200, 140141704187903, -STORE, 140141687406592, 140141695795199, -SNULL, 140141695799295, 140141704187903, -STORE, 140141695795200, 140141695799295, -STORE, 140141695799296, 140141704187903, -STORE, 140141611868160, 140141628653567, -SNULL, 140141611872255, 140141628653567, -STORE, 140141611868160, 140141611872255, -STORE, 140141611872256, 140141628653567, -SNULL, 140141645443072, 140141662224383, -STORE, 140141662224384, 140141670617087, -STORE, 140141645443072, 140141662224383, -SNULL, 140141662228479, 140141670617087, -STORE, 140141662224384, 140141662228479, -STORE, 140141662228480, 140141670617087, -STORE, 140141603475456, 140141611868159, -SNULL, 140141603479551, 140141611868159, -STORE, 140141603475456, 140141603479551, -STORE, 140141603479552, 140141611868159, -STORE, 140141595082752, 140141603475455, -SNULL, 140141645443072, 140141653831679, -STORE, 140141653831680, 140141662224383, -STORE, 140141645443072, 140141653831679, -SNULL, 140141653835775, 140141662224383, -STORE, 140141653831680, 140141653835775, -STORE, 140141653835776, 140141662224383, -STORE, 140141586690048, 140141603475455, -SNULL, 140141611872256, 140141620260863, -STORE, 140141620260864, 140141628653567, -STORE, 140141611872256, 140141620260863, -SNULL, 140141620264959, 140141628653567, -STORE, 140141620260864, 140141620264959, -STORE, 140141620264960, 140141628653567, -SNULL, 140141586690048, 140141595082751, -STORE, 140141595082752, 140141603475455, -STORE, 140141586690048, 140141595082751, -SNULL, 140141595086847, 140141603475455, -STORE, 140141595082752, 140141595086847, -STORE, 140141595086848, 140141603475455, -STORE, 140141578297344, 140141595082751, -SNULL, 140141578301439, 140141595082751, -STORE, 140141578297344, 140141578301439, -STORE, 140141578301440, 140141595082751, -SNULL, 140141578301440, 140141586690047, -STORE, 140141586690048, 140141595082751, -STORE, 140141578301440, 140141586690047, -SNULL, 140141586694143, 140141595082751, -STORE, 140141586690048, 140141586694143, -STORE, 140141586694144, 140141595082751, -STORE, 140143370027008, 140143370055679, -STORE, 140143309254656, 140143311446015, -SNULL, 140143309254656, 140143309344767, -STORE, 140143309344768, 140143311446015, -STORE, 140143309254656, 140143309344767, -SNULL, 140143311437823, 140143311446015, -STORE, 140143309344768, 140143311437823, -STORE, 140143311437824, 140143311446015, -ERASE, 140143311437824, 140143311446015, -STORE, 140143311437824, 140143311446015, -SNULL, 140143311441919, 140143311446015, -STORE, 140143311437824, 140143311441919, -STORE, 140143311441920, 140143311446015, -ERASE, 140143370027008, 140143370055679, -ERASE, 140142912180224, 140142912184319, -ERASE, 140142912184320, 140142920572927, -ERASE, 140142945751040, 140142945755135, -ERASE, 140142945755136, 140142954143743, -ERASE, 140142090121216, 140142090125311, -ERASE, 140142090125312, 140142098513919, -ERASE, 140142794747904, 140142794751999, -ERASE, 140142794752000, 140142803140607, -ERASE, 140141913939968, 140141913944063, -ERASE, 140141913944064, 140141922332671, -ERASE, 140141746151424, 140141746155519, -ERASE, 140141746155520, 140141754544127, -ERASE, 140142954143744, 140142954147839, -ERASE, 140142954147840, 140142962536447, -ERASE, 140142081728512, 140142081732607, -ERASE, 140142081732608, 140142090121215, -ERASE, 140141905547264, 140141905551359, -ERASE, 140141905551360, 140141913939967, -ERASE, 140141729366016, 140141729370111, -ERASE, 140141729370112, 140141737758719, -ERASE, 140142920572928, 140142920577023, -ERASE, 140142920577024, 140142928965631, -ERASE, 140142039764992, 140142039769087, -ERASE, 140142039769088, 140142048157695, -ERASE, 140141679009792, 140141679013887, -ERASE, 140141679013888, 140141687402495, -ERASE, 140142551490560, 140142551494655, -ERASE, 140142551494656, 140142559883263, -ERASE, 140141947510784, 140141947514879, -ERASE, 140141947514880, 140141955903487, -ERASE, 140141771329536, 140141771333631, -ERASE, 140141771333632, 140141779722239, -ERASE, 140142928965632, 140142928969727, -ERASE, 140142928969728, 140142937358335, -ERASE, 140142073335808, 140142073339903, -ERASE, 140142073339904, 140142081728511, -ERASE, 140142543097856, 140142543101951, -ERASE, 140142543101952, 140142551490559, -ERASE, 140141955903488, 140141955907583, -ERASE, 140141955907584, 140141964296191, -ERASE, 140141704187904, 140141704191999, -ERASE, 140141704192000, 140141712580607, -ERASE, 140142786355200, 140142786359295, -ERASE, 140142786359296, 140142794747903, -ERASE, 140142056550400, 140142056554495, -ERASE, 140142056554496, 140142064943103, -ERASE, 140142828318720, 140142828322815, -ERASE, 140142828322816, 140142836711423, -ERASE, 140141788114944, 140141788119039, -ERASE, 140141788119040, 140141796507647, -ERASE, 140141695795200, 140141695799295, -ERASE, 140141695799296, 140141704187903, -ERASE, 140141578297344, 140141578301439, -ERASE, 140141578301440, 140141586690047, -ERASE, 140141611868160, 140141611872255, -ERASE, 140141611872256, 140141620260863, -ERASE, 140142811533312, 140142811537407, -ERASE, 140142811537408, 140142819926015, -ERASE, 140142064943104, 140142064947199, -ERASE, 140142064947200, 140142073335807, -ERASE, 140141628653568, 140141628657663, -ERASE, 140141628657664, 140141637046271, -ERASE, 140143046397952, 140143046402047, -ERASE, 140143046402048, 140143054790655, -ERASE, 140141796507648, 140141796511743, -ERASE, 140141796511744, 140141804900351, -ERASE, 140142803140608, 140142803144703, -ERASE, 140142803144704, 140142811533311, -ERASE, 140142509527040, 140142509531135, -ERASE, 140142509531136, 140142517919743, -ERASE, 140141821685760, 140141821689855, -ERASE, 140141821689856, 140141830078463, -ERASE, 140142777962496, 140142777966591, -ERASE, 140142777966592, 140142786355199, -ERASE, 140141804900352, 140141804904447, -ERASE, 140141804904448, 140141813293055, -ERASE, 140141930725376, 140141930729471, -ERASE, 140141930729472, 140141939118079, -ERASE, 140142937358336, 140142937362431, -ERASE, 140142937362432, 140142945751039, -ERASE, 140142559883264, 140142559887359, -ERASE, 140142559887360, 140142568275967, -ERASE, 140142534705152, 140142534709247, -ERASE, 140142534709248, 140142543097855, -ERASE, 140142048157696, 140142048161791, -ERASE, 140142048161792, 140142056550399, -ERASE, 140141754544128, 140141754548223, -ERASE, 140141754548224, 140141762936831, -ERASE, 140141939118080, 140141939122175, -ERASE, 140141939122176, 140141947510783, -ERASE, 140141653831680, 140141653835775, -ERASE, 140141653835776, 140141662224383, -ERASE, 140141712580608, 140141712584703, -ERASE, 140141712584704, 140141720973311, -ERASE, 140141645438976, 140141645443071, -ERASE, 140141645443072, 140141653831679, -ERASE, 140141687402496, 140141687406591, -ERASE, 140141687406592, 140141695795199, -ERASE, 140141662224384, 140141662228479, -ERASE, 140141662228480, 140141670617087, -ERASE, 140141922332672, 140141922336767, -ERASE, 140141922336768, 140141930725375, -ERASE, 140141737758720, 140141737762815, -ERASE, 140141737762816, 140141746151423, -ERASE, 140141637046272, 140141637050367, -ERASE, 140141637050368, 140141645438975, -ERASE, 140142517919744, 140142517923839, -ERASE, 140142517923840, 140142526312447, -ERASE, 140143096754176, 140143096758271, -ERASE, 140143096758272, 140143105146879, -ERASE, 140141595082752, 140141595086847, -ERASE, 140141595086848, 140141603475455, -ERASE, 140141762936832, 140141762940927, -ERASE, 140141762940928, 140141771329535, -ERASE, 140143311446016, 140143311450111, -ERASE, 140143311450112, 140143319838719, -ERASE, 140142526312448, 140142526316543, -ERASE, 140142526316544, 140142534705151, -ERASE, 140142819926016, 140142819930111, -ERASE, 140142819930112, 140142828318719, -ERASE, 140143180615680, 140143180619775, -ERASE, 140143180619776, 140143189008383, -ERASE, 140142962536448, 140142962540543, -ERASE, 140142962540544, 140142970929151, -ERASE, 140143214186496, 140143214190591, -ERASE, 140143214190592, 140143222579199, -ERASE, 140143088361472, 140143088365567, -ERASE, 140143088365568, 140143096754175, -ERASE, 140141586690048, 140141586694143, -ERASE, 140141586694144, 140141595082751, -ERASE, 140143230971904, 140143230975999, -ERASE, 140143230976000, 140143239364607, -ERASE, 140141779722240, 140141779726335, -ERASE, 140141779726336, 140141788114943, -ERASE, 140141670617088, 140141670621183, -ERASE, 140141670621184, 140141679009791, -ERASE, 140141813293056, 140141813297151, -ERASE, 140141813297152, 140141821685759, -ERASE, 140143222579200, 140143222583295, -ERASE, 140143222583296, 140143230971903, -ERASE, 140143189008384, 140143189012479, -ERASE, 140143189012480, 140143197401087, -ERASE, 140143071576064, 140143071580159, -ERASE, 140143071580160, 140143079968767, -ERASE, 140141620260864, 140141620264959, -ERASE, 140141620264960, 140141628653567, -ERASE, 140141603475456, 140141603479551, -ERASE, 140141603479552, 140141611868159, -ERASE, 140141720973312, 140141720977407, -ERASE, 140141720977408, 140141729366015, -ERASE, 140143079968768, 140143079972863, -ERASE, 140143079972864, 140143088361471, -ERASE, 140143205793792, 140143205797887, -ERASE, 140143205797888, 140143214186495, - }; - unsigned long set30[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140733436743680, 140737488351231, -SNULL, 140733436747775, 140737488351231, -STORE, 140733436743680, 140733436747775, -STORE, 140733436612608, 140733436747775, -STORE, 94630728904704, 94630731157503, -SNULL, 94630729035775, 94630731157503, -STORE, 94630728904704, 94630729035775, -STORE, 94630729035776, 94630731157503, -ERASE, 94630729035776, 94630731157503, -STORE, 94630731128832, 94630731137023, -STORE, 94630731137024, 94630731157503, -STORE, 140165750841344, 140165753094143, -SNULL, 140165750984703, 140165753094143, -STORE, 140165750841344, 140165750984703, -STORE, 140165750984704, 140165753094143, -ERASE, 140165750984704, 140165753094143, -STORE, 140165753081856, 140165753090047, -STORE, 140165753090048, 140165753094143, -STORE, 140733436887040, 140733436891135, -STORE, 140733436874752, 140733436887039, -STORE, 140165753053184, 140165753081855, -STORE, 140165753044992, 140165753053183, -STORE, 140165748625408, 140165750841343, -SNULL, 140165748625408, 140165748723711, -STORE, 140165748723712, 140165750841343, -STORE, 140165748625408, 140165748723711, -SNULL, 140165750816767, 140165750841343, -STORE, 140165748723712, 140165750816767, -STORE, 140165750816768, 140165750841343, -SNULL, 140165750816768, 140165750824959, -STORE, 140165750824960, 140165750841343, -STORE, 140165750816768, 140165750824959, -ERASE, 140165750816768, 140165750824959, -STORE, 140165750816768, 140165750824959, -ERASE, 140165750824960, 140165750841343, -STORE, 140165750824960, 140165750841343, -STORE, 140165744828416, 140165748625407, -SNULL, 140165744828416, 140165746487295, -STORE, 140165746487296, 140165748625407, -STORE, 140165744828416, 140165746487295, -SNULL, 140165748584447, 140165748625407, -STORE, 140165746487296, 140165748584447, -STORE, 140165748584448, 140165748625407, -SNULL, 140165748584448, 140165748609023, -STORE, 140165748609024, 140165748625407, -STORE, 140165748584448, 140165748609023, -ERASE, 140165748584448, 140165748609023, -STORE, 140165748584448, 140165748609023, -ERASE, 140165748609024, 140165748625407, -STORE, 140165748609024, 140165748625407, -STORE, 140165753036800, 140165753053183, -SNULL, 140165748600831, 140165748609023, -STORE, 140165748584448, 140165748600831, -STORE, 140165748600832, 140165748609023, -SNULL, 140165750820863, 140165750824959, -STORE, 140165750816768, 140165750820863, -STORE, 140165750820864, 140165750824959, -SNULL, 94630731132927, 94630731137023, -STORE, 94630731128832, 94630731132927, -STORE, 94630731132928, 94630731137023, -SNULL, 140165753085951, 140165753090047, -STORE, 140165753081856, 140165753085951, -STORE, 140165753085952, 140165753090047, -ERASE, 140165753053184, 140165753081855, -STORE, 94630743547904, 94630743683071, -STORE, 140165736435712, 140165744828415, -SNULL, 140165736439807, 140165744828415, -STORE, 140165736435712, 140165736439807, -STORE, 140165736439808, 140165744828415, -STORE, 140165728043008, 140165736435711, -STORE, 140165593825280, 140165728043007, -SNULL, 140165593825280, 140165653725183, -STORE, 140165653725184, 140165728043007, -STORE, 140165593825280, 140165653725183, -ERASE, 140165593825280, 140165653725183, -SNULL, 140165720834047, 140165728043007, -STORE, 140165653725184, 140165720834047, -STORE, 140165720834048, 140165728043007, -ERASE, 140165720834048, 140165728043007, -SNULL, 140165653860351, 140165720834047, -STORE, 140165653725184, 140165653860351, -STORE, 140165653860352, 140165720834047, -SNULL, 140165728047103, 140165736435711, -STORE, 140165728043008, 140165728047103, -STORE, 140165728047104, 140165736435711, -STORE, 140165645332480, 140165653725183, -SNULL, 140165645336575, 140165653725183, -STORE, 140165645332480, 140165645336575, -STORE, 140165645336576, 140165653725183, -STORE, 140165636939776, 140165645332479, -SNULL, 140165636943871, 140165645332479, -STORE, 140165636939776, 140165636943871, -STORE, 140165636943872, 140165645332479, -STORE, 140165628547072, 140165636939775, -SNULL, 140165628551167, 140165636939775, -STORE, 140165628547072, 140165628551167, -STORE, 140165628551168, 140165636939775, -STORE, 140165620154368, 140165628547071, -STORE, 140165611761664, 140165628547071, -STORE, 140165603368960, 140165628547071, -STORE, 140165469151232, 140165603368959, -SNULL, 140165469151232, 140165519507455, -STORE, 140165519507456, 140165603368959, -STORE, 140165469151232, 140165519507455, -ERASE, 140165469151232, 140165519507455, -SNULL, 140165586616319, 140165603368959, -STORE, 140165519507456, 140165586616319, -STORE, 140165586616320, 140165603368959, -ERASE, 140165586616320, 140165603368959, -STORE, 140165594976256, 140165628547071, -STORE, 140165385289728, 140165586616319, -SNULL, 140165452398591, 140165586616319, -STORE, 140165385289728, 140165452398591, -STORE, 140165452398592, 140165586616319, -SNULL, 140165452398592, 140165519507455, -STORE, 140165519507456, 140165586616319, -STORE, 140165452398592, 140165519507455, -ERASE, 140165452398592, 140165519507455, -STORE, 140165251072000, 140165452398591, -SNULL, 140165318180863, 140165452398591, -STORE, 140165251072000, 140165318180863, -STORE, 140165318180864, 140165452398591, -SNULL, 140165318180864, 140165385289727, -STORE, 140165385289728, 140165452398591, -STORE, 140165318180864, 140165385289727, -ERASE, 140165318180864, 140165385289727, -SNULL, 140165519642623, 140165586616319, -STORE, 140165519507456, 140165519642623, -STORE, 140165519642624, 140165586616319, -SNULL, 140165594976256, 140165611761663, -STORE, 140165611761664, 140165628547071, -STORE, 140165594976256, 140165611761663, -SNULL, 140165611765759, 140165628547071, -STORE, 140165611761664, 140165611765759, -STORE, 140165611765760, 140165628547071, -STORE, 140165385289728, 140165519507455, -SNULL, 140165385424895, 140165519507455, -STORE, 140165385289728, 140165385424895, -STORE, 140165385424896, 140165519507455, -SNULL, 140165594976256, 140165603368959, -STORE, 140165603368960, 140165611761663, -STORE, 140165594976256, 140165603368959, -SNULL, 140165603373055, 140165611761663, -STORE, 140165603368960, 140165603373055, -STORE, 140165603373056, 140165611761663, -SNULL, 140165251207167, 140165318180863, -STORE, 140165251072000, 140165251207167, -STORE, 140165251207168, 140165318180863, -STORE, 140165376897024, 140165385289727, -SNULL, 140165376901119, 140165385289727, -STORE, 140165376897024, 140165376901119, -STORE, 140165376901120, 140165385289727, -SNULL, 140165385424896, 140165452398591, -STORE, 140165452398592, 140165519507455, -STORE, 140165385424896, 140165452398591, -SNULL, 140165452533759, 140165519507455, -STORE, 140165452398592, 140165452533759, -STORE, 140165452533760, 140165519507455, -STORE, 140165368504320, 140165376897023, -SNULL, 140165594980351, 140165603368959, -STORE, 140165594976256, 140165594980351, -STORE, 140165594980352, 140165603368959, -SNULL, 140165368508415, 140165376897023, -STORE, 140165368504320, 140165368508415, -STORE, 140165368508416, 140165376897023, -SNULL, 140165611765760, 140165620154367, -STORE, 140165620154368, 140165628547071, -STORE, 140165611765760, 140165620154367, -SNULL, 140165620158463, 140165628547071, -STORE, 140165620154368, 140165620158463, -STORE, 140165620158464, 140165628547071, -STORE, 140165360111616, 140165368504319, -STORE, 140165351718912, 140165368504319, -STORE, 140165343326208, 140165368504319, -SNULL, 140165343326208, 140165351718911, -STORE, 140165351718912, 140165368504319, -STORE, 140165343326208, 140165351718911, -SNULL, 140165351723007, 140165368504319, -STORE, 140165351718912, 140165351723007, -STORE, 140165351723008, 140165368504319, -SNULL, 140165343330303, 140165351718911, -STORE, 140165343326208, 140165343330303, -STORE, 140165343330304, 140165351718911, -SNULL, 140165351723008, 140165360111615, -STORE, 140165360111616, 140165368504319, -STORE, 140165351723008, 140165360111615, -SNULL, 140165360115711, 140165368504319, -STORE, 140165360111616, 140165360115711, -STORE, 140165360115712, 140165368504319, -STORE, 140165334933504, 140165343326207, -SNULL, 140165334937599, 140165343326207, -STORE, 140165334933504, 140165334937599, -STORE, 140165334937600, 140165343326207, -STORE, 140165326540800, 140165334933503, -STORE, 140165242679296, 140165251071999, -SNULL, 140165242683391, 140165251071999, -STORE, 140165242679296, 140165242683391, -STORE, 140165242683392, 140165251071999, -STORE, 140165234286592, 140165242679295, -STORE, 140165225893888, 140165242679295, -SNULL, 140165225897983, 140165242679295, -STORE, 140165225893888, 140165225897983, -STORE, 140165225897984, 140165242679295, -SNULL, 140165225897984, 140165234286591, -STORE, 140165234286592, 140165242679295, -STORE, 140165225897984, 140165234286591, -SNULL, 140165234290687, 140165242679295, -STORE, 140165234286592, 140165234290687, -STORE, 140165234290688, 140165242679295, -SNULL, 140165326544895, 140165334933503, -STORE, 140165326540800, 140165326544895, -STORE, 140165326544896, 140165334933503, -STORE, 140165217501184, 140165225893887, -STORE, 140165209108480, 140165225893887, -SNULL, 140165209108480, 140165217501183, -STORE, 140165217501184, 140165225893887, -STORE, 140165209108480, 140165217501183, -SNULL, 140165217505279, 140165225893887, -STORE, 140165217501184, 140165217505279, -STORE, 140165217505280, 140165225893887, -SNULL, 140165209112575, 140165217501183, -STORE, 140165209108480, 140165209112575, -STORE, 140165209112576, 140165217501183, -STORE, 140165200715776, 140165209108479, -STORE, 140165066498048, 140165200715775, -SNULL, 140165066498048, 140165116854271, -STORE, 140165116854272, 140165200715775, -STORE, 140165066498048, 140165116854271, -ERASE, 140165066498048, 140165116854271, -SNULL, 140165183963135, 140165200715775, -STORE, 140165116854272, 140165183963135, -STORE, 140165183963136, 140165200715775, -ERASE, 140165183963136, 140165200715775, -SNULL, 140165116989439, 140165183963135, -STORE, 140165116854272, 140165116989439, -STORE, 140165116989440, 140165183963135, -STORE, 140165192323072, 140165209108479, -STORE, 140165108461568, 140165116854271, -STORE, 140164974243840, 140165108461567, -STORE, 140164965851136, 140164974243839, -SNULL, 140164974243840, 140164982636543, -STORE, 140164982636544, 140165108461567, -STORE, 140164974243840, 140164982636543, -ERASE, 140164974243840, 140164982636543, -STORE, 140164965851136, 140164982636543, -STORE, 140164957458432, 140164982636543, -STORE, 140164949065728, 140164982636543, -STORE, 140164940673024, 140164982636543, -STORE, 140164806455296, 140164940673023, -STORE, 140164798062592, 140164806455295, -STORE, 140164789669888, 140164806455295, -STORE, 140164655452160, 140164789669887, -STORE, 140164647059456, 140164655452159, -STORE, 140164638666752, 140164655452159, -SNULL, 140164655452160, 140164714201087, -STORE, 140164714201088, 140164789669887, -STORE, 140164655452160, 140164714201087, -ERASE, 140164655452160, 140164714201087, -STORE, 140164705808384, 140164714201087, -STORE, 140164697415680, 140164714201087, -STORE, 140164504449024, 140164638666751, -SNULL, 140164504449024, 140164512874495, -STORE, 140164512874496, 140164638666751, -STORE, 140164504449024, 140164512874495, -ERASE, 140164504449024, 140164512874495, -STORE, 140164689022976, 140164714201087, -STORE, 140164680630272, 140164714201087, -SNULL, 140164680634367, 140164714201087, -STORE, 140164680630272, 140164680634367, -STORE, 140164680634368, 140164714201087, -STORE, 140164378656768, 140164638666751, -SNULL, 140165192323072, 140165200715775, -STORE, 140165200715776, 140165209108479, -STORE, 140165192323072, 140165200715775, -SNULL, 140165200719871, 140165209108479, -STORE, 140165200715776, 140165200719871, -STORE, 140165200719872, 140165209108479, -SNULL, 140165049745407, 140165108461567, -STORE, 140164982636544, 140165049745407, -STORE, 140165049745408, 140165108461567, -ERASE, 140165049745408, 140165108461567, -SNULL, 140164982771711, 140165049745407, -STORE, 140164982636544, 140164982771711, -STORE, 140164982771712, 140165049745407, -STORE, 140164244439040, 140164638666751, -SNULL, 140164311547903, 140164638666751, -STORE, 140164244439040, 140164311547903, -STORE, 140164311547904, 140164638666751, -SNULL, 140164311547904, 140164378656767, -STORE, 140164378656768, 140164638666751, -STORE, 140164311547904, 140164378656767, -ERASE, 140164311547904, 140164378656767, -SNULL, 140164806455296, 140164848418815, -STORE, 140164848418816, 140164940673023, -STORE, 140164806455296, 140164848418815, -ERASE, 140164806455296, 140164848418815, -SNULL, 140164915527679, 140164940673023, -STORE, 140164848418816, 140164915527679, -STORE, 140164915527680, 140164940673023, -ERASE, 140164915527680, 140164940673023, -STORE, 140164110221312, 140164311547903, -SNULL, 140164177330175, 140164311547903, -STORE, 140164110221312, 140164177330175, -STORE, 140164177330176, 140164311547903, -SNULL, 140164177330176, 140164244439039, -STORE, 140164244439040, 140164311547903, -STORE, 140164177330176, 140164244439039, -ERASE, 140164177330176, 140164244439039, -SNULL, 140164781309951, 140164789669887, -STORE, 140164714201088, 140164781309951, -STORE, 140164781309952, 140164789669887, -ERASE, 140164781309952, 140164789669887, -STORE, 140163976003584, 140164177330175, -SNULL, 140164043112447, 140164177330175, -STORE, 140163976003584, 140164043112447, -STORE, 140164043112448, 140164177330175, -SNULL, 140164043112448, 140164110221311, -STORE, 140164110221312, 140164177330175, -STORE, 140164043112448, 140164110221311, -ERASE, 140164043112448, 140164110221311, -SNULL, 140164579983359, 140164638666751, -STORE, 140164378656768, 140164579983359, -STORE, 140164579983360, 140164638666751, -ERASE, 140164579983360, 140164638666751, -STORE, 140163841785856, 140164043112447, -SNULL, 140163908894719, 140164043112447, -STORE, 140163841785856, 140163908894719, -STORE, 140163908894720, 140164043112447, -SNULL, 140163908894720, 140163976003583, -STORE, 140163976003584, 140164043112447, -STORE, 140163908894720, 140163976003583, -ERASE, 140163908894720, 140163976003583, -SNULL, 140164940673024, 140164965851135, -STORE, 140164965851136, 140164982636543, -STORE, 140164940673024, 140164965851135, -SNULL, 140164965855231, 140164982636543, -STORE, 140164965851136, 140164965855231, -STORE, 140164965855232, 140164982636543, -SNULL, 140164965855232, 140164974243839, -STORE, 140164974243840, 140164982636543, -STORE, 140164965855232, 140164974243839, -SNULL, 140164974247935, 140164982636543, -STORE, 140164974243840, 140164974247935, -STORE, 140164974247936, 140164982636543, -SNULL, 140164445765631, 140164579983359, -STORE, 140164378656768, 140164445765631, -STORE, 140164445765632, 140164579983359, -SNULL, 140164445765632, 140164512874495, -STORE, 140164512874496, 140164579983359, -STORE, 140164445765632, 140164512874495, -ERASE, 140164445765632, 140164512874495, -SNULL, 140164378791935, 140164445765631, -STORE, 140164378656768, 140164378791935, -STORE, 140164378791936, 140164445765631, -SNULL, 140164789673983, 140164806455295, -STORE, 140164789669888, 140164789673983, -STORE, 140164789673984, 140164806455295, -SNULL, 140164789673984, 140164798062591, -STORE, 140164798062592, 140164806455295, -STORE, 140164789673984, 140164798062591, -SNULL, 140164798066687, 140164806455295, -STORE, 140164798062592, 140164798066687, -STORE, 140164798066688, 140164806455295, -SNULL, 140164638670847, 140164655452159, -STORE, 140164638666752, 140164638670847, -STORE, 140164638670848, 140164655452159, -STORE, 140165100068864, 140165116854271, -STORE, 140165091676160, 140165116854271, -STORE, 140165083283456, 140165116854271, -SNULL, 140164244574207, 140164311547903, -STORE, 140164244439040, 140164244574207, -STORE, 140164244574208, 140164311547903, -SNULL, 140164848553983, 140164915527679, -STORE, 140164848418816, 140164848553983, -STORE, 140164848553984, 140164915527679, -SNULL, 140164110356479, 140164177330175, -STORE, 140164110221312, 140164110356479, -STORE, 140164110356480, 140164177330175, -SNULL, 140164714336255, 140164781309951, -STORE, 140164714201088, 140164714336255, -STORE, 140164714336256, 140164781309951, -SNULL, 140163976138751, 140164043112447, -STORE, 140163976003584, 140163976138751, -STORE, 140163976138752, 140164043112447, -SNULL, 140164513009663, 140164579983359, -STORE, 140164512874496, 140164513009663, -STORE, 140164513009664, 140164579983359, -SNULL, 140163841921023, 140163908894719, -STORE, 140163841785856, 140163841921023, -STORE, 140163841921024, 140163908894719, -SNULL, 140165083283456, 140165100068863, -STORE, 140165100068864, 140165116854271, -STORE, 140165083283456, 140165100068863, -SNULL, 140165100072959, 140165116854271, -STORE, 140165100068864, 140165100072959, -STORE, 140165100072960, 140165116854271, -SNULL, 140165100072960, 140165108461567, -STORE, 140165108461568, 140165116854271, -STORE, 140165100072960, 140165108461567, -SNULL, 140165108465663, 140165116854271, -STORE, 140165108461568, 140165108465663, -STORE, 140165108465664, 140165116854271, -STORE, 140165074890752, 140165100068863, -SNULL, 140165074894847, 140165100068863, -STORE, 140165074890752, 140165074894847, -STORE, 140165074894848, 140165100068863, -STORE, 140165066498048, 140165074890751, -STORE, 140165058105344, 140165074890751, -STORE, 140164932280320, 140164965851135, -SNULL, 140165192327167, 140165200715775, -STORE, 140165192323072, 140165192327167, -STORE, 140165192327168, 140165200715775, -STORE, 140164923887616, 140164965851135, -SNULL, 140164923891711, 140164965851135, -STORE, 140164923887616, 140164923891711, -STORE, 140164923891712, 140164965851135, -SNULL, 140164680634368, 140164705808383, -STORE, 140164705808384, 140164714201087, -STORE, 140164680634368, 140164705808383, -SNULL, 140164705812479, 140164714201087, -STORE, 140164705808384, 140164705812479, -STORE, 140164705812480, 140164714201087, -SNULL, 140164680634368, 140164697415679, -STORE, 140164697415680, 140164705808383, -STORE, 140164680634368, 140164697415679, -SNULL, 140164697419775, 140164705808383, -STORE, 140164697415680, 140164697419775, -STORE, 140164697419776, 140164705808383, -STORE, 140164840026112, 140164848418815, -STORE, 140164831633408, 140164848418815, -STORE, 140164823240704, 140164848418815, -SNULL, 140165074894848, 140165083283455, -STORE, 140165083283456, 140165100068863, -STORE, 140165074894848, 140165083283455, -SNULL, 140165083287551, 140165100068863, -STORE, 140165083283456, 140165083287551, -STORE, 140165083287552, 140165100068863, -SNULL, 140165083287552, 140165091676159, -STORE, 140165091676160, 140165100068863, -STORE, 140165083287552, 140165091676159, -SNULL, 140165091680255, 140165100068863, -STORE, 140165091676160, 140165091680255, -STORE, 140165091680256, 140165100068863, -SNULL, 140164638670848, 140164647059455, -STORE, 140164647059456, 140164655452159, -STORE, 140164638670848, 140164647059455, -SNULL, 140164647063551, 140164655452159, -STORE, 140164647059456, 140164647063551, -STORE, 140164647063552, 140164655452159, -SNULL, 140164923891712, 140164940673023, -STORE, 140164940673024, 140164965851135, -STORE, 140164923891712, 140164940673023, -SNULL, 140164940677119, 140164965851135, -STORE, 140164940673024, 140164940677119, -STORE, 140164940677120, 140164965851135, -SNULL, 140164940677120, 140164949065727, -STORE, 140164949065728, 140164965851135, -STORE, 140164940677120, 140164949065727, -SNULL, 140164949069823, 140164965851135, -STORE, 140164949065728, 140164949069823, -STORE, 140164949069824, 140164965851135, -SNULL, 140164949069824, 140164957458431, -STORE, 140164957458432, 140164965851135, -STORE, 140164949069824, 140164957458431, -SNULL, 140164957462527, 140164965851135, -STORE, 140164957458432, 140164957462527, -STORE, 140164957462528, 140164965851135, -SNULL, 140164680634368, 140164689022975, -STORE, 140164689022976, 140164697415679, -STORE, 140164680634368, 140164689022975, -SNULL, 140164689027071, 140164697415679, -STORE, 140164689022976, 140164689027071, -STORE, 140164689027072, 140164697415679, -STORE, 140164814848000, 140164848418815, -SNULL, 140165058105344, 140165066498047, -STORE, 140165066498048, 140165074890751, -STORE, 140165058105344, 140165066498047, -SNULL, 140165066502143, 140165074890751, -STORE, 140165066498048, 140165066502143, -STORE, 140165066502144, 140165074890751, -SNULL, 140165058109439, 140165066498047, -STORE, 140165058105344, 140165058109439, -STORE, 140165058109440, 140165066498047, -STORE, 140164798066688, 140164814847999, -SNULL, 140164798066688, 140164806455295, -STORE, 140164806455296, 140164814847999, -STORE, 140164798066688, 140164806455295, -SNULL, 140164806459391, 140164814847999, -STORE, 140164806455296, 140164806459391, -STORE, 140164806459392, 140164814847999, -SNULL, 140164923891712, 140164932280319, -STORE, 140164932280320, 140164940673023, -STORE, 140164923891712, 140164932280319, -SNULL, 140164932284415, 140164940673023, -STORE, 140164932280320, 140164932284415, -STORE, 140164932284416, 140164940673023, -STORE, 140164672237568, 140164680630271, -STORE, 140164663844864, 140164680630271, -STORE, 140164647063552, 140164680630271, -SNULL, 140164647063552, 140164655452159, -STORE, 140164655452160, 140164680630271, -STORE, 140164647063552, 140164655452159, -SNULL, 140164655456255, 140164680630271, -STORE, 140164655452160, 140164655456255, -STORE, 140164655456256, 140164680630271, -STORE, 140164630274048, 140164638666751, -SNULL, 140164814852095, 140164848418815, -STORE, 140164814848000, 140164814852095, -STORE, 140164814852096, 140164848418815, -SNULL, 140164814852096, 140164831633407, -STORE, 140164831633408, 140164848418815, -STORE, 140164814852096, 140164831633407, -SNULL, 140164831637503, 140164848418815, -STORE, 140164831633408, 140164831637503, -STORE, 140164831637504, 140164848418815, -STORE, 140164621881344, 140164638666751, -SNULL, 140164831637504, 140164840026111, -STORE, 140164840026112, 140164848418815, -STORE, 140164831637504, 140164840026111, -SNULL, 140164840030207, 140164848418815, -STORE, 140164840026112, 140164840030207, -STORE, 140164840030208, 140164848418815, -STORE, 140164613488640, 140164638666751, -SNULL, 140164613492735, 140164638666751, -STORE, 140164613488640, 140164613492735, -STORE, 140164613492736, 140164638666751, -STORE, 140164605095936, 140164613488639, -SNULL, 140164605100031, 140164613488639, -STORE, 140164605095936, 140164605100031, -STORE, 140164605100032, 140164613488639, -STORE, 140164596703232, 140164605095935, -STORE, 140164588310528, 140164605095935, -SNULL, 140164588314623, 140164605095935, -STORE, 140164588310528, 140164588314623, -STORE, 140164588314624, 140164605095935, -STORE, 140164504481792, 140164512874495, -STORE, 140164496089088, 140164512874495, -SNULL, 140164496089088, 140164504481791, -STORE, 140164504481792, 140164512874495, -STORE, 140164496089088, 140164504481791, -SNULL, 140164504485887, 140164512874495, -STORE, 140164504481792, 140164504485887, -STORE, 140164504485888, 140164512874495, -SNULL, 140164613492736, 140164630274047, -STORE, 140164630274048, 140164638666751, -STORE, 140164613492736, 140164630274047, -SNULL, 140164630278143, 140164638666751, -STORE, 140164630274048, 140164630278143, -STORE, 140164630278144, 140164638666751, -STORE, 140164487696384, 140164504481791, -STORE, 140164479303680, 140164504481791, -SNULL, 140164814852096, 140164823240703, -STORE, 140164823240704, 140164831633407, -STORE, 140164814852096, 140164823240703, -SNULL, 140164823244799, 140164831633407, -STORE, 140164823240704, 140164823244799, -STORE, 140164823244800, 140164831633407, -STORE, 140164470910976, 140164504481791, -SNULL, 140164470910976, 140164496089087, -STORE, 140164496089088, 140164504481791, -STORE, 140164470910976, 140164496089087, -SNULL, 140164496093183, 140164504481791, -STORE, 140164496089088, 140164496093183, -STORE, 140164496093184, 140164504481791, -SNULL, 140164655456256, 140164672237567, -STORE, 140164672237568, 140164680630271, -STORE, 140164655456256, 140164672237567, -SNULL, 140164672241663, 140164680630271, -STORE, 140164672237568, 140164672241663, -STORE, 140164672241664, 140164680630271, -STORE, 140164462518272, 140164496089087, -STORE, 140164454125568, 140164496089087, -SNULL, 140164655456256, 140164663844863, -STORE, 140164663844864, 140164672237567, -STORE, 140164655456256, 140164663844863, -SNULL, 140164663848959, 140164672237567, -STORE, 140164663844864, 140164663848959, -STORE, 140164663848960, 140164672237567, -STORE, 140164370264064, 140164378656767, -STORE, 140164361871360, 140164378656767, -STORE, 140164353478656, 140164378656767, -STORE, 140164345085952, 140164378656767, -SNULL, 140164345085952, 140164353478655, -STORE, 140164353478656, 140164378656767, -STORE, 140164345085952, 140164353478655, -SNULL, 140164353482751, 140164378656767, -STORE, 140164353478656, 140164353482751, -STORE, 140164353482752, 140164378656767, -SNULL, 140164454125568, 140164487696383, -STORE, 140164487696384, 140164496089087, -STORE, 140164454125568, 140164487696383, -SNULL, 140164487700479, 140164496089087, -STORE, 140164487696384, 140164487700479, -STORE, 140164487700480, 140164496089087, -STORE, 140164336693248, 140164353478655, -SNULL, 140164336697343, 140164353478655, -STORE, 140164336693248, 140164336697343, -STORE, 140164336697344, 140164353478655, -STORE, 140164328300544, 140164336693247, -SNULL, 140164454125568, 140164479303679, -STORE, 140164479303680, 140164487696383, -STORE, 140164454125568, 140164479303679, -SNULL, 140164479307775, 140164487696383, -STORE, 140164479303680, 140164479307775, -STORE, 140164479307776, 140164487696383, -STORE, 140164319907840, 140164336693247, -STORE, 140164236046336, 140164244439039, -SNULL, 140164588314624, 140164596703231, -STORE, 140164596703232, 140164605095935, -STORE, 140164588314624, 140164596703231, -SNULL, 140164596707327, 140164605095935, -STORE, 140164596703232, 140164596707327, -STORE, 140164596707328, 140164605095935, -SNULL, 140164454125568, 140164462518271, -STORE, 140164462518272, 140164479303679, -STORE, 140164454125568, 140164462518271, -SNULL, 140164462522367, 140164479303679, -STORE, 140164462518272, 140164462522367, -STORE, 140164462522368, 140164479303679, -STORE, 140164227653632, 140164244439039, -SNULL, 140164227657727, 140164244439039, -STORE, 140164227653632, 140164227657727, -STORE, 140164227657728, 140164244439039, -SNULL, 140164462522368, 140164470910975, -STORE, 140164470910976, 140164479303679, -STORE, 140164462522368, 140164470910975, -SNULL, 140164470915071, 140164479303679, -STORE, 140164470910976, 140164470915071, -STORE, 140164470915072, 140164479303679, -SNULL, 140164613492736, 140164621881343, -STORE, 140164621881344, 140164630274047, -STORE, 140164613492736, 140164621881343, -SNULL, 140164621885439, 140164630274047, -STORE, 140164621881344, 140164621885439, -STORE, 140164621885440, 140164630274047, -SNULL, 140164353482752, 140164370264063, -STORE, 140164370264064, 140164378656767, -STORE, 140164353482752, 140164370264063, -SNULL, 140164370268159, 140164378656767, -STORE, 140164370264064, 140164370268159, -STORE, 140164370268160, 140164378656767, -STORE, 140164219260928, 140164227653631, -SNULL, 140164319911935, 140164336693247, -STORE, 140164319907840, 140164319911935, -STORE, 140164319911936, 140164336693247, -SNULL, 140164336697344, 140164345085951, -STORE, 140164345085952, 140164353478655, -STORE, 140164336697344, 140164345085951, -SNULL, 140164345090047, 140164353478655, -STORE, 140164345085952, 140164345090047, -STORE, 140164345090048, 140164353478655, -SNULL, 140164319911936, 140164328300543, -STORE, 140164328300544, 140164336693247, -STORE, 140164319911936, 140164328300543, -SNULL, 140164328304639, 140164336693247, -STORE, 140164328300544, 140164328304639, -STORE, 140164328304640, 140164336693247, -SNULL, 140164454129663, 140164462518271, -STORE, 140164454125568, 140164454129663, -STORE, 140164454129664, 140164462518271, -STORE, 140164210868224, 140164227653631, -STORE, 140164202475520, 140164227653631, -STORE, 140164194082816, 140164227653631, -SNULL, 140164194086911, 140164227653631, -STORE, 140164194082816, 140164194086911, -STORE, 140164194086912, 140164227653631, -SNULL, 140164353482752, 140164361871359, -STORE, 140164361871360, 140164370264063, -STORE, 140164353482752, 140164361871359, -SNULL, 140164361875455, 140164370264063, -STORE, 140164361871360, 140164361875455, -STORE, 140164361875456, 140164370264063, -SNULL, 140164227657728, 140164236046335, -STORE, 140164236046336, 140164244439039, -STORE, 140164227657728, 140164236046335, -SNULL, 140164236050431, 140164244439039, -STORE, 140164236046336, 140164236050431, -STORE, 140164236050432, 140164244439039, -STORE, 140164185690112, 140164194082815, -SNULL, 140164194086912, 140164219260927, -STORE, 140164219260928, 140164227653631, -STORE, 140164194086912, 140164219260927, -SNULL, 140164219265023, 140164227653631, -STORE, 140164219260928, 140164219265023, -STORE, 140164219265024, 140164227653631, -STORE, 140164101828608, 140164110221311, -STORE, 140164093435904, 140164110221311, -STORE, 140164085043200, 140164110221311, -SNULL, 140164085047295, 140164110221311, -STORE, 140164085043200, 140164085047295, -STORE, 140164085047296, 140164110221311, -STORE, 140164076650496, 140164085043199, -SNULL, 140164185694207, 140164194082815, -STORE, 140164185690112, 140164185694207, -STORE, 140164185694208, 140164194082815, -SNULL, 140164085047296, 140164101828607, -STORE, 140164101828608, 140164110221311, -STORE, 140164085047296, 140164101828607, -SNULL, 140164101832703, 140164110221311, -STORE, 140164101828608, 140164101832703, -STORE, 140164101832704, 140164110221311, -SNULL, 140164085047296, 140164093435903, -STORE, 140164093435904, 140164101828607, -STORE, 140164085047296, 140164093435903, -SNULL, 140164093439999, 140164101828607, -STORE, 140164093435904, 140164093439999, -STORE, 140164093440000, 140164101828607, -SNULL, 140164194086912, 140164202475519, -STORE, 140164202475520, 140164219260927, -STORE, 140164194086912, 140164202475519, -SNULL, 140164202479615, 140164219260927, -STORE, 140164202475520, 140164202479615, -STORE, 140164202479616, 140164219260927, -SNULL, 140164202479616, 140164210868223, -STORE, 140164210868224, 140164219260927, -STORE, 140164202479616, 140164210868223, -SNULL, 140164210872319, 140164219260927, -STORE, 140164210868224, 140164210872319, -STORE, 140164210872320, 140164219260927, -SNULL, 140164076654591, 140164085043199, -STORE, 140164076650496, 140164076654591, -STORE, 140164076654592, 140164085043199, -STORE, 140164068257792, 140164076650495, -SNULL, 140164068261887, 140164076650495, -STORE, 140164068257792, 140164068261887, -STORE, 140164068261888, 140164076650495, -STORE, 140165753053184, 140165753081855, -STORE, 140165725851648, 140165728043007, -SNULL, 140165725851648, 140165725941759, -STORE, 140165725941760, 140165728043007, -STORE, 140165725851648, 140165725941759, -SNULL, 140165728034815, 140165728043007, -STORE, 140165725941760, 140165728034815, -STORE, 140165728034816, 140165728043007, -ERASE, 140165728034816, 140165728043007, -STORE, 140165728034816, 140165728043007, -SNULL, 140165728038911, 140165728043007, -STORE, 140165728034816, 140165728038911, -STORE, 140165728038912, 140165728043007, -ERASE, 140165753053184, 140165753081855, -ERASE, 140164638666752, 140164638670847, -ERASE, 140164638670848, 140164647059455, -ERASE, 140165091676160, 140165091680255, -ERASE, 140165091680256, 140165100068863, -ERASE, 140164613488640, 140164613492735, -ERASE, 140164613492736, 140164621881343, -ERASE, 140164319907840, 140164319911935, -ERASE, 140164319911936, 140164328300543, -ERASE, 140165620154368, 140165620158463, -ERASE, 140165620158464, 140165628547071, -ERASE, 140164798062592, 140164798066687, -ERASE, 140164798066688, 140164806455295, -ERASE, 140164789669888, 140164789673983, -ERASE, 140164789673984, 140164798062591, -ERASE, 140164965851136, 140164965855231, -ERASE, 140164965855232, 140164974243839, -ERASE, 140165074890752, 140165074894847, -ERASE, 140165074894848, 140165083283455, -ERASE, 140164672237568, 140164672241663, -ERASE, 140164672241664, 140164680630271, -ERASE, 140164454125568, 140164454129663, -ERASE, 140164454129664, 140164462518271, -ERASE, 140165200715776, 140165200719871, -ERASE, 140165200719872, 140165209108479, -ERASE, 140164932280320, 140164932284415, -ERASE, 140164932284416, 140164940673023, -ERASE, 140164663844864, 140164663848959, -ERASE, 140164663848960, 140164672237567, -ERASE, 140164697415680, 140164697419775, -ERASE, 140164697419776, 140164705808383, -ERASE, 140164831633408, 140164831637503, -ERASE, 140164831637504, 140164840026111, -ERASE, 140165192323072, 140165192327167, -ERASE, 140165192327168, 140165200715775, -ERASE, 140165108461568, 140165108465663, -ERASE, 140165108465664, 140165116854271, -ERASE, 140164840026112, 140164840030207, -ERASE, 140164840030208, 140164848418815, -ERASE, 140164647059456, 140164647063551, -ERASE, 140164647063552, 140164655452159, -ERASE, 140165083283456, 140165083287551, -ERASE, 140165083287552, 140165091676159, -ERASE, 140164923887616, 140164923891711, -ERASE, 140164923891712, 140164932280319, -ERASE, 140164823240704, 140164823244799, -ERASE, 140164823244800, 140164831633407, -ERASE, 140164227653632, 140164227657727, -ERASE, 140164227657728, 140164236046335, -ERASE, 140164957458432, 140164957462527, -ERASE, 140164957462528, 140164965851135, -ERASE, 140164680630272, 140164680634367, -ERASE, 140164680634368, 140164689022975, -ERASE, 140164974243840, 140164974247935, -ERASE, 140164974247936, 140164982636543, -ERASE, 140165066498048, 140165066502143, -ERASE, 140165066502144, 140165074890751, -ERASE, 140164621881344, 140164621885439, -ERASE, 140164621885440, 140164630274047, -ERASE, 140164949065728, 140164949069823, -ERASE, 140164949069824, 140164957458431, -ERASE, 140164588310528, 140164588314623, -ERASE, 140164588314624, 140164596703231, -ERASE, 140164806455296, 140164806459391, -ERASE, 140164806459392, 140164814847999, -ERASE, 140164940673024, 140164940677119, -ERASE, 140164940677120, 140164949065727, -ERASE, 140164596703232, 140164596707327, -ERASE, 140164596707328, 140164605095935, -ERASE, 140164605095936, 140164605100031, -ERASE, 140164605100032, 140164613488639, -ERASE, 140164655452160, 140164655456255, -ERASE, 140164655456256, 140164663844863, -ERASE, 140164705808384, 140164705812479, -ERASE, 140164705812480, 140164714201087, -ERASE, 140164689022976, 140164689027071, -ERASE, 140164689027072, 140164697415679, -ERASE, 140164630274048, 140164630278143, -ERASE, 140164630278144, 140164638666751, -ERASE, 140164479303680, 140164479307775, -ERASE, 140164479307776, 140164487696383, -ERASE, 140164236046336, 140164236050431, -ERASE, 140164236050432, 140164244439039, -ERASE, 140164085043200, 140164085047295, -ERASE, 140164085047296, 140164093435903, -ERASE, 140164345085952, 140164345090047, -ERASE, 140164345090048, 140164353478655, -ERASE, 140164101828608, 140164101832703, -ERASE, 140164101832704, 140164110221311, -ERASE, 140164370264064, 140164370268159, -ERASE, 140164370268160, 140164378656767, -ERASE, 140164336693248, 140164336697343, -ERASE, 140164336697344, 140164345085951, -ERASE, 140164194082816, 140164194086911, -ERASE, 140164194086912, 140164202475519, -ERASE, 140164353478656, 140164353482751, -ERASE, 140164353482752, 140164361871359, -ERASE, 140164210868224, 140164210872319, -ERASE, 140164210872320, 140164219260927, -ERASE, 140164814848000, 140164814852095, -ERASE, 140164814852096, 140164823240703, -ERASE, 140164504481792, 140164504485887, -ERASE, 140164504485888, 140164512874495, -ERASE, 140165100068864, 140165100072959, -ERASE, 140165100072960, 140165108461567, -ERASE, 140164361871360, 140164361875455, -ERASE, 140164361875456, 140164370264063, -ERASE, 140164470910976, 140164470915071, -ERASE, 140164470915072, 140164479303679, -ERASE, 140164076650496, 140164076654591, -ERASE, 140164076654592, 140164085043199, -ERASE, 140164202475520, 140164202479615, -ERASE, 140164202479616, 140164210868223, -ERASE, 140164462518272, 140164462522367, -ERASE, 140164462522368, 140164470910975, -ERASE, 140165351718912, 140165351723007, -ERASE, 140165351723008, 140165360111615, -ERASE, 140164328300544, 140164328304639, -ERASE, 140164328304640, 140164336693247, -ERASE, 140164093435904, 140164093439999, -ERASE, 140164093440000, 140164101828607, -ERASE, 140165603368960, 140165603373055, -ERASE, 140165603373056, 140165611761663, -ERASE, 140165368504320, 140165368508415, -ERASE, 140165368508416, 140165376897023, -ERASE, 140165334933504, 140165334937599, -ERASE, 140165334937600, 140165343326207, -ERASE, 140165594976256, 140165594980351, -ERASE, 140165594980352, 140165603368959, -ERASE, 140164487696384, 140164487700479, -ERASE, 140164487700480, 140164496089087, -ERASE, 140164219260928, 140164219265023, -ERASE, 140164219265024, 140164227653631, -ERASE, 140164185690112, 140164185694207, -ERASE, 140164185694208, 140164194082815, -ERASE, 140164068257792, 140164068261887, -ERASE, 140164068261888, 140164076650495, -ERASE, 140165225893888, 140165225897983, -ERASE, 140165225897984, 140165234286591, -ERASE, 140165058105344, 140165058109439, - }; - unsigned long set31[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140730890784768, 140737488351231, -SNULL, 140730890788863, 140737488351231, -STORE, 140730890784768, 140730890788863, -STORE, 140730890653696, 140730890788863, -STORE, 94577123659776, 94577125912575, -SNULL, 94577123790847, 94577125912575, -STORE, 94577123659776, 94577123790847, -STORE, 94577123790848, 94577125912575, -ERASE, 94577123790848, 94577125912575, -STORE, 94577125883904, 94577125892095, -STORE, 94577125892096, 94577125912575, -STORE, 140624060407808, 140624062660607, -SNULL, 140624060551167, 140624062660607, -STORE, 140624060407808, 140624060551167, -STORE, 140624060551168, 140624062660607, -ERASE, 140624060551168, 140624062660607, -STORE, 140624062648320, 140624062656511, -STORE, 140624062656512, 140624062660607, -STORE, 140730892140544, 140730892144639, -STORE, 140730892128256, 140730892140543, -STORE, 140624062619648, 140624062648319, -STORE, 140624062611456, 140624062619647, -STORE, 140624058191872, 140624060407807, -SNULL, 140624058191872, 140624058290175, -STORE, 140624058290176, 140624060407807, -STORE, 140624058191872, 140624058290175, -SNULL, 140624060383231, 140624060407807, -STORE, 140624058290176, 140624060383231, -STORE, 140624060383232, 140624060407807, -SNULL, 140624060383232, 140624060391423, -STORE, 140624060391424, 140624060407807, -STORE, 140624060383232, 140624060391423, -ERASE, 140624060383232, 140624060391423, -STORE, 140624060383232, 140624060391423, -ERASE, 140624060391424, 140624060407807, -STORE, 140624060391424, 140624060407807, -STORE, 140624054394880, 140624058191871, -SNULL, 140624054394880, 140624056053759, -STORE, 140624056053760, 140624058191871, -STORE, 140624054394880, 140624056053759, -SNULL, 140624058150911, 140624058191871, -STORE, 140624056053760, 140624058150911, -STORE, 140624058150912, 140624058191871, -SNULL, 140624058150912, 140624058175487, -STORE, 140624058175488, 140624058191871, -STORE, 140624058150912, 140624058175487, -ERASE, 140624058150912, 140624058175487, -STORE, 140624058150912, 140624058175487, -ERASE, 140624058175488, 140624058191871, -STORE, 140624058175488, 140624058191871, -STORE, 140624062603264, 140624062619647, -SNULL, 140624058167295, 140624058175487, -STORE, 140624058150912, 140624058167295, -STORE, 140624058167296, 140624058175487, -SNULL, 140624060387327, 140624060391423, -STORE, 140624060383232, 140624060387327, -STORE, 140624060387328, 140624060391423, -SNULL, 94577125887999, 94577125892095, -STORE, 94577125883904, 94577125887999, -STORE, 94577125888000, 94577125892095, -SNULL, 140624062652415, 140624062656511, -STORE, 140624062648320, 140624062652415, -STORE, 140624062652416, 140624062656511, -ERASE, 140624062619648, 140624062648319, -STORE, 94577157709824, 94577157844991, -STORE, 140624046002176, 140624054394879, -SNULL, 140624046006271, 140624054394879, -STORE, 140624046002176, 140624046006271, -STORE, 140624046006272, 140624054394879, -STORE, 140624037609472, 140624046002175, -STORE, 140623903391744, 140624037609471, -SNULL, 140623903391744, 140623940157439, -STORE, 140623940157440, 140624037609471, -STORE, 140623903391744, 140623940157439, -ERASE, 140623903391744, 140623940157439, -SNULL, 140624007266303, 140624037609471, -STORE, 140623940157440, 140624007266303, -STORE, 140624007266304, 140624037609471, -ERASE, 140624007266304, 140624037609471, -SNULL, 140623940292607, 140624007266303, -STORE, 140623940157440, 140623940292607, -STORE, 140623940292608, 140624007266303, -SNULL, 140624037613567, 140624046002175, -STORE, 140624037609472, 140624037613567, -STORE, 140624037613568, 140624046002175, -STORE, 140624029216768, 140624037609471, -SNULL, 140624029220863, 140624037609471, -STORE, 140624029216768, 140624029220863, -STORE, 140624029220864, 140624037609471, -STORE, 140624020824064, 140624029216767, -SNULL, 140624020828159, 140624029216767, -STORE, 140624020824064, 140624020828159, -STORE, 140624020828160, 140624029216767, -STORE, 140624012431360, 140624020824063, -SNULL, 140624012435455, 140624020824063, -STORE, 140624012431360, 140624012435455, -STORE, 140624012435456, 140624020824063, -STORE, 140623931764736, 140623940157439, -STORE, 140623797547008, 140623931764735, -SNULL, 140623797547008, 140623805939711, -STORE, 140623805939712, 140623931764735, -STORE, 140623797547008, 140623805939711, -ERASE, 140623797547008, 140623805939711, -SNULL, 140623873048575, 140623931764735, -STORE, 140623805939712, 140623873048575, -STORE, 140623873048576, 140623931764735, -ERASE, 140623873048576, 140623931764735, -STORE, 140623923372032, 140623940157439, -STORE, 140623914979328, 140623940157439, -STORE, 140623906586624, 140623940157439, -STORE, 140623671721984, 140623873048575, -SNULL, 140623738830847, 140623873048575, -STORE, 140623671721984, 140623738830847, -STORE, 140623738830848, 140623873048575, -SNULL, 140623738830848, 140623805939711, -STORE, 140623805939712, 140623873048575, -STORE, 140623738830848, 140623805939711, -ERASE, 140623738830848, 140623805939711, -SNULL, 140623806074879, 140623873048575, -STORE, 140623805939712, 140623806074879, -STORE, 140623806074880, 140623873048575, -SNULL, 140623906586624, 140623931764735, -STORE, 140623931764736, 140623940157439, -STORE, 140623906586624, 140623931764735, -SNULL, 140623931768831, 140623940157439, -STORE, 140623931764736, 140623931768831, -STORE, 140623931768832, 140623940157439, -STORE, 140623537504256, 140623738830847, -SNULL, 140623537504256, 140623671721983, -STORE, 140623671721984, 140623738830847, -STORE, 140623537504256, 140623671721983, -SNULL, 140623671857151, 140623738830847, -STORE, 140623671721984, 140623671857151, -STORE, 140623671857152, 140623738830847, -SNULL, 140623604613119, 140623671721983, -STORE, 140623537504256, 140623604613119, -STORE, 140623604613120, 140623671721983, -ERASE, 140623604613120, 140623671721983, -SNULL, 140623537639423, 140623604613119, -STORE, 140623537504256, 140623537639423, -STORE, 140623537639424, 140623604613119, -STORE, 140623537639424, 140623671721983, -SNULL, 140623537639424, 140623604613119, -STORE, 140623604613120, 140623671721983, -STORE, 140623537639424, 140623604613119, -SNULL, 140623604748287, 140623671721983, -STORE, 140623604613120, 140623604748287, -STORE, 140623604748288, 140623671721983, -STORE, 140623898193920, 140623931764735, -SNULL, 140623898193920, 140623923372031, -STORE, 140623923372032, 140623931764735, -STORE, 140623898193920, 140623923372031, -SNULL, 140623923376127, 140623931764735, -STORE, 140623923372032, 140623923376127, -STORE, 140623923376128, 140623931764735, -STORE, 140623889801216, 140623923372031, -SNULL, 140623889801216, 140623898193919, -STORE, 140623898193920, 140623923372031, -STORE, 140623889801216, 140623898193919, -SNULL, 140623898198015, 140623923372031, -STORE, 140623898193920, 140623898198015, -STORE, 140623898198016, 140623923372031, -SNULL, 140623889805311, 140623898193919, -STORE, 140623889801216, 140623889805311, -STORE, 140623889805312, 140623898193919, -SNULL, 140623898198016, 140623906586623, -STORE, 140623906586624, 140623923372031, -STORE, 140623898198016, 140623906586623, -SNULL, 140623906590719, 140623923372031, -STORE, 140623906586624, 140623906590719, -STORE, 140623906590720, 140623923372031, -STORE, 140623881408512, 140623889801215, -SNULL, 140623906590720, 140623914979327, -STORE, 140623914979328, 140623923372031, -STORE, 140623906590720, 140623914979327, -SNULL, 140623914983423, 140623923372031, -STORE, 140623914979328, 140623914983423, -STORE, 140623914983424, 140623923372031, -SNULL, 140623881412607, 140623889801215, -STORE, 140623881408512, 140623881412607, -STORE, 140623881412608, 140623889801215, -STORE, 140623797547008, 140623805939711, -STORE, 140623789154304, 140623805939711, -STORE, 140623780761600, 140623805939711, -SNULL, 140623780761600, 140623789154303, -STORE, 140623789154304, 140623805939711, -STORE, 140623780761600, 140623789154303, -SNULL, 140623789158399, 140623805939711, -STORE, 140623789154304, 140623789158399, -STORE, 140623789158400, 140623805939711, -STORE, 140623772368896, 140623789154303, -STORE, 140623763976192, 140623789154303, -SNULL, 140623763976192, 140623780761599, -STORE, 140623780761600, 140623789154303, -STORE, 140623763976192, 140623780761599, -SNULL, 140623780765695, 140623789154303, -STORE, 140623780761600, 140623780765695, -STORE, 140623780765696, 140623789154303, -SNULL, 140623789158400, 140623797547007, -STORE, 140623797547008, 140623805939711, -STORE, 140623789158400, 140623797547007, -SNULL, 140623797551103, 140623805939711, -STORE, 140623797547008, 140623797551103, -STORE, 140623797551104, 140623805939711, -SNULL, 140623763976192, 140623772368895, -STORE, 140623772368896, 140623780761599, -STORE, 140623763976192, 140623772368895, -SNULL, 140623772372991, 140623780761599, -STORE, 140623772368896, 140623772372991, -STORE, 140623772372992, 140623780761599, -SNULL, 140623763980287, 140623772368895, -STORE, 140623763976192, 140623763980287, -STORE, 140623763980288, 140623772368895, -STORE, 140623755583488, 140623763976191, -STORE, 140623747190784, 140623763976191, -SNULL, 140623747190784, 140623755583487, -STORE, 140623755583488, 140623763976191, -STORE, 140623747190784, 140623755583487, -SNULL, 140623755587583, 140623763976191, -STORE, 140623755583488, 140623755587583, -STORE, 140623755587584, 140623763976191, -STORE, 140623529111552, 140623537504255, -SNULL, 140623747194879, 140623755583487, -STORE, 140623747190784, 140623747194879, -STORE, 140623747194880, 140623755583487, -SNULL, 140623529115647, 140623537504255, -STORE, 140623529111552, 140623529115647, -STORE, 140623529115648, 140623537504255, -STORE, 140623520718848, 140623529111551, -SNULL, 140623520722943, 140623529111551, -STORE, 140623520718848, 140623520722943, -STORE, 140623520722944, 140623529111551, -STORE, 140623512326144, 140623520718847, -STORE, 140623503933440, 140623520718847, -STORE, 140623495540736, 140623520718847, -STORE, 140623361323008, 140623495540735, -STORE, 140623227105280, 140623495540735, -STORE, 140623218712576, 140623227105279, -STORE, 140623084494848, 140623218712575, -STORE, 140623076102144, 140623084494847, -STORE, 140622941884416, 140623076102143, -SNULL, 140622941884416, 140623000633343, -STORE, 140623000633344, 140623076102143, -STORE, 140622941884416, 140623000633343, -ERASE, 140622941884416, 140623000633343, -STORE, 140622992240640, 140623000633343, -STORE, 140622983847936, 140623000633343, -STORE, 140622849630208, 140622983847935, -STORE, 140622841237504, 140622849630207, -SNULL, 140622849630208, 140622866415615, -STORE, 140622866415616, 140622983847935, -STORE, 140622849630208, 140622866415615, -ERASE, 140622849630208, 140622866415615, -STORE, 140622858022912, 140622866415615, -SNULL, 140622933524479, 140622983847935, -STORE, 140622866415616, 140622933524479, -STORE, 140622933524480, 140622983847935, -ERASE, 140622933524480, 140622983847935, -STORE, 140622975455232, 140623000633343, -STORE, 140622707019776, 140622841237503, -STORE, 140622967062528, 140623000633343, -STORE, 140622572802048, 140622841237503, -STORE, 140622958669824, 140623000633343, -STORE, 140622438584320, 140622841237503, -STORE, 140622950277120, 140623000633343, -SNULL, 140622858027007, 140622866415615, -STORE, 140622858022912, 140622858027007, -STORE, 140622858027008, 140622866415615, -STORE, 140622941884416, 140623000633343, -STORE, 140622841237504, 140622858022911, -SNULL, 140622841237504, 140622849630207, -STORE, 140622849630208, 140622858022911, -STORE, 140622841237504, 140622849630207, -SNULL, 140622849634303, 140622858022911, -STORE, 140622849630208, 140622849634303, -STORE, 140622849634304, 140622858022911, -STORE, 140622430191616, 140622438584319, -SNULL, 140622430195711, 140622438584319, -STORE, 140622430191616, 140622430195711, -STORE, 140622430195712, 140622438584319, -SNULL, 140623361323007, 140623495540735, -STORE, 140623227105280, 140623361323007, -STORE, 140623361323008, 140623495540735, -SNULL, 140623361323008, 140623403286527, -STORE, 140623403286528, 140623495540735, -STORE, 140623361323008, 140623403286527, -ERASE, 140623361323008, 140623403286527, -SNULL, 140623470395391, 140623495540735, -STORE, 140623403286528, 140623470395391, -STORE, 140623470395392, 140623495540735, -ERASE, 140623470395392, 140623495540735, -SNULL, 140623227105280, 140623269068799, -STORE, 140623269068800, 140623361323007, -STORE, 140623227105280, 140623269068799, -ERASE, 140623227105280, 140623269068799, -SNULL, 140623084494848, 140623134851071, -STORE, 140623134851072, 140623218712575, -STORE, 140623084494848, 140623134851071, -ERASE, 140623084494848, 140623134851071, -SNULL, 140623201959935, 140623218712575, -STORE, 140623134851072, 140623201959935, -STORE, 140623201959936, 140623218712575, -ERASE, 140623201959936, 140623218712575, -SNULL, 140623067742207, 140623076102143, -STORE, 140623000633344, 140623067742207, -STORE, 140623067742208, 140623076102143, -ERASE, 140623067742208, 140623076102143, -STORE, 140622295973888, 140622430191615, -SNULL, 140622295973888, 140622329544703, -STORE, 140622329544704, 140622430191615, -STORE, 140622295973888, 140622329544703, -ERASE, 140622295973888, 140622329544703, -SNULL, 140622866550783, 140622933524479, -STORE, 140622866415616, 140622866550783, -STORE, 140622866550784, 140622933524479, -SNULL, 140622707019775, 140622841237503, -STORE, 140622438584320, 140622707019775, -STORE, 140622707019776, 140622841237503, -SNULL, 140622707019776, 140622732197887, -STORE, 140622732197888, 140622841237503, -STORE, 140622707019776, 140622732197887, -ERASE, 140622707019776, 140622732197887, -SNULL, 140622799306751, 140622841237503, -STORE, 140622732197888, 140622799306751, -STORE, 140622799306752, 140622841237503, -ERASE, 140622799306752, 140622841237503, -SNULL, 140622572802047, 140622707019775, -STORE, 140622438584320, 140622572802047, -STORE, 140622572802048, 140622707019775, -SNULL, 140622572802048, 140622597980159, -STORE, 140622597980160, 140622707019775, -STORE, 140622572802048, 140622597980159, -ERASE, 140622572802048, 140622597980159, -SNULL, 140622438584320, 140622463762431, -STORE, 140622463762432, 140622572802047, -STORE, 140622438584320, 140622463762431, -ERASE, 140622438584320, 140622463762431, -SNULL, 140622530871295, 140622572802047, -STORE, 140622463762432, 140622530871295, -STORE, 140622530871296, 140622572802047, -ERASE, 140622530871296, 140622572802047, -STORE, 140622195326976, 140622430191615, -SNULL, 140622262435839, 140622430191615, -STORE, 140622195326976, 140622262435839, -STORE, 140622262435840, 140622430191615, -SNULL, 140622262435840, 140622329544703, -STORE, 140622329544704, 140622430191615, -STORE, 140622262435840, 140622329544703, -ERASE, 140622262435840, 140622329544703, -SNULL, 140622841241599, 140622849630207, -STORE, 140622841237504, 140622841241599, -STORE, 140622841241600, 140622849630207, -STORE, 140623487148032, 140623520718847, -STORE, 140623478755328, 140623520718847, -SNULL, 140622941884416, 140622983847935, -STORE, 140622983847936, 140623000633343, -STORE, 140622941884416, 140622983847935, -SNULL, 140622983852031, 140623000633343, -STORE, 140622983847936, 140622983852031, -STORE, 140622983852032, 140623000633343, -STORE, 140623394893824, 140623403286527, -SNULL, 140623394897919, 140623403286527, -STORE, 140623394893824, 140623394897919, -STORE, 140623394897920, 140623403286527, -SNULL, 140623403421695, 140623470395391, -STORE, 140623403286528, 140623403421695, -STORE, 140623403421696, 140623470395391, -SNULL, 140623478755328, 140623503933439, -STORE, 140623503933440, 140623520718847, -STORE, 140623478755328, 140623503933439, -SNULL, 140623503937535, 140623520718847, -STORE, 140623503933440, 140623503937535, -STORE, 140623503937536, 140623520718847, -SNULL, 140623336177663, 140623361323007, -STORE, 140623269068800, 140623336177663, -STORE, 140623336177664, 140623361323007, -ERASE, 140623336177664, 140623361323007, -SNULL, 140623269203967, 140623336177663, -STORE, 140623269068800, 140623269203967, -STORE, 140623269203968, 140623336177663, -SNULL, 140623134986239, 140623201959935, -STORE, 140623134851072, 140623134986239, -STORE, 140623134986240, 140623201959935, -SNULL, 140623000768511, 140623067742207, -STORE, 140623000633344, 140623000768511, -STORE, 140623000768512, 140623067742207, -SNULL, 140622396653567, 140622430191615, -STORE, 140622329544704, 140622396653567, -STORE, 140622396653568, 140622430191615, -ERASE, 140622396653568, 140622430191615, -SNULL, 140622732333055, 140622799306751, -STORE, 140622732197888, 140622732333055, -STORE, 140622732333056, 140622799306751, -SNULL, 140622941884416, 140622975455231, -STORE, 140622975455232, 140622983847935, -STORE, 140622941884416, 140622975455231, -SNULL, 140622975459327, 140622983847935, -STORE, 140622975455232, 140622975459327, -STORE, 140622975459328, 140622983847935, -SNULL, 140622665089023, 140622707019775, -STORE, 140622597980160, 140622665089023, -STORE, 140622665089024, 140622707019775, -ERASE, 140622665089024, 140622707019775, -SNULL, 140622598115327, 140622665089023, -STORE, 140622597980160, 140622598115327, -STORE, 140622598115328, 140622665089023, -SNULL, 140622463897599, 140622530871295, -STORE, 140622463762432, 140622463897599, -STORE, 140622463897600, 140622530871295, -SNULL, 140622195462143, 140622262435839, -STORE, 140622195326976, 140622195462143, -STORE, 140622195462144, 140622262435839, -STORE, 140623386501120, 140623394893823, -SNULL, 140622941884416, 140622950277119, -STORE, 140622950277120, 140622975455231, -STORE, 140622941884416, 140622950277119, -SNULL, 140622950281215, 140622975455231, -STORE, 140622950277120, 140622950281215, -STORE, 140622950281216, 140622975455231, -SNULL, 140622941888511, 140622950277119, -STORE, 140622941884416, 140622941888511, -STORE, 140622941888512, 140622950277119, -STORE, 140623378108416, 140623394893823, -SNULL, 140623478755328, 140623495540735, -STORE, 140623495540736, 140623503933439, -STORE, 140623478755328, 140623495540735, -SNULL, 140623495544831, 140623503933439, -STORE, 140623495540736, 140623495544831, -STORE, 140623495544832, 140623503933439, -SNULL, 140623478755328, 140623487148031, -STORE, 140623487148032, 140623495540735, -STORE, 140623478755328, 140623487148031, -SNULL, 140623487152127, 140623495540735, -STORE, 140623487148032, 140623487152127, -STORE, 140623487152128, 140623495540735, -SNULL, 140623218716671, 140623227105279, -STORE, 140623218712576, 140623218716671, -STORE, 140623218716672, 140623227105279, -SNULL, 140623076106239, 140623084494847, -STORE, 140623076102144, 140623076106239, -STORE, 140623076106240, 140623084494847, -SNULL, 140622329679871, 140622396653567, -STORE, 140622329544704, 140622329679871, -STORE, 140622329679872, 140622396653567, -SNULL, 140622950281216, 140622958669823, -STORE, 140622958669824, 140622975455231, -STORE, 140622950281216, 140622958669823, -SNULL, 140622958673919, 140622975455231, -STORE, 140622958669824, 140622958673919, -STORE, 140622958673920, 140622975455231, -SNULL, 140623503937536, 140623512326143, -STORE, 140623512326144, 140623520718847, -STORE, 140623503937536, 140623512326143, -SNULL, 140623512330239, 140623520718847, -STORE, 140623512326144, 140623512330239, -STORE, 140623512330240, 140623520718847, -SNULL, 140623378108416, 140623386501119, -STORE, 140623386501120, 140623394893823, -STORE, 140623378108416, 140623386501119, -SNULL, 140623386505215, 140623394893823, -STORE, 140623386501120, 140623386505215, -STORE, 140623386505216, 140623394893823, -STORE, 140623369715712, 140623386501119, -STORE, 140623361323008, 140623386501119, -STORE, 140623352930304, 140623386501119, -SNULL, 140623352930304, 140623361323007, -STORE, 140623361323008, 140623386501119, -STORE, 140623352930304, 140623361323007, -SNULL, 140623361327103, 140623386501119, -STORE, 140623361323008, 140623361327103, -STORE, 140623361327104, 140623386501119, -SNULL, 140623478759423, 140623487148031, -STORE, 140623478755328, 140623478759423, -STORE, 140623478759424, 140623487148031, -STORE, 140623344537600, 140623361323007, -STORE, 140623260676096, 140623269068799, -SNULL, 140622958673920, 140622967062527, -STORE, 140622967062528, 140622975455231, -STORE, 140622958673920, 140622967062527, -SNULL, 140622967066623, 140622975455231, -STORE, 140622967062528, 140622967066623, -STORE, 140622967066624, 140622975455231, -STORE, 140623252283392, 140623269068799, -STORE, 140623243890688, 140623269068799, -SNULL, 140622983852032, 140622992240639, -STORE, 140622992240640, 140623000633343, -STORE, 140622983852032, 140622992240639, -SNULL, 140622992244735, 140623000633343, -STORE, 140622992240640, 140622992244735, -STORE, 140622992244736, 140623000633343, -STORE, 140623235497984, 140623269068799, -STORE, 140623218716672, 140623235497983, -STORE, 140623210319872, 140623218712575, -STORE, 140623126458368, 140623134851071, -SNULL, 140623210323967, 140623218712575, -STORE, 140623210319872, 140623210323967, -STORE, 140623210323968, 140623218712575, -SNULL, 140623218716672, 140623227105279, -STORE, 140623227105280, 140623235497983, -STORE, 140623218716672, 140623227105279, -SNULL, 140623227109375, 140623235497983, -STORE, 140623227105280, 140623227109375, -STORE, 140623227109376, 140623235497983, -STORE, 140623118065664, 140623134851071, -STORE, 140623109672960, 140623134851071, -SNULL, 140623109677055, 140623134851071, -STORE, 140623109672960, 140623109677055, -STORE, 140623109677056, 140623134851071, -STORE, 140623101280256, 140623109672959, -STORE, 140623092887552, 140623109672959, -SNULL, 140623092887552, 140623101280255, -STORE, 140623101280256, 140623109672959, -STORE, 140623092887552, 140623101280255, -SNULL, 140623101284351, 140623109672959, -STORE, 140623101280256, 140623101284351, -STORE, 140623101284352, 140623109672959, -SNULL, 140623361327104, 140623378108415, -STORE, 140623378108416, 140623386501119, -STORE, 140623361327104, 140623378108415, -SNULL, 140623378112511, 140623386501119, -STORE, 140623378108416, 140623378112511, -STORE, 140623378112512, 140623386501119, -SNULL, 140623235497984, 140623243890687, -STORE, 140623243890688, 140623269068799, -STORE, 140623235497984, 140623243890687, -SNULL, 140623243894783, 140623269068799, -STORE, 140623243890688, 140623243894783, -STORE, 140623243894784, 140623269068799, -SNULL, 140623361327104, 140623369715711, -STORE, 140623369715712, 140623378108415, -STORE, 140623361327104, 140623369715711, -SNULL, 140623369719807, 140623378108415, -STORE, 140623369715712, 140623369719807, -STORE, 140623369719808, 140623378108415, -SNULL, 140623243894784, 140623252283391, -STORE, 140623252283392, 140623269068799, -STORE, 140623243894784, 140623252283391, -SNULL, 140623252287487, 140623269068799, -STORE, 140623252283392, 140623252287487, -STORE, 140623252287488, 140623269068799, -SNULL, 140623235502079, 140623243890687, -STORE, 140623235497984, 140623235502079, -STORE, 140623235502080, 140623243890687, -SNULL, 140623344541695, 140623361323007, -STORE, 140623344537600, 140623344541695, -STORE, 140623344541696, 140623361323007, -STORE, 140623076106240, 140623092887551, -SNULL, 140623076106240, 140623084494847, -STORE, 140623084494848, 140623092887551, -STORE, 140623076106240, 140623084494847, -SNULL, 140623084498943, 140623092887551, -STORE, 140623084494848, 140623084498943, -STORE, 140623084498944, 140623092887551, -SNULL, 140623344541696, 140623352930303, -STORE, 140623352930304, 140623361323007, -STORE, 140623344541696, 140623352930303, -SNULL, 140623352934399, 140623361323007, -STORE, 140623352930304, 140623352934399, -STORE, 140623352934400, 140623361323007, -SNULL, 140623109677056, 140623118065663, -STORE, 140623118065664, 140623134851071, -STORE, 140623109677056, 140623118065663, -SNULL, 140623118069759, 140623134851071, -STORE, 140623118065664, 140623118069759, -STORE, 140623118069760, 140623134851071, -STORE, 140622832844800, 140622841237503, -STORE, 140622824452096, 140622841237503, -SNULL, 140622824452096, 140622832844799, -STORE, 140622832844800, 140622841237503, -STORE, 140622824452096, 140622832844799, -SNULL, 140622832848895, 140622841237503, -STORE, 140622832844800, 140622832848895, -STORE, 140622832848896, 140622841237503, -STORE, 140622816059392, 140622832844799, -SNULL, 140623092891647, 140623101280255, -STORE, 140623092887552, 140623092891647, -STORE, 140623092891648, 140623101280255, -SNULL, 140623118069760, 140623126458367, -STORE, 140623126458368, 140623134851071, -STORE, 140623118069760, 140623126458367, -SNULL, 140623126462463, 140623134851071, -STORE, 140623126458368, 140623126462463, -STORE, 140623126462464, 140623134851071, -SNULL, 140623252287488, 140623260676095, -STORE, 140623260676096, 140623269068799, -STORE, 140623252287488, 140623260676095, -SNULL, 140623260680191, 140623269068799, -STORE, 140623260676096, 140623260680191, -STORE, 140623260680192, 140623269068799, -STORE, 140622807666688, 140622832844799, -STORE, 140622723805184, 140622732197887, -STORE, 140622715412480, 140622732197887, -STORE, 140622707019776, 140622732197887, -SNULL, 140622707023871, 140622732197887, -STORE, 140622707019776, 140622707023871, -STORE, 140622707023872, 140622732197887, -STORE, 140622698627072, 140622707019775, -STORE, 140622690234368, 140622707019775, -SNULL, 140622690238463, 140622707019775, -STORE, 140622690234368, 140622690238463, -STORE, 140622690238464, 140622707019775, -SNULL, 140622807666688, 140622816059391, -STORE, 140622816059392, 140622832844799, -STORE, 140622807666688, 140622816059391, -SNULL, 140622816063487, 140622832844799, -STORE, 140622816059392, 140622816063487, -STORE, 140622816063488, 140622832844799, -STORE, 140622681841664, 140622690234367, -STORE, 140622673448960, 140622690234367, -SNULL, 140622673453055, 140622690234367, -STORE, 140622673448960, 140622673453055, -STORE, 140622673453056, 140622690234367, -STORE, 140622589587456, 140622597980159, -SNULL, 140622807670783, 140622816059391, -STORE, 140622807666688, 140622807670783, -STORE, 140622807670784, 140622816059391, -STORE, 140622581194752, 140622597980159, -SNULL, 140622581198847, 140622597980159, -STORE, 140622581194752, 140622581198847, -STORE, 140622581198848, 140622597980159, -SNULL, 140622816063488, 140622824452095, -STORE, 140622824452096, 140622832844799, -STORE, 140622816063488, 140622824452095, -SNULL, 140622824456191, 140622832844799, -STORE, 140622824452096, 140622824456191, -STORE, 140622824456192, 140622832844799, -STORE, 140622572802048, 140622581194751, -SNULL, 140622572806143, 140622581194751, -STORE, 140622572802048, 140622572806143, -STORE, 140622572806144, 140622581194751, -STORE, 140622564409344, 140622572802047, -STORE, 140622556016640, 140622572802047, -SNULL, 140622556016640, 140622564409343, -STORE, 140622564409344, 140622572802047, -STORE, 140622556016640, 140622564409343, -SNULL, 140622564413439, 140622572802047, -STORE, 140622564409344, 140622564413439, -STORE, 140622564413440, 140622572802047, -SNULL, 140622690238464, 140622698627071, -STORE, 140622698627072, 140622707019775, -STORE, 140622690238464, 140622698627071, -SNULL, 140622698631167, 140622707019775, -STORE, 140622698627072, 140622698631167, -STORE, 140622698631168, 140622707019775, -SNULL, 140622707023872, 140622723805183, -STORE, 140622723805184, 140622732197887, -STORE, 140622707023872, 140622723805183, -SNULL, 140622723809279, 140622732197887, -STORE, 140622723805184, 140622723809279, -STORE, 140622723809280, 140622732197887, -SNULL, 140622707023872, 140622715412479, -STORE, 140622715412480, 140622723805183, -STORE, 140622707023872, 140622715412479, -SNULL, 140622715416575, 140622723805183, -STORE, 140622715412480, 140622715416575, -STORE, 140622715416576, 140622723805183, -STORE, 140622547623936, 140622564409343, -SNULL, 140622547628031, 140622564409343, -STORE, 140622547623936, 140622547628031, -STORE, 140622547628032, 140622564409343, -STORE, 140622539231232, 140622547623935, -SNULL, 140622539235327, 140622547623935, -STORE, 140622539231232, 140622539235327, -STORE, 140622539235328, 140622547623935, -SNULL, 140622581198848, 140622589587455, -STORE, 140622589587456, 140622597980159, -STORE, 140622581198848, 140622589587455, -SNULL, 140622589591551, 140622597980159, -STORE, 140622589587456, 140622589591551, -STORE, 140622589591552, 140622597980159, -STORE, 140622455369728, 140622463762431, -SNULL, 140622455373823, 140622463762431, -STORE, 140622455369728, 140622455373823, -STORE, 140622455373824, 140622463762431, -STORE, 140622446977024, 140622455369727, -SNULL, 140622446981119, 140622455369727, -STORE, 140622446977024, 140622446981119, -STORE, 140622446981120, 140622455369727, -SNULL, 140622547628032, 140622556016639, -STORE, 140622556016640, 140622564409343, -STORE, 140622547628032, 140622556016639, -SNULL, 140622556020735, 140622564409343, -STORE, 140622556016640, 140622556020735, -STORE, 140622556020736, 140622564409343, -STORE, 140622430195712, 140622446977023, -STORE, 140622421798912, 140622430191615, -SNULL, 140622430195712, 140622438584319, -STORE, 140622438584320, 140622446977023, -STORE, 140622430195712, 140622438584319, -SNULL, 140622438588415, 140622446977023, -STORE, 140622438584320, 140622438588415, -STORE, 140622438588416, 140622446977023, -STORE, 140622413406208, 140622430191615, -STORE, 140622405013504, 140622430191615, -SNULL, 140622405013504, 140622413406207, -STORE, 140622413406208, 140622430191615, -STORE, 140622405013504, 140622413406207, -SNULL, 140622413410303, 140622430191615, -STORE, 140622413406208, 140622413410303, -STORE, 140622413410304, 140622430191615, -SNULL, 140622673453056, 140622681841663, -STORE, 140622681841664, 140622690234367, -STORE, 140622673453056, 140622681841663, -SNULL, 140622681845759, 140622690234367, -STORE, 140622681841664, 140622681845759, -STORE, 140622681845760, 140622690234367, -STORE, 140622321152000, 140622329544703, -SNULL, 140622413410304, 140622421798911, -STORE, 140622421798912, 140622430191615, -STORE, 140622413410304, 140622421798911, -SNULL, 140622421803007, 140622430191615, -STORE, 140622421798912, 140622421803007, -STORE, 140622421803008, 140622430191615, -STORE, 140622312759296, 140622329544703, -SNULL, 140622312763391, 140622329544703, -STORE, 140622312759296, 140622312763391, -STORE, 140622312763392, 140622329544703, -SNULL, 140622405017599, 140622413406207, -STORE, 140622405013504, 140622405017599, -STORE, 140622405017600, 140622413406207, -STORE, 140622304366592, 140622312759295, -SNULL, 140622304370687, 140622312759295, -STORE, 140622304366592, 140622304370687, -STORE, 140622304370688, 140622312759295, -SNULL, 140622312763392, 140622321151999, -STORE, 140622321152000, 140622329544703, -STORE, 140622312763392, 140622321151999, -SNULL, 140622321156095, 140622329544703, -STORE, 140622321152000, 140622321156095, -STORE, 140622321156096, 140622329544703, -STORE, 140624062619648, 140624062648319, -STORE, 140624010240000, 140624012431359, -SNULL, 140624010240000, 140624010330111, -STORE, 140624010330112, 140624012431359, -STORE, 140624010240000, 140624010330111, -SNULL, 140624012423167, 140624012431359, -STORE, 140624010330112, 140624012423167, -STORE, 140624012423168, 140624012431359, -ERASE, 140624012423168, 140624012431359, -STORE, 140624012423168, 140624012431359, -SNULL, 140624012427263, 140624012431359, -STORE, 140624012423168, 140624012427263, -STORE, 140624012427264, 140624012431359, -ERASE, 140624062619648, 140624062648319, -ERASE, 140622849630208, 140622849634303, -ERASE, 140622849634304, 140622858022911, -ERASE, 140623394893824, 140623394897919, -ERASE, 140623394897920, 140623403286527, -ERASE, 140623361323008, 140623361327103, -ERASE, 140623361327104, 140623369715711, -ERASE, 140623084494848, 140623084498943, -ERASE, 140623084498944, 140623092887551, -ERASE, 140623931764736, 140623931768831, -ERASE, 140623931768832, 140623940157439, -ERASE, 140622841237504, 140622841241599, -ERASE, 140622841241600, 140622849630207, -ERASE, 140623487148032, 140623487152127, -ERASE, 140623487152128, 140623495540735, -ERASE, 140623109672960, 140623109677055, -ERASE, 140623109677056, 140623118065663, -ERASE, 140622983847936, 140622983852031, -ERASE, 140622983852032, 140622992240639, -ERASE, 140623352930304, 140623352934399, -ERASE, 140623352934400, 140623361323007, -ERASE, 140622564409344, 140622564413439, -ERASE, 140622564413440, 140622572802047, -ERASE, 140622430191616, 140622430195711, -ERASE, 140622430195712, 140622438584319, -ERASE, 140622958669824, 140622958673919, -ERASE, 140622958673920, 140622967062527, -ERASE, 140622992240640, 140622992244735, -ERASE, 140622992244736, 140623000633343, -ERASE, 140623227105280, 140623227109375, -ERASE, 140623227109376, 140623235497983, -ERASE, 140622321152000, 140622321156095, -ERASE, 140622321156096, 140622329544703, -ERASE, 140622858022912, 140622858027007, -ERASE, 140622858027008, 140622866415615, -ERASE, 140622975455232, 140622975459327, -ERASE, 140622975459328, 140622983847935, -ERASE, 140623378108416, 140623378112511, -ERASE, 140623378112512, 140623386501119, -ERASE, 140623495540736, 140623495544831, -ERASE, 140623495544832, 140623503933439, -ERASE, 140623118065664, 140623118069759, -ERASE, 140623118069760, 140623126458367, -ERASE, 140622572802048, 140622572806143, -ERASE, 140622572806144, 140622581194751, -ERASE, 140622421798912, 140622421803007, -ERASE, 140622421803008, 140622430191615, -ERASE, 140622967062528, 140622967066623, -ERASE, 140622967066624, 140622975455231, -ERASE, 140623252283392, 140623252287487, -ERASE, 140623252287488, 140623260676095, -ERASE, 140622673448960, 140622673453055, -ERASE, 140622673453056, 140622681841663, -ERASE, 140623076102144, 140623076106239, -ERASE, 140623076106240, 140623084494847, -ERASE, 140623101280256, 140623101284351, -ERASE, 140623101284352, 140623109672959, -ERASE, 140622715412480, 140622715416575, -ERASE, 140622715416576, 140622723805183, -ERASE, 140622405013504, 140622405017599, -ERASE, 140622405017600, 140622413406207, -ERASE, 140623478755328, 140623478759423, -ERASE, 140623478759424, 140623487148031, -ERASE, 140623906586624, 140623906590719, -ERASE, 140623906590720, 140623914979327, -ERASE, 140622950277120, 140622950281215, -ERASE, 140622950281216, 140622958669823, - }; - unsigned long set32[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140731244212224, 140737488351231, -SNULL, 140731244216319, 140737488351231, -STORE, 140731244212224, 140731244216319, -STORE, 140731244081152, 140731244216319, -STORE, 94427773984768, 94427776237567, -SNULL, 94427774115839, 94427776237567, -STORE, 94427773984768, 94427774115839, -STORE, 94427774115840, 94427776237567, -ERASE, 94427774115840, 94427776237567, -STORE, 94427776208896, 94427776217087, -STORE, 94427776217088, 94427776237567, -STORE, 140401464893440, 140401467146239, -SNULL, 140401465036799, 140401467146239, -STORE, 140401464893440, 140401465036799, -STORE, 140401465036800, 140401467146239, -ERASE, 140401465036800, 140401467146239, -STORE, 140401467133952, 140401467142143, -STORE, 140401467142144, 140401467146239, -STORE, 140731244507136, 140731244511231, -STORE, 140731244494848, 140731244507135, -STORE, 140401467105280, 140401467133951, -STORE, 140401467097088, 140401467105279, -STORE, 140401462677504, 140401464893439, -SNULL, 140401462677504, 140401462775807, -STORE, 140401462775808, 140401464893439, -STORE, 140401462677504, 140401462775807, -SNULL, 140401464868863, 140401464893439, -STORE, 140401462775808, 140401464868863, -STORE, 140401464868864, 140401464893439, -SNULL, 140401464868864, 140401464877055, -STORE, 140401464877056, 140401464893439, -STORE, 140401464868864, 140401464877055, -ERASE, 140401464868864, 140401464877055, -STORE, 140401464868864, 140401464877055, -ERASE, 140401464877056, 140401464893439, -STORE, 140401464877056, 140401464893439, -STORE, 140401458880512, 140401462677503, -SNULL, 140401458880512, 140401460539391, -STORE, 140401460539392, 140401462677503, -STORE, 140401458880512, 140401460539391, -SNULL, 140401462636543, 140401462677503, -STORE, 140401460539392, 140401462636543, -STORE, 140401462636544, 140401462677503, -SNULL, 140401462636544, 140401462661119, -STORE, 140401462661120, 140401462677503, -STORE, 140401462636544, 140401462661119, -ERASE, 140401462636544, 140401462661119, -STORE, 140401462636544, 140401462661119, -ERASE, 140401462661120, 140401462677503, -STORE, 140401462661120, 140401462677503, -STORE, 140401467088896, 140401467105279, -SNULL, 140401462652927, 140401462661119, -STORE, 140401462636544, 140401462652927, -STORE, 140401462652928, 140401462661119, -SNULL, 140401464872959, 140401464877055, -STORE, 140401464868864, 140401464872959, -STORE, 140401464872960, 140401464877055, -SNULL, 94427776212991, 94427776217087, -STORE, 94427776208896, 94427776212991, -STORE, 94427776212992, 94427776217087, -SNULL, 140401467138047, 140401467142143, -STORE, 140401467133952, 140401467138047, -STORE, 140401467138048, 140401467142143, -ERASE, 140401467105280, 140401467133951, -STORE, 94427784683520, 94427784818687, -STORE, 140401450487808, 140401458880511, -SNULL, 140401450491903, 140401458880511, -STORE, 140401450487808, 140401450491903, -STORE, 140401450491904, 140401458880511, -STORE, 140401442095104, 140401450487807, -STORE, 140401307877376, 140401442095103, -SNULL, 140401307877376, 140401340055551, -STORE, 140401340055552, 140401442095103, -STORE, 140401307877376, 140401340055551, -ERASE, 140401307877376, 140401340055551, -SNULL, 140401407164415, 140401442095103, -STORE, 140401340055552, 140401407164415, -STORE, 140401407164416, 140401442095103, -ERASE, 140401407164416, 140401442095103, -SNULL, 140401340190719, 140401407164415, -STORE, 140401340055552, 140401340190719, -STORE, 140401340190720, 140401407164415, -SNULL, 140401442099199, 140401450487807, -STORE, 140401442095104, 140401442099199, -STORE, 140401442099200, 140401450487807, -STORE, 140401433702400, 140401442095103, -SNULL, 140401433706495, 140401442095103, -STORE, 140401433702400, 140401433706495, -STORE, 140401433706496, 140401442095103, -STORE, 140401425309696, 140401433702399, -SNULL, 140401425313791, 140401433702399, -STORE, 140401425309696, 140401425313791, -STORE, 140401425313792, 140401433702399, -STORE, 140401416916992, 140401425309695, -SNULL, 140401416921087, 140401425309695, -STORE, 140401416916992, 140401416921087, -STORE, 140401416921088, 140401425309695, -STORE, 140401408524288, 140401416916991, -STORE, 140401205837824, 140401340055551, -SNULL, 140401272946687, 140401340055551, -STORE, 140401205837824, 140401272946687, -STORE, 140401272946688, 140401340055551, -ERASE, 140401272946688, 140401340055551, -SNULL, 140401205972991, 140401272946687, -STORE, 140401205837824, 140401205972991, -STORE, 140401205972992, 140401272946687, -STORE, 140401331662848, 140401340055551, -STORE, 140401323270144, 140401340055551, -STORE, 140401138728960, 140401205837823, -STORE, 140401314877440, 140401340055551, -SNULL, 140401408528383, 140401416916991, -STORE, 140401408524288, 140401408528383, -STORE, 140401408528384, 140401416916991, -SNULL, 140401138864127, 140401205837823, -STORE, 140401138728960, 140401138864127, -STORE, 140401138864128, 140401205837823, -STORE, 140401004511232, 140401138728959, -SNULL, 140401071620095, 140401138728959, -STORE, 140401004511232, 140401071620095, -STORE, 140401071620096, 140401138728959, -ERASE, 140401071620096, 140401138728959, -STORE, 140400870293504, 140401071620095, -SNULL, 140400937402367, 140401071620095, -STORE, 140400870293504, 140400937402367, -STORE, 140400937402368, 140401071620095, -SNULL, 140400937402368, 140401004511231, -STORE, 140401004511232, 140401071620095, -STORE, 140400937402368, 140401004511231, -ERASE, 140400937402368, 140401004511231, -STORE, 140401306484736, 140401340055551, -SNULL, 140401306484736, 140401323270143, -STORE, 140401323270144, 140401340055551, -STORE, 140401306484736, 140401323270143, -SNULL, 140401323274239, 140401340055551, -STORE, 140401323270144, 140401323274239, -STORE, 140401323274240, 140401340055551, -SNULL, 140401004646399, 140401071620095, -STORE, 140401004511232, 140401004646399, -STORE, 140401004646400, 140401071620095, -SNULL, 140400870428671, 140400937402367, -STORE, 140400870293504, 140400870428671, -STORE, 140400870428672, 140400937402367, -SNULL, 140401306488831, 140401323270143, -STORE, 140401306484736, 140401306488831, -STORE, 140401306488832, 140401323270143, -STORE, 140401298092032, 140401306484735, -SNULL, 140401306488832, 140401314877439, -STORE, 140401314877440, 140401323270143, -STORE, 140401306488832, 140401314877439, -SNULL, 140401314881535, 140401323270143, -STORE, 140401314877440, 140401314881535, -STORE, 140401314881536, 140401323270143, -SNULL, 140401323274240, 140401331662847, -STORE, 140401331662848, 140401340055551, -STORE, 140401323274240, 140401331662847, -SNULL, 140401331666943, 140401340055551, -STORE, 140401331662848, 140401331666943, -STORE, 140401331666944, 140401340055551, -SNULL, 140401298096127, 140401306484735, -STORE, 140401298092032, 140401298096127, -STORE, 140401298096128, 140401306484735, -STORE, 140401289699328, 140401298092031, -STORE, 140401281306624, 140401298092031, -STORE, 140401130336256, 140401138728959, -SNULL, 140401281306624, 140401289699327, -STORE, 140401289699328, 140401298092031, -STORE, 140401281306624, 140401289699327, -SNULL, 140401289703423, 140401298092031, -STORE, 140401289699328, 140401289703423, -STORE, 140401289703424, 140401298092031, -STORE, 140401121943552, 140401138728959, -STORE, 140401113550848, 140401138728959, -SNULL, 140401281310719, 140401289699327, -STORE, 140401281306624, 140401281310719, -STORE, 140401281310720, 140401289699327, -SNULL, 140401113550848, 140401121943551, -STORE, 140401121943552, 140401138728959, -STORE, 140401113550848, 140401121943551, -SNULL, 140401121947647, 140401138728959, -STORE, 140401121943552, 140401121947647, -STORE, 140401121947648, 140401138728959, -STORE, 140401105158144, 140401121943551, -SNULL, 140401121947648, 140401130336255, -STORE, 140401130336256, 140401138728959, -STORE, 140401121947648, 140401130336255, -SNULL, 140401130340351, 140401138728959, -STORE, 140401130336256, 140401130340351, -STORE, 140401130340352, 140401138728959, -STORE, 140401096765440, 140401121943551, -SNULL, 140401096765440, 140401113550847, -STORE, 140401113550848, 140401121943551, -STORE, 140401096765440, 140401113550847, -SNULL, 140401113554943, 140401121943551, -STORE, 140401113550848, 140401113554943, -STORE, 140401113554944, 140401121943551, -STORE, 140401088372736, 140401113550847, -SNULL, 140401088372736, 140401096765439, -STORE, 140401096765440, 140401113550847, -STORE, 140401088372736, 140401096765439, -SNULL, 140401096769535, 140401113550847, -STORE, 140401096765440, 140401096769535, -STORE, 140401096769536, 140401113550847, -SNULL, 140401096769536, 140401105158143, -STORE, 140401105158144, 140401113550847, -STORE, 140401096769536, 140401105158143, -SNULL, 140401105162239, 140401113550847, -STORE, 140401105158144, 140401105162239, -STORE, 140401105162240, 140401113550847, -SNULL, 140401088376831, 140401096765439, -STORE, 140401088372736, 140401088376831, -STORE, 140401088376832, 140401096765439, -STORE, 140401079980032, 140401088372735, -STORE, 140400996118528, 140401004511231, -SNULL, 140401079984127, 140401088372735, -STORE, 140401079980032, 140401079984127, -STORE, 140401079984128, 140401088372735, -SNULL, 140400996122623, 140401004511231, -STORE, 140400996118528, 140400996122623, -STORE, 140400996122624, 140401004511231, -STORE, 140400987725824, 140400996118527, -STORE, 140400979333120, 140400996118527, -STORE, 140400803184640, 140400870293503, -SNULL, 140400803319807, 140400870293503, -STORE, 140400803184640, 140400803319807, -STORE, 140400803319808, 140400870293503, -SNULL, 140400979333120, 140400987725823, -STORE, 140400987725824, 140400996118527, -STORE, 140400979333120, 140400987725823, -SNULL, 140400987729919, 140400996118527, -STORE, 140400987725824, 140400987729919, -STORE, 140400987729920, 140400996118527, -STORE, 140400970940416, 140400987725823, -STORE, 140400962547712, 140400987725823, -STORE, 140400668966912, 140400803184639, -STORE, 140400954155008, 140400987725823, -STORE, 140400945762304, 140400987725823, -STORE, 140400660574208, 140400668966911, -STORE, 140400593465344, 140400660574207, -STORE, 140400585072640, 140400593465343, -STORE, 140400450854912, 140400585072639, -STORE, 140400442462208, 140400450854911, -STORE, 140400434069504, 140400450854911, -STORE, 140400299851776, 140400434069503, -STORE, 140400291459072, 140400299851775, -SNULL, 140400299851776, 140400333422591, -STORE, 140400333422592, 140400434069503, -STORE, 140400299851776, 140400333422591, -ERASE, 140400299851776, 140400333422591, -STORE, 140400325029888, 140400333422591, -STORE, 140400157241344, 140400291459071, -STORE, 140400316637184, 140400333422591, -STORE, 140400308244480, 140400333422591, -STORE, 140400023023616, 140400291459071, -STORE, 140400291459072, 140400333422591, -SNULL, 140400023023616, 140400064987135, -STORE, 140400064987136, 140400291459071, -STORE, 140400023023616, 140400064987135, -ERASE, 140400023023616, 140400064987135, -STORE, 140400056594432, 140400064987135, -SNULL, 140400056598527, 140400064987135, -STORE, 140400056594432, 140400056598527, -STORE, 140400056598528, 140400064987135, -STORE, 140399989485568, 140400056594431, -SNULL, 140400291459072, 140400316637183, -STORE, 140400316637184, 140400333422591, -STORE, 140400291459072, 140400316637183, -SNULL, 140400316641279, 140400333422591, -STORE, 140400316637184, 140400316641279, -STORE, 140400316641280, 140400333422591, -STORE, 140399855267840, 140400056594431, -SNULL, 140399855267840, 140399863660543, -STORE, 140399863660544, 140400056594431, -STORE, 140399855267840, 140399863660543, -ERASE, 140399855267840, 140399863660543, -SNULL, 140400736075775, 140400803184639, -STORE, 140400668966912, 140400736075775, -STORE, 140400736075776, 140400803184639, -ERASE, 140400736075776, 140400803184639, -SNULL, 140400669102079, 140400736075775, -STORE, 140400668966912, 140400669102079, -STORE, 140400669102080, 140400736075775, -STORE, 140400669102080, 140400803184639, -SNULL, 140400669102080, 140400736075775, -STORE, 140400736075776, 140400803184639, -STORE, 140400669102080, 140400736075775, -SNULL, 140400736210943, 140400803184639, -STORE, 140400736075776, 140400736210943, -STORE, 140400736210944, 140400803184639, -ERASE, 140400593465344, 140400660574207, -SNULL, 140400450854912, 140400467640319, -STORE, 140400467640320, 140400585072639, -STORE, 140400450854912, 140400467640319, -ERASE, 140400450854912, 140400467640319, -STORE, 140399729442816, 140400056594431, -SNULL, 140400400531455, 140400434069503, -STORE, 140400333422592, 140400400531455, -STORE, 140400400531456, 140400434069503, -ERASE, 140400400531456, 140400434069503, -SNULL, 140400333557759, 140400400531455, -STORE, 140400333422592, 140400333557759, -STORE, 140400333557760, 140400400531455, -SNULL, 140400157241343, 140400291459071, -STORE, 140400064987136, 140400157241343, -STORE, 140400157241344, 140400291459071, -SNULL, 140400157241344, 140400199204863, -STORE, 140400199204864, 140400291459071, -STORE, 140400157241344, 140400199204863, -ERASE, 140400157241344, 140400199204863, -SNULL, 140400266313727, 140400291459071, -STORE, 140400199204864, 140400266313727, -STORE, 140400266313728, 140400291459071, -ERASE, 140400266313728, 140400291459071, -SNULL, 140400132095999, 140400157241343, -STORE, 140400064987136, 140400132095999, -STORE, 140400132096000, 140400157241343, -ERASE, 140400132096000, 140400157241343, -SNULL, 140400065122303, 140400132095999, -STORE, 140400064987136, 140400065122303, -STORE, 140400065122304, 140400132095999, -SNULL, 140400945762304, 140400954155007, -STORE, 140400954155008, 140400987725823, -STORE, 140400945762304, 140400954155007, -SNULL, 140400954159103, 140400987725823, -STORE, 140400954155008, 140400954159103, -STORE, 140400954159104, 140400987725823, -SNULL, 140400434069504, 140400442462207, -STORE, 140400442462208, 140400450854911, -STORE, 140400434069504, 140400442462207, -SNULL, 140400442466303, 140400450854911, -STORE, 140400442462208, 140400442466303, -STORE, 140400442466304, 140400450854911, -SNULL, 140400291463167, 140400316637183, -STORE, 140400291459072, 140400291463167, -STORE, 140400291463168, 140400316637183, -STORE, 140400652181504, 140400668966911, -STORE, 140400643788800, 140400668966911, -SNULL, 140400291463168, 140400299851775, -STORE, 140400299851776, 140400316637183, -STORE, 140400291463168, 140400299851775, -SNULL, 140400299855871, 140400316637183, -STORE, 140400299851776, 140400299855871, -STORE, 140400299855872, 140400316637183, -STORE, 140400635396096, 140400668966911, -SNULL, 140400635396096, 140400643788799, -STORE, 140400643788800, 140400668966911, -STORE, 140400635396096, 140400643788799, -SNULL, 140400643792895, 140400668966911, -STORE, 140400643788800, 140400643792895, -STORE, 140400643792896, 140400668966911, -SNULL, 140399989485567, 140400056594431, -STORE, 140399729442816, 140399989485567, -STORE, 140399989485568, 140400056594431, -ERASE, 140399989485568, 140400056594431, -SNULL, 140399930769407, 140399989485567, -STORE, 140399729442816, 140399930769407, -STORE, 140399930769408, 140399989485567, -ERASE, 140399930769408, 140399989485567, -SNULL, 140400945766399, 140400954155007, -STORE, 140400945762304, 140400945766399, -STORE, 140400945766400, 140400954155007, -SNULL, 140400534749183, 140400585072639, -STORE, 140400467640320, 140400534749183, -STORE, 140400534749184, 140400585072639, -ERASE, 140400534749184, 140400585072639, -SNULL, 140399796551679, 140399930769407, -STORE, 140399729442816, 140399796551679, -STORE, 140399796551680, 140399930769407, -SNULL, 140399796551680, 140399863660543, -STORE, 140399863660544, 140399930769407, -STORE, 140399796551680, 140399863660543, -ERASE, 140399796551680, 140399863660543, -SNULL, 140400199340031, 140400266313727, -STORE, 140400199204864, 140400199340031, -STORE, 140400199340032, 140400266313727, -STORE, 140400627003392, 140400643788799, -SNULL, 140400316641280, 140400325029887, -STORE, 140400325029888, 140400333422591, -STORE, 140400316641280, 140400325029887, -SNULL, 140400325033983, 140400333422591, -STORE, 140400325029888, 140400325033983, -STORE, 140400325033984, 140400333422591, -SNULL, 140400627003392, 140400635396095, -STORE, 140400635396096, 140400643788799, -STORE, 140400627003392, 140400635396095, -SNULL, 140400635400191, 140400643788799, -STORE, 140400635396096, 140400635400191, -STORE, 140400635400192, 140400643788799, -SNULL, 140400434073599, 140400442462207, -STORE, 140400434069504, 140400434073599, -STORE, 140400434073600, 140400442462207, -STORE, 140400618610688, 140400635396095, -STORE, 140400610217984, 140400635396095, -SNULL, 140400954159104, 140400962547711, -STORE, 140400962547712, 140400987725823, -STORE, 140400954159104, 140400962547711, -SNULL, 140400962551807, 140400987725823, -STORE, 140400962547712, 140400962551807, -STORE, 140400962551808, 140400987725823, -SNULL, 140400299855872, 140400308244479, -STORE, 140400308244480, 140400316637183, -STORE, 140400299855872, 140400308244479, -SNULL, 140400308248575, 140400316637183, -STORE, 140400308244480, 140400308248575, -STORE, 140400308248576, 140400316637183, -STORE, 140400601825280, 140400635396095, -SNULL, 140400601829375, 140400635396095, -STORE, 140400601825280, 140400601829375, -STORE, 140400601829376, 140400635396095, -STORE, 140400576679936, 140400593465343, -SNULL, 140400576684031, 140400593465343, -STORE, 140400576679936, 140400576684031, -STORE, 140400576684032, 140400593465343, -SNULL, 140400643792896, 140400652181503, -STORE, 140400652181504, 140400668966911, -STORE, 140400643792896, 140400652181503, -SNULL, 140400652185599, 140400668966911, -STORE, 140400652181504, 140400652185599, -STORE, 140400652185600, 140400668966911, -STORE, 140399595225088, 140399796551679, -SNULL, 140399662333951, 140399796551679, -STORE, 140399595225088, 140399662333951, -STORE, 140399662333952, 140399796551679, -SNULL, 140399662333952, 140399729442815, -STORE, 140399729442816, 140399796551679, -STORE, 140399662333952, 140399729442815, -ERASE, 140399662333952, 140399729442815, -SNULL, 140399863795711, 140399930769407, -STORE, 140399863660544, 140399863795711, -STORE, 140399863795712, 140399930769407, -STORE, 140400568287232, 140400576679935, -SNULL, 140400568291327, 140400576679935, -STORE, 140400568287232, 140400568291327, -STORE, 140400568291328, 140400576679935, -SNULL, 140400467775487, 140400534749183, -STORE, 140400467640320, 140400467775487, -STORE, 140400467775488, 140400534749183, -SNULL, 140399729577983, 140399796551679, -STORE, 140399729442816, 140399729577983, -STORE, 140399729577984, 140399796551679, -SNULL, 140400601829376, 140400627003391, -STORE, 140400627003392, 140400635396095, -STORE, 140400601829376, 140400627003391, -SNULL, 140400627007487, 140400635396095, -STORE, 140400627003392, 140400627007487, -STORE, 140400627007488, 140400635396095, -STORE, 140400559894528, 140400568287231, -STORE, 140400551501824, 140400568287231, -STORE, 140400543109120, 140400568287231, -STORE, 140400459247616, 140400467640319, -STORE, 140400442466304, 140400467640319, -SNULL, 140399595360255, 140399662333951, -STORE, 140399595225088, 140399595360255, -STORE, 140399595360256, 140399662333951, -SNULL, 140400962551808, 140400970940415, -STORE, 140400970940416, 140400987725823, -STORE, 140400962551808, 140400970940415, -SNULL, 140400970944511, 140400987725823, -STORE, 140400970940416, 140400970944511, -STORE, 140400970944512, 140400987725823, -SNULL, 140400652185600, 140400660574207, -STORE, 140400660574208, 140400668966911, -STORE, 140400652185600, 140400660574207, -SNULL, 140400660578303, 140400668966911, -STORE, 140400660574208, 140400660578303, -STORE, 140400660578304, 140400668966911, -SNULL, 140400576684032, 140400585072639, -STORE, 140400585072640, 140400593465343, -STORE, 140400576684032, 140400585072639, -SNULL, 140400585076735, 140400593465343, -STORE, 140400585072640, 140400585076735, -STORE, 140400585076736, 140400593465343, -STORE, 140400425676800, 140400434069503, -STORE, 140400417284096, 140400434069503, -STORE, 140400408891392, 140400434069503, -SNULL, 140400408891392, 140400417284095, -STORE, 140400417284096, 140400434069503, -STORE, 140400408891392, 140400417284095, -SNULL, 140400417288191, 140400434069503, -STORE, 140400417284096, 140400417288191, -STORE, 140400417288192, 140400434069503, -STORE, 140400283066368, 140400291459071, -SNULL, 140400601829376, 140400618610687, -STORE, 140400618610688, 140400627003391, -STORE, 140400601829376, 140400618610687, -SNULL, 140400618614783, 140400627003391, -STORE, 140400618610688, 140400618614783, -STORE, 140400618614784, 140400627003391, -SNULL, 140400601829376, 140400610217983, -STORE, 140400610217984, 140400618610687, -STORE, 140400601829376, 140400610217983, -SNULL, 140400610222079, 140400618610687, -STORE, 140400610217984, 140400610222079, -STORE, 140400610222080, 140400618610687, -STORE, 140400274673664, 140400291459071, -STORE, 140400190812160, 140400199204863, -STORE, 140400182419456, 140400199204863, -SNULL, 140400442466304, 140400450854911, -STORE, 140400450854912, 140400467640319, -STORE, 140400442466304, 140400450854911, -SNULL, 140400450859007, 140400467640319, -STORE, 140400450854912, 140400450859007, -STORE, 140400450859008, 140400467640319, -SNULL, 140400543109120, 140400559894527, -STORE, 140400559894528, 140400568287231, -STORE, 140400543109120, 140400559894527, -SNULL, 140400559898623, 140400568287231, -STORE, 140400559894528, 140400559898623, -STORE, 140400559898624, 140400568287231, -SNULL, 140400450859008, 140400459247615, -STORE, 140400459247616, 140400467640319, -STORE, 140400450859008, 140400459247615, -SNULL, 140400459251711, 140400467640319, -STORE, 140400459247616, 140400459251711, -STORE, 140400459251712, 140400467640319, -SNULL, 140400543113215, 140400559894527, -STORE, 140400543109120, 140400543113215, -STORE, 140400543113216, 140400559894527, -SNULL, 140400970944512, 140400979333119, -STORE, 140400979333120, 140400987725823, -STORE, 140400970944512, 140400979333119, -SNULL, 140400979337215, 140400987725823, -STORE, 140400979333120, 140400979337215, -STORE, 140400979337216, 140400987725823, -STORE, 140400174026752, 140400199204863, -SNULL, 140400174030847, 140400199204863, -STORE, 140400174026752, 140400174030847, -STORE, 140400174030848, 140400199204863, -SNULL, 140400274673664, 140400283066367, -STORE, 140400283066368, 140400291459071, -STORE, 140400274673664, 140400283066367, -SNULL, 140400283070463, 140400291459071, -STORE, 140400283066368, 140400283070463, -STORE, 140400283070464, 140400291459071, -STORE, 140400165634048, 140400174026751, -SNULL, 140400165638143, 140400174026751, -STORE, 140400165634048, 140400165638143, -STORE, 140400165638144, 140400174026751, -SNULL, 140400174030848, 140400182419455, -STORE, 140400182419456, 140400199204863, -STORE, 140400174030848, 140400182419455, -SNULL, 140400182423551, 140400199204863, -STORE, 140400182419456, 140400182423551, -STORE, 140400182423552, 140400199204863, -SNULL, 140400182423552, 140400190812159, -STORE, 140400190812160, 140400199204863, -STORE, 140400182423552, 140400190812159, -SNULL, 140400190816255, 140400199204863, -STORE, 140400190812160, 140400190816255, -STORE, 140400190816256, 140400199204863, -STORE, 140400157241344, 140400165634047, -SNULL, 140400157245439, 140400165634047, -STORE, 140400157241344, 140400157245439, -STORE, 140400157245440, 140400165634047, -SNULL, 140400408895487, 140400417284095, -STORE, 140400408891392, 140400408895487, -STORE, 140400408895488, 140400417284095, -SNULL, 140400417288192, 140400425676799, -STORE, 140400425676800, 140400434069503, -STORE, 140400417288192, 140400425676799, -SNULL, 140400425680895, 140400434069503, -STORE, 140400425676800, 140400425680895, -STORE, 140400425680896, 140400434069503, -STORE, 140400148848640, 140400157241343, -SNULL, 140400148852735, 140400157241343, -STORE, 140400148848640, 140400148852735, -STORE, 140400148852736, 140400157241343, -SNULL, 140400543113216, 140400551501823, -STORE, 140400551501824, 140400559894527, -STORE, 140400543113216, 140400551501823, -SNULL, 140400551505919, 140400559894527, -STORE, 140400551501824, 140400551505919, -STORE, 140400551505920, 140400559894527, -STORE, 140400140455936, 140400148848639, -STORE, 140400048201728, 140400056594431, -SNULL, 140400140460031, 140400148848639, -STORE, 140400140455936, 140400140460031, -STORE, 140400140460032, 140400148848639, -STORE, 140400039809024, 140400056594431, -SNULL, 140400039813119, 140400056594431, -STORE, 140400039809024, 140400039813119, -STORE, 140400039813120, 140400056594431, -STORE, 140400031416320, 140400039809023, -STORE, 140400023023616, 140400039809023, -SNULL, 140400274677759, 140400283066367, -STORE, 140400274673664, 140400274677759, -STORE, 140400274677760, 140400283066367, -STORE, 140400014630912, 140400039809023, -STORE, 140400006238208, 140400039809023, -STORE, 140399997845504, 140400039809023, -SNULL, 140399997849599, 140400039809023, -STORE, 140399997845504, 140399997849599, -STORE, 140399997849600, 140400039809023, -STORE, 140399989452800, 140399997845503, -SNULL, 140399989456895, 140399997845503, -STORE, 140399989452800, 140399989456895, -STORE, 140399989456896, 140399997845503, -STORE, 140399981060096, 140399989452799, -SNULL, 140399981064191, 140399989452799, -STORE, 140399981060096, 140399981064191, -STORE, 140399981064192, 140399989452799, -STORE, 140399972667392, 140399981060095, -STORE, 140399964274688, 140399981060095, -SNULL, 140399964278783, 140399981060095, -STORE, 140399964274688, 140399964278783, -STORE, 140399964278784, 140399981060095, -SNULL, 140400039813120, 140400048201727, -STORE, 140400048201728, 140400056594431, -STORE, 140400039813120, 140400048201727, -SNULL, 140400048205823, 140400056594431, -STORE, 140400048201728, 140400048205823, -STORE, 140400048205824, 140400056594431, -SNULL, 140399997849600, 140400031416319, -STORE, 140400031416320, 140400039809023, -STORE, 140399997849600, 140400031416319, -SNULL, 140400031420415, 140400039809023, -STORE, 140400031416320, 140400031420415, -STORE, 140400031420416, 140400039809023, -STORE, 140399955881984, 140399964274687, -SNULL, 140399955886079, 140399964274687, -STORE, 140399955881984, 140399955886079, -STORE, 140399955886080, 140399964274687, -STORE, 140399947489280, 140399955881983, -STORE, 140399939096576, 140399955881983, -STORE, 140399855267840, 140399863660543, -SNULL, 140399939100671, 140399955881983, -STORE, 140399939096576, 140399939100671, -STORE, 140399939100672, 140399955881983, -SNULL, 140399997849600, 140400014630911, -STORE, 140400014630912, 140400031416319, -STORE, 140399997849600, 140400014630911, -SNULL, 140400014635007, 140400031416319, -STORE, 140400014630912, 140400014635007, -STORE, 140400014635008, 140400031416319, -SNULL, 140400014635008, 140400023023615, -STORE, 140400023023616, 140400031416319, -STORE, 140400014635008, 140400023023615, -SNULL, 140400023027711, 140400031416319, -STORE, 140400023023616, 140400023027711, -STORE, 140400023027712, 140400031416319, -SNULL, 140399997849600, 140400006238207, -STORE, 140400006238208, 140400014630911, -STORE, 140399997849600, 140400006238207, -SNULL, 140400006242303, 140400014630911, -STORE, 140400006238208, 140400006242303, -STORE, 140400006242304, 140400014630911, -STORE, 140399846875136, 140399863660543, -STORE, 140399838482432, 140399863660543, -SNULL, 140399838486527, 140399863660543, -STORE, 140399838482432, 140399838486527, -STORE, 140399838486528, 140399863660543, -SNULL, 140399939100672, 140399947489279, -STORE, 140399947489280, 140399955881983, -STORE, 140399939100672, 140399947489279, -SNULL, 140399947493375, 140399955881983, -STORE, 140399947489280, 140399947493375, -STORE, 140399947493376, 140399955881983, -SNULL, 140399964278784, 140399972667391, -STORE, 140399972667392, 140399981060095, -STORE, 140399964278784, 140399972667391, -SNULL, 140399972671487, 140399981060095, -STORE, 140399972667392, 140399972671487, -STORE, 140399972671488, 140399981060095, -SNULL, 140399838486528, 140399855267839, -STORE, 140399855267840, 140399863660543, -STORE, 140399838486528, 140399855267839, -SNULL, 140399855271935, 140399863660543, -STORE, 140399855267840, 140399855271935, -STORE, 140399855271936, 140399863660543, -STORE, 140399830089728, 140399838482431, -SNULL, 140399830093823, 140399838482431, -STORE, 140399830089728, 140399830093823, -STORE, 140399830093824, 140399838482431, -STORE, 140399821697024, 140399830089727, -SNULL, 140399821701119, 140399830089727, -STORE, 140399821697024, 140399821701119, -STORE, 140399821701120, 140399830089727, -SNULL, 140399838486528, 140399846875135, -STORE, 140399846875136, 140399855267839, -STORE, 140399838486528, 140399846875135, -SNULL, 140399846879231, 140399855267839, -STORE, 140399846875136, 140399846879231, -STORE, 140399846879232, 140399855267839, -STORE, 140399813304320, 140399821697023, -STORE, 140399804911616, 140399821697023, -SNULL, 140399804915711, 140399821697023, -STORE, 140399804911616, 140399804915711, -STORE, 140399804915712, 140399821697023, -STORE, 140399721050112, 140399729442815, -SNULL, 140399804915712, 140399813304319, -STORE, 140399813304320, 140399821697023, -STORE, 140399804915712, 140399813304319, -SNULL, 140399813308415, 140399821697023, -STORE, 140399813304320, 140399813308415, -STORE, 140399813308416, 140399821697023, -SNULL, 140399721054207, 140399729442815, -STORE, 140399721050112, 140399721054207, -STORE, 140399721054208, 140399729442815, -STORE, 140401467105280, 140401467133951, -STORE, 140401279115264, 140401281306623, -SNULL, 140401279115264, 140401279205375, -STORE, 140401279205376, 140401281306623, -STORE, 140401279115264, 140401279205375, -SNULL, 140401281298431, 140401281306623, -STORE, 140401279205376, 140401281298431, -STORE, 140401281298432, 140401281306623, -ERASE, 140401281298432, 140401281306623, -STORE, 140401281298432, 140401281306623, -SNULL, 140401281302527, 140401281306623, -STORE, 140401281298432, 140401281302527, -STORE, 140401281302528, 140401281306623, -ERASE, 140401467105280, 140401467133951, -ERASE, 140400056594432, 140400056598527, -ERASE, 140400056598528, 140400064987135, -ERASE, 140400635396096, 140400635400191, -ERASE, 140400635400192, 140400643788799, -ERASE, 140400408891392, 140400408895487, -ERASE, 140400408895488, 140400417284095, -ERASE, 140400299851776, 140400299855871, -ERASE, 140400299855872, 140400308244479, -ERASE, 140400627003392, 140400627007487, -ERASE, 140400627007488, 140400635396095, -ERASE, 140400954155008, 140400954159103, -ERASE, 140400954159104, 140400962547711, -ERASE, 140400291459072, 140400291463167, -ERASE, 140400291463168, 140400299851775, -ERASE, 140400643788800, 140400643792895, -ERASE, 140400643792896, 140400652181503, -ERASE, 140400325029888, 140400325033983, -ERASE, 140400325033984, 140400333422591, -ERASE, 140400610217984, 140400610222079, -ERASE, 140400610222080, 140400618610687, -ERASE, 140400190812160, 140400190816255, -ERASE, 140400190816256, 140400199204863, -ERASE, 140399964274688, 140399964278783, -ERASE, 140399964278784, 140399972667391, -ERASE, 140400945762304, 140400945766399, -ERASE, 140400945766400, 140400954155007, -ERASE, 140400568287232, 140400568291327, -ERASE, 140400568291328, 140400576679935, -ERASE, 140399972667392, 140399972671487, -ERASE, 140399972671488, 140399981060095, -ERASE, 140400962547712, 140400962551807, -ERASE, 140400962551808, 140400970940415, -ERASE, 140400987725824, 140400987729919, -ERASE, 140400987729920, 140400996118527, -ERASE, 140400652181504, 140400652185599, -ERASE, 140400652185600, 140400660574207, -ERASE, 140400450854912, 140400450859007, -ERASE, 140400450859008, 140400459247615, -ERASE, 140400031416320, 140400031420415, -ERASE, 140400031420416, 140400039809023, -ERASE, 140400308244480, 140400308248575, -ERASE, 140400308248576, 140400316637183, -ERASE, 140400434069504, 140400434073599, -ERASE, 140400434073600, 140400442462207, -ERASE, 140400543109120, 140400543113215, -ERASE, 140400543113216, 140400551501823, -ERASE, 140400023023616, 140400023027711, -ERASE, 140400023027712, 140400031416319, -ERASE, 140399813304320, 140399813308415, -ERASE, 140399813308416, 140399821697023, -ERASE, 140400316637184, 140400316641279, -ERASE, 140400316641280, 140400325029887, -ERASE, 140400585072640, 140400585076735, -ERASE, 140400585076736, 140400593465343, -ERASE, 140400148848640, 140400148852735, -ERASE, 140400148852736, 140400157241343, -ERASE, 140399955881984, 140399955886079, -ERASE, 140399955886080, 140399964274687, -ERASE, 140399821697024, 140399821701119, -ERASE, 140399821701120, 140399830089727, -ERASE, 140400601825280, 140400601829375, -ERASE, 140400601829376, 140400610217983, -ERASE, 140400979333120, 140400979337215, -ERASE, 140400979337216, 140400987725823, -ERASE, 140399997845504, 140399997849599, -ERASE, 140399997849600, 140400006238207, -ERASE, 140400459247616, 140400459251711, -ERASE, 140400459251712, 140400467640319, -ERASE, 140400551501824, 140400551505919, -ERASE, 140400551505920, 140400559894527, -ERASE, 140399939096576, 140399939100671, -ERASE, 140399939100672, 140399947489279, -ERASE, 140400442462208, 140400442466303, -ERASE, 140400442466304, 140400450854911, -ERASE, 140400576679936, 140400576684031, -ERASE, 140400576684032, 140400585072639, -ERASE, 140400559894528, 140400559898623, -ERASE, 140400559898624, 140400568287231, -ERASE, 140400417284096, 140400417288191, -ERASE, 140400417288192, 140400425676799, -ERASE, 140400283066368, 140400283070463, -ERASE, 140400283070464, 140400291459071, - }; - unsigned long set33[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140734562918400, 140737488351231, -SNULL, 140734562922495, 140737488351231, -STORE, 140734562918400, 140734562922495, -STORE, 140734562787328, 140734562922495, -STORE, 94133878984704, 94133881237503, -SNULL, 94133879115775, 94133881237503, -STORE, 94133878984704, 94133879115775, -STORE, 94133879115776, 94133881237503, -ERASE, 94133879115776, 94133881237503, -STORE, 94133881208832, 94133881217023, -STORE, 94133881217024, 94133881237503, -STORE, 140583654043648, 140583656296447, -SNULL, 140583654187007, 140583656296447, -STORE, 140583654043648, 140583654187007, -STORE, 140583654187008, 140583656296447, -ERASE, 140583654187008, 140583656296447, -STORE, 140583656284160, 140583656292351, -STORE, 140583656292352, 140583656296447, -STORE, 140734564319232, 140734564323327, -STORE, 140734564306944, 140734564319231, -STORE, 140583656255488, 140583656284159, -STORE, 140583656247296, 140583656255487, -STORE, 140583651827712, 140583654043647, -SNULL, 140583651827712, 140583651926015, -STORE, 140583651926016, 140583654043647, -STORE, 140583651827712, 140583651926015, -SNULL, 140583654019071, 140583654043647, -STORE, 140583651926016, 140583654019071, -STORE, 140583654019072, 140583654043647, -SNULL, 140583654019072, 140583654027263, -STORE, 140583654027264, 140583654043647, -STORE, 140583654019072, 140583654027263, -ERASE, 140583654019072, 140583654027263, -STORE, 140583654019072, 140583654027263, -ERASE, 140583654027264, 140583654043647, -STORE, 140583654027264, 140583654043647, -STORE, 140583648030720, 140583651827711, -SNULL, 140583648030720, 140583649689599, -STORE, 140583649689600, 140583651827711, -STORE, 140583648030720, 140583649689599, -SNULL, 140583651786751, 140583651827711, -STORE, 140583649689600, 140583651786751, -STORE, 140583651786752, 140583651827711, -SNULL, 140583651786752, 140583651811327, -STORE, 140583651811328, 140583651827711, -STORE, 140583651786752, 140583651811327, -ERASE, 140583651786752, 140583651811327, -STORE, 140583651786752, 140583651811327, -ERASE, 140583651811328, 140583651827711, -STORE, 140583651811328, 140583651827711, -STORE, 140583656239104, 140583656255487, -SNULL, 140583651803135, 140583651811327, -STORE, 140583651786752, 140583651803135, -STORE, 140583651803136, 140583651811327, -SNULL, 140583654023167, 140583654027263, -STORE, 140583654019072, 140583654023167, -STORE, 140583654023168, 140583654027263, -SNULL, 94133881212927, 94133881217023, -STORE, 94133881208832, 94133881212927, -STORE, 94133881212928, 94133881217023, -SNULL, 140583656288255, 140583656292351, -STORE, 140583656284160, 140583656288255, -STORE, 140583656288256, 140583656292351, -ERASE, 140583656255488, 140583656284159, -STORE, 94133881733120, 94133881868287, -STORE, 140583639638016, 140583648030719, -SNULL, 140583639642111, 140583648030719, -STORE, 140583639638016, 140583639642111, -STORE, 140583639642112, 140583648030719, -STORE, 140583631245312, 140583639638015, -STORE, 140583497027584, 140583631245311, -SNULL, 140583497027584, 140583540621311, -STORE, 140583540621312, 140583631245311, -STORE, 140583497027584, 140583540621311, -ERASE, 140583497027584, 140583540621311, -SNULL, 140583607730175, 140583631245311, -STORE, 140583540621312, 140583607730175, -STORE, 140583607730176, 140583631245311, -ERASE, 140583607730176, 140583631245311, -SNULL, 140583540756479, 140583607730175, -STORE, 140583540621312, 140583540756479, -STORE, 140583540756480, 140583607730175, -SNULL, 140583631249407, 140583639638015, -STORE, 140583631245312, 140583631249407, -STORE, 140583631249408, 140583639638015, -STORE, 140583622852608, 140583631245311, -SNULL, 140583622856703, 140583631245311, -STORE, 140583622852608, 140583622856703, -STORE, 140583622856704, 140583631245311, -STORE, 140583614459904, 140583622852607, -SNULL, 140583614463999, 140583622852607, -STORE, 140583614459904, 140583614463999, -STORE, 140583614464000, 140583622852607, -STORE, 140583532228608, 140583540621311, -SNULL, 140583532232703, 140583540621311, -STORE, 140583532228608, 140583532232703, -STORE, 140583532232704, 140583540621311, -STORE, 140583523835904, 140583532228607, -STORE, 140583515443200, 140583532228607, -STORE, 140583507050496, 140583532228607, -STORE, 140583372832768, 140583507050495, -STORE, 140583364440064, 140583372832767, -STORE, 140583230222336, 140583364440063, -STORE, 140583096004608, 140583364440063, -SNULL, 140583230222335, 140583364440063, -STORE, 140583096004608, 140583230222335, -STORE, 140583230222336, 140583364440063, -SNULL, 140583230222336, 140583272185855, -STORE, 140583272185856, 140583364440063, -STORE, 140583230222336, 140583272185855, -ERASE, 140583230222336, 140583272185855, -STORE, 140582961786880, 140583230222335, -SNULL, 140583372832768, 140583406403583, -STORE, 140583406403584, 140583507050495, -STORE, 140583372832768, 140583406403583, -ERASE, 140583372832768, 140583406403583, -SNULL, 140583473512447, 140583507050495, -STORE, 140583406403584, 140583473512447, -STORE, 140583473512448, 140583507050495, -ERASE, 140583473512448, 140583507050495, -SNULL, 140583096004607, 140583230222335, -STORE, 140582961786880, 140583096004607, -STORE, 140583096004608, 140583230222335, -SNULL, 140583096004608, 140583137968127, -STORE, 140583137968128, 140583230222335, -STORE, 140583096004608, 140583137968127, -ERASE, 140583096004608, 140583137968127, -SNULL, 140583339294719, 140583364440063, -STORE, 140583272185856, 140583339294719, -STORE, 140583339294720, 140583364440063, -ERASE, 140583339294720, 140583364440063, -SNULL, 140583272321023, 140583339294719, -STORE, 140583272185856, 140583272321023, -STORE, 140583272321024, 140583339294719, -SNULL, 140582961786880, 140583003750399, -STORE, 140583003750400, 140583096004607, -STORE, 140582961786880, 140583003750399, -ERASE, 140582961786880, 140583003750399, - }; - - unsigned long set34[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140731327180800, 140737488351231, -SNULL, 140731327184895, 140737488351231, -STORE, 140731327180800, 140731327184895, -STORE, 140731327049728, 140731327184895, -STORE, 94632924487680, 94632926740479, -SNULL, 94632924618751, 94632926740479, -STORE, 94632924487680, 94632924618751, -STORE, 94632924618752, 94632926740479, -ERASE, 94632924618752, 94632926740479, -STORE, 94632926711808, 94632926719999, -STORE, 94632926720000, 94632926740479, -STORE, 140012544888832, 140012547141631, -SNULL, 140012545032191, 140012547141631, -STORE, 140012544888832, 140012545032191, -STORE, 140012545032192, 140012547141631, -ERASE, 140012545032192, 140012547141631, -STORE, 140012547129344, 140012547137535, -STORE, 140012547137536, 140012547141631, -STORE, 140731327725568, 140731327729663, -STORE, 140731327713280, 140731327725567, -STORE, 140012547100672, 140012547129343, -STORE, 140012547092480, 140012547100671, -STORE, 140012542672896, 140012544888831, -SNULL, 140012542672896, 140012542771199, -STORE, 140012542771200, 140012544888831, -STORE, 140012542672896, 140012542771199, -SNULL, 140012544864255, 140012544888831, -STORE, 140012542771200, 140012544864255, -STORE, 140012544864256, 140012544888831, -SNULL, 140012544864256, 140012544872447, -STORE, 140012544872448, 140012544888831, -STORE, 140012544864256, 140012544872447, -ERASE, 140012544864256, 140012544872447, -STORE, 140012544864256, 140012544872447, -ERASE, 140012544872448, 140012544888831, -STORE, 140012544872448, 140012544888831, -STORE, 140012538875904, 140012542672895, -SNULL, 140012538875904, 140012540534783, -STORE, 140012540534784, 140012542672895, -STORE, 140012538875904, 140012540534783, -SNULL, 140012542631935, 140012542672895, -STORE, 140012540534784, 140012542631935, -STORE, 140012542631936, 140012542672895, -SNULL, 140012542631936, 140012542656511, -STORE, 140012542656512, 140012542672895, -STORE, 140012542631936, 140012542656511, -ERASE, 140012542631936, 140012542656511, -STORE, 140012542631936, 140012542656511, -ERASE, 140012542656512, 140012542672895, -STORE, 140012542656512, 140012542672895, -STORE, 140012547084288, 140012547100671, -SNULL, 140012542648319, 140012542656511, -STORE, 140012542631936, 140012542648319, -STORE, 140012542648320, 140012542656511, -SNULL, 140012544868351, 140012544872447, -STORE, 140012544864256, 140012544868351, -STORE, 140012544868352, 140012544872447, -SNULL, 94632926715903, 94632926719999, -STORE, 94632926711808, 94632926715903, -STORE, 94632926715904, 94632926719999, -SNULL, 140012547133439, 140012547137535, -STORE, 140012547129344, 140012547133439, -STORE, 140012547133440, 140012547137535, -ERASE, 140012547100672, 140012547129343, -STORE, 94632939606016, 94632939741183, -STORE, 140012530483200, 140012538875903, -SNULL, 140012530487295, 140012538875903, -STORE, 140012530483200, 140012530487295, -STORE, 140012530487296, 140012538875903, -STORE, 140012522090496, 140012530483199, -STORE, 140012387872768, 140012522090495, -SNULL, 140012387872768, 140012444188671, -STORE, 140012444188672, 140012522090495, -STORE, 140012387872768, 140012444188671, -ERASE, 140012387872768, 140012444188671, -SNULL, 140012511297535, 140012522090495, -STORE, 140012444188672, 140012511297535, -STORE, 140012511297536, 140012522090495, -ERASE, 140012511297536, 140012522090495, -SNULL, 140012444323839, 140012511297535, -STORE, 140012444188672, 140012444323839, -STORE, 140012444323840, 140012511297535, -SNULL, 140012522094591, 140012530483199, -STORE, 140012522090496, 140012522094591, -STORE, 140012522094592, 140012530483199, -STORE, 140012513697792, 140012522090495, -SNULL, 140012513701887, 140012522090495, -STORE, 140012513697792, 140012513701887, -STORE, 140012513701888, 140012522090495, -STORE, 140012435795968, 140012444188671, -SNULL, 140012435800063, 140012444188671, -STORE, 140012435795968, 140012435800063, -STORE, 140012435800064, 140012444188671, -STORE, 140012427403264, 140012435795967, -SNULL, 140012427407359, 140012435795967, -STORE, 140012427403264, 140012427407359, -STORE, 140012427407360, 140012435795967, -STORE, 140012419010560, 140012427403263, -STORE, 140012410617856, 140012427403263, -STORE, 140012276400128, 140012410617855, -STORE, 140012268007424, 140012276400127, -STORE, 140012133789696, 140012268007423, -SNULL, 140012133789696, 140012175753215, -STORE, 140012175753216, 140012268007423, -STORE, 140012133789696, 140012175753215, -ERASE, 140012133789696, 140012175753215, -STORE, 140012041535488, 140012268007423, -SNULL, 140012108644351, 140012268007423, -STORE, 140012041535488, 140012108644351, -STORE, 140012108644352, 140012268007423, -SNULL, 140012108644352, 140012175753215, -STORE, 140012175753216, 140012268007423, -STORE, 140012108644352, 140012175753215, -ERASE, 140012108644352, 140012175753215, -SNULL, 140012276400128, 140012309970943, -STORE, 140012309970944, 140012410617855, -STORE, 140012276400128, 140012309970943, -ERASE, 140012276400128, 140012309970943, -STORE, 140012301578240, 140012309970943, -STORE, 140012041535488, 140012268007423, -SNULL, 140012242862079, 140012268007423, -STORE, 140012041535488, 140012242862079, -STORE, 140012242862080, 140012268007423, -ERASE, 140012242862080, 140012268007423, -SNULL, 140012041670655, 140012242862079, -STORE, 140012041535488, 140012041670655, -STORE, 140012041670656, 140012242862079, -SNULL, 140012041670656, 140012108644351, -STORE, 140012108644352, 140012242862079, -STORE, 140012041670656, 140012108644351, -SNULL, 140012108779519, 140012242862079, -STORE, 140012108644352, 140012108779519, -STORE, 140012108779520, 140012242862079, -SNULL, 140012377079807, 140012410617855, -STORE, 140012309970944, 140012377079807, -STORE, 140012377079808, 140012410617855, -ERASE, 140012377079808, 140012410617855, -SNULL, 140012310106111, 140012377079807, -STORE, 140012309970944, 140012310106111, -STORE, 140012310106112, 140012377079807, -SNULL, 140012410621951, 140012427403263, -STORE, 140012410617856, 140012410621951, -STORE, 140012410621952, 140012427403263, -SNULL, 140012108779520, 140012175753215, -STORE, 140012175753216, 140012242862079, -STORE, 140012108779520, 140012175753215, -SNULL, 140012175888383, 140012242862079, -STORE, 140012175753216, 140012175888383, -STORE, 140012175888384, 140012242862079, -SNULL, 140012301582335, 140012309970943, -STORE, 140012301578240, 140012301582335, -STORE, 140012301582336, 140012309970943, -SNULL, 140012410621952, 140012419010559, -STORE, 140012419010560, 140012427403263, -STORE, 140012410621952, 140012419010559, -SNULL, 140012419014655, 140012427403263, -STORE, 140012419010560, 140012419014655, -STORE, 140012419014656, 140012427403263, -SNULL, 140012268011519, 140012276400127, -STORE, 140012268007424, 140012268011519, -STORE, 140012268011520, 140012276400127, -STORE, 140012402225152, 140012410617855, -STORE, 140012393832448, 140012410617855, -SNULL, 140012393832448, 140012402225151, -STORE, 140012402225152, 140012410617855, -STORE, 140012393832448, 140012402225151, -SNULL, 140012402229247, 140012410617855, -STORE, 140012402225152, 140012402229247, -STORE, 140012402229248, 140012410617855, -STORE, 140012385439744, 140012402225151, -SNULL, 140012385439744, 140012393832447, -STORE, 140012393832448, 140012402225151, -STORE, 140012385439744, 140012393832447, -SNULL, 140012393836543, 140012402225151, -STORE, 140012393832448, 140012393836543, -STORE, 140012393836544, 140012402225151, -STORE, 140012293185536, 140012301578239, -STORE, 140012284792832, 140012301578239, -SNULL, 140012284792832, 140012293185535, -STORE, 140012293185536, 140012301578239, -STORE, 140012284792832, 140012293185535, -SNULL, 140012293189631, 140012301578239, -STORE, 140012293185536, 140012293189631, -STORE, 140012293189632, 140012301578239, -STORE, 140012268011520, 140012284792831, -SNULL, 140012385443839, 140012393832447, -STORE, 140012385439744, 140012385443839, -STORE, 140012385443840, 140012393832447, -STORE, 140012259614720, 140012268007423, -SNULL, 140012259618815, 140012268007423, -STORE, 140012259614720, 140012259618815, -STORE, 140012259618816, 140012268007423, -STORE, 140012251222016, 140012259614719, -SNULL, 140012251226111, 140012259614719, -STORE, 140012251222016, 140012251226111, -STORE, 140012251226112, 140012259614719, -SNULL, 140012284796927, 140012293185535, -STORE, 140012284792832, 140012284796927, -STORE, 140012284796928, 140012293185535, -SNULL, 140012268011520, 140012276400127, -STORE, 140012276400128, 140012284792831, -STORE, 140012268011520, 140012276400127, -SNULL, 140012276404223, 140012284792831, -STORE, 140012276400128, 140012276404223, -STORE, 140012276404224, 140012284792831, -STORE, 140012033142784, 140012041535487, -SNULL, 140012033146879, 140012041535487, -STORE, 140012033142784, 140012033146879, -STORE, 140012033146880, 140012041535487, -STORE, 140012024750080, 140012033142783, -STORE, 140012016357376, 140012033142783, -SNULL, 140012016357376, 140012024750079, -STORE, 140012024750080, 140012033142783, -STORE, 140012016357376, 140012024750079, -SNULL, 140012024754175, 140012033142783, -STORE, 140012024750080, 140012024754175, -STORE, 140012024754176, 140012033142783, -SNULL, 140012016361471, 140012024750079, -STORE, 140012016357376, 140012016361471, -STORE, 140012016361472, 140012024750079, -STORE, 140012007964672, 140012016357375, -SNULL, 140012007968767, 140012016357375, -STORE, 140012007964672, 140012007968767, -STORE, 140012007968768, 140012016357375, -STORE, 140011999571968, 140012007964671, -STORE, 140011991179264, 140012007964671, -STORE, 140011856961536, 140011991179263, -STORE, 140011848568832, 140011856961535, -STORE, 140011714351104, 140011848568831, -SNULL, 140011714351104, 140011773100031, -STORE, 140011773100032, 140011848568831, -STORE, 140011714351104, 140011773100031, -ERASE, 140011714351104, 140011773100031, -STORE, 140011764707328, 140011773100031, -STORE, 140011756314624, 140011773100031, -STORE, 140011622096896, 140011756314623, -STORE, 140011613704192, 140011622096895, -STORE, 140011479486464, 140011613704191, -STORE, 140011471093760, 140011479486463, -SNULL, 140011479486464, 140011504664575, -STORE, 140011504664576, 140011613704191, -STORE, 140011479486464, 140011504664575, -ERASE, 140011479486464, 140011504664575, -STORE, 140011496271872, 140011504664575, -STORE, 140011487879168, 140011504664575, -STORE, 140011336876032, 140011471093759, -SNULL, 140011336876032, 140011370446847, -STORE, 140011370446848, 140011471093759, -STORE, 140011336876032, 140011370446847, -ERASE, 140011336876032, 140011370446847, -STORE, 140011471093760, 140011487879167, -STORE, 140011362054144, 140011370446847, -SNULL, 140011362058239, 140011370446847, -STORE, 140011362054144, 140011362058239, -STORE, 140011362058240, 140011370446847, -STORE, 140011353661440, 140011362054143, -STORE, 140011345268736, 140011362054143, -SNULL, 140011345272831, 140011362054143, -STORE, 140011345268736, 140011345272831, -STORE, 140011345272832, 140011362054143, -STORE, 140011336876032, 140011345268735, -STORE, 140011328483328, 140011345268735, -SNULL, 140011328487423, 140011345268735, -STORE, 140011328483328, 140011328487423, -STORE, 140011328487424, 140011345268735, -STORE, 140011320090624, 140011328483327, -STORE, 140011185872896, 140011320090623, -SNULL, 140011185872896, 140011236229119, -STORE, 140011236229120, 140011320090623, -STORE, 140011185872896, 140011236229119, -ERASE, 140011185872896, 140011236229119, -SNULL, 140011856961536, 140011907317759, -STORE, 140011907317760, 140011991179263, -STORE, 140011856961536, 140011907317759, -ERASE, 140011856961536, 140011907317759, -SNULL, 140011974426623, 140011991179263, -STORE, 140011907317760, 140011974426623, -STORE, 140011974426624, 140011991179263, -ERASE, 140011974426624, 140011991179263, -SNULL, 140011840208895, 140011848568831, -STORE, 140011773100032, 140011840208895, -STORE, 140011840208896, 140011848568831, -ERASE, 140011840208896, 140011848568831, -SNULL, 140011773235199, 140011840208895, -STORE, 140011773100032, 140011773235199, -STORE, 140011773235200, 140011840208895, -STORE, 140011102011392, 140011320090623, -SNULL, 140011169120255, 140011320090623, -STORE, 140011102011392, 140011169120255, -STORE, 140011169120256, 140011320090623, -SNULL, 140011169120256, 140011236229119, -STORE, 140011236229120, 140011320090623, -STORE, 140011169120256, 140011236229119, -ERASE, 140011169120256, 140011236229119, -SNULL, 140011622096896, 140011638882303, -STORE, 140011638882304, 140011756314623, -STORE, 140011622096896, 140011638882303, -ERASE, 140011622096896, 140011638882303, -SNULL, 140011705991167, 140011756314623, -STORE, 140011638882304, 140011705991167, -STORE, 140011705991168, 140011756314623, -ERASE, 140011705991168, 140011756314623, -SNULL, 140011571773439, 140011613704191, -STORE, 140011504664576, 140011571773439, -STORE, 140011571773440, 140011613704191, -ERASE, 140011571773440, 140011613704191, -STORE, 140010967793664, 140011169120255, -SNULL, 140011034902527, 140011169120255, -STORE, 140010967793664, 140011034902527, -STORE, 140011034902528, 140011169120255, -SNULL, 140011034902528, 140011102011391, -STORE, 140011102011392, 140011169120255, -STORE, 140011034902528, 140011102011391, -ERASE, 140011034902528, 140011102011391, -STORE, 140010833575936, 140011034902527, -SNULL, 140011437555711, 140011471093759, -STORE, 140011370446848, 140011437555711, -STORE, 140011437555712, 140011471093759, -ERASE, 140011437555712, 140011471093759, -SNULL, 140011370582015, 140011437555711, -STORE, 140011370446848, 140011370582015, -STORE, 140011370582016, 140011437555711, -STORE, 140010699358208, 140011034902527, -SNULL, 140011487883263, 140011504664575, -STORE, 140011487879168, 140011487883263, -STORE, 140011487883264, 140011504664575, -SNULL, 140011345272832, 140011353661439, -STORE, 140011353661440, 140011362054143, -STORE, 140011345272832, 140011353661439, -SNULL, 140011353665535, 140011362054143, -STORE, 140011353661440, 140011353665535, -STORE, 140011353665536, 140011362054143, -SNULL, 140011328487424, 140011336876031, -STORE, 140011336876032, 140011345268735, -STORE, 140011328487424, 140011336876031, -SNULL, 140011336880127, 140011345268735, -STORE, 140011336876032, 140011336880127, -STORE, 140011336880128, 140011345268735, -SNULL, 140011303337983, 140011320090623, -STORE, 140011236229120, 140011303337983, -STORE, 140011303337984, 140011320090623, -ERASE, 140011303337984, 140011320090623, -SNULL, 140011907452927, 140011974426623, -STORE, 140011907317760, 140011907452927, -STORE, 140011907452928, 140011974426623, -SNULL, 140011102146559, 140011169120255, -STORE, 140011102011392, 140011102146559, -STORE, 140011102146560, 140011169120255, -SNULL, 140011639017471, 140011705991167, -STORE, 140011638882304, 140011639017471, -STORE, 140011639017472, 140011705991167, -SNULL, 140011504799743, 140011571773439, -STORE, 140011504664576, 140011504799743, -STORE, 140011504799744, 140011571773439, -SNULL, 140011613708287, 140011622096895, -STORE, 140011613704192, 140011613708287, -STORE, 140011613708288, 140011622096895, -SNULL, 140010699358208, 140010967793663, -STORE, 140010967793664, 140011034902527, -STORE, 140010699358208, 140010967793663, -SNULL, 140010967928831, 140011034902527, -STORE, 140010967793664, 140010967928831, -STORE, 140010967928832, 140011034902527, -SNULL, 140010900684799, 140010967793663, -STORE, 140010699358208, 140010900684799, -STORE, 140010900684800, 140010967793663, -ERASE, 140010900684800, 140010967793663, -SNULL, 140010766467071, 140010900684799, -STORE, 140010699358208, 140010766467071, -STORE, 140010766467072, 140010900684799, -SNULL, 140010766467072, 140010833575935, -STORE, 140010833575936, 140010900684799, -STORE, 140010766467072, 140010833575935, -ERASE, 140010766467072, 140010833575935, -SNULL, 140010699493375, 140010766467071, -STORE, 140010699358208, 140010699493375, -STORE, 140010699493376, 140010766467071, -SNULL, 140011848572927, 140011856961535, -STORE, 140011848568832, 140011848572927, -STORE, 140011848572928, 140011856961535, -STORE, 140011982786560, 140012007964671, -STORE, 140011898925056, 140011907317759, -SNULL, 140011898929151, 140011907317759, -STORE, 140011898925056, 140011898929151, -STORE, 140011898929152, 140011907317759, -SNULL, 140011320094719, 140011328483327, -STORE, 140011320090624, 140011320094719, -STORE, 140011320094720, 140011328483327, -STORE, 140011890532352, 140011898925055, -STORE, 140011882139648, 140011898925055, -SNULL, 140011882143743, 140011898925055, -STORE, 140011882139648, 140011882143743, -STORE, 140011882143744, 140011898925055, -STORE, 140011873746944, 140011882139647, -SNULL, 140011873751039, 140011882139647, -STORE, 140011873746944, 140011873751039, -STORE, 140011873751040, 140011882139647, -SNULL, 140011236364287, 140011303337983, -STORE, 140011236229120, 140011236364287, -STORE, 140011236364288, 140011303337983, -SNULL, 140011756318719, 140011773100031, -STORE, 140011756314624, 140011756318719, -STORE, 140011756318720, 140011773100031, -SNULL, 140011756318720, 140011764707327, -STORE, 140011764707328, 140011773100031, -STORE, 140011756318720, 140011764707327, -SNULL, 140011764711423, 140011773100031, -STORE, 140011764707328, 140011764711423, -STORE, 140011764711424, 140011773100031, -SNULL, 140011471097855, 140011487879167, -STORE, 140011471093760, 140011471097855, -STORE, 140011471097856, 140011487879167, -SNULL, 140010833711103, 140010900684799, -STORE, 140010833575936, 140010833711103, -STORE, 140010833711104, 140010900684799, -SNULL, 140011982790655, 140012007964671, -STORE, 140011982786560, 140011982790655, -STORE, 140011982790656, 140012007964671, -STORE, 140011865354240, 140011873746943, -STORE, 140011848572928, 140011865354239, -SNULL, 140011848572928, 140011856961535, -STORE, 140011856961536, 140011865354239, -STORE, 140011848572928, 140011856961535, -SNULL, 140011856965631, 140011865354239, -STORE, 140011856961536, 140011856965631, -STORE, 140011856965632, 140011865354239, -STORE, 140011747921920, 140011756314623, -STORE, 140011739529216, 140011756314623, -SNULL, 140011471097856, 140011479486463, -STORE, 140011479486464, 140011487879167, -STORE, 140011471097856, 140011479486463, -SNULL, 140011479490559, 140011487879167, -STORE, 140011479486464, 140011479490559, -STORE, 140011479490560, 140011487879167, -STORE, 140011731136512, 140011756314623, -STORE, 140011722743808, 140011756314623, -SNULL, 140011982790656, 140011999571967, -STORE, 140011999571968, 140012007964671, -STORE, 140011982790656, 140011999571967, -SNULL, 140011999576063, 140012007964671, -STORE, 140011999571968, 140011999576063, -STORE, 140011999576064, 140012007964671, -STORE, 140011714351104, 140011756314623, -SNULL, 140011882143744, 140011890532351, -STORE, 140011890532352, 140011898925055, -STORE, 140011882143744, 140011890532351, -SNULL, 140011890536447, 140011898925055, -STORE, 140011890532352, 140011890536447, -STORE, 140011890536448, 140011898925055, -STORE, 140011630489600, 140011638882303, -STORE, 140011613708288, 140011638882303, -STORE, 140011605311488, 140011613704191, -STORE, 140011596918784, 140011613704191, -STORE, 140011588526080, 140011613704191, -SNULL, 140011487883264, 140011496271871, -STORE, 140011496271872, 140011504664575, -STORE, 140011487883264, 140011496271871, -SNULL, 140011496275967, 140011504664575, -STORE, 140011496271872, 140011496275967, -STORE, 140011496275968, 140011504664575, -STORE, 140011580133376, 140011613704191, -SNULL, 140011580137471, 140011613704191, -STORE, 140011580133376, 140011580137471, -STORE, 140011580137472, 140011613704191, -SNULL, 140011982790656, 140011991179263, -STORE, 140011991179264, 140011999571967, -STORE, 140011982790656, 140011991179263, -SNULL, 140011991183359, 140011999571967, -STORE, 140011991179264, 140011991183359, -STORE, 140011991183360, 140011999571967, -SNULL, 140011865358335, 140011873746943, -STORE, 140011865354240, 140011865358335, -STORE, 140011865358336, 140011873746943, -STORE, 140011462701056, 140011471093759, -SNULL, 140011714351104, 140011739529215, -STORE, 140011739529216, 140011756314623, -STORE, 140011714351104, 140011739529215, -SNULL, 140011739533311, 140011756314623, -STORE, 140011739529216, 140011739533311, -STORE, 140011739533312, 140011756314623, -SNULL, 140011739533312, 140011747921919, -STORE, 140011747921920, 140011756314623, -STORE, 140011739533312, 140011747921919, -SNULL, 140011747926015, 140011756314623, -STORE, 140011747921920, 140011747926015, -STORE, 140011747926016, 140011756314623, -SNULL, 140011613708288, 140011630489599, -STORE, 140011630489600, 140011638882303, -STORE, 140011613708288, 140011630489599, -SNULL, 140011630493695, 140011638882303, -STORE, 140011630489600, 140011630493695, -STORE, 140011630493696, 140011638882303, -SNULL, 140011714351104, 140011722743807, -STORE, 140011722743808, 140011739529215, -STORE, 140011714351104, 140011722743807, -SNULL, 140011722747903, 140011739529215, -STORE, 140011722743808, 140011722747903, -STORE, 140011722747904, 140011739529215, -SNULL, 140011714355199, 140011722743807, -STORE, 140011714351104, 140011714355199, -STORE, 140011714355200, 140011722743807, -SNULL, 140011722747904, 140011731136511, -STORE, 140011731136512, 140011739529215, -STORE, 140011722747904, 140011731136511, -SNULL, 140011731140607, 140011739529215, -STORE, 140011731136512, 140011731140607, -STORE, 140011731140608, 140011739529215, -STORE, 140011454308352, 140011471093759, -STORE, 140011445915648, 140011471093759, -SNULL, 140011580137472, 140011588526079, -STORE, 140011588526080, 140011613704191, -STORE, 140011580137472, 140011588526079, -SNULL, 140011588530175, 140011613704191, -STORE, 140011588526080, 140011588530175, -STORE, 140011588530176, 140011613704191, -SNULL, 140011445915648, 140011462701055, -STORE, 140011462701056, 140011471093759, -STORE, 140011445915648, 140011462701055, -SNULL, 140011462705151, 140011471093759, -STORE, 140011462701056, 140011462705151, -STORE, 140011462705152, 140011471093759, -SNULL, 140011588530176, 140011596918783, -STORE, 140011596918784, 140011613704191, -STORE, 140011588530176, 140011596918783, -SNULL, 140011596922879, 140011613704191, -STORE, 140011596918784, 140011596922879, -STORE, 140011596922880, 140011613704191, -SNULL, 140011596922880, 140011605311487, -STORE, 140011605311488, 140011613704191, -STORE, 140011596922880, 140011605311487, -SNULL, 140011605315583, 140011613704191, -STORE, 140011605311488, 140011605315583, -STORE, 140011605315584, 140011613704191, -SNULL, 140011613708288, 140011622096895, -STORE, 140011622096896, 140011630489599, -STORE, 140011613708288, 140011622096895, -SNULL, 140011622100991, 140011630489599, -STORE, 140011622096896, 140011622100991, -STORE, 140011622100992, 140011630489599, -STORE, 140011311697920, 140011320090623, -STORE, 140011227836416, 140011236229119, -STORE, 140011219443712, 140011236229119, -SNULL, 140011219447807, 140011236229119, -STORE, 140011219443712, 140011219447807, -STORE, 140011219447808, 140011236229119, -STORE, 140011211051008, 140011219443711, -STORE, 140011202658304, 140011219443711, -SNULL, 140011202662399, 140011219443711, -STORE, 140011202658304, 140011202662399, -STORE, 140011202662400, 140011219443711, -STORE, 140011194265600, 140011202658303, -STORE, 140011185872896, 140011202658303, -STORE, 140011177480192, 140011202658303, -STORE, 140011093618688, 140011102011391, -SNULL, 140011445915648, 140011454308351, -STORE, 140011454308352, 140011462701055, -STORE, 140011445915648, 140011454308351, -SNULL, 140011454312447, 140011462701055, -STORE, 140011454308352, 140011454312447, -STORE, 140011454312448, 140011462701055, -STORE, 140011085225984, 140011102011391, -SNULL, 140011085230079, 140011102011391, -STORE, 140011085225984, 140011085230079, -STORE, 140011085230080, 140011102011391, -SNULL, 140011177484287, 140011202658303, -STORE, 140011177480192, 140011177484287, -STORE, 140011177484288, 140011202658303, -SNULL, 140011445919743, 140011454308351, -STORE, 140011445915648, 140011445919743, -STORE, 140011445919744, 140011454308351, -SNULL, 140011177484288, 140011185872895, -STORE, 140011185872896, 140011202658303, -STORE, 140011177484288, 140011185872895, -SNULL, 140011185876991, 140011202658303, -STORE, 140011185872896, 140011185876991, -STORE, 140011185876992, 140011202658303, -STORE, 140011076833280, 140011085225983, -SNULL, 140011202662400, 140011211051007, -STORE, 140011211051008, 140011219443711, -STORE, 140011202662400, 140011211051007, -SNULL, 140011211055103, 140011219443711, -STORE, 140011211051008, 140011211055103, -STORE, 140011211055104, 140011219443711, -SNULL, 140011185876992, 140011194265599, -STORE, 140011194265600, 140011202658303, -STORE, 140011185876992, 140011194265599, -SNULL, 140011194269695, 140011202658303, -STORE, 140011194265600, 140011194269695, -STORE, 140011194269696, 140011202658303, -STORE, 140011068440576, 140011085225983, -SNULL, 140011311702015, 140011320090623, -STORE, 140011311697920, 140011311702015, -STORE, 140011311702016, 140011320090623, -STORE, 140011060047872, 140011085225983, -SNULL, 140011060051967, 140011085225983, -STORE, 140011060047872, 140011060051967, -STORE, 140011060051968, 140011085225983, -STORE, 140011051655168, 140011060047871, -STORE, 140011043262464, 140011060047871, -SNULL, 140011043266559, 140011060047871, -STORE, 140011043262464, 140011043266559, -STORE, 140011043266560, 140011060047871, -SNULL, 140011219447808, 140011227836415, -STORE, 140011227836416, 140011236229119, -STORE, 140011219447808, 140011227836415, -SNULL, 140011227840511, 140011236229119, -STORE, 140011227836416, 140011227840511, -STORE, 140011227840512, 140011236229119, -SNULL, 140011085230080, 140011093618687, -STORE, 140011093618688, 140011102011391, -STORE, 140011085230080, 140011093618687, -SNULL, 140011093622783, 140011102011391, -STORE, 140011093618688, 140011093622783, -STORE, 140011093622784, 140011102011391, -STORE, 140010959400960, 140010967793663, -STORE, 140010951008256, 140010967793663, -SNULL, 140010951008256, 140010959400959, -STORE, 140010959400960, 140010967793663, -STORE, 140010951008256, 140010959400959, -SNULL, 140010959405055, 140010967793663, -STORE, 140010959400960, 140010959405055, -STORE, 140010959405056, 140010967793663, -STORE, 140010942615552, 140010959400959, -STORE, 140010934222848, 140010959400959, -SNULL, 140011060051968, 140011076833279, -STORE, 140011076833280, 140011085225983, -STORE, 140011060051968, 140011076833279, -SNULL, 140011076837375, 140011085225983, -STORE, 140011076833280, 140011076837375, -STORE, 140011076837376, 140011085225983, -SNULL, 140011043266560, 140011051655167, -STORE, 140011051655168, 140011060047871, -STORE, 140011043266560, 140011051655167, -SNULL, 140011051659263, 140011060047871, -STORE, 140011051655168, 140011051659263, -STORE, 140011051659264, 140011060047871, -STORE, 140010925830144, 140010959400959, -SNULL, 140011060051968, 140011068440575, -STORE, 140011068440576, 140011076833279, -STORE, 140011060051968, 140011068440575, -SNULL, 140011068444671, 140011076833279, -STORE, 140011068440576, 140011068444671, -STORE, 140011068444672, 140011076833279, -STORE, 140010917437440, 140010959400959, -STORE, 140010909044736, 140010959400959, -STORE, 140010825183232, 140010833575935, -SNULL, 140010909044736, 140010942615551, -STORE, 140010942615552, 140010959400959, -STORE, 140010909044736, 140010942615551, -SNULL, 140010942619647, 140010959400959, -STORE, 140010942615552, 140010942619647, -STORE, 140010942619648, 140010959400959, -SNULL, 140010909044736, 140010934222847, -STORE, 140010934222848, 140010942615551, -STORE, 140010909044736, 140010934222847, -SNULL, 140010934226943, 140010942615551, -STORE, 140010934222848, 140010934226943, -STORE, 140010934226944, 140010942615551, -SNULL, 140010909048831, 140010934222847, -STORE, 140010909044736, 140010909048831, -STORE, 140010909048832, 140010934222847, -STORE, 140010816790528, 140010833575935, -SNULL, 140010816794623, 140010833575935, -STORE, 140010816790528, 140010816794623, -STORE, 140010816794624, 140010833575935, -STORE, 140010808397824, 140010816790527, -SNULL, 140010942619648, 140010951008255, -STORE, 140010951008256, 140010959400959, -STORE, 140010942619648, 140010951008255, -SNULL, 140010951012351, 140010959400959, -STORE, 140010951008256, 140010951012351, -STORE, 140010951012352, 140010959400959, -STORE, 140010800005120, 140010816790527, -SNULL, 140010800009215, 140010816790527, -STORE, 140010800005120, 140010800009215, -STORE, 140010800009216, 140010816790527, -SNULL, 140010909048832, 140010925830143, -STORE, 140010925830144, 140010934222847, -STORE, 140010909048832, 140010925830143, -SNULL, 140010925834239, 140010934222847, -STORE, 140010925830144, 140010925834239, -STORE, 140010925834240, 140010934222847, -SNULL, 140010816794624, 140010825183231, -STORE, 140010825183232, 140010833575935, -STORE, 140010816794624, 140010825183231, -SNULL, 140010825187327, 140010833575935, -STORE, 140010825183232, 140010825187327, -STORE, 140010825187328, 140010833575935, -SNULL, 140010909048832, 140010917437439, -STORE, 140010917437440, 140010925830143, -STORE, 140010909048832, 140010917437439, -SNULL, 140010917441535, 140010925830143, -STORE, 140010917437440, 140010917441535, -STORE, 140010917441536, 140010925830143, -SNULL, 140010800009216, 140010808397823, -STORE, 140010808397824, 140010816790527, -STORE, 140010800009216, 140010808397823, -SNULL, 140010808401919, 140010816790527, -STORE, 140010808397824, 140010808401919, -STORE, 140010808401920, 140010816790527, -STORE, 140010791612416, 140010800005119, -SNULL, 140010791616511, 140010800005119, -STORE, 140010791612416, 140010791616511, -STORE, 140010791616512, 140010800005119, -STORE, 140012547100672, 140012547129343, -STORE, 140012511506432, 140012513697791, -SNULL, 140012511506432, 140012511596543, -STORE, 140012511596544, 140012513697791, -STORE, 140012511506432, 140012511596543, -SNULL, 140012513689599, 140012513697791, -STORE, 140012511596544, 140012513689599, -STORE, 140012513689600, 140012513697791, -ERASE, 140012513689600, 140012513697791, -STORE, 140012513689600, 140012513697791, -SNULL, 140012513693695, 140012513697791, -STORE, 140012513689600, 140012513693695, -STORE, 140012513693696, 140012513697791, -ERASE, 140012547100672, 140012547129343, -ERASE, 140011362054144, 140011362058239, -ERASE, 140011362058240, 140011370446847, -ERASE, 140011882139648, 140011882143743, -ERASE, 140011882143744, 140011890532351, -ERASE, 140011873746944, 140011873751039, -ERASE, 140011873751040, 140011882139647, -ERASE, 140011588526080, 140011588530175, -ERASE, 140011588530176, 140011596918783, -ERASE, 140011328483328, 140011328487423, -ERASE, 140011328487424, 140011336876031, -ERASE, 140011898925056, 140011898929151, -ERASE, 140011898929152, 140011907317759, -ERASE, 140011353661440, 140011353665535, -ERASE, 140011353665536, 140011362054143, -ERASE, 140011336876032, 140011336880127, -ERASE, 140011336880128, 140011345268735, -ERASE, 140011731136512, 140011731140607, -ERASE, 140011731140608, 140011739529215, -ERASE, 140011479486464, 140011479490559, -ERASE, 140011479490560, 140011487879167, -ERASE, 140011756314624, 140011756318719, -ERASE, 140011756318720, 140011764707327, -ERASE, 140011580133376, 140011580137471, -ERASE, 140011580137472, 140011588526079, -ERASE, 140011219443712, 140011219447807, -ERASE, 140011219447808, 140011227836415, -ERASE, 140011051655168, 140011051659263, -ERASE, 140011051659264, 140011060047871, -ERASE, 140011999571968, 140011999576063, -ERASE, 140011999576064, 140012007964671, -ERASE, 140011714351104, 140011714355199, -ERASE, 140011714355200, 140011722743807, -ERASE, 140011739529216, 140011739533311, -ERASE, 140011739533312, 140011747921919, -ERASE, 140011320090624, 140011320094719, -ERASE, 140011320094720, 140011328483327, -ERASE, 140011630489600, 140011630493695, -ERASE, 140011630493696, 140011638882303, -ERASE, 140011345268736, 140011345272831, -ERASE, 140011345272832, 140011353661439, -ERASE, 140011496271872, 140011496275967, -ERASE, 140011496275968, 140011504664575, -ERASE, 140011194265600, 140011194269695, -ERASE, 140011194269696, 140011202658303, -ERASE, 140011068440576, 140011068444671, -ERASE, 140011068444672, 140011076833279, -ERASE, 140010909044736, 140010909048831, -ERASE, 140010909048832, 140010917437439, -ERASE, 140011764707328, 140011764711423, -ERASE, 140011764711424, 140011773100031, -ERASE, 140011462701056, 140011462705151, -ERASE, 140011462705152, 140011471093759, -ERASE, 140011076833280, 140011076837375, -ERASE, 140011076837376, 140011085225983, -ERASE, 140011991179264, 140011991183359, -ERASE, 140011991183360, 140011999571967, -ERASE, 140011211051008, 140011211055103, -ERASE, 140011211055104, 140011219443711, -ERASE, 140010917437440, 140010917441535, -ERASE, 140010917441536, 140010925830143, -ERASE, 140011085225984, 140011085230079, -ERASE, 140011085230080, 140011093618687, -ERASE, 140011487879168, 140011487883263, -ERASE, 140011487883264, 140011496271871, -ERASE, 140011856961536, 140011856965631, -ERASE, 140011856965632, 140011865354239, -ERASE, 140011982786560, 140011982790655, -ERASE, 140011982790656, 140011991179263, -ERASE, 140011722743808, 140011722747903, -ERASE, 140011722747904, 140011731136511, -ERASE, 140011177480192, 140011177484287, -ERASE, 140011177484288, 140011185872895, -ERASE, 140011848568832, 140011848572927, -ERASE, 140011848572928, 140011856961535, -ERASE, 140011890532352, 140011890536447, -ERASE, 140011890536448, 140011898925055, -ERASE, 140011622096896, 140011622100991, -ERASE, 140011622100992, 140011630489599, -ERASE, 140011311697920, 140011311702015, -ERASE, 140011311702016, 140011320090623, -ERASE, 140011471093760, 140011471097855, -ERASE, 140011471097856, 140011479486463, -ERASE, 140011605311488, 140011605315583, -ERASE, 140011605315584, 140011613704191, -ERASE, 140010791612416, 140010791616511, -ERASE, 140010791616512, 140010800005119, -ERASE, 140010959400960, 140010959405055, -ERASE, 140010959405056, 140010967793663, -ERASE, 140011185872896, 140011185876991, -ERASE, 140011185876992, 140011194265599, -ERASE, 140011454308352, 140011454312447, -ERASE, 140011454312448, 140011462701055, -ERASE, 140011596918784, 140011596922879, -ERASE, 140011596922880, 140011605311487, -ERASE, 140011060047872, 140011060051967, -ERASE, 140011060051968, 140011068440575, -ERASE, 140010925830144, 140010925834239, -ERASE, 140010925834240, 140010934222847, -ERASE, 140011747921920, 140011747926015, -ERASE, 140011747926016, 140011756314623, -ERASE, 140011202658304, 140011202662399, -ERASE, 140011202662400, 140011211051007, -ERASE, 140010800005120, 140010800009215, -ERASE, 140010800009216, 140010808397823, -ERASE, 140011093618688, 140011093622783, -ERASE, 140011093622784, 140011102011391, -ERASE, 140010808397824, 140010808401919, -ERASE, 140010808401920, 140010816790527, -ERASE, 140012419010560, 140012419014655, -ERASE, 140012419014656, 140012427403263, -ERASE, 140010934222848, 140010934226943, -ERASE, 140010934226944, 140010942615551, -ERASE, 140010942615552, 140010942619647, -ERASE, 140010942619648, 140010951008255, -ERASE, 140011613704192, 140011613708287, -ERASE, 140011613708288, 140011622096895, -ERASE, 140011865354240, 140011865358335, -ERASE, 140011865358336, 140011873746943, -ERASE, 140012301578240, 140012301582335, -ERASE, 140012301582336, 140012309970943, -ERASE, 140012393832448, 140012393836543, -ERASE, 140012393836544, 140012402225151, -ERASE, 140012410617856, 140012410621951, -ERASE, 140012410621952, 140012419010559, -ERASE, 140012402225152, 140012402229247, -ERASE, 140012402229248, 140012410617855, -ERASE, 140012259614720, 140012259618815, -ERASE, 140012259618816, 140012268007423, -ERASE, 140012251222016, 140012251226111, -ERASE, 140012251226112, 140012259614719, -ERASE, 140012284792832, 140012284796927, -ERASE, 140012284796928, 140012293185535, -ERASE, 140011445915648, 140011445919743, -ERASE, 140011445919744, 140011454308351, -ERASE, 140010951008256, 140010951012351, -ERASE, 140010951012352, 140010959400959, -ERASE, 140011043262464, 140011043266559, -ERASE, 140011043266560, 140011051655167, -ERASE, 140010825183232, 140010825187327, -ERASE, 140010825187328, 140010833575935, -ERASE, 140012293185536, 140012293189631, -ERASE, 140012293189632, 140012301578239, -ERASE, 140012276400128, 140012276404223, -ERASE, 140012276404224, 140012284792831, -ERASE, 140012016357376, 140012016361471, -ERASE, 140012016361472, 140012024750079, -ERASE, 140012024750080, 140012024754175, -ERASE, 140012024754176, 140012033142783, -ERASE, 140011227836416, 140011227840511, -ERASE, 140011227840512, 140011236229119, -ERASE, 140010816790528, 140010816794623, -ERASE, 140010816794624, 140010825183231, -ERASE, 140012268007424, 140012268011519, -ERASE, 140012268011520, 140012276400127, -ERASE, 140012385439744, 140012385443839, -ERASE, 140012385443840, 140012393832447, -ERASE, 140012522090496, 140012522094591, -ERASE, 140012522094592, 140012530483199, -ERASE, 140012033142784, 140012033146879, -ERASE, 140012033146880, 140012041535487, - }; - unsigned long set35[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140730536939520, 140737488351231, -SNULL, 140730536943615, 140737488351231, -STORE, 140730536939520, 140730536943615, -STORE, 140730536808448, 140730536943615, -STORE, 94245239877632, 94245242130431, -SNULL, 94245240008703, 94245242130431, -STORE, 94245239877632, 94245240008703, -STORE, 94245240008704, 94245242130431, -ERASE, 94245240008704, 94245242130431, -STORE, 94245242101760, 94245242109951, -STORE, 94245242109952, 94245242130431, -STORE, 140475575263232, 140475577516031, -SNULL, 140475575406591, 140475577516031, -STORE, 140475575263232, 140475575406591, -STORE, 140475575406592, 140475577516031, -ERASE, 140475575406592, 140475577516031, -STORE, 140475577503744, 140475577511935, -STORE, 140475577511936, 140475577516031, -STORE, 140730538164224, 140730538168319, -STORE, 140730538151936, 140730538164223, -STORE, 140475577475072, 140475577503743, -STORE, 140475577466880, 140475577475071, -STORE, 140475573047296, 140475575263231, -SNULL, 140475573047296, 140475573145599, -STORE, 140475573145600, 140475575263231, -STORE, 140475573047296, 140475573145599, -SNULL, 140475575238655, 140475575263231, -STORE, 140475573145600, 140475575238655, -STORE, 140475575238656, 140475575263231, -SNULL, 140475575238656, 140475575246847, -STORE, 140475575246848, 140475575263231, -STORE, 140475575238656, 140475575246847, -ERASE, 140475575238656, 140475575246847, -STORE, 140475575238656, 140475575246847, -ERASE, 140475575246848, 140475575263231, -STORE, 140475575246848, 140475575263231, -STORE, 140475569250304, 140475573047295, -SNULL, 140475569250304, 140475570909183, -STORE, 140475570909184, 140475573047295, -STORE, 140475569250304, 140475570909183, -SNULL, 140475573006335, 140475573047295, -STORE, 140475570909184, 140475573006335, -STORE, 140475573006336, 140475573047295, -SNULL, 140475573006336, 140475573030911, -STORE, 140475573030912, 140475573047295, -STORE, 140475573006336, 140475573030911, -ERASE, 140475573006336, 140475573030911, -STORE, 140475573006336, 140475573030911, -ERASE, 140475573030912, 140475573047295, -STORE, 140475573030912, 140475573047295, -STORE, 140475577458688, 140475577475071, -SNULL, 140475573022719, 140475573030911, -STORE, 140475573006336, 140475573022719, -STORE, 140475573022720, 140475573030911, -SNULL, 140475575242751, 140475575246847, -STORE, 140475575238656, 140475575242751, -STORE, 140475575242752, 140475575246847, -SNULL, 94245242105855, 94245242109951, -STORE, 94245242101760, 94245242105855, -STORE, 94245242105856, 94245242109951, -SNULL, 140475577507839, 140475577511935, -STORE, 140475577503744, 140475577507839, -STORE, 140475577507840, 140475577511935, -ERASE, 140475577475072, 140475577503743, -STORE, 94245271216128, 94245271351295, -STORE, 140475560857600, 140475569250303, -SNULL, 140475560861695, 140475569250303, -STORE, 140475560857600, 140475560861695, -STORE, 140475560861696, 140475569250303, -STORE, 140475552464896, 140475560857599, -STORE, 140475418247168, 140475552464895, -SNULL, 140475418247168, 140475428241407, -STORE, 140475428241408, 140475552464895, -STORE, 140475418247168, 140475428241407, -ERASE, 140475418247168, 140475428241407, -SNULL, 140475495350271, 140475552464895, -STORE, 140475428241408, 140475495350271, -STORE, 140475495350272, 140475552464895, -ERASE, 140475495350272, 140475552464895, -SNULL, 140475428376575, 140475495350271, -STORE, 140475428241408, 140475428376575, -STORE, 140475428376576, 140475495350271, -SNULL, 140475552468991, 140475560857599, -STORE, 140475552464896, 140475552468991, -STORE, 140475552468992, 140475560857599, -STORE, 140475544072192, 140475552464895, -SNULL, 140475544076287, 140475552464895, -STORE, 140475544072192, 140475544076287, -STORE, 140475544076288, 140475552464895, -STORE, 140475535679488, 140475544072191, -SNULL, 140475535683583, 140475544072191, -STORE, 140475535679488, 140475535683583, -STORE, 140475535683584, 140475544072191, -STORE, 140475527286784, 140475535679487, -SNULL, 140475527290879, 140475535679487, -STORE, 140475527286784, 140475527290879, -STORE, 140475527290880, 140475535679487, -STORE, 140475518894080, 140475527286783, -STORE, 140475510501376, 140475527286783, -STORE, 140475502108672, 140475527286783, -STORE, 140475419848704, 140475428241407, -STORE, 140475285630976, 140475419848703, -SNULL, 140475285630976, 140475294023679, -STORE, 140475294023680, 140475419848703, -STORE, 140475285630976, 140475294023679, -ERASE, 140475285630976, 140475294023679, -STORE, 140475159805952, 140475419848703, -STORE, 140475025588224, 140475419848703, -SNULL, 140475092697087, 140475419848703, -STORE, 140475025588224, 140475092697087, -STORE, 140475092697088, 140475419848703, -SNULL, 140475092697088, 140475159805951, -STORE, 140475159805952, 140475419848703, -STORE, 140475092697088, 140475159805951, -ERASE, 140475092697088, 140475159805951, -STORE, 140474891370496, 140475092697087, -SNULL, 140474958479359, 140475092697087, -STORE, 140474891370496, 140474958479359, -STORE, 140474958479360, 140475092697087, -SNULL, 140474958479360, 140475025588223, -STORE, 140475025588224, 140475092697087, -STORE, 140474958479360, 140475025588223, -ERASE, 140474958479360, 140475025588223, -SNULL, 140475361132543, 140475419848703, -STORE, 140475159805952, 140475361132543, -STORE, 140475361132544, 140475419848703, -ERASE, 140475361132544, 140475419848703, -SNULL, 140475159805952, 140475294023679, -STORE, 140475294023680, 140475361132543, -STORE, 140475159805952, 140475294023679, -SNULL, 140475294158847, 140475361132543, -STORE, 140475294023680, 140475294158847, -STORE, 140475294158848, 140475361132543, -SNULL, 140475226914815, 140475294023679, -STORE, 140475159805952, 140475226914815, -STORE, 140475226914816, 140475294023679, -ERASE, 140475226914816, 140475294023679, -SNULL, 140475025723391, 140475092697087, -STORE, 140475025588224, 140475025723391, -STORE, 140475025723392, 140475092697087, -SNULL, 140475159941119, 140475226914815, -STORE, 140475159805952, 140475159941119, -STORE, 140475159941120, 140475226914815, -SNULL, 140474891505663, 140474958479359, -STORE, 140474891370496, 140474891505663, -STORE, 140474891505664, 140474958479359, -SNULL, 140475502108672, 140475518894079, -STORE, 140475518894080, 140475527286783, -STORE, 140475502108672, 140475518894079, -SNULL, 140475518898175, 140475527286783, -STORE, 140475518894080, 140475518898175, -STORE, 140475518898176, 140475527286783, -STORE, 140475411456000, 140475428241407, -SNULL, 140475502112767, 140475518894079, -STORE, 140475502108672, 140475502112767, -STORE, 140475502112768, 140475518894079, -SNULL, 140475411460095, 140475428241407, -STORE, 140475411456000, 140475411460095, -STORE, 140475411460096, 140475428241407, -SNULL, 140475411460096, 140475419848703, -STORE, 140475419848704, 140475428241407, -STORE, 140475411460096, 140475419848703, -SNULL, 140475419852799, 140475428241407, -STORE, 140475419848704, 140475419852799, -STORE, 140475419852800, 140475428241407, -STORE, 140475403063296, 140475411455999, -SNULL, 140475502112768, 140475510501375, -STORE, 140475510501376, 140475518894079, -STORE, 140475502112768, 140475510501375, -SNULL, 140475510505471, 140475518894079, -STORE, 140475510501376, 140475510505471, -STORE, 140475510505472, 140475518894079, -SNULL, 140475403067391, 140475411455999, -STORE, 140475403063296, 140475403067391, -STORE, 140475403067392, 140475411455999, -STORE, 140475394670592, 140475403063295, -SNULL, 140475394674687, 140475403063295, -STORE, 140475394670592, 140475394674687, -STORE, 140475394674688, 140475403063295, -STORE, 140475386277888, 140475394670591, -STORE, 140475377885184, 140475394670591, -STORE, 140475369492480, 140475394670591, -SNULL, 140475369496575, 140475394670591, -STORE, 140475369492480, 140475369496575, -STORE, 140475369496576, 140475394670591, -SNULL, 140475369496576, 140475377885183, -STORE, 140475377885184, 140475394670591, -STORE, 140475369496576, 140475377885183, -SNULL, 140475377889279, 140475394670591, -STORE, 140475377885184, 140475377889279, -STORE, 140475377889280, 140475394670591, -STORE, 140475285630976, 140475294023679, -SNULL, 140475377889280, 140475386277887, -STORE, 140475386277888, 140475394670591, -STORE, 140475377889280, 140475386277887, -SNULL, 140475386281983, 140475394670591, -STORE, 140475386277888, 140475386281983, -STORE, 140475386281984, 140475394670591, -SNULL, 140475285635071, 140475294023679, -STORE, 140475285630976, 140475285635071, -STORE, 140475285635072, 140475294023679, -STORE, 140475277238272, 140475285630975, -STORE, 140475268845568, 140475285630975, -SNULL, 140475268845568, 140475277238271, -STORE, 140475277238272, 140475285630975, -STORE, 140475268845568, 140475277238271, -SNULL, 140475277242367, 140475285630975, -STORE, 140475277238272, 140475277242367, -STORE, 140475277242368, 140475285630975, -STORE, 140475260452864, 140475277238271, -SNULL, 140475260452864, 140475268845567, -STORE, 140475268845568, 140475277238271, -STORE, 140475260452864, 140475268845567, -SNULL, 140475268849663, 140475277238271, -STORE, 140475268845568, 140475268849663, -STORE, 140475268849664, 140475277238271, -SNULL, 140475260456959, 140475268845567, -STORE, 140475260452864, 140475260456959, -STORE, 140475260456960, 140475268845567, -STORE, 140475252060160, 140475260452863, -SNULL, 140475252064255, 140475260452863, -STORE, 140475252060160, 140475252064255, -STORE, 140475252064256, 140475260452863, -STORE, 140475243667456, 140475252060159, -SNULL, 140475243671551, 140475252060159, -STORE, 140475243667456, 140475243671551, -STORE, 140475243671552, 140475252060159, -STORE, 140475235274752, 140475243667455, -STORE, 140475151413248, 140475159805951, -STORE, 140474891505664, 140475025588223, -STORE, 140475143020544, 140475159805951, -SNULL, 140474891505664, 140474958479359, -STORE, 140474958479360, 140475025588223, -STORE, 140474891505664, 140474958479359, -SNULL, 140474958614527, 140475025588223, -STORE, 140474958479360, 140474958614527, -STORE, 140474958614528, 140475025588223, -STORE, 140474824261632, 140474891370495, -SNULL, 140474824396799, 140474891370495, -STORE, 140474824261632, 140474824396799, -STORE, 140474824396800, 140474891370495, -STORE, 140475134627840, 140475159805951, -STORE, 140474690043904, 140474824261631, -STORE, 140475126235136, 140475159805951, -STORE, 140475117842432, 140475159805951, -STORE, 140474622935040, 140474824261631, -STORE, 140475109449728, 140475159805951, -STORE, 140474488717312, 140474824261631, -STORE, 140475101057024, 140475159805951, -STORE, 140474480324608, 140474488717311, -STORE, 140474413215744, 140474480324607, -STORE, 140474404823040, 140474413215743, -ERASE, 140474413215744, 140474480324607, -STORE, 140474471931904, 140474488717311, -STORE, 140474270605312, 140474404823039, -SNULL, 140475101057024, 140475126235135, -STORE, 140475126235136, 140475159805951, -STORE, 140475101057024, 140475126235135, -SNULL, 140475126239231, 140475159805951, -STORE, 140475126235136, 140475126239231, -STORE, 140475126239232, 140475159805951, -STORE, 140474463539200, 140474488717311, -STORE, 140474455146496, 140474488717311, -SNULL, 140474455150591, 140474488717311, -STORE, 140474455146496, 140474455150591, -STORE, 140474455150592, 140474488717311, -STORE, 140474446753792, 140474455146495, -SNULL, 140474446757887, 140474455146495, -STORE, 140474446753792, 140474446757887, -STORE, 140474446757888, 140474455146495, -STORE, 140474438361088, 140474446753791, -STORE, 140474429968384, 140474446753791, -SNULL, 140474429972479, 140474446753791, -STORE, 140474429968384, 140474429972479, -STORE, 140474429972480, 140474446753791, -SNULL, 140475235278847, 140475243667455, -STORE, 140475235274752, 140475235278847, -STORE, 140475235278848, 140475243667455, -SNULL, 140474757152767, 140474824261631, -STORE, 140474488717312, 140474757152767, -STORE, 140474757152768, 140474824261631, -ERASE, 140474757152768, 140474824261631, -SNULL, 140474488717312, 140474690043903, -STORE, 140474690043904, 140474757152767, -STORE, 140474488717312, 140474690043903, -SNULL, 140474690179071, 140474757152767, -STORE, 140474690043904, 140474690179071, -STORE, 140474690179072, 140474757152767, -SNULL, 140474488717312, 140474622935039, -STORE, 140474622935040, 140474690043903, -STORE, 140474488717312, 140474622935039, -SNULL, 140474623070207, 140474690043903, -STORE, 140474622935040, 140474623070207, -STORE, 140474623070208, 140474690043903, -SNULL, 140475101057024, 140475117842431, -STORE, 140475117842432, 140475126235135, -STORE, 140475101057024, 140475117842431, -SNULL, 140475117846527, 140475126235135, -STORE, 140475117842432, 140475117846527, -STORE, 140475117846528, 140475126235135, -SNULL, 140474555826175, 140474622935039, -STORE, 140474488717312, 140474555826175, -STORE, 140474555826176, 140474622935039, -ERASE, 140474555826176, 140474622935039, -STORE, 140474136387584, 140474404823039, -SNULL, 140474136387584, 140474153172991, -STORE, 140474153172992, 140474404823039, -STORE, 140474136387584, 140474153172991, -ERASE, 140474136387584, 140474153172991, -STORE, 140474018955264, 140474404823039, -STORE, 140473884737536, 140474404823039, -SNULL, 140474086064127, 140474404823039, -STORE, 140473884737536, 140474086064127, -STORE, 140474086064128, 140474404823039, -SNULL, 140474086064128, 140474153172991, -STORE, 140474153172992, 140474404823039, -STORE, 140474086064128, 140474153172991, -ERASE, 140474086064128, 140474153172991, -STORE, 140473750519808, 140474086064127, -SNULL, 140473817628671, 140474086064127, -STORE, 140473750519808, 140473817628671, -STORE, 140473817628672, 140474086064127, -SNULL, 140473817628672, 140473884737535, -STORE, 140473884737536, 140474086064127, -STORE, 140473817628672, 140473884737535, -ERASE, 140473817628672, 140473884737535, -SNULL, 140475126239232, 140475151413247, -STORE, 140475151413248, 140475159805951, -STORE, 140475126239232, 140475151413247, -SNULL, 140475151417343, 140475159805951, -STORE, 140475151413248, 140475151417343, -STORE, 140475151417344, 140475159805951, -SNULL, 140474270605311, 140474404823039, -STORE, 140474153172992, 140474270605311, -STORE, 140474270605312, 140474404823039, -SNULL, 140474270605312, 140474287390719, -STORE, 140474287390720, 140474404823039, -STORE, 140474270605312, 140474287390719, -ERASE, 140474270605312, 140474287390719, -SNULL, 140474429972480, 140474438361087, -STORE, 140474438361088, 140474446753791, -STORE, 140474429972480, 140474438361087, -SNULL, 140474438365183, 140474446753791, -STORE, 140474438361088, 140474438365183, -STORE, 140474438365184, 140474446753791, -STORE, 140474815868928, 140474824261631, -SNULL, 140474815873023, 140474824261631, -STORE, 140474815868928, 140474815873023, -STORE, 140474815873024, 140474824261631, -SNULL, 140474220281855, 140474270605311, -STORE, 140474153172992, 140474220281855, -STORE, 140474220281856, 140474270605311, -ERASE, 140474220281856, 140474270605311, -SNULL, 140474488852479, 140474555826175, -STORE, 140474488717312, 140474488852479, -STORE, 140474488852480, 140474555826175, -SNULL, 140475101057024, 140475109449727, -STORE, 140475109449728, 140475117842431, -STORE, 140475101057024, 140475109449727, -SNULL, 140475109453823, 140475117842431, -STORE, 140475109449728, 140475109453823, -STORE, 140475109453824, 140475117842431, -SNULL, 140473951846399, 140474086064127, -STORE, 140473884737536, 140473951846399, -STORE, 140473951846400, 140474086064127, -SNULL, 140473951846400, 140474018955263, -STORE, 140474018955264, 140474086064127, -STORE, 140473951846400, 140474018955263, -ERASE, 140473951846400, 140474018955263, -SNULL, 140473884872703, 140473951846399, -STORE, 140473884737536, 140473884872703, -STORE, 140473884872704, 140473951846399, -SNULL, 140474019090431, 140474086064127, -STORE, 140474018955264, 140474019090431, -STORE, 140474019090432, 140474086064127, -SNULL, 140473750654975, 140473817628671, -STORE, 140473750519808, 140473750654975, -STORE, 140473750654976, 140473817628671, -SNULL, 140474455150592, 140474463539199, -STORE, 140474463539200, 140474488717311, -STORE, 140474455150592, 140474463539199, -SNULL, 140474463543295, 140474488717311, -STORE, 140474463539200, 140474463543295, -STORE, 140474463543296, 140474488717311, -STORE, 140474807476224, 140474815868927, -SNULL, 140474463543296, 140474471931903, -STORE, 140474471931904, 140474488717311, -STORE, 140474463543296, 140474471931903, -SNULL, 140474471935999, 140474488717311, -STORE, 140474471931904, 140474471935999, -STORE, 140474471936000, 140474488717311, -STORE, 140474799083520, 140474815868927, -STORE, 140474790690816, 140474815868927, -SNULL, 140474790690816, 140474799083519, -STORE, 140474799083520, 140474815868927, -STORE, 140474790690816, 140474799083519, -SNULL, 140474799087615, 140474815868927, -STORE, 140474799083520, 140474799087615, -STORE, 140474799087616, 140474815868927, -SNULL, 140474354499583, 140474404823039, -STORE, 140474287390720, 140474354499583, -STORE, 140474354499584, 140474404823039, -ERASE, 140474354499584, 140474404823039, -SNULL, 140474287525887, 140474354499583, -STORE, 140474287390720, 140474287525887, -STORE, 140474287525888, 140474354499583, -STORE, 140474782298112, 140474799083519, -STORE, 140474773905408, 140474799083519, -SNULL, 140474773909503, 140474799083519, -STORE, 140474773905408, 140474773909503, -STORE, 140474773909504, 140474799083519, -SNULL, 140475126239232, 140475134627839, -STORE, 140475134627840, 140475151413247, -STORE, 140475126239232, 140475134627839, -SNULL, 140475134631935, 140475151413247, -STORE, 140475134627840, 140475134631935, -STORE, 140475134631936, 140475151413247, -STORE, 140474765512704, 140474773905407, -STORE, 140474614542336, 140474622935039, -SNULL, 140474153308159, 140474220281855, -STORE, 140474153172992, 140474153308159, -STORE, 140474153308160, 140474220281855, -SNULL, 140474404827135, 140474413215743, -STORE, 140474404823040, 140474404827135, -STORE, 140474404827136, 140474413215743, -STORE, 140474606149632, 140474622935039, -SNULL, 140474606153727, 140474622935039, -STORE, 140474606149632, 140474606153727, -STORE, 140474606153728, 140474622935039, -STORE, 140474597756928, 140474606149631, -SNULL, 140474597761023, 140474606149631, -STORE, 140474597756928, 140474597761023, -STORE, 140474597761024, 140474606149631, -SNULL, 140475134631936, 140475143020543, -STORE, 140475143020544, 140475151413247, -STORE, 140475134631936, 140475143020543, -SNULL, 140475143024639, 140475151413247, -STORE, 140475143020544, 140475143024639, -STORE, 140475143024640, 140475151413247, -STORE, 140474589364224, 140474597756927, -SNULL, 140474606153728, 140474614542335, -STORE, 140474614542336, 140474622935039, -STORE, 140474606153728, 140474614542335, -SNULL, 140474614546431, 140474622935039, -STORE, 140474614542336, 140474614546431, -STORE, 140474614546432, 140474622935039, -SNULL, 140474765516799, 140474773905407, -STORE, 140474765512704, 140474765516799, -STORE, 140474765516800, 140474773905407, -STORE, 140474580971520, 140474597756927, -SNULL, 140474773909504, 140474782298111, -STORE, 140474782298112, 140474799083519, -STORE, 140474773909504, 140474782298111, -SNULL, 140474782302207, 140474799083519, -STORE, 140474782298112, 140474782302207, -STORE, 140474782302208, 140474799083519, -SNULL, 140474471936000, 140474480324607, -STORE, 140474480324608, 140474488717311, -STORE, 140474471936000, 140474480324607, -SNULL, 140474480328703, 140474488717311, -STORE, 140474480324608, 140474480328703, -STORE, 140474480328704, 140474488717311, -STORE, 140474572578816, 140474597756927, -SNULL, 140474572582911, 140474597756927, -STORE, 140474572578816, 140474572582911, -STORE, 140474572582912, 140474597756927, -SNULL, 140474782302208, 140474790690815, -STORE, 140474790690816, 140474799083519, -STORE, 140474782302208, 140474790690815, -SNULL, 140474790694911, 140474799083519, -STORE, 140474790690816, 140474790694911, -STORE, 140474790694912, 140474799083519, -STORE, 140474564186112, 140474572578815, -STORE, 140474421575680, 140474429968383, -STORE, 140474396430336, 140474404823039, -SNULL, 140474396434431, 140474404823039, -STORE, 140474396430336, 140474396434431, -STORE, 140474396434432, 140474404823039, -STORE, 140474388037632, 140474396430335, -SNULL, 140474799087616, 140474807476223, -STORE, 140474807476224, 140474815868927, -STORE, 140474799087616, 140474807476223, -SNULL, 140474807480319, 140474815868927, -STORE, 140474807476224, 140474807480319, -STORE, 140474807480320, 140474815868927, -SNULL, 140475101061119, 140475109449727, -STORE, 140475101057024, 140475101061119, -STORE, 140475101061120, 140475109449727, -STORE, 140474379644928, 140474396430335, -SNULL, 140474572582912, 140474589364223, -STORE, 140474589364224, 140474597756927, -STORE, 140474572582912, 140474589364223, -SNULL, 140474589368319, 140474597756927, -STORE, 140474589364224, 140474589368319, -STORE, 140474589368320, 140474597756927, -STORE, 140474371252224, 140474396430335, -STORE, 140474362859520, 140474396430335, -STORE, 140474278998016, 140474287390719, -STORE, 140474270605312, 140474287390719, -STORE, 140474262212608, 140474287390719, -SNULL, 140474262216703, 140474287390719, -STORE, 140474262212608, 140474262216703, -STORE, 140474262216704, 140474287390719, -STORE, 140474253819904, 140474262212607, -SNULL, 140474253823999, 140474262212607, -STORE, 140474253819904, 140474253823999, -STORE, 140474253824000, 140474262212607, -SNULL, 140474362859520, 140474388037631, -STORE, 140474388037632, 140474396430335, -STORE, 140474362859520, 140474388037631, -SNULL, 140474388041727, 140474396430335, -STORE, 140474388037632, 140474388041727, -STORE, 140474388041728, 140474396430335, -SNULL, 140474362859520, 140474379644927, -STORE, 140474379644928, 140474388037631, -STORE, 140474362859520, 140474379644927, -SNULL, 140474379649023, 140474388037631, -STORE, 140474379644928, 140474379649023, -STORE, 140474379649024, 140474388037631, -STORE, 140474245427200, 140474253819903, -STORE, 140474237034496, 140474253819903, -STORE, 140474228641792, 140474253819903, -STORE, 140474144780288, 140474153172991, -SNULL, 140474228645887, 140474253819903, -STORE, 140474228641792, 140474228645887, -STORE, 140474228645888, 140474253819903, -SNULL, 140474564190207, 140474572578815, -STORE, 140474564186112, 140474564190207, -STORE, 140474564190208, 140474572578815, -STORE, 140474136387584, 140474153172991, -SNULL, 140474362859520, 140474371252223, -STORE, 140474371252224, 140474379644927, -STORE, 140474362859520, 140474371252223, -SNULL, 140474371256319, 140474379644927, -STORE, 140474371252224, 140474371256319, -STORE, 140474371256320, 140474379644927, -STORE, 140474127994880, 140474153172991, -STORE, 140474119602176, 140474153172991, -SNULL, 140474421579775, 140474429968383, -STORE, 140474421575680, 140474421579775, -STORE, 140474421579776, 140474429968383, -STORE, 140474111209472, 140474153172991, -SNULL, 140474111213567, 140474153172991, -STORE, 140474111209472, 140474111213567, -STORE, 140474111213568, 140474153172991, -SNULL, 140474262216704, 140474270605311, -STORE, 140474270605312, 140474287390719, -STORE, 140474262216704, 140474270605311, -SNULL, 140474270609407, 140474287390719, -STORE, 140474270605312, 140474270609407, -STORE, 140474270609408, 140474287390719, -STORE, 140474102816768, 140474111209471, -SNULL, 140474102820863, 140474111209471, -STORE, 140474102816768, 140474102820863, -STORE, 140474102820864, 140474111209471, -SNULL, 140474270609408, 140474278998015, -STORE, 140474278998016, 140474287390719, -STORE, 140474270609408, 140474278998015, -SNULL, 140474279002111, 140474287390719, -STORE, 140474278998016, 140474279002111, -STORE, 140474279002112, 140474287390719, -STORE, 140474094424064, 140474102816767, -SNULL, 140474572582912, 140474580971519, -STORE, 140474580971520, 140474589364223, -STORE, 140474572582912, 140474580971519, -SNULL, 140474580975615, 140474589364223, -STORE, 140474580971520, 140474580975615, -STORE, 140474580975616, 140474589364223, -SNULL, 140474362863615, 140474371252223, -STORE, 140474362859520, 140474362863615, -STORE, 140474362863616, 140474371252223, -STORE, 140474010562560, 140474018955263, -SNULL, 140474228645888, 140474245427199, -STORE, 140474245427200, 140474253819903, -STORE, 140474228645888, 140474245427199, -SNULL, 140474245431295, 140474253819903, -STORE, 140474245427200, 140474245431295, -STORE, 140474245431296, 140474253819903, -SNULL, 140474111213568, 140474136387583, -STORE, 140474136387584, 140474153172991, -STORE, 140474111213568, 140474136387583, -SNULL, 140474136391679, 140474153172991, -STORE, 140474136387584, 140474136391679, -STORE, 140474136391680, 140474153172991, -STORE, 140474002169856, 140474018955263, -STORE, 140473993777152, 140474018955263, -SNULL, 140474111213568, 140474127994879, -STORE, 140474127994880, 140474136387583, -STORE, 140474111213568, 140474127994879, -SNULL, 140474127998975, 140474136387583, -STORE, 140474127994880, 140474127998975, -STORE, 140474127998976, 140474136387583, -SNULL, 140474228645888, 140474237034495, -STORE, 140474237034496, 140474245427199, -STORE, 140474228645888, 140474237034495, -SNULL, 140474237038591, 140474245427199, -STORE, 140474237034496, 140474237038591, -STORE, 140474237038592, 140474245427199, -SNULL, 140474136391680, 140474144780287, -STORE, 140474144780288, 140474153172991, -STORE, 140474136391680, 140474144780287, -SNULL, 140474144784383, 140474153172991, -STORE, 140474144780288, 140474144784383, -STORE, 140474144784384, 140474153172991, -STORE, 140473985384448, 140474018955263, -STORE, 140473976991744, 140474018955263, -STORE, 140473968599040, 140474018955263, -SNULL, 140473968603135, 140474018955263, -STORE, 140473968599040, 140473968603135, -STORE, 140473968603136, 140474018955263, -SNULL, 140474111213568, 140474119602175, -STORE, 140474119602176, 140474127994879, -STORE, 140474111213568, 140474119602175, -SNULL, 140474119606271, 140474127994879, -STORE, 140474119602176, 140474119606271, -STORE, 140474119606272, 140474127994879, -STORE, 140473960206336, 140473968599039, -SNULL, 140474094428159, 140474102816767, -STORE, 140474094424064, 140474094428159, -STORE, 140474094428160, 140474102816767, -STORE, 140473876344832, 140473884737535, -STORE, 140473867952128, 140473884737535, -STORE, 140473859559424, 140473884737535, -SNULL, 140473859563519, 140473884737535, -STORE, 140473859559424, 140473859563519, -STORE, 140473859563520, 140473884737535, -SNULL, 140473968603136, 140473993777151, -STORE, 140473993777152, 140474018955263, -STORE, 140473968603136, 140473993777151, -SNULL, 140473993781247, 140474018955263, -STORE, 140473993777152, 140473993781247, -STORE, 140473993781248, 140474018955263, -SNULL, 140473960210431, 140473968599039, -STORE, 140473960206336, 140473960210431, -STORE, 140473960210432, 140473968599039, -SNULL, 140473993781248, 140474010562559, -STORE, 140474010562560, 140474018955263, -STORE, 140473993781248, 140474010562559, -SNULL, 140474010566655, 140474018955263, -STORE, 140474010562560, 140474010566655, -STORE, 140474010566656, 140474018955263, -SNULL, 140473968603136, 140473985384447, -STORE, 140473985384448, 140473993777151, -STORE, 140473968603136, 140473985384447, -SNULL, 140473985388543, 140473993777151, -STORE, 140473985384448, 140473985388543, -STORE, 140473985388544, 140473993777151, -SNULL, 140473993781248, 140474002169855, -STORE, 140474002169856, 140474010562559, -STORE, 140473993781248, 140474002169855, -SNULL, 140474002173951, 140474010562559, -STORE, 140474002169856, 140474002173951, -STORE, 140474002173952, 140474010562559, -STORE, 140473851166720, 140473859559423, -SNULL, 140473851170815, 140473859559423, -STORE, 140473851166720, 140473851170815, -STORE, 140473851170816, 140473859559423, -SNULL, 140473968603136, 140473976991743, -STORE, 140473976991744, 140473985384447, -STORE, 140473968603136, 140473976991743, -SNULL, 140473976995839, 140473985384447, -STORE, 140473976991744, 140473976995839, -STORE, 140473976995840, 140473985384447, -STORE, 140473842774016, 140473851166719, -SNULL, 140473859563520, 140473867952127, -STORE, 140473867952128, 140473884737535, -STORE, 140473859563520, 140473867952127, -SNULL, 140473867956223, 140473884737535, -STORE, 140473867952128, 140473867956223, -STORE, 140473867956224, 140473884737535, -SNULL, 140473867956224, 140473876344831, -STORE, 140473876344832, 140473884737535, -STORE, 140473867956224, 140473876344831, -SNULL, 140473876348927, 140473884737535, -STORE, 140473876344832, 140473876348927, -STORE, 140473876348928, 140473884737535, -STORE, 140473834381312, 140473851166719, -SNULL, 140473834385407, 140473851166719, -STORE, 140473834381312, 140473834385407, -STORE, 140473834385408, 140473851166719, -SNULL, 140473834385408, 140473842774015, -STORE, 140473842774016, 140473851166719, -STORE, 140473834385408, 140473842774015, -SNULL, 140473842778111, 140473851166719, -STORE, 140473842774016, 140473842778111, -STORE, 140473842778112, 140473851166719, -STORE, 140473825988608, 140473834381311, -SNULL, 140473825992703, 140473834381311, -STORE, 140473825988608, 140473825992703, -STORE, 140473825992704, 140473834381311, -STORE, 140475577475072, 140475577503743, -STORE, 140475499917312, 140475502108671, -SNULL, 140475499917312, 140475500007423, -STORE, 140475500007424, 140475502108671, -STORE, 140475499917312, 140475500007423, -SNULL, 140475502100479, 140475502108671, -STORE, 140475500007424, 140475502100479, -STORE, 140475502100480, 140475502108671, -ERASE, 140475502100480, 140475502108671, -STORE, 140475502100480, 140475502108671, -SNULL, 140475502104575, 140475502108671, -STORE, 140475502100480, 140475502104575, -STORE, 140475502104576, 140475502108671, -ERASE, 140475577475072, 140475577503743, -ERASE, 140475235274752, 140475235278847, -ERASE, 140475235278848, 140475243667455, -ERASE, 140474815868928, 140474815873023, -ERASE, 140474815873024, 140474824261631, -ERASE, 140474606149632, 140474606153727, -ERASE, 140474606153728, 140474614542335, -ERASE, 140474270605312, 140474270609407, -ERASE, 140474270609408, 140474278998015, -ERASE, 140474438361088, 140474438365183, -ERASE, 140474438365184, 140474446753791, -ERASE, 140474597756928, 140474597761023, -ERASE, 140474597761024, 140474606149631, -ERASE, 140475126235136, 140475126239231, -ERASE, 140475126239232, 140475134627839, -ERASE, 140474463539200, 140474463543295, -ERASE, 140474463543296, 140474471931903, -ERASE, 140474388037632, 140474388041727, -ERASE, 140474388041728, 140474396430335, -ERASE, 140474404823040, 140474404827135, -ERASE, 140474404827136, 140474413215743, -ERASE, 140474278998016, 140474279002111, -ERASE, 140474279002112, 140474287390719, -ERASE, 140474094424064, 140474094428159, -ERASE, 140474094428160, 140474102816767, -ERASE, 140473867952128, 140473867956223, -ERASE, 140473867956224, 140473876344831, -ERASE, 140475151413248, 140475151417343, -ERASE, 140475151417344, 140475159805951, -ERASE, 140474455146496, 140474455150591, -ERASE, 140474455150592, 140474463539199, -ERASE, 140474807476224, 140474807480319, -ERASE, 140474807480320, 140474815868927, -ERASE, 140475117842432, 140475117846527, -ERASE, 140475117846528, 140475126235135, -ERASE, 140474446753792, 140474446757887, -ERASE, 140474446757888, 140474455146495, -ERASE, 140474429968384, 140474429972479, -ERASE, 140474429972480, 140474438361087, -ERASE, 140474782298112, 140474782302207, -ERASE, 140474782302208, 140474790690815, -ERASE, 140474136387584, 140474136391679, -ERASE, 140474136391680, 140474144780287, -ERASE, 140474002169856, 140474002173951, -ERASE, 140474002173952, 140474010562559, -ERASE, 140475134627840, 140475134631935, -ERASE, 140475134631936, 140475143020543, -ERASE, 140474471931904, 140474471935999, -ERASE, 140474471936000, 140474480324607, -ERASE, 140474396430336, 140474396434431, -ERASE, 140474396434432, 140474404823039, - }; - unsigned long set36[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140723893125120, 140737488351231, -SNULL, 140723893129215, 140737488351231, -STORE, 140723893125120, 140723893129215, -STORE, 140723892994048, 140723893129215, -STORE, 94076829786112, 94076832038911, -SNULL, 94076829917183, 94076832038911, -STORE, 94076829786112, 94076829917183, -STORE, 94076829917184, 94076832038911, -ERASE, 94076829917184, 94076832038911, -STORE, 94076832010240, 94076832018431, -STORE, 94076832018432, 94076832038911, -STORE, 140122444345344, 140122446598143, -SNULL, 140122444488703, 140122446598143, -STORE, 140122444345344, 140122444488703, -STORE, 140122444488704, 140122446598143, -ERASE, 140122444488704, 140122446598143, -STORE, 140122446585856, 140122446594047, -STORE, 140122446594048, 140122446598143, -STORE, 140723893538816, 140723893542911, -STORE, 140723893526528, 140723893538815, -STORE, 140122446557184, 140122446585855, -STORE, 140122446548992, 140122446557183, -STORE, 140122442129408, 140122444345343, -SNULL, 140122442129408, 140122442227711, -STORE, 140122442227712, 140122444345343, -STORE, 140122442129408, 140122442227711, -SNULL, 140122444320767, 140122444345343, -STORE, 140122442227712, 140122444320767, -STORE, 140122444320768, 140122444345343, -SNULL, 140122444320768, 140122444328959, -STORE, 140122444328960, 140122444345343, -STORE, 140122444320768, 140122444328959, -ERASE, 140122444320768, 140122444328959, -STORE, 140122444320768, 140122444328959, -ERASE, 140122444328960, 140122444345343, -STORE, 140122444328960, 140122444345343, -STORE, 140122438332416, 140122442129407, -SNULL, 140122438332416, 140122439991295, -STORE, 140122439991296, 140122442129407, -STORE, 140122438332416, 140122439991295, -SNULL, 140122442088447, 140122442129407, -STORE, 140122439991296, 140122442088447, -STORE, 140122442088448, 140122442129407, -SNULL, 140122442088448, 140122442113023, -STORE, 140122442113024, 140122442129407, -STORE, 140122442088448, 140122442113023, -ERASE, 140122442088448, 140122442113023, -STORE, 140122442088448, 140122442113023, -ERASE, 140122442113024, 140122442129407, -STORE, 140122442113024, 140122442129407, -STORE, 140122446540800, 140122446557183, -SNULL, 140122442104831, 140122442113023, -STORE, 140122442088448, 140122442104831, -STORE, 140122442104832, 140122442113023, -SNULL, 140122444324863, 140122444328959, -STORE, 140122444320768, 140122444324863, -STORE, 140122444324864, 140122444328959, -SNULL, 94076832014335, 94076832018431, -STORE, 94076832010240, 94076832014335, -STORE, 94076832014336, 94076832018431, -SNULL, 140122446589951, 140122446594047, -STORE, 140122446585856, 140122446589951, -STORE, 140122446589952, 140122446594047, -ERASE, 140122446557184, 140122446585855, -STORE, 94076845723648, 94076845858815, -STORE, 140122429939712, 140122438332415, -SNULL, 140122429943807, 140122438332415, -STORE, 140122429939712, 140122429943807, -STORE, 140122429943808, 140122438332415, -STORE, 140122421547008, 140122429939711, -STORE, 140122287329280, 140122421547007, -SNULL, 140122287329280, 140122301399039, -STORE, 140122301399040, 140122421547007, -STORE, 140122287329280, 140122301399039, -ERASE, 140122287329280, 140122301399039, -SNULL, 140122368507903, 140122421547007, -STORE, 140122301399040, 140122368507903, -STORE, 140122368507904, 140122421547007, -ERASE, 140122368507904, 140122421547007, -SNULL, 140122301534207, 140122368507903, -STORE, 140122301399040, 140122301534207, -STORE, 140122301534208, 140122368507903, -SNULL, 140122421551103, 140122429939711, -STORE, 140122421547008, 140122421551103, -STORE, 140122421551104, 140122429939711, -STORE, 140122413154304, 140122421547007, -SNULL, 140122413158399, 140122421547007, -STORE, 140122413154304, 140122413158399, -STORE, 140122413158400, 140122421547007, -STORE, 140122404761600, 140122413154303, -SNULL, 140122404765695, 140122413154303, -STORE, 140122404761600, 140122404765695, -STORE, 140122404765696, 140122413154303, -STORE, 140122396368896, 140122404761599, -SNULL, 140122396372991, 140122404761599, -STORE, 140122396368896, 140122396372991, -STORE, 140122396372992, 140122404761599, -STORE, 140122387976192, 140122396368895, -STORE, 140122167181312, 140122301399039, -SNULL, 140122234290175, 140122301399039, -STORE, 140122167181312, 140122234290175, -STORE, 140122234290176, 140122301399039, -ERASE, 140122234290176, 140122301399039, -SNULL, 140122167316479, 140122234290175, -STORE, 140122167181312, 140122167316479, -STORE, 140122167316480, 140122234290175, -STORE, 140122379583488, 140122396368895, -STORE, 140122371190784, 140122396368895, -STORE, 140122167316480, 140122301399039, -STORE, 140122158788608, 140122167181311, -SNULL, 140122371190784, 140122387976191, -STORE, 140122387976192, 140122396368895, -STORE, 140122371190784, 140122387976191, -SNULL, 140122387980287, 140122396368895, -STORE, 140122387976192, 140122387980287, -STORE, 140122387980288, 140122396368895, -SNULL, 140122167316480, 140122234290175, -STORE, 140122234290176, 140122301399039, -STORE, 140122167316480, 140122234290175, -SNULL, 140122234425343, 140122301399039, -STORE, 140122234290176, 140122234425343, -STORE, 140122234425344, 140122301399039, -STORE, 140122024570880, 140122158788607, -SNULL, 140122024570880, 140122032963583, -STORE, 140122032963584, 140122158788607, -STORE, 140122024570880, 140122032963583, -ERASE, 140122024570880, 140122032963583, -STORE, 140121898745856, 140122158788607, -STORE, 140121890353152, 140121898745855, -SNULL, 140122100072447, 140122158788607, -STORE, 140121898745856, 140122100072447, -STORE, 140122100072448, 140122158788607, -ERASE, 140122100072448, 140122158788607, -SNULL, 140121965854719, 140122100072447, -STORE, 140121898745856, 140121965854719, -STORE, 140121965854720, 140122100072447, -SNULL, 140121965854720, 140122032963583, -STORE, 140122032963584, 140122100072447, -STORE, 140121965854720, 140122032963583, -ERASE, 140121965854720, 140122032963583, -SNULL, 140121898881023, 140121965854719, -STORE, 140121898745856, 140121898881023, -STORE, 140121898881024, 140121965854719, -SNULL, 140121890357247, 140121898745855, -STORE, 140121890353152, 140121890357247, -STORE, 140121890357248, 140121898745855, -SNULL, 140122371190784, 140122379583487, -STORE, 140122379583488, 140122387976191, -STORE, 140122371190784, 140122379583487, -SNULL, 140122379587583, 140122387976191, -STORE, 140122379583488, 140122379587583, -STORE, 140122379587584, 140122387976191, -SNULL, 140122033098751, 140122100072447, -STORE, 140122032963584, 140122033098751, -STORE, 140122033098752, 140122100072447, -SNULL, 140122158792703, 140122167181311, -STORE, 140122158788608, 140122158792703, -STORE, 140122158792704, 140122167181311, -STORE, 140122150395904, 140122158788607, -STORE, 140122142003200, 140122158788607, -SNULL, 140122142007295, 140122158788607, -STORE, 140122142003200, 140122142007295, -STORE, 140122142007296, 140122158788607, -SNULL, 140122371194879, 140122379583487, -STORE, 140122371190784, 140122371194879, -STORE, 140122371194880, 140122379583487, -SNULL, 140122142007296, 140122150395903, -STORE, 140122150395904, 140122158788607, -STORE, 140122142007296, 140122150395903, -SNULL, 140122150399999, 140122158788607, -STORE, 140122150395904, 140122150399999, -STORE, 140122150400000, 140122158788607, -STORE, 140122133610496, 140122142003199, -STORE, 140122125217792, 140122142003199, -STORE, 140122116825088, 140122142003199, -SNULL, 140122116829183, 140122142003199, -STORE, 140122116825088, 140122116829183, -STORE, 140122116829184, 140122142003199, -SNULL, 140122116829184, 140122133610495, -STORE, 140122133610496, 140122142003199, -STORE, 140122116829184, 140122133610495, -SNULL, 140122133614591, 140122142003199, -STORE, 140122133610496, 140122133614591, -STORE, 140122133614592, 140122142003199, -SNULL, 140122116829184, 140122125217791, -STORE, 140122125217792, 140122133610495, -STORE, 140122116829184, 140122125217791, -SNULL, 140122125221887, 140122133610495, -STORE, 140122125217792, 140122125221887, -STORE, 140122125221888, 140122133610495, -STORE, 140122108432384, 140122116825087, -SNULL, 140122108436479, 140122116825087, -STORE, 140122108432384, 140122108436479, -STORE, 140122108436480, 140122116825087, -STORE, 140122024570880, 140122032963583, -STORE, 140122016178176, 140122032963583, -SNULL, 140122016182271, 140122032963583, -STORE, 140122016178176, 140122016182271, -STORE, 140122016182272, 140122032963583, -SNULL, 140122016182272, 140122024570879, -STORE, 140122024570880, 140122032963583, -STORE, 140122016182272, 140122024570879, -SNULL, 140122024574975, 140122032963583, -STORE, 140122024570880, 140122024574975, -STORE, 140122024574976, 140122032963583, -STORE, 140122007785472, 140122016178175, -SNULL, 140122007789567, 140122016178175, -STORE, 140122007785472, 140122007789567, -STORE, 140122007789568, 140122016178175, -STORE, 140121999392768, 140122007785471, -STORE, 140121991000064, 140122007785471, -SNULL, 140121991004159, 140122007785471, -STORE, 140121991000064, 140121991004159, -STORE, 140121991004160, 140122007785471, -SNULL, 140121991004160, 140121999392767, -STORE, 140121999392768, 140122007785471, -STORE, 140121991004160, 140121999392767, -SNULL, 140121999396863, 140122007785471, -STORE, 140121999392768, 140121999396863, -STORE, 140121999396864, 140122007785471, -STORE, 140121982607360, 140121991000063, -STORE, 140121823244288, 140121890353151, -ERASE, 140121823244288, 140121890353151, -STORE, 140121756135424, 140121890353151, -SNULL, 140121756135424, 140121764528127, -STORE, 140121764528128, 140121890353151, -STORE, 140121756135424, 140121764528127, -ERASE, 140121756135424, 140121764528127, -SNULL, 140121831636991, 140121890353151, -STORE, 140121764528128, 140121831636991, -STORE, 140121831636992, 140121890353151, -ERASE, 140121831636992, 140121890353151, -STORE, 140121974214656, 140121991000063, -STORE, 140121630310400, 140121831636991, -SNULL, 140121697419263, 140121831636991, -STORE, 140121630310400, 140121697419263, -STORE, 140121697419264, 140121831636991, -SNULL, 140121697419264, 140121764528127, -STORE, 140121764528128, 140121831636991, -STORE, 140121697419264, 140121764528127, -ERASE, 140121697419264, 140121764528127, -STORE, 140121881960448, 140121890353151, -STORE, 140121630310400, 140121831636991, -STORE, 140121873567744, 140121890353151, -SNULL, 140121630310400, 140121697419263, -STORE, 140121697419264, 140121831636991, -STORE, 140121630310400, 140121697419263, -SNULL, 140121697554431, 140121831636991, -STORE, 140121697419264, 140121697554431, -STORE, 140121697554432, 140121831636991, -STORE, 140121865175040, 140121890353151, -STORE, 140121856782336, 140121890353151, -STORE, 140121848389632, 140121890353151, -STORE, 140121839996928, 140121890353151, -STORE, 140121496092672, 140121697419263, -STORE, 140121487699968, 140121496092671, -STORE, 140121420591104, 140121487699967, -STORE, 140121412198400, 140121420591103, -ERASE, 140121420591104, 140121487699967, -STORE, 140121479307264, 140121496092671, -STORE, 140121277980672, 140121412198399, -SNULL, 140121277980672, 140121294766079, -STORE, 140121294766080, 140121412198399, -STORE, 140121277980672, 140121294766079, -ERASE, 140121277980672, 140121294766079, -STORE, 140121470914560, 140121496092671, -STORE, 140121462521856, 140121496092671, -STORE, 140121160548352, 140121412198399, -STORE, 140121454129152, 140121496092671, -SNULL, 140121227657215, 140121412198399, -STORE, 140121160548352, 140121227657215, -STORE, 140121227657216, 140121412198399, -SNULL, 140121227657216, 140121294766079, -STORE, 140121294766080, 140121412198399, -STORE, 140121227657216, 140121294766079, -ERASE, 140121227657216, 140121294766079, -STORE, 140121445736448, 140121496092671, -STORE, 140121437343744, 140121496092671, -SNULL, 140121437343744, 140121445736447, -STORE, 140121445736448, 140121496092671, -STORE, 140121437343744, 140121445736447, -SNULL, 140121445740543, 140121496092671, -STORE, 140121445736448, 140121445740543, -STORE, 140121445740544, 140121496092671, -SNULL, 140121697554432, 140121764528127, -STORE, 140121764528128, 140121831636991, -STORE, 140121697554432, 140121764528127, -SNULL, 140121764663295, 140121831636991, -STORE, 140121764528128, 140121764663295, -STORE, 140121764663296, 140121831636991, -SNULL, 140121496092672, 140121630310399, -STORE, 140121630310400, 140121697419263, -STORE, 140121496092672, 140121630310399, -SNULL, 140121630445567, 140121697419263, -STORE, 140121630310400, 140121630445567, -STORE, 140121630445568, 140121697419263, -SNULL, 140121445740544, 140121454129151, -STORE, 140121454129152, 140121496092671, -STORE, 140121445740544, 140121454129151, -SNULL, 140121454133247, 140121496092671, -STORE, 140121454129152, 140121454133247, -STORE, 140121454133248, 140121496092671, -STORE, 140121026330624, 140121227657215, -SNULL, 140121093439487, 140121227657215, -STORE, 140121026330624, 140121093439487, -STORE, 140121093439488, 140121227657215, -SNULL, 140121093439488, 140121160548351, -STORE, 140121160548352, 140121227657215, -STORE, 140121093439488, 140121160548351, -ERASE, 140121093439488, 140121160548351, -SNULL, 140121563201535, 140121630310399, -STORE, 140121496092672, 140121563201535, -STORE, 140121563201536, 140121630310399, -ERASE, 140121563201536, 140121630310399, -STORE, 140120892112896, 140121093439487, -SNULL, 140120959221759, 140121093439487, -STORE, 140120892112896, 140120959221759, -STORE, 140120959221760, 140121093439487, -SNULL, 140120959221760, 140121026330623, -STORE, 140121026330624, 140121093439487, -STORE, 140120959221760, 140121026330623, -ERASE, 140120959221760, 140121026330623, -STORE, 140120757895168, 140120959221759, -SNULL, 140121361874943, 140121412198399, -STORE, 140121294766080, 140121361874943, -STORE, 140121361874944, 140121412198399, -ERASE, 140121361874944, 140121412198399, -SNULL, 140121294901247, 140121361874943, -STORE, 140121294766080, 140121294901247, -STORE, 140121294901248, 140121361874943, -STORE, 140120623677440, 140120959221759, -SNULL, 140120690786303, 140120959221759, -STORE, 140120623677440, 140120690786303, -STORE, 140120690786304, 140120959221759, -SNULL, 140120690786304, 140120757895167, -STORE, 140120757895168, 140120959221759, -STORE, 140120690786304, 140120757895167, -ERASE, 140120690786304, 140120757895167, -SNULL, 140121160683519, 140121227657215, -STORE, 140121160548352, 140121160683519, -STORE, 140121160683520, 140121227657215, -SNULL, 140121974214656, 140121982607359, -STORE, 140121982607360, 140121991000063, -STORE, 140121974214656, 140121982607359, -SNULL, 140121982611455, 140121991000063, -STORE, 140121982607360, 140121982611455, -STORE, 140121982611456, 140121991000063, -SNULL, 140121839996928, 140121873567743, -STORE, 140121873567744, 140121890353151, -STORE, 140121839996928, 140121873567743, -SNULL, 140121873571839, 140121890353151, -STORE, 140121873567744, 140121873571839, -STORE, 140121873571840, 140121890353151, -SNULL, 140121873571840, 140121881960447, -STORE, 140121881960448, 140121890353151, -STORE, 140121873571840, 140121881960447, -SNULL, 140121881964543, 140121890353151, -STORE, 140121881960448, 140121881964543, -STORE, 140121881964544, 140121890353151, -SNULL, 140121840001023, 140121873567743, -STORE, 140121839996928, 140121840001023, -STORE, 140121840001024, 140121873567743, -SNULL, 140121840001024, 140121865175039, -STORE, 140121865175040, 140121873567743, -STORE, 140121840001024, 140121865175039, -SNULL, 140121865179135, 140121873567743, -STORE, 140121865175040, 140121865179135, -STORE, 140121865179136, 140121873567743, -SNULL, 140121437347839, 140121445736447, -STORE, 140121437343744, 140121437347839, -STORE, 140121437347840, 140121445736447, -STORE, 140121621917696, 140121630310399, -STORE, 140121613524992, 140121630310399, -SNULL, 140121026465791, 140121093439487, -STORE, 140121026330624, 140121026465791, -STORE, 140121026465792, 140121093439487, -SNULL, 140121496227839, 140121563201535, -STORE, 140121496092672, 140121496227839, -STORE, 140121496227840, 140121563201535, -SNULL, 140120757895168, 140120892112895, -STORE, 140120892112896, 140120959221759, -STORE, 140120757895168, 140120892112895, -SNULL, 140120892248063, 140120959221759, -STORE, 140120892112896, 140120892248063, -STORE, 140120892248064, 140120959221759, -SNULL, 140120825004031, 140120892112895, -STORE, 140120757895168, 140120825004031, -STORE, 140120825004032, 140120892112895, -ERASE, 140120825004032, 140120892112895, -SNULL, 140120623812607, 140120690786303, -STORE, 140120623677440, 140120623812607, -STORE, 140120623812608, 140120690786303, -SNULL, 140120758030335, 140120825004031, -STORE, 140120757895168, 140120758030335, -STORE, 140120758030336, 140120825004031, -SNULL, 140121454133248, 140121462521855, -STORE, 140121462521856, 140121496092671, -STORE, 140121454133248, 140121462521855, -SNULL, 140121462525951, 140121496092671, -STORE, 140121462521856, 140121462525951, -STORE, 140121462525952, 140121496092671, -STORE, 140121605132288, 140121630310399, -SNULL, 140121605136383, 140121630310399, -STORE, 140121605132288, 140121605136383, -STORE, 140121605136384, 140121630310399, -STORE, 140121596739584, 140121605132287, -SNULL, 140121605136384, 140121621917695, -STORE, 140121621917696, 140121630310399, -STORE, 140121605136384, 140121621917695, -SNULL, 140121621921791, 140121630310399, -STORE, 140121621917696, 140121621921791, -STORE, 140121621921792, 140121630310399, -STORE, 140121588346880, 140121605132287, -STORE, 140121579954176, 140121605132287, -SNULL, 140121412202495, 140121420591103, -STORE, 140121412198400, 140121412202495, -STORE, 140121412202496, 140121420591103, -SNULL, 140121974218751, 140121982607359, -STORE, 140121974214656, 140121974218751, -STORE, 140121974218752, 140121982607359, -SNULL, 140121462525952, 140121479307263, -STORE, 140121479307264, 140121496092671, -STORE, 140121462525952, 140121479307263, -SNULL, 140121479311359, 140121496092671, -STORE, 140121479307264, 140121479311359, -STORE, 140121479311360, 140121496092671, -STORE, 140121571561472, 140121605132287, -SNULL, 140121571565567, 140121605132287, -STORE, 140121571561472, 140121571565567, -STORE, 140121571565568, 140121605132287, -STORE, 140121428951040, 140121437343743, -SNULL, 140121428955135, 140121437343743, -STORE, 140121428951040, 140121428955135, -STORE, 140121428955136, 140121437343743, -SNULL, 140121840001024, 140121856782335, -STORE, 140121856782336, 140121865175039, -STORE, 140121840001024, 140121856782335, -SNULL, 140121856786431, 140121865175039, -STORE, 140121856782336, 140121856786431, -STORE, 140121856786432, 140121865175039, -STORE, 140121403805696, 140121412198399, -SNULL, 140121840001024, 140121848389631, -STORE, 140121848389632, 140121856782335, -STORE, 140121840001024, 140121848389631, -SNULL, 140121848393727, 140121856782335, -STORE, 140121848389632, 140121848393727, -STORE, 140121848393728, 140121856782335, -SNULL, 140121479311360, 140121487699967, -STORE, 140121487699968, 140121496092671, -STORE, 140121479311360, 140121487699967, -SNULL, 140121487704063, 140121496092671, -STORE, 140121487699968, 140121487704063, -STORE, 140121487704064, 140121496092671, -STORE, 140121395412992, 140121412198399, -STORE, 140121387020288, 140121412198399, -SNULL, 140121387024383, 140121412198399, -STORE, 140121387020288, 140121387024383, -STORE, 140121387024384, 140121412198399, -SNULL, 140121605136384, 140121613524991, -STORE, 140121613524992, 140121621917695, -STORE, 140121605136384, 140121613524991, -SNULL, 140121613529087, 140121621917695, -STORE, 140121613524992, 140121613529087, -STORE, 140121613529088, 140121621917695, -SNULL, 140121462525952, 140121470914559, -STORE, 140121470914560, 140121479307263, -STORE, 140121462525952, 140121470914559, -SNULL, 140121470918655, 140121479307263, -STORE, 140121470914560, 140121470918655, -STORE, 140121470918656, 140121479307263, -STORE, 140121378627584, 140121387020287, -SNULL, 140121378631679, 140121387020287, -STORE, 140121378627584, 140121378631679, -STORE, 140121378631680, 140121387020287, -SNULL, 140121571565568, 140121596739583, -STORE, 140121596739584, 140121605132287, -STORE, 140121571565568, 140121596739583, -SNULL, 140121596743679, 140121605132287, -STORE, 140121596739584, 140121596743679, -STORE, 140121596743680, 140121605132287, -SNULL, 140121387024384, 140121403805695, -STORE, 140121403805696, 140121412198399, -STORE, 140121387024384, 140121403805695, -SNULL, 140121403809791, 140121412198399, -STORE, 140121403805696, 140121403809791, -STORE, 140121403809792, 140121412198399, -STORE, 140121370234880, 140121378627583, -SNULL, 140121387024384, 140121395412991, -STORE, 140121395412992, 140121403805695, -STORE, 140121387024384, 140121395412991, -SNULL, 140121395417087, 140121403805695, -STORE, 140121395412992, 140121395417087, -STORE, 140121395417088, 140121403805695, -SNULL, 140121571565568, 140121588346879, -STORE, 140121588346880, 140121596739583, -STORE, 140121571565568, 140121588346879, -SNULL, 140121588350975, 140121596739583, -STORE, 140121588346880, 140121588350975, -STORE, 140121588350976, 140121596739583, -SNULL, 140121571565568, 140121579954175, -STORE, 140121579954176, 140121588346879, -STORE, 140121571565568, 140121579954175, -SNULL, 140121579958271, 140121588346879, -STORE, 140121579954176, 140121579958271, -STORE, 140121579958272, 140121588346879, -STORE, 140121286373376, 140121294766079, -STORE, 140121277980672, 140121294766079, -SNULL, 140121277980672, 140121286373375, -STORE, 140121286373376, 140121294766079, -STORE, 140121277980672, 140121286373375, -SNULL, 140121286377471, 140121294766079, -STORE, 140121286373376, 140121286377471, -STORE, 140121286377472, 140121294766079, -STORE, 140121269587968, 140121286373375, -STORE, 140121261195264, 140121286373375, -SNULL, 140121261195264, 140121269587967, -STORE, 140121269587968, 140121286373375, -STORE, 140121261195264, 140121269587967, -SNULL, 140121269592063, 140121286373375, -STORE, 140121269587968, 140121269592063, -STORE, 140121269592064, 140121286373375, -STORE, 140121252802560, 140121269587967, -SNULL, 140121252806655, 140121269587967, -STORE, 140121252802560, 140121252806655, -STORE, 140121252806656, 140121269587967, -STORE, 140121244409856, 140121252802559, -STORE, 140121236017152, 140121252802559, -SNULL, 140121236017152, 140121244409855, -STORE, 140121244409856, 140121252802559, -STORE, 140121236017152, 140121244409855, -SNULL, 140121244413951, 140121252802559, -STORE, 140121244409856, 140121244413951, -STORE, 140121244413952, 140121252802559, -SNULL, 140121370238975, 140121378627583, -STORE, 140121370234880, 140121370238975, -STORE, 140121370238976, 140121378627583, -STORE, 140121152155648, 140121160548351, -STORE, 140121143762944, 140121160548351, -STORE, 140121135370240, 140121160548351, -SNULL, 140121135374335, 140121160548351, -STORE, 140121135370240, 140121135374335, -STORE, 140121135374336, 140121160548351, -STORE, 140121126977536, 140121135370239, -STORE, 140121118584832, 140121135370239, -STORE, 140121110192128, 140121135370239, -SNULL, 140121110192128, 140121118584831, -STORE, 140121118584832, 140121135370239, -STORE, 140121110192128, 140121118584831, -SNULL, 140121118588927, 140121135370239, -STORE, 140121118584832, 140121118588927, -STORE, 140121118588928, 140121135370239, -STORE, 140121101799424, 140121118584831, -STORE, 140121017937920, 140121026330623, -STORE, 140121009545216, 140121026330623, -SNULL, 140121009545216, 140121017937919, -STORE, 140121017937920, 140121026330623, -STORE, 140121009545216, 140121017937919, -SNULL, 140121017942015, 140121026330623, -STORE, 140121017937920, 140121017942015, -STORE, 140121017942016, 140121026330623, -SNULL, 140121269592064, 140121277980671, -STORE, 140121277980672, 140121286373375, -STORE, 140121269592064, 140121277980671, -SNULL, 140121277984767, 140121286373375, -STORE, 140121277980672, 140121277984767, -STORE, 140121277984768, 140121286373375, -STORE, 140121001152512, 140121017937919, -SNULL, 140121252806656, 140121261195263, -STORE, 140121261195264, 140121269587967, -STORE, 140121252806656, 140121261195263, -SNULL, 140121261199359, 140121269587967, -STORE, 140121261195264, 140121261199359, -STORE, 140121261199360, 140121269587967, -SNULL, 140121135374336, 140121152155647, -STORE, 140121152155648, 140121160548351, -STORE, 140121135374336, 140121152155647, -SNULL, 140121152159743, 140121160548351, -STORE, 140121152155648, 140121152159743, -STORE, 140121152159744, 140121160548351, -STORE, 140120992759808, 140121017937919, -STORE, 140120984367104, 140121017937919, -STORE, 140120975974400, 140121017937919, -SNULL, 140121101799424, 140121110192127, -STORE, 140121110192128, 140121118584831, -STORE, 140121101799424, 140121110192127, -SNULL, 140121110196223, 140121118584831, -STORE, 140121110192128, 140121110196223, -STORE, 140121110196224, 140121118584831, -SNULL, 140121118588928, 140121126977535, -STORE, 140121126977536, 140121135370239, -STORE, 140121118588928, 140121126977535, -SNULL, 140121126981631, 140121135370239, -STORE, 140121126977536, 140121126981631, -STORE, 140121126981632, 140121135370239, -STORE, 140120967581696, 140121017937919, -STORE, 140120883720192, 140120892112895, -SNULL, 140120883724287, 140120892112895, -STORE, 140120883720192, 140120883724287, -STORE, 140120883724288, 140120892112895, -STORE, 140120875327488, 140120883720191, -SNULL, 140121101803519, 140121110192127, -STORE, 140121101799424, 140121101803519, -STORE, 140121101803520, 140121110192127, -SNULL, 140121135374336, 140121143762943, -STORE, 140121143762944, 140121152155647, -STORE, 140121135374336, 140121143762943, -SNULL, 140121143767039, 140121152155647, -STORE, 140121143762944, 140121143767039, -STORE, 140121143767040, 140121152155647, -STORE, 140120866934784, 140120883720191, -SNULL, 140120967581696, 140120984367103, -STORE, 140120984367104, 140121017937919, -STORE, 140120967581696, 140120984367103, -SNULL, 140120984371199, 140121017937919, -STORE, 140120984367104, 140120984371199, -STORE, 140120984371200, 140121017937919, -STORE, 140120858542080, 140120883720191, -SNULL, 140121236021247, 140121244409855, -STORE, 140121236017152, 140121236021247, -STORE, 140121236021248, 140121244409855, -SNULL, 140120984371200, 140121009545215, -STORE, 140121009545216, 140121017937919, -STORE, 140120984371200, 140121009545215, -SNULL, 140121009549311, 140121017937919, -STORE, 140121009545216, 140121009549311, -STORE, 140121009549312, 140121017937919, -SNULL, 140120984371200, 140120992759807, -STORE, 140120992759808, 140121009545215, -STORE, 140120984371200, 140120992759807, -SNULL, 140120992763903, 140121009545215, -STORE, 140120992759808, 140120992763903, -STORE, 140120992763904, 140121009545215, -SNULL, 140120992763904, 140121001152511, -STORE, 140121001152512, 140121009545215, -STORE, 140120992763904, 140121001152511, -SNULL, 140121001156607, 140121009545215, -STORE, 140121001152512, 140121001156607, -STORE, 140121001156608, 140121009545215, -STORE, 140120850149376, 140120883720191, -SNULL, 140120850153471, 140120883720191, -STORE, 140120850149376, 140120850153471, -STORE, 140120850153472, 140120883720191, -SNULL, 140120967585791, 140120984367103, -STORE, 140120967581696, 140120967585791, -STORE, 140120967585792, 140120984367103, -SNULL, 140120850153472, 140120866934783, -STORE, 140120866934784, 140120883720191, -STORE, 140120850153472, 140120866934783, -SNULL, 140120866938879, 140120883720191, -STORE, 140120866934784, 140120866938879, -STORE, 140120866938880, 140120883720191, -STORE, 140120841756672, 140120850149375, -SNULL, 140120967585792, 140120975974399, -STORE, 140120975974400, 140120984367103, -STORE, 140120967585792, 140120975974399, -SNULL, 140120975978495, 140120984367103, -STORE, 140120975974400, 140120975978495, -STORE, 140120975978496, 140120984367103, -SNULL, 140120866938880, 140120875327487, -STORE, 140120875327488, 140120883720191, -STORE, 140120866938880, 140120875327487, -SNULL, 140120875331583, 140120883720191, -STORE, 140120875327488, 140120875331583, -STORE, 140120875331584, 140120883720191, -STORE, 140120833363968, 140120850149375, -STORE, 140120749502464, 140120757895167, -STORE, 140120741109760, 140120757895167, -STORE, 140120732717056, 140120757895167, -STORE, 140120724324352, 140120757895167, -SNULL, 140120724324352, 140120732717055, -STORE, 140120732717056, 140120757895167, -STORE, 140120724324352, 140120732717055, -SNULL, 140120732721151, 140120757895167, -STORE, 140120732717056, 140120732721151, -STORE, 140120732721152, 140120757895167, -STORE, 140120715931648, 140120732717055, -SNULL, 140120715935743, 140120732717055, -STORE, 140120715931648, 140120715935743, -STORE, 140120715935744, 140120732717055, -SNULL, 140120850153472, 140120858542079, -STORE, 140120858542080, 140120866934783, -STORE, 140120850153472, 140120858542079, -SNULL, 140120858546175, 140120866934783, -STORE, 140120858542080, 140120858546175, -STORE, 140120858546176, 140120866934783, -STORE, 140120707538944, 140120715931647, -SNULL, 140120707543039, 140120715931647, -STORE, 140120707538944, 140120707543039, -STORE, 140120707543040, 140120715931647, -SNULL, 140120833368063, 140120850149375, -STORE, 140120833363968, 140120833368063, -STORE, 140120833368064, 140120850149375, -SNULL, 140120833368064, 140120841756671, -STORE, 140120841756672, 140120850149375, -STORE, 140120833368064, 140120841756671, -SNULL, 140120841760767, 140120850149375, -STORE, 140120841756672, 140120841760767, -STORE, 140120841760768, 140120850149375, -STORE, 140120699146240, 140120707538943, -SNULL, 140120715935744, 140120724324351, -STORE, 140120724324352, 140120732717055, -STORE, 140120715935744, 140120724324351, -SNULL, 140120724328447, 140120732717055, -STORE, 140120724324352, 140120724328447, -STORE, 140120724328448, 140120732717055, -SNULL, 140120732721152, 140120741109759, -STORE, 140120741109760, 140120757895167, -STORE, 140120732721152, 140120741109759, -SNULL, 140120741113855, 140120757895167, -STORE, 140120741109760, 140120741113855, -STORE, 140120741113856, 140120757895167, -SNULL, 140120741113856, 140120749502463, -STORE, 140120749502464, 140120757895167, -STORE, 140120741113856, 140120749502463, -SNULL, 140120749506559, 140120757895167, -STORE, 140120749502464, 140120749506559, -STORE, 140120749506560, 140120757895167, -SNULL, 140120699150335, 140120707538943, -STORE, 140120699146240, 140120699150335, -STORE, 140120699150336, 140120707538943, -STORE, 140122446557184, 140122446585855, -STORE, 140122368999424, 140122371190783, -SNULL, 140122368999424, 140122369089535, -STORE, 140122369089536, 140122371190783, -STORE, 140122368999424, 140122369089535, -SNULL, 140122371182591, 140122371190783, -STORE, 140122369089536, 140122371182591, -STORE, 140122371182592, 140122371190783, -ERASE, 140122371182592, 140122371190783, -STORE, 140122371182592, 140122371190783, -SNULL, 140122371186687, 140122371190783, -STORE, 140122371182592, 140122371186687, -STORE, 140122371186688, 140122371190783, -ERASE, 140122446557184, 140122446585855, -ERASE, 140121445736448, 140121445740543, -ERASE, 140121445740544, 140121454129151, -ERASE, 140121621917696, 140121621921791, -ERASE, 140121621921792, 140121630310399, -ERASE, 140121579954176, 140121579958271, -ERASE, 140121579958272, 140121588346879, -ERASE, 140121261195264, 140121261199359, -ERASE, 140121261199360, 140121269587967, -ERASE, 140121454129152, 140121454133247, -ERASE, 140121454133248, 140121462521855, -ERASE, 140121588346880, 140121588350975, -ERASE, 140121588350976, 140121596739583, -ERASE, 140121135370240, 140121135374335, -ERASE, 140121135374336, 140121143762943, -ERASE, 140121881960448, 140121881964543, -ERASE, 140121881964544, 140121890353151, -ERASE, 140121428951040, 140121428955135, -ERASE, 140121428955136, 140121437343743, -ERASE, 140121387020288, 140121387024383, -ERASE, 140121387024384, 140121395412991, -ERASE, 140121487699968, 140121487704063, -ERASE, 140121487704064, 140121496092671, -ERASE, 140121437343744, 140121437347839, -ERASE, 140121437347840, 140121445736447, -ERASE, 140121613524992, 140121613529087, -ERASE, 140121613529088, 140121621917695, -ERASE, 140121856782336, 140121856786431, -ERASE, 140121856786432, 140121865175039, -ERASE, 140121252802560, 140121252806655, -ERASE, 140121252806656, 140121261195263, -ERASE, 140121839996928, 140121840001023, -ERASE, 140121840001024, 140121848389631, -ERASE, 140121596739584, 140121596743679, -ERASE, 140121596743680, 140121605132287, -ERASE, 140121009545216, 140121009549311, -ERASE, 140121009549312, 140121017937919, -ERASE, 140120724324352, 140120724328447, -ERASE, 140120724328448, 140120732717055, -ERASE, 140120883720192, 140120883724287, -ERASE, 140120883724288, 140120892112895, -ERASE, 140121982607360, 140121982611455, -ERASE, 140121982611456, 140121991000063, -ERASE, 140121571561472, 140121571565567, -ERASE, 140121571565568, 140121579954175, -ERASE, 140121286373376, 140121286377471, -ERASE, 140121286377472, 140121294766079, -ERASE, 140120875327488, 140120875331583, -ERASE, 140120875331584, 140120883720191, -ERASE, 140121848389632, 140121848393727, -ERASE, 140121848393728, 140121856782335, -ERASE, 140121370234880, 140121370238975, -ERASE, 140121370238976, 140121378627583, -ERASE, 140121143762944, 140121143767039, -ERASE, 140121143767040, 140121152155647, -ERASE, 140121118584832, 140121118588927, -ERASE, 140121118588928, 140121126977535, -ERASE, 140120866934784, 140120866938879, -ERASE, 140120866938880, 140120875327487, -ERASE, 140120741109760, 140120741113855, -ERASE, 140120741113856, 140120749502463, -ERASE, 140121865175040, 140121865179135, -ERASE, 140121865179136, 140121873567743, -ERASE, 140121403805696, 140121403809791, -ERASE, 140121403809792, 140121412198399, -ERASE, 140121236017152, 140121236021247, -ERASE, 140121236021248, 140121244409855, -ERASE, 140120732717056, 140120732721151, -ERASE, 140120732721152, 140120741109759, -ERASE, 140121017937920, 140121017942015, -ERASE, 140121017942016, 140121026330623, -ERASE, 140121873567744, 140121873571839, -ERASE, 140121873571840, 140121881960447, -ERASE, 140121470914560, 140121470918655, -ERASE, 140121470918656, 140121479307263, -ERASE, 140121126977536, 140121126981631, -ERASE, 140121126981632, 140121135370239, -ERASE, 140120850149376, 140120850153471, -ERASE, 140120850153472, 140120858542079, -ERASE, 140120707538944, 140120707543039, -ERASE, 140120707543040, 140120715931647, -ERASE, 140121479307264, 140121479311359, -ERASE, 140121479311360, 140121487699967, -ERASE, 140120967581696, 140120967585791, -ERASE, 140120967585792, 140120975974399, -ERASE, 140120841756672, 140120841760767, -ERASE, 140120841760768, 140120850149375, -ERASE, 140121412198400, 140121412202495, -ERASE, 140121412202496, 140121420591103, -ERASE, 140122158788608, 140122158792703, -ERASE, 140122158792704, 140122167181311, -ERASE, 140122142003200, 140122142007295, -ERASE, 140122142007296, 140122150395903, -ERASE, 140121101799424, 140121101803519, -ERASE, 140121101803520, 140121110192127, -ERASE, 140120858542080, 140120858546175, -ERASE, 140120858546176, 140120866934783, -ERASE, 140120833363968, 140120833368063, -ERASE, 140120833368064, 140120841756671, -ERASE, 140121277980672, 140121277984767, -ERASE, 140121277984768, 140121286373375, -ERASE, 140121001152512, 140121001156607, -ERASE, 140121001156608, 140121009545215, -ERASE, 140120749502464, 140120749506559, -ERASE, 140120749506560, 140120757895167, -ERASE, 140121605132288, 140121605136383, -ERASE, 140121605136384, 140121613524991, -ERASE, 140121378627584, 140121378631679, -ERASE, 140121378631680, 140121387020287, -ERASE, 140121110192128, 140121110196223, -ERASE, 140121110196224, 140121118584831, -ERASE, 140121462521856, 140121462525951, -ERASE, 140121462525952, 140121470914559, -ERASE, 140121395412992, 140121395417087, -ERASE, 140121395417088, 140121403805695, -ERASE, 140121152155648, 140121152159743, -ERASE, 140121152159744, 140121160548351, -ERASE, 140120992759808, 140120992763903, -ERASE, 140120992763904, 140121001152511, -ERASE, 140122387976192, 140122387980287, -ERASE, 140122387980288, 140122396368895, -ERASE, 140121890353152, 140121890357247, -ERASE, 140121890357248, 140121898745855, -ERASE, 140121269587968, 140121269592063, -ERASE, 140121269592064, 140121277980671, - }; - unsigned long set37[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140722404016128, 140737488351231, -SNULL, 140722404020223, 140737488351231, -STORE, 140722404016128, 140722404020223, -STORE, 140722403885056, 140722404020223, -STORE, 94637010001920, 94637012254719, -SNULL, 94637010132991, 94637012254719, -STORE, 94637010001920, 94637010132991, -STORE, 94637010132992, 94637012254719, -ERASE, 94637010132992, 94637012254719, -STORE, 94637012226048, 94637012234239, -STORE, 94637012234240, 94637012254719, -STORE, 139760240594944, 139760242847743, -SNULL, 139760240738303, 139760242847743, -STORE, 139760240594944, 139760240738303, -STORE, 139760240738304, 139760242847743, -ERASE, 139760240738304, 139760242847743, -STORE, 139760242835456, 139760242843647, -STORE, 139760242843648, 139760242847743, -STORE, 140722405232640, 140722405236735, -STORE, 140722405220352, 140722405232639, -STORE, 139760242806784, 139760242835455, -STORE, 139760242798592, 139760242806783, -STORE, 139760238379008, 139760240594943, -SNULL, 139760238379008, 139760238477311, -STORE, 139760238477312, 139760240594943, -STORE, 139760238379008, 139760238477311, -SNULL, 139760240570367, 139760240594943, -STORE, 139760238477312, 139760240570367, -STORE, 139760240570368, 139760240594943, -SNULL, 139760240570368, 139760240578559, -STORE, 139760240578560, 139760240594943, -STORE, 139760240570368, 139760240578559, -ERASE, 139760240570368, 139760240578559, -STORE, 139760240570368, 139760240578559, -ERASE, 139760240578560, 139760240594943, -STORE, 139760240578560, 139760240594943, -STORE, 139760234582016, 139760238379007, -SNULL, 139760234582016, 139760236240895, -STORE, 139760236240896, 139760238379007, -STORE, 139760234582016, 139760236240895, -SNULL, 139760238338047, 139760238379007, -STORE, 139760236240896, 139760238338047, -STORE, 139760238338048, 139760238379007, -SNULL, 139760238338048, 139760238362623, -STORE, 139760238362624, 139760238379007, -STORE, 139760238338048, 139760238362623, -ERASE, 139760238338048, 139760238362623, -STORE, 139760238338048, 139760238362623, -ERASE, 139760238362624, 139760238379007, -STORE, 139760238362624, 139760238379007, -STORE, 139760242790400, 139760242806783, -SNULL, 139760238354431, 139760238362623, -STORE, 139760238338048, 139760238354431, -STORE, 139760238354432, 139760238362623, -SNULL, 139760240574463, 139760240578559, -STORE, 139760240570368, 139760240574463, -STORE, 139760240574464, 139760240578559, -SNULL, 94637012230143, 94637012234239, -STORE, 94637012226048, 94637012230143, -STORE, 94637012230144, 94637012234239, -SNULL, 139760242839551, 139760242843647, -STORE, 139760242835456, 139760242839551, -STORE, 139760242839552, 139760242843647, -ERASE, 139760242806784, 139760242835455, -STORE, 94637033324544, 94637033459711, -STORE, 139760226189312, 139760234582015, -SNULL, 139760226193407, 139760234582015, -STORE, 139760226189312, 139760226193407, -STORE, 139760226193408, 139760234582015, -STORE, 139760217796608, 139760226189311, -STORE, 139760083578880, 139760217796607, -SNULL, 139760083578880, 139760114860031, -STORE, 139760114860032, 139760217796607, -STORE, 139760083578880, 139760114860031, -ERASE, 139760083578880, 139760114860031, -SNULL, 139760181968895, 139760217796607, -STORE, 139760114860032, 139760181968895, -STORE, 139760181968896, 139760217796607, -ERASE, 139760181968896, 139760217796607, -SNULL, 139760114995199, 139760181968895, -STORE, 139760114860032, 139760114995199, -STORE, 139760114995200, 139760181968895, -SNULL, 139760217800703, 139760226189311, -STORE, 139760217796608, 139760217800703, -STORE, 139760217800704, 139760226189311, -STORE, 139760209403904, 139760217796607, -SNULL, 139760209407999, 139760217796607, -STORE, 139760209403904, 139760209407999, -STORE, 139760209408000, 139760217796607, -STORE, 139760201011200, 139760209403903, -SNULL, 139760201015295, 139760209403903, -STORE, 139760201011200, 139760201015295, -STORE, 139760201015296, 139760209403903, -STORE, 139760192618496, 139760201011199, -SNULL, 139760192622591, 139760201011199, -STORE, 139760192618496, 139760192622591, -STORE, 139760192622592, 139760201011199, -STORE, 139760184225792, 139760192618495, -STORE, 139759980642304, 139760114860031, -STORE, 139759972249600, 139759980642303, -STORE, 139759963856896, 139759980642303, -STORE, 139759955464192, 139759980642303, -STORE, 139759888355328, 139759955464191, -SNULL, 139760047751167, 139760114860031, -STORE, 139759980642304, 139760047751167, -STORE, 139760047751168, 139760114860031, -ERASE, 139760047751168, 139760114860031, -SNULL, 139759980777471, 139760047751167, -STORE, 139759980642304, 139759980777471, -STORE, 139759980777472, 139760047751167, -STORE, 139759980777472, 139760114860031, -SNULL, 139759980777472, 139760047751167, -STORE, 139760047751168, 139760114860031, -STORE, 139759980777472, 139760047751167, -SNULL, 139760047886335, 139760114860031, -STORE, 139760047751168, 139760047886335, -STORE, 139760047886336, 139760114860031, -STORE, 139759821246464, 139759955464191, -SNULL, 139759821246464, 139759888355327, -STORE, 139759888355328, 139759955464191, -STORE, 139759821246464, 139759888355327, -ERASE, 139759821246464, 139759888355327, -ERASE, 139759888355328, 139759955464191, - }; - unsigned long set38[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140730666221568, 140737488351231, -SNULL, 140730666225663, 140737488351231, -STORE, 140730666221568, 140730666225663, -STORE, 140730666090496, 140730666225663, -STORE, 94177584803840, 94177587056639, -SNULL, 94177584934911, 94177587056639, -STORE, 94177584803840, 94177584934911, -STORE, 94177584934912, 94177587056639, -ERASE, 94177584934912, 94177587056639, -STORE, 94177587027968, 94177587036159, -STORE, 94177587036160, 94177587056639, -STORE, 140614382714880, 140614384967679, -SNULL, 140614382858239, 140614384967679, -STORE, 140614382714880, 140614382858239, -STORE, 140614382858240, 140614384967679, -ERASE, 140614382858240, 140614384967679, -STORE, 140614384955392, 140614384963583, -STORE, 140614384963584, 140614384967679, -STORE, 140730666315776, 140730666319871, -STORE, 140730666303488, 140730666315775, -STORE, 140614384926720, 140614384955391, -STORE, 140614384918528, 140614384926719, -STORE, 140614380498944, 140614382714879, -SNULL, 140614380498944, 140614380597247, -STORE, 140614380597248, 140614382714879, -STORE, 140614380498944, 140614380597247, -SNULL, 140614382690303, 140614382714879, -STORE, 140614380597248, 140614382690303, -STORE, 140614382690304, 140614382714879, -SNULL, 140614382690304, 140614382698495, -STORE, 140614382698496, 140614382714879, -STORE, 140614382690304, 140614382698495, -ERASE, 140614382690304, 140614382698495, -STORE, 140614382690304, 140614382698495, -ERASE, 140614382698496, 140614382714879, -STORE, 140614382698496, 140614382714879, -STORE, 140614376701952, 140614380498943, -SNULL, 140614376701952, 140614378360831, -STORE, 140614378360832, 140614380498943, -STORE, 140614376701952, 140614378360831, -SNULL, 140614380457983, 140614380498943, -STORE, 140614378360832, 140614380457983, -STORE, 140614380457984, 140614380498943, -SNULL, 140614380457984, 140614380482559, -STORE, 140614380482560, 140614380498943, -STORE, 140614380457984, 140614380482559, -ERASE, 140614380457984, 140614380482559, -STORE, 140614380457984, 140614380482559, -ERASE, 140614380482560, 140614380498943, -STORE, 140614380482560, 140614380498943, -STORE, 140614384910336, 140614384926719, -SNULL, 140614380474367, 140614380482559, -STORE, 140614380457984, 140614380474367, -STORE, 140614380474368, 140614380482559, -SNULL, 140614382694399, 140614382698495, -STORE, 140614382690304, 140614382694399, -STORE, 140614382694400, 140614382698495, -SNULL, 94177587032063, 94177587036159, -STORE, 94177587027968, 94177587032063, -STORE, 94177587032064, 94177587036159, -SNULL, 140614384959487, 140614384963583, -STORE, 140614384955392, 140614384959487, -STORE, 140614384959488, 140614384963583, -ERASE, 140614384926720, 140614384955391, -STORE, 94177619791872, 94177619927039, -STORE, 140614368309248, 140614376701951, -SNULL, 140614368313343, 140614376701951, -STORE, 140614368309248, 140614368313343, -STORE, 140614368313344, 140614376701951, -STORE, 140614359916544, 140614368309247, -STORE, 140614225698816, 140614359916543, -SNULL, 140614225698816, 140614276481023, -STORE, 140614276481024, 140614359916543, -STORE, 140614225698816, 140614276481023, -ERASE, 140614225698816, 140614276481023, -SNULL, 140614343589887, 140614359916543, -STORE, 140614276481024, 140614343589887, -STORE, 140614343589888, 140614359916543, -ERASE, 140614343589888, 140614359916543, -SNULL, 140614276616191, 140614343589887, -STORE, 140614276481024, 140614276616191, -STORE, 140614276616192, 140614343589887, -SNULL, 140614359920639, 140614368309247, -STORE, 140614359916544, 140614359920639, -STORE, 140614359920640, 140614368309247, -STORE, 140614351523840, 140614359916543, -SNULL, 140614351527935, 140614359916543, -STORE, 140614351523840, 140614351527935, -STORE, 140614351527936, 140614359916543, -STORE, 140614268088320, 140614276481023, -SNULL, 140614268092415, 140614276481023, -STORE, 140614268088320, 140614268092415, -STORE, 140614268092416, 140614276481023, -STORE, 140614259695616, 140614268088319, -SNULL, 140614259699711, 140614268088319, -STORE, 140614259695616, 140614259699711, -STORE, 140614259699712, 140614268088319, -STORE, 140614251302912, 140614259695615, -STORE, 140614242910208, 140614259695615, -STORE, 140614108692480, 140614242910207, -SNULL, 140614108692480, 140614142263295, -STORE, 140614142263296, 140614242910207, -STORE, 140614108692480, 140614142263295, -ERASE, 140614108692480, 140614142263295, -STORE, 140614133870592, 140614142263295, -STORE, 140613999652864, 140614133870591, -SNULL, 140613999652864, 140614008045567, -STORE, 140614008045568, 140614133870591, -STORE, 140613999652864, 140614008045567, -ERASE, 140613999652864, 140614008045567, -STORE, 140613999652864, 140614008045567, -STORE, 140613865435136, 140613999652863, -SNULL, 140613865435136, 140613873827839, -STORE, 140613873827840, 140613999652863, -STORE, 140613865435136, 140613873827839, -ERASE, 140613865435136, 140613873827839, -SNULL, 140614209372159, 140614242910207, -STORE, 140614142263296, 140614209372159, -STORE, 140614209372160, 140614242910207, -ERASE, 140614209372160, 140614242910207, -SNULL, 140614142398463, 140614209372159, -STORE, 140614142263296, 140614142398463, -STORE, 140614142398464, 140614209372159, -SNULL, 140614075154431, 140614133870591, -STORE, 140614008045568, 140614075154431, -STORE, 140614075154432, 140614133870591, -ERASE, 140614075154432, 140614133870591, -SNULL, 140614008180735, 140614075154431, -STORE, 140614008045568, 140614008180735, -STORE, 140614008180736, 140614075154431, -SNULL, 140613940936703, 140613999652863, -STORE, 140613873827840, 140613940936703, -STORE, 140613940936704, 140613999652863, -ERASE, 140613940936704, 140613999652863, -SNULL, 140614242914303, 140614259695615, -STORE, 140614242910208, 140614242914303, -STORE, 140614242914304, 140614259695615, -STORE, 140613739610112, 140613940936703, -STORE, 140614234517504, 140614242910207, -SNULL, 140614242914304, 140614251302911, -STORE, 140614251302912, 140614259695615, -STORE, 140614242914304, 140614251302911, -SNULL, 140614251307007, 140614259695615, -STORE, 140614251302912, 140614251307007, -STORE, 140614251307008, 140614259695615, -SNULL, 140613739610112, 140613873827839, -STORE, 140613873827840, 140613940936703, -STORE, 140613739610112, 140613873827839, -SNULL, 140613873963007, 140613940936703, -STORE, 140613873827840, 140613873963007, -STORE, 140613873963008, 140613940936703, -SNULL, 140614133874687, 140614142263295, -STORE, 140614133870592, 140614133874687, -STORE, 140614133874688, 140614142263295, -SNULL, 140613806718975, 140613873827839, -STORE, 140613739610112, 140613806718975, -STORE, 140613806718976, 140613873827839, -ERASE, 140613806718976, 140613873827839, -STORE, 140614226124800, 140614242910207, -SNULL, 140613739745279, 140613806718975, -STORE, 140613739610112, 140613739745279, -STORE, 140613739745280, 140613806718975, -SNULL, 140613999656959, 140614008045567, -STORE, 140613999652864, 140613999656959, -STORE, 140613999656960, 140614008045567, -SNULL, 140614226124800, 140614234517503, -STORE, 140614234517504, 140614242910207, -STORE, 140614226124800, 140614234517503, -SNULL, 140614234521599, 140614242910207, -STORE, 140614234517504, 140614234521599, -STORE, 140614234521600, 140614242910207, -STORE, 140614217732096, 140614234517503, -STORE, 140614125477888, 140614133870591, -SNULL, 140614125481983, 140614133870591, -STORE, 140614125477888, 140614125481983, -STORE, 140614125481984, 140614133870591, -STORE, 140614117085184, 140614125477887, -SNULL, 140614217736191, 140614234517503, -STORE, 140614217732096, 140614217736191, -STORE, 140614217736192, 140614234517503, -SNULL, 140614117089279, 140614125477887, -STORE, 140614117085184, 140614117089279, -STORE, 140614117089280, 140614125477887, -SNULL, 140614217736192, 140614226124799, -STORE, 140614226124800, 140614234517503, -STORE, 140614217736192, 140614226124799, -SNULL, 140614226128895, 140614234517503, -STORE, 140614226124800, 140614226128895, -STORE, 140614226128896, 140614234517503, -STORE, 140614108692480, 140614117085183, -STORE, 140614100299776, 140614117085183, -STORE, 140614091907072, 140614117085183, -SNULL, 140614091907072, 140614108692479, -STORE, 140614108692480, 140614117085183, -STORE, 140614091907072, 140614108692479, -SNULL, 140614108696575, 140614117085183, -STORE, 140614108692480, 140614108696575, -STORE, 140614108696576, 140614117085183, -SNULL, 140614091907072, 140614100299775, -STORE, 140614100299776, 140614108692479, -STORE, 140614091907072, 140614100299775, -SNULL, 140614100303871, 140614108692479, -STORE, 140614100299776, 140614100303871, -STORE, 140614100303872, 140614108692479, -STORE, 140614083514368, 140614100299775, -SNULL, 140614083518463, 140614100299775, -STORE, 140614083514368, 140614083518463, -STORE, 140614083518464, 140614100299775, -STORE, 140613991260160, 140613999652863, -SNULL, 140614083518464, 140614091907071, -STORE, 140614091907072, 140614100299775, -STORE, 140614083518464, 140614091907071, -SNULL, 140614091911167, 140614100299775, -STORE, 140614091907072, 140614091911167, -STORE, 140614091911168, 140614100299775, -SNULL, 140613991264255, 140613999652863, -STORE, 140613991260160, 140613991264255, -STORE, 140613991264256, 140613999652863, -STORE, 140613982867456, 140613991260159, -SNULL, 140613982871551, 140613991260159, -STORE, 140613982867456, 140613982871551, -STORE, 140613982871552, 140613991260159, -STORE, 140613974474752, 140613982867455, -SNULL, 140613974478847, 140613982867455, -STORE, 140613974474752, 140613974478847, -STORE, 140613974478848, 140613982867455, -STORE, 140613966082048, 140613974474751, -STORE, 140613739745280, 140613873827839, -SNULL, 140613739745280, 140613806718975, -STORE, 140613806718976, 140613873827839, -STORE, 140613739745280, 140613806718975, -SNULL, 140613806854143, 140613873827839, -STORE, 140613806718976, 140613806854143, -STORE, 140613806854144, 140613873827839, -SNULL, 140613966086143, 140613974474751, -STORE, 140613966082048, 140613966086143, -STORE, 140613966086144, 140613974474751, -STORE, 140613957689344, 140613966082047, -STORE, 140613605392384, 140613739610111, -STORE, 140613949296640, 140613966082047, -STORE, 140613596999680, 140613605392383, -STORE, 140613529890816, 140613596999679, -STORE, 140613521498112, 140613529890815, -STORE, 140613513105408, 140613529890815, -STORE, 140613378887680, 140613513105407, -SNULL, 140613378887680, 140613404065791, -STORE, 140613404065792, 140613513105407, -STORE, 140613378887680, 140613404065791, -ERASE, 140613378887680, 140613404065791, -STORE, 140613395673088, 140613404065791, -STORE, 140613261455360, 140613395673087, -SNULL, 140613261455360, 140613269848063, -STORE, 140613269848064, 140613395673087, -STORE, 140613261455360, 140613269848063, -ERASE, 140613261455360, 140613269848063, -STORE, 140613261455360, 140613269848063, -STORE, 140613253062656, 140613269848063, -STORE, 140613118844928, 140613253062655, -STORE, 140613110452224, 140613118844927, -SNULL, 140613118844928, 140613135630335, -STORE, 140613135630336, 140613253062655, -STORE, 140613118844928, 140613135630335, -ERASE, 140613118844928, 140613135630335, -STORE, 140613127237632, 140613135630335, -STORE, 140613110452224, 140613135630335, -STORE, 140612976234496, 140613110452223, -STORE, 140612967841792, 140612976234495, -STORE, 140612833624064, 140612967841791, -STORE, 140612825231360, 140612833624063, -STORE, 140612816838656, 140612833624063, -STORE, 140612682620928, 140612816838655, -STORE, 140612674228224, 140612682620927, -SNULL, 140612682620928, 140612732977151, -STORE, 140612732977152, 140612816838655, -STORE, 140612682620928, 140612732977151, -ERASE, 140612682620928, 140612732977151, -SNULL, 140613672501247, 140613739610111, -STORE, 140613605392384, 140613672501247, -STORE, 140613672501248, 140613739610111, -ERASE, 140613672501248, 140613739610111, -SNULL, 140613605527551, 140613672501247, -STORE, 140613605392384, 140613605527551, -STORE, 140613605527552, 140613672501247, -ERASE, 140613529890816, 140613596999679, -STORE, 140612540010496, 140612674228223, -SNULL, 140612540010496, 140612598759423, -STORE, 140612598759424, 140612674228223, -STORE, 140612540010496, 140612598759423, -ERASE, 140612540010496, 140612598759423, -SNULL, 140613471174655, 140613513105407, -STORE, 140613404065792, 140613471174655, -STORE, 140613471174656, 140613513105407, -ERASE, 140613471174656, 140613513105407, -SNULL, 140613404200959, 140613471174655, -STORE, 140613404065792, 140613404200959, -STORE, 140613404200960, 140613471174655, -SNULL, 140613336956927, 140613395673087, -STORE, 140613269848064, 140613336956927, -STORE, 140613336956928, 140613395673087, -ERASE, 140613336956928, 140613395673087, -SNULL, 140612833624064, 140612867194879, -STORE, 140612867194880, 140612967841791, -STORE, 140612833624064, 140612867194879, -ERASE, 140612833624064, 140612867194879, -SNULL, 140612976234496, 140613001412607, -STORE, 140613001412608, 140613110452223, -STORE, 140612976234496, 140613001412607, -ERASE, 140612976234496, 140613001412607, -SNULL, 140613202739199, 140613253062655, -STORE, 140613135630336, 140613202739199, -STORE, 140613202739200, 140613253062655, -ERASE, 140613202739200, 140613253062655, -SNULL, 140613135765503, 140613202739199, -STORE, 140613135630336, 140613135765503, -STORE, 140613135765504, 140613202739199, -SNULL, 140612816842751, 140612833624063, -STORE, 140612816838656, 140612816842751, -STORE, 140612816842752, 140612833624063, -SNULL, 140613110456319, 140613135630335, -STORE, 140613110452224, 140613110456319, -STORE, 140613110456320, 140613135630335, -SNULL, 140613949300735, 140613966082047, -STORE, 140613949296640, 140613949300735, -STORE, 140613949300736, 140613966082047, -SNULL, 140613110456320, 140613118844927, -STORE, 140613118844928, 140613135630335, -STORE, 140613110456320, 140613118844927, -SNULL, 140613118849023, 140613135630335, -STORE, 140613118844928, 140613118849023, -STORE, 140613118849024, 140613135630335, -SNULL, 140612800086015, 140612816838655, -STORE, 140612732977152, 140612800086015, -STORE, 140612800086016, 140612816838655, -ERASE, 140612800086016, 140612816838655, -SNULL, 140613253062656, 140613261455359, -STORE, 140613261455360, 140613269848063, -STORE, 140613253062656, 140613261455359, -SNULL, 140613261459455, 140613269848063, -STORE, 140613261455360, 140613261459455, -STORE, 140613261459456, 140613269848063, -SNULL, 140612674232319, 140612682620927, -STORE, 140612674228224, 140612674232319, -STORE, 140612674232320, 140612682620927, -STORE, 140613731217408, 140613739610111, -STORE, 140613722824704, 140613739610111, -SNULL, 140613949300736, 140613957689343, -STORE, 140613957689344, 140613966082047, -STORE, 140613949300736, 140613957689343, -SNULL, 140613957693439, 140613966082047, -STORE, 140613957689344, 140613957693439, -STORE, 140613957693440, 140613966082047, -STORE, 140612464541696, 140612674228223, -SNULL, 140612531650559, 140612674228223, -STORE, 140612464541696, 140612531650559, -STORE, 140612531650560, 140612674228223, -SNULL, 140612531650560, 140612598759423, -STORE, 140612598759424, 140612674228223, -STORE, 140612531650560, 140612598759423, -ERASE, 140612531650560, 140612598759423, -SNULL, 140612665868287, 140612674228223, -STORE, 140612598759424, 140612665868287, -STORE, 140612665868288, 140612674228223, -ERASE, 140612665868288, 140612674228223, -SNULL, 140613269983231, 140613336956927, -STORE, 140613269848064, 140613269983231, -STORE, 140613269983232, 140613336956927, -SNULL, 140612934303743, 140612967841791, -STORE, 140612867194880, 140612934303743, -STORE, 140612934303744, 140612967841791, -ERASE, 140612934303744, 140612967841791, -SNULL, 140613068521471, 140613110452223, -STORE, 140613001412608, 140613068521471, -STORE, 140613068521472, 140613110452223, -ERASE, 140613068521472, 140613110452223, -STORE, 140613714432000, 140613739610111, -SNULL, 140613001547775, 140613068521471, -STORE, 140613001412608, 140613001547775, -STORE, 140613001547776, 140613068521471, -SNULL, 140612733112319, 140612800086015, -STORE, 140612732977152, 140612733112319, -STORE, 140612733112320, 140612800086015, -SNULL, 140613513109503, 140613529890815, -STORE, 140613513105408, 140613513109503, -STORE, 140613513109504, 140613529890815, -STORE, 140613706039296, 140613739610111, -STORE, 140613697646592, 140613739610111, -STORE, 140613689253888, 140613739610111, -SNULL, 140613689257983, 140613739610111, -STORE, 140613689253888, 140613689257983, -STORE, 140613689257984, 140613739610111, -SNULL, 140613253066751, 140613261455359, -STORE, 140613253062656, 140613253066751, -STORE, 140613253066752, 140613261455359, -STORE, 140613680861184, 140613689253887, -STORE, 140613588606976, 140613605392383, -SNULL, 140613689257984, 140613731217407, -STORE, 140613731217408, 140613739610111, -STORE, 140613689257984, 140613731217407, -SNULL, 140613731221503, 140613739610111, -STORE, 140613731217408, 140613731221503, -STORE, 140613731221504, 140613739610111, -STORE, 140613580214272, 140613605392383, -SNULL, 140612464676863, 140612531650559, -STORE, 140612464541696, 140612464676863, -STORE, 140612464676864, 140612531650559, -SNULL, 140612598894591, 140612665868287, -STORE, 140612598759424, 140612598894591, -STORE, 140612598894592, 140612665868287, -SNULL, 140612867330047, 140612934303743, -STORE, 140612867194880, 140612867330047, -STORE, 140612867330048, 140612934303743, -STORE, 140613571821568, 140613605392383, -SNULL, 140613571825663, 140613605392383, -STORE, 140613571821568, 140613571825663, -STORE, 140613571825664, 140613605392383, -SNULL, 140613689257984, 140613722824703, -STORE, 140613722824704, 140613731217407, -STORE, 140613689257984, 140613722824703, -SNULL, 140613722828799, 140613731217407, -STORE, 140613722824704, 140613722828799, -STORE, 140613722828800, 140613731217407, -SNULL, 140613689257984, 140613714431999, -STORE, 140613714432000, 140613722824703, -STORE, 140613689257984, 140613714431999, -SNULL, 140613714436095, 140613722824703, -STORE, 140613714432000, 140613714436095, -STORE, 140613714436096, 140613722824703, -SNULL, 140612816842752, 140612825231359, -STORE, 140612825231360, 140612833624063, -STORE, 140612816842752, 140612825231359, -SNULL, 140612825235455, 140612833624063, -STORE, 140612825231360, 140612825235455, -STORE, 140612825235456, 140612833624063, -SNULL, 140613395677183, 140613404065791, -STORE, 140613395673088, 140613395677183, -STORE, 140613395677184, 140613404065791, -SNULL, 140613689257984, 140613706039295, -STORE, 140613706039296, 140613714431999, -STORE, 140613689257984, 140613706039295, -SNULL, 140613706043391, 140613714431999, -STORE, 140613706039296, 140613706043391, -STORE, 140613706043392, 140613714431999, -SNULL, 140613118849024, 140613127237631, -STORE, 140613127237632, 140613135630335, -STORE, 140613118849024, 140613127237631, -SNULL, 140613127241727, 140613135630335, -STORE, 140613127237632, 140613127241727, -STORE, 140613127241728, 140613135630335, -SNULL, 140613571825664, 140613580214271, -STORE, 140613580214272, 140613605392383, -STORE, 140613571825664, 140613580214271, -SNULL, 140613580218367, 140613605392383, -STORE, 140613580214272, 140613580218367, -STORE, 140613580218368, 140613605392383, -SNULL, 140613689257984, 140613697646591, -STORE, 140613697646592, 140613706039295, -STORE, 140613689257984, 140613697646591, -SNULL, 140613697650687, 140613706039295, -STORE, 140613697646592, 140613697650687, -STORE, 140613697650688, 140613706039295, -SNULL, 140613680865279, 140613689253887, -STORE, 140613680861184, 140613680865279, -STORE, 140613680865280, 140613689253887, -STORE, 140613563428864, 140613571821567, -SNULL, 140613563432959, 140613571821567, -STORE, 140613563428864, 140613563432959, -STORE, 140613563432960, 140613571821567, -SNULL, 140613580218368, 140613588606975, -STORE, 140613588606976, 140613605392383, -STORE, 140613580218368, 140613588606975, -SNULL, 140613588611071, 140613605392383, -STORE, 140613588606976, 140613588611071, -STORE, 140613588611072, 140613605392383, -SNULL, 140613513109504, 140613521498111, -STORE, 140613521498112, 140613529890815, -STORE, 140613513109504, 140613521498111, -SNULL, 140613521502207, 140613529890815, -STORE, 140613521498112, 140613521502207, -STORE, 140613521502208, 140613529890815, -SNULL, 140613588611072, 140613596999679, -STORE, 140613596999680, 140613605392383, -STORE, 140613588611072, 140613596999679, -SNULL, 140613597003775, 140613605392383, -STORE, 140613596999680, 140613597003775, -STORE, 140613597003776, 140613605392383, -STORE, 140613555036160, 140613563428863, -SNULL, 140613555040255, 140613563428863, -STORE, 140613555036160, 140613555040255, -STORE, 140613555040256, 140613563428863, -STORE, 140613546643456, 140613555036159, -STORE, 140613538250752, 140613555036159, -SNULL, 140613538250752, 140613546643455, -STORE, 140613546643456, 140613555036159, -STORE, 140613538250752, 140613546643455, -SNULL, 140613546647551, 140613555036159, -STORE, 140613546643456, 140613546647551, -STORE, 140613546647552, 140613555036159, -STORE, 140613504712704, 140613513105407, -STORE, 140613496320000, 140613513105407, -SNULL, 140613496324095, 140613513105407, -STORE, 140613496320000, 140613496324095, -STORE, 140613496324096, 140613513105407, -STORE, 140613487927296, 140613496319999, -SNULL, 140613487931391, 140613496319999, -STORE, 140613487927296, 140613487931391, -STORE, 140613487931392, 140613496319999, -STORE, 140613479534592, 140613487927295, -SNULL, 140612967845887, 140612976234495, -STORE, 140612967841792, 140612967845887, -STORE, 140612967845888, 140612976234495, -STORE, 140613387280384, 140613395673087, -STORE, 140613378887680, 140613395673087, -SNULL, 140613378887680, 140613387280383, -STORE, 140613387280384, 140613395673087, -STORE, 140613378887680, 140613387280383, -SNULL, 140613387284479, 140613395673087, -STORE, 140613387280384, 140613387284479, -STORE, 140613387284480, 140613395673087, -STORE, 140613370494976, 140613387280383, -STORE, 140613362102272, 140613387280383, -SNULL, 140613479538687, 140613487927295, -STORE, 140613479534592, 140613479538687, -STORE, 140613479538688, 140613487927295, -STORE, 140613353709568, 140613387280383, -STORE, 140613345316864, 140613387280383, -STORE, 140613244669952, 140613253062655, -SNULL, 140613345320959, 140613387280383, -STORE, 140613345316864, 140613345320959, -STORE, 140613345320960, 140613387280383, -SNULL, 140613538254847, 140613546643455, -STORE, 140613538250752, 140613538254847, -STORE, 140613538254848, 140613546643455, -STORE, 140613236277248, 140613253062655, -STORE, 140613227884544, 140613253062655, -STORE, 140613219491840, 140613253062655, -STORE, 140613211099136, 140613253062655, -SNULL, 140613211103231, 140613253062655, -STORE, 140613211099136, 140613211103231, -STORE, 140613211103232, 140613253062655, -STORE, 140613102059520, 140613110452223, -STORE, 140613093666816, 140613110452223, -SNULL, 140613093670911, 140613110452223, -STORE, 140613093666816, 140613093670911, -STORE, 140613093670912, 140613110452223, -STORE, 140613085274112, 140613093666815, -SNULL, 140613496324096, 140613504712703, -STORE, 140613504712704, 140613513105407, -STORE, 140613496324096, 140613504712703, -SNULL, 140613504716799, 140613513105407, -STORE, 140613504712704, 140613504716799, -STORE, 140613504716800, 140613513105407, -SNULL, 140613345320960, 140613378887679, -STORE, 140613378887680, 140613387280383, -STORE, 140613345320960, 140613378887679, -SNULL, 140613378891775, 140613387280383, -STORE, 140613378887680, 140613378891775, -STORE, 140613378891776, 140613387280383, -SNULL, 140613345320960, 140613362102271, -STORE, 140613362102272, 140613378887679, -STORE, 140613345320960, 140613362102271, -SNULL, 140613362106367, 140613378887679, -STORE, 140613362102272, 140613362106367, -STORE, 140613362106368, 140613378887679, -SNULL, 140613362106368, 140613370494975, -STORE, 140613370494976, 140613378887679, -STORE, 140613362106368, 140613370494975, -SNULL, 140613370499071, 140613378887679, -STORE, 140613370494976, 140613370499071, -STORE, 140613370499072, 140613378887679, -STORE, 140613076881408, 140613093666815, -STORE, 140612993019904, 140613001412607, -SNULL, 140613076885503, 140613093666815, -STORE, 140613076881408, 140613076885503, -STORE, 140613076885504, 140613093666815, -SNULL, 140613093670912, 140613102059519, -STORE, 140613102059520, 140613110452223, -STORE, 140613093670912, 140613102059519, -SNULL, 140613102063615, 140613110452223, -STORE, 140613102059520, 140613102063615, -STORE, 140613102063616, 140613110452223, -SNULL, 140613076885504, 140613085274111, -STORE, 140613085274112, 140613093666815, -STORE, 140613076885504, 140613085274111, -SNULL, 140613085278207, 140613093666815, -STORE, 140613085274112, 140613085278207, -STORE, 140613085278208, 140613093666815, -STORE, 140612984627200, 140613001412607, -STORE, 140612967845888, 140612984627199, -SNULL, 140613211103232, 140613219491839, -STORE, 140613219491840, 140613253062655, -STORE, 140613211103232, 140613219491839, -SNULL, 140613219495935, 140613253062655, -STORE, 140613219491840, 140613219495935, -STORE, 140613219495936, 140613253062655, -STORE, 140612959449088, 140612967841791, -STORE, 140612951056384, 140612967841791, -SNULL, 140612951060479, 140612967841791, -STORE, 140612951056384, 140612951060479, -STORE, 140612951060480, 140612967841791, -SNULL, 140613345320960, 140613353709567, -STORE, 140613353709568, 140613362102271, -STORE, 140613345320960, 140613353709567, -SNULL, 140613353713663, 140613362102271, -STORE, 140613353709568, 140613353713663, -STORE, 140613353713664, 140613362102271, -SNULL, 140613219495936, 140613244669951, -STORE, 140613244669952, 140613253062655, -STORE, 140613219495936, 140613244669951, -SNULL, 140613244674047, 140613253062655, -STORE, 140613244669952, 140613244674047, -STORE, 140613244674048, 140613253062655, -STORE, 140612942663680, 140612951056383, -SNULL, 140613219495936, 140613236277247, -STORE, 140613236277248, 140613244669951, -STORE, 140613219495936, 140613236277247, -SNULL, 140613236281343, 140613244669951, -STORE, 140613236277248, 140613236281343, -STORE, 140613236281344, 140613244669951, -SNULL, 140613219495936, 140613227884543, -STORE, 140613227884544, 140613236277247, -STORE, 140613219495936, 140613227884543, -SNULL, 140613227888639, 140613236277247, -STORE, 140613227884544, 140613227888639, -STORE, 140613227888640, 140613236277247, -SNULL, 140612984627200, 140612993019903, -STORE, 140612993019904, 140613001412607, -STORE, 140612984627200, 140612993019903, -SNULL, 140612993023999, 140613001412607, -STORE, 140612993019904, 140612993023999, -STORE, 140612993024000, 140613001412607, -STORE, 140612858802176, 140612867194879, -STORE, 140612850409472, 140612867194879, -SNULL, 140612951060480, 140612959449087, -STORE, 140612959449088, 140612967841791, -STORE, 140612951060480, 140612959449087, -SNULL, 140612959453183, 140612967841791, -STORE, 140612959449088, 140612959453183, -STORE, 140612959453184, 140612967841791, -SNULL, 140612967845888, 140612976234495, -STORE, 140612976234496, 140612984627199, -STORE, 140612967845888, 140612976234495, -SNULL, 140612976238591, 140612984627199, -STORE, 140612976234496, 140612976238591, -STORE, 140612976238592, 140612984627199, -STORE, 140612842016768, 140612867194879, -SNULL, 140612842020863, 140612867194879, -STORE, 140612842016768, 140612842020863, -STORE, 140612842020864, 140612867194879, -SNULL, 140612984631295, 140612993019903, -STORE, 140612984627200, 140612984631295, -STORE, 140612984631296, 140612993019903, -STORE, 140612825235456, 140612842016767, -STORE, 140612808445952, 140612816838655, -SNULL, 140612942667775, 140612951056383, -STORE, 140612942663680, 140612942667775, -STORE, 140612942667776, 140612951056383, -STORE, 140612724584448, 140612732977151, -SNULL, 140612724588543, 140612732977151, -STORE, 140612724584448, 140612724588543, -STORE, 140612724588544, 140612732977151, -STORE, 140612716191744, 140612724584447, -SNULL, 140612842020864, 140612850409471, -STORE, 140612850409472, 140612867194879, -STORE, 140612842020864, 140612850409471, -SNULL, 140612850413567, 140612867194879, -STORE, 140612850409472, 140612850413567, -STORE, 140612850413568, 140612867194879, -SNULL, 140612850413568, 140612858802175, -STORE, 140612858802176, 140612867194879, -STORE, 140612850413568, 140612858802175, -SNULL, 140612858806271, 140612867194879, -STORE, 140612858802176, 140612858806271, -STORE, 140612858806272, 140612867194879, -STORE, 140612707799040, 140612724584447, -SNULL, 140612707803135, 140612724584447, -STORE, 140612707799040, 140612707803135, -STORE, 140612707803136, 140612724584447, -SNULL, 140612707803136, 140612716191743, -STORE, 140612716191744, 140612724584447, -STORE, 140612707803136, 140612716191743, -SNULL, 140612716195839, 140612724584447, -STORE, 140612716191744, 140612716195839, -STORE, 140612716195840, 140612724584447, -SNULL, 140612808450047, 140612816838655, -STORE, 140612808445952, 140612808450047, -STORE, 140612808450048, 140612816838655, -SNULL, 140612825235456, 140612833624063, -STORE, 140612833624064, 140612842016767, -STORE, 140612825235456, 140612833624063, -SNULL, 140612833628159, 140612842016767, -STORE, 140612833624064, 140612833628159, -STORE, 140612833628160, 140612842016767, -STORE, 140612699406336, 140612707799039, -SNULL, 140612699410431, 140612707799039, -STORE, 140612699406336, 140612699410431, -STORE, 140612699410432, 140612707799039, -STORE, 140614384926720, 140614384955391, -STORE, 140614349332480, 140614351523839, -SNULL, 140614349332480, 140614349422591, -STORE, 140614349422592, 140614351523839, -STORE, 140614349332480, 140614349422591, -SNULL, 140614351515647, 140614351523839, -STORE, 140614349422592, 140614351515647, -STORE, 140614351515648, 140614351523839, -ERASE, 140614351515648, 140614351523839, -STORE, 140614351515648, 140614351523839, -SNULL, 140614351519743, 140614351523839, -STORE, 140614351515648, 140614351519743, -STORE, 140614351519744, 140614351523839, -ERASE, 140614384926720, 140614384955391, -ERASE, 140613949296640, 140613949300735, -ERASE, 140613949300736, 140613957689343, -ERASE, 140613689253888, 140613689257983, -ERASE, 140613689257984, 140613697646591, -ERASE, 140613563428864, 140613563432959, -ERASE, 140613563432960, 140613571821567, -ERASE, 140613211099136, 140613211103231, -ERASE, 140613211103232, 140613219491839, -ERASE, 140614133870592, 140614133874687, -ERASE, 140614133874688, 140614142263295, -ERASE, 140612967841792, 140612967845887, -ERASE, 140612967845888, 140612976234495, -ERASE, 140613076881408, 140613076885503, -ERASE, 140613076885504, 140613085274111, -ERASE, 140612850409472, 140612850413567, -ERASE, 140612850413568, 140612858802175, -ERASE, 140613110452224, 140613110456319, -ERASE, 140613110456320, 140613118844927, -ERASE, 140613706039296, 140613706043391, -ERASE, 140613706043392, 140613714431999, -ERASE, 140613521498112, 140613521502207, -ERASE, 140613521502208, 140613529890815, -ERASE, 140613362102272, 140613362106367, -ERASE, 140613362106368, 140613370494975, -ERASE, 140613253062656, 140613253066751, -ERASE, 140613253066752, 140613261455359, -ERASE, 140612816838656, 140612816842751, -ERASE, 140612816842752, 140612825231359, -ERASE, 140613261455360, 140613261459455, -ERASE, 140613261459456, 140613269848063, -ERASE, 140613118844928, 140613118849023, -ERASE, 140613118849024, 140613127237631, -ERASE, 140613714432000, 140613714436095, -ERASE, 140613714436096, 140613722824703, -ERASE, 140613496320000, 140613496324095, -ERASE, 140613496324096, 140613504712703, -ERASE, 140613513105408, 140613513109503, -ERASE, 140613513109504, 140613521498111, -ERASE, 140613697646592, 140613697650687, -ERASE, 140613697650688, 140613706039295, -ERASE, 140613093666816, 140613093670911, -ERASE, 140613093670912, 140613102059519, -ERASE, 140612993019904, 140612993023999, -ERASE, 140612993024000, 140613001412607, -ERASE, 140613127237632, 140613127241727, -ERASE, 140613127241728, 140613135630335, -ERASE, 140613957689344, 140613957693439, -ERASE, 140613957693440, 140613966082047, -ERASE, 140613571821568, 140613571825663, -ERASE, 140613571825664, 140613580214271, -ERASE, 140613479534592, 140613479538687, -ERASE, 140613479538688, 140613487927295, -ERASE, 140612984627200, 140612984631295, -ERASE, 140612984631296, 140612993019903, -ERASE, 140613588606976, 140613588611071, -ERASE, 140613588611072, 140613596999679, -ERASE, 140613680861184, 140613680865279, -ERASE, 140613680865280, 140613689253887, -ERASE, 140613345316864, 140613345320959, -ERASE, 140613345320960, 140613353709567, -ERASE, 140613596999680, 140613597003775, -ERASE, 140613597003776, 140613605392383, -ERASE, 140613966082048, 140613966086143, -ERASE, 140613966086144, 140613974474751, -ERASE, 140613731217408, 140613731221503, -ERASE, 140613731221504, 140613739610111, -ERASE, 140613395673088, 140613395677183, -ERASE, 140613395677184, 140613404065791, -ERASE, 140612825231360, 140612825235455, -ERASE, 140612825235456, 140612833624063, -ERASE, 140612674228224, 140612674232319, -ERASE, 140612674232320, 140612682620927, -ERASE, 140613722824704, 140613722828799, -ERASE, 140613722828800, 140613731217407, -ERASE, 140613487927296, 140613487931391, -ERASE, 140613487931392, 140613496319999, -ERASE, 140613102059520, 140613102063615, -ERASE, 140613102063616, 140613110452223, -ERASE, 140614242910208, 140614242914303, -ERASE, 140614242914304, 140614251302911, -ERASE, 140612808445952, 140612808450047, -ERASE, 140612808450048, 140612816838655, -ERASE, 140613236277248, 140613236281343, -ERASE, 140613236281344, 140613244669951, -ERASE, 140613580214272, 140613580218367, -ERASE, 140613580218368, 140613588606975, -ERASE, 140613370494976, 140613370499071, -ERASE, 140613370499072, 140613378887679, -ERASE, 140613244669952, 140613244674047, -ERASE, 140613244674048, 140613253062655, -ERASE, 140612724584448, 140612724588543, -ERASE, 140612724588544, 140612732977151, -ERASE, 140612707799040, 140612707803135, -ERASE, 140612707803136, 140612716191743, -ERASE, 140613504712704, 140613504716799, -ERASE, 140613504716800, 140613513105407, - }; - - unsigned long set39[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140736271417344, 140737488351231, -SNULL, 140736271421439, 140737488351231, -STORE, 140736271417344, 140736271421439, -STORE, 140736271286272, 140736271421439, -STORE, 94412930822144, 94412933074943, -SNULL, 94412930953215, 94412933074943, -STORE, 94412930822144, 94412930953215, -STORE, 94412930953216, 94412933074943, -ERASE, 94412930953216, 94412933074943, -STORE, 94412933046272, 94412933054463, -STORE, 94412933054464, 94412933074943, -STORE, 140326136901632, 140326139154431, -SNULL, 140326137044991, 140326139154431, -STORE, 140326136901632, 140326137044991, -STORE, 140326137044992, 140326139154431, -ERASE, 140326137044992, 140326139154431, -STORE, 140326139142144, 140326139150335, -STORE, 140326139150336, 140326139154431, -STORE, 140736271585280, 140736271589375, -STORE, 140736271572992, 140736271585279, -STORE, 140326139113472, 140326139142143, -STORE, 140326139105280, 140326139113471, -STORE, 140326134685696, 140326136901631, -SNULL, 140326134685696, 140326134783999, -STORE, 140326134784000, 140326136901631, -STORE, 140326134685696, 140326134783999, -SNULL, 140326136877055, 140326136901631, -STORE, 140326134784000, 140326136877055, -STORE, 140326136877056, 140326136901631, -SNULL, 140326136877056, 140326136885247, -STORE, 140326136885248, 140326136901631, -STORE, 140326136877056, 140326136885247, -ERASE, 140326136877056, 140326136885247, -STORE, 140326136877056, 140326136885247, -ERASE, 140326136885248, 140326136901631, -STORE, 140326136885248, 140326136901631, -STORE, 140326130888704, 140326134685695, -SNULL, 140326130888704, 140326132547583, -STORE, 140326132547584, 140326134685695, -STORE, 140326130888704, 140326132547583, -SNULL, 140326134644735, 140326134685695, -STORE, 140326132547584, 140326134644735, -STORE, 140326134644736, 140326134685695, -SNULL, 140326134644736, 140326134669311, -STORE, 140326134669312, 140326134685695, -STORE, 140326134644736, 140326134669311, -ERASE, 140326134644736, 140326134669311, -STORE, 140326134644736, 140326134669311, -ERASE, 140326134669312, 140326134685695, -STORE, 140326134669312, 140326134685695, -STORE, 140326139097088, 140326139113471, -SNULL, 140326134661119, 140326134669311, -STORE, 140326134644736, 140326134661119, -STORE, 140326134661120, 140326134669311, -SNULL, 140326136881151, 140326136885247, -STORE, 140326136877056, 140326136881151, -STORE, 140326136881152, 140326136885247, -SNULL, 94412933050367, 94412933054463, -STORE, 94412933046272, 94412933050367, -STORE, 94412933050368, 94412933054463, -SNULL, 140326139146239, 140326139150335, -STORE, 140326139142144, 140326139146239, -STORE, 140326139146240, 140326139150335, -ERASE, 140326139113472, 140326139142143, -STORE, 94412939493376, 94412939628543, -STORE, 140326122496000, 140326130888703, -SNULL, 140326122500095, 140326130888703, -STORE, 140326122496000, 140326122500095, -STORE, 140326122500096, 140326130888703, -STORE, 140326114103296, 140326122495999, -STORE, 140325979885568, 140326114103295, -SNULL, 140325979885568, 140326043910143, -STORE, 140326043910144, 140326114103295, -STORE, 140325979885568, 140326043910143, -ERASE, 140325979885568, 140326043910143, -SNULL, 140326111019007, 140326114103295, -STORE, 140326043910144, 140326111019007, -STORE, 140326111019008, 140326114103295, -ERASE, 140326111019008, 140326114103295, -SNULL, 140326044045311, 140326111019007, -STORE, 140326043910144, 140326044045311, -STORE, 140326044045312, 140326111019007, -SNULL, 140326114107391, 140326122495999, -STORE, 140326114103296, 140326114107391, -STORE, 140326114107392, 140326122495999, -STORE, 140326035517440, 140326043910143, -SNULL, 140326035521535, 140326043910143, -STORE, 140326035517440, 140326035521535, -STORE, 140326035521536, 140326043910143, -STORE, 140326027124736, 140326035517439, -SNULL, 140326027128831, 140326035517439, -STORE, 140326027124736, 140326027128831, -STORE, 140326027128832, 140326035517439, -STORE, 140326018732032, 140326027124735, -SNULL, 140326018736127, 140326027124735, -STORE, 140326018732032, 140326018736127, -STORE, 140326018736128, 140326027124735, -STORE, 140326010339328, 140326018732031, -STORE, 140326001946624, 140326018732031, -STORE, 140325993553920, 140326018732031, -STORE, 140325859336192, 140325993553919, -SNULL, 140325859336192, 140325909692415, -STORE, 140325909692416, 140325993553919, -STORE, 140325859336192, 140325909692415, -ERASE, 140325859336192, 140325909692415, -SNULL, 140325976801279, 140325993553919, -STORE, 140325909692416, 140325976801279, -STORE, 140325976801280, 140325993553919, -ERASE, 140325976801280, 140325993553919, -STORE, 140325985161216, 140326018732031, -STORE, 140325775474688, 140325976801279, -STORE, 140325708365824, 140325976801279, -SNULL, 140325708500991, 140325976801279, -STORE, 140325708365824, 140325708500991, -STORE, 140325708500992, 140325976801279, -SNULL, 140325708500992, 140325909692415, -STORE, 140325909692416, 140325976801279, -STORE, 140325708500992, 140325909692415, -SNULL, 140325909827583, 140325976801279, -STORE, 140325909692416, 140325909827583, -STORE, 140325909827584, 140325976801279, -SNULL, 140325842583551, 140325909692415, -STORE, 140325708500992, 140325842583551, -STORE, 140325842583552, 140325909692415, -ERASE, 140325842583552, 140325909692415, -SNULL, 140325708500992, 140325775474687, -STORE, 140325775474688, 140325842583551, -STORE, 140325708500992, 140325775474687, -SNULL, 140325775609855, 140325842583551, -STORE, 140325775474688, 140325775609855, -STORE, 140325775609856, 140325842583551, -STORE, 140325775609856, 140325909692415, -SNULL, 140325775609856, 140325842583551, -STORE, 140325842583552, 140325909692415, -STORE, 140325775609856, 140325842583551, -SNULL, 140325842718719, 140325909692415, -STORE, 140325842583552, 140325842718719, -STORE, 140325842718720, 140325909692415, -SNULL, 140325985161216, 140325993553919, -STORE, 140325993553920, 140326018732031, -STORE, 140325985161216, 140325993553919, -SNULL, 140325993558015, 140326018732031, -STORE, 140325993553920, 140325993558015, -STORE, 140325993558016, 140326018732031, -SNULL, 140325985165311, 140325993553919, -STORE, 140325985161216, 140325985165311, -STORE, 140325985165312, 140325993553919, -SNULL, 140325993558016, 140326001946623, -STORE, 140326001946624, 140326018732031, -STORE, 140325993558016, 140326001946623, -SNULL, 140326001950719, 140326018732031, -STORE, 140326001946624, 140326001950719, -STORE, 140326001950720, 140326018732031, -SNULL, 140326001950720, 140326010339327, -STORE, 140326010339328, 140326018732031, -STORE, 140326001950720, 140326010339327, -SNULL, 140326010343423, 140326018732031, -STORE, 140326010339328, 140326010343423, -STORE, 140326010343424, 140326018732031, -STORE, 140325699973120, 140325708365823, -STORE, 140325691580416, 140325708365823, -STORE, 140325683187712, 140325708365823, -SNULL, 140325683191807, 140325708365823, -STORE, 140325683187712, 140325683191807, -STORE, 140325683191808, 140325708365823, -SNULL, 140325683191808, 140325699973119, -STORE, 140325699973120, 140325708365823, -STORE, 140325683191808, 140325699973119, -SNULL, 140325699977215, 140325708365823, -STORE, 140325699973120, 140325699977215, -STORE, 140325699977216, 140325708365823, -STORE, 140325674795008, 140325683187711, -STORE, 140325666402304, 140325683187711, -STORE, 140325658009600, 140325683187711, -SNULL, 140325658009600, 140325666402303, -STORE, 140325666402304, 140325683187711, -STORE, 140325658009600, 140325666402303, -SNULL, 140325666406399, 140325683187711, -STORE, 140325666402304, 140325666406399, -STORE, 140325666406400, 140325683187711, -SNULL, 140325683191808, 140325691580415, -STORE, 140325691580416, 140325699973119, -STORE, 140325683191808, 140325691580415, -SNULL, 140325691584511, 140325699973119, -STORE, 140325691580416, 140325691584511, -STORE, 140325691584512, 140325699973119, -SNULL, 140325666406400, 140325674795007, -STORE, 140325674795008, 140325683187711, -STORE, 140325666406400, 140325674795007, -SNULL, 140325674799103, 140325683187711, -STORE, 140325674795008, 140325674799103, -STORE, 140325674799104, 140325683187711, -STORE, 140325649616896, 140325666402303, -SNULL, 140325649616896, 140325658009599, -STORE, 140325658009600, 140325666402303, -STORE, 140325649616896, 140325658009599, -SNULL, 140325658013695, 140325666402303, -STORE, 140325658009600, 140325658013695, -STORE, 140325658013696, 140325666402303, -SNULL, 140325649620991, 140325658009599, -STORE, 140325649616896, 140325649620991, -STORE, 140325649620992, 140325658009599, -STORE, 140325641224192, 140325649616895, -STORE, 140325632831488, 140325649616895, -SNULL, 140325632835583, 140325649616895, -STORE, 140325632831488, 140325632835583, -STORE, 140325632835584, 140325649616895, -STORE, 140325624438784, 140325632831487, -SNULL, 140325624442879, 140325632831487, -STORE, 140325624438784, 140325624442879, -STORE, 140325624442880, 140325632831487, -SNULL, 140325632835584, 140325641224191, -STORE, 140325641224192, 140325649616895, -STORE, 140325632835584, 140325641224191, -SNULL, 140325641228287, 140325649616895, -STORE, 140325641224192, 140325641228287, -STORE, 140325641228288, 140325649616895, -STORE, 140325616046080, 140325624438783, -SNULL, 140325616050175, 140325624438783, -STORE, 140325616046080, 140325616050175, -STORE, 140325616050176, 140325624438783, -STORE, 140325607653376, 140325616046079, -SNULL, 140325607657471, 140325616046079, -STORE, 140325607653376, 140325607657471, -STORE, 140325607657472, 140325616046079, -STORE, 140325599260672, 140325607653375, -STORE, 140325590867968, 140325607653375, -STORE, 140325456650240, 140325590867967, -SNULL, 140325456650240, 140325507039231, -STORE, 140325507039232, 140325590867967, -STORE, 140325456650240, 140325507039231, -ERASE, 140325456650240, 140325507039231, -STORE, 140325498646528, 140325507039231, -STORE, 140325364428800, 140325498646527, -SNULL, 140325364428800, 140325372821503, -STORE, 140325372821504, 140325498646527, -STORE, 140325364428800, 140325372821503, -ERASE, 140325364428800, 140325372821503, -STORE, 140325364428800, 140325372821503, -STORE, 140325356036096, 140325372821503, -STORE, 140325221818368, 140325356036095, -SNULL, 140325221818368, 140325238603775, -STORE, 140325238603776, 140325356036095, -STORE, 140325221818368, 140325238603775, -ERASE, 140325221818368, 140325238603775, -STORE, 140325230211072, 140325238603775, -STORE, 140325221818368, 140325238603775, -STORE, 140325087600640, 140325221818367, -STORE, 140325079207936, 140325087600639, -SNULL, 140325087600640, 140325104386047, -STORE, 140325104386048, 140325221818367, -STORE, 140325087600640, 140325104386047, -ERASE, 140325087600640, 140325104386047, -STORE, 140325095993344, 140325104386047, -STORE, 140325079207936, 140325104386047, -STORE, 140324944990208, 140325079207935, -SNULL, 140324944990208, 140324970168319, -STORE, 140324970168320, 140325079207935, -STORE, 140324944990208, 140324970168319, -ERASE, 140324944990208, 140324970168319, -STORE, 140324961775616, 140324970168319, -STORE, 140324953382912, 140324970168319, -STORE, 140324819165184, 140324953382911, -STORE, 140324684947456, 140324953382911, -STORE, 140324676554752, 140324684947455, -STORE, 140324668162048, 140324684947455, -STORE, 140324533944320, 140324668162047, -STORE, 140324525551616, 140324533944319, -SNULL, 140324533944320, 140324567515135, -STORE, 140324567515136, 140324668162047, -STORE, 140324533944320, 140324567515135, -ERASE, 140324533944320, 140324567515135, -STORE, 140324559122432, 140324567515135, -STORE, 140324391333888, 140324525551615, -SNULL, 140325574148095, 140325590867967, -STORE, 140325507039232, 140325574148095, -STORE, 140325574148096, 140325590867967, -ERASE, 140325574148096, 140325590867967, -SNULL, 140325439930367, 140325498646527, -STORE, 140325372821504, 140325439930367, -STORE, 140325439930368, 140325498646527, -ERASE, 140325439930368, 140325498646527, -SNULL, 140325305712639, 140325356036095, -STORE, 140325238603776, 140325305712639, -STORE, 140325305712640, 140325356036095, -ERASE, 140325305712640, 140325356036095, -SNULL, 140325171494911, 140325221818367, -STORE, 140325104386048, 140325171494911, -STORE, 140325171494912, 140325221818367, -ERASE, 140325171494912, 140325221818367, -SNULL, 140325104521215, 140325171494911, -STORE, 140325104386048, 140325104521215, -STORE, 140325104521216, 140325171494911, -STORE, 140324257116160, 140324525551615, -SNULL, 140324257116160, 140324299079679, -STORE, 140324299079680, 140324525551615, -STORE, 140324257116160, 140324299079679, -ERASE, 140324257116160, 140324299079679, -SNULL, 140325037277183, 140325079207935, -STORE, 140324970168320, 140325037277183, -STORE, 140325037277184, 140325079207935, -ERASE, 140325037277184, 140325079207935, -SNULL, 140324819165183, 140324953382911, -STORE, 140324684947456, 140324819165183, -STORE, 140324819165184, 140324953382911, -SNULL, 140324819165184, 140324835950591, -STORE, 140324835950592, 140324953382911, -STORE, 140324819165184, 140324835950591, -ERASE, 140324819165184, 140324835950591, -SNULL, 140324903059455, 140324953382911, -STORE, 140324835950592, 140324903059455, -STORE, 140324903059456, 140324953382911, -ERASE, 140324903059456, 140324953382911, -SNULL, 140324684947456, 140324701732863, -STORE, 140324701732864, 140324819165183, -STORE, 140324684947456, 140324701732863, -ERASE, 140324684947456, 140324701732863, -SNULL, 140324768841727, 140324819165183, -STORE, 140324701732864, 140324768841727, -STORE, 140324768841728, 140324819165183, -ERASE, 140324768841728, 140324819165183, -SNULL, 140324634623999, 140324668162047, -STORE, 140324567515136, 140324634623999, -STORE, 140324634624000, 140324668162047, -ERASE, 140324634624000, 140324668162047, -SNULL, 140324391333887, 140324525551615, -STORE, 140324299079680, 140324391333887, -STORE, 140324391333888, 140324525551615, -SNULL, 140324391333888, 140324433297407, -STORE, 140324433297408, 140324525551615, -STORE, 140324391333888, 140324433297407, -ERASE, 140324391333888, 140324433297407, -SNULL, 140325507174399, 140325574148095, -STORE, 140325507039232, 140325507174399, -STORE, 140325507174400, 140325574148095, -SNULL, 140325590867968, 140325599260671, -STORE, 140325599260672, 140325607653375, -STORE, 140325590867968, 140325599260671, -SNULL, 140325599264767, 140325607653375, -STORE, 140325599260672, 140325599264767, -STORE, 140325599264768, 140325607653375, -SNULL, 140325372956671, 140325439930367, -STORE, 140325372821504, 140325372956671, -STORE, 140325372956672, 140325439930367, -SNULL, 140324668166143, 140324684947455, -STORE, 140324668162048, 140324668166143, -STORE, 140324668166144, 140324684947455, -SNULL, 140324525555711, 140324533944319, -STORE, 140324525551616, 140324525555711, -STORE, 140324525555712, 140324533944319, -SNULL, 140324953382912, 140324961775615, -STORE, 140324961775616, 140324970168319, -STORE, 140324953382912, 140324961775615, -SNULL, 140324961779711, 140324970168319, -STORE, 140324961775616, 140324961779711, -STORE, 140324961779712, 140324970168319, -SNULL, 140325079212031, 140325104386047, -STORE, 140325079207936, 140325079212031, -STORE, 140325079212032, 140325104386047, -SNULL, 140325221818368, 140325230211071, -STORE, 140325230211072, 140325238603775, -STORE, 140325221818368, 140325230211071, -SNULL, 140325230215167, 140325238603775, -STORE, 140325230211072, 140325230215167, -STORE, 140325230215168, 140325238603775, -SNULL, 140325356036096, 140325364428799, -STORE, 140325364428800, 140325372821503, -STORE, 140325356036096, 140325364428799, -SNULL, 140325364432895, 140325372821503, - }; - unsigned long set40[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140734309167104, 140737488351231, -SNULL, 140734309171199, 140737488351231, -STORE, 140734309167104, 140734309171199, -STORE, 140734309036032, 140734309171199, -STORE, 94270500081664, 94270502334463, -SNULL, 94270500212735, 94270502334463, -STORE, 94270500081664, 94270500212735, -STORE, 94270500212736, 94270502334463, -ERASE, 94270500212736, 94270502334463, -STORE, 94270502305792, 94270502313983, -STORE, 94270502313984, 94270502334463, -STORE, 140321935110144, 140321937362943, -SNULL, 140321935253503, 140321937362943, -STORE, 140321935110144, 140321935253503, -STORE, 140321935253504, 140321937362943, -ERASE, 140321935253504, 140321937362943, -STORE, 140321937350656, 140321937358847, -STORE, 140321937358848, 140321937362943, -STORE, 140734309625856, 140734309629951, -STORE, 140734309613568, 140734309625855, -STORE, 140321937321984, 140321937350655, -STORE, 140321937313792, 140321937321983, -STORE, 140321932894208, 140321935110143, -SNULL, 140321932894208, 140321932992511, -STORE, 140321932992512, 140321935110143, -STORE, 140321932894208, 140321932992511, -SNULL, 140321935085567, 140321935110143, -STORE, 140321932992512, 140321935085567, -STORE, 140321935085568, 140321935110143, -SNULL, 140321935085568, 140321935093759, -STORE, 140321935093760, 140321935110143, -STORE, 140321935085568, 140321935093759, -ERASE, 140321935085568, 140321935093759, -STORE, 140321935085568, 140321935093759, -ERASE, 140321935093760, 140321935110143, -STORE, 140321935093760, 140321935110143, -STORE, 140321929097216, 140321932894207, -SNULL, 140321929097216, 140321930756095, -STORE, 140321930756096, 140321932894207, -STORE, 140321929097216, 140321930756095, -SNULL, 140321932853247, 140321932894207, -STORE, 140321930756096, 140321932853247, -STORE, 140321932853248, 140321932894207, -SNULL, 140321932853248, 140321932877823, -STORE, 140321932877824, 140321932894207, -STORE, 140321932853248, 140321932877823, -ERASE, 140321932853248, 140321932877823, -STORE, 140321932853248, 140321932877823, -ERASE, 140321932877824, 140321932894207, -STORE, 140321932877824, 140321932894207, -STORE, 140321937305600, 140321937321983, -SNULL, 140321932869631, 140321932877823, -STORE, 140321932853248, 140321932869631, -STORE, 140321932869632, 140321932877823, -SNULL, 140321935089663, 140321935093759, -STORE, 140321935085568, 140321935089663, -STORE, 140321935089664, 140321935093759, -SNULL, 94270502309887, 94270502313983, -STORE, 94270502305792, 94270502309887, -STORE, 94270502309888, 94270502313983, -SNULL, 140321937354751, 140321937358847, -STORE, 140321937350656, 140321937354751, -STORE, 140321937354752, 140321937358847, -ERASE, 140321937321984, 140321937350655, -STORE, 94270507364352, 94270507499519, -STORE, 140321920704512, 140321929097215, -SNULL, 140321920708607, 140321929097215, -STORE, 140321920704512, 140321920708607, -STORE, 140321920708608, 140321929097215, -STORE, 140321912311808, 140321920704511, -STORE, 140321778094080, 140321912311807, -SNULL, 140321778094080, 140321816051711, -STORE, 140321816051712, 140321912311807, -STORE, 140321778094080, 140321816051711, -ERASE, 140321778094080, 140321816051711, -SNULL, 140321883160575, 140321912311807, -STORE, 140321816051712, 140321883160575, -STORE, 140321883160576, 140321912311807, -ERASE, 140321883160576, 140321912311807, -SNULL, 140321816186879, 140321883160575, -STORE, 140321816051712, 140321816186879, -STORE, 140321816186880, 140321883160575, -SNULL, 140321912315903, 140321920704511, -STORE, 140321912311808, 140321912315903, -STORE, 140321912315904, 140321920704511, -STORE, 140321903919104, 140321912311807, -SNULL, 140321903923199, 140321912311807, -STORE, 140321903919104, 140321903923199, -STORE, 140321903923200, 140321912311807, -STORE, 140321895526400, 140321903919103, -SNULL, 140321895530495, 140321903919103, -STORE, 140321895526400, 140321895530495, -STORE, 140321895530496, 140321903919103, -STORE, 140321887133696, 140321895526399, -SNULL, 140321887137791, 140321895526399, -STORE, 140321887133696, 140321887137791, -STORE, 140321887137792, 140321895526399, -STORE, 140321807659008, 140321816051711, -STORE, 140321673441280, 140321807659007, -SNULL, 140321673441280, 140321681833983, -STORE, 140321681833984, 140321807659007, -STORE, 140321673441280, 140321681833983, -ERASE, 140321673441280, 140321681833983, -SNULL, 140321748942847, 140321807659007, -STORE, 140321681833984, 140321748942847, -STORE, 140321748942848, 140321807659007, -ERASE, 140321748942848, 140321807659007, -STORE, 140321799266304, 140321816051711, -STORE, 140321790873600, 140321816051711, -STORE, 140321782480896, 140321816051711, -STORE, 140321547616256, 140321748942847, -SNULL, 140321614725119, 140321748942847, -STORE, 140321547616256, 140321614725119, -STORE, 140321614725120, 140321748942847, -SNULL, 140321614725120, 140321681833983, -STORE, 140321681833984, 140321748942847, -STORE, 140321614725120, 140321681833983, -ERASE, 140321614725120, 140321681833983, -SNULL, 140321681969151, 140321748942847, -STORE, 140321681833984, 140321681969151, -STORE, 140321681969152, 140321748942847, -STORE, 140321547616256, 140321681833983, -SNULL, 140321547616256, 140321614725119, -STORE, 140321614725120, 140321681833983, -STORE, 140321547616256, 140321614725119, -SNULL, 140321614860287, 140321681833983, -STORE, 140321614725120, 140321614860287, -STORE, 140321614860288, 140321681833983, -SNULL, 140321547751423, 140321614725119, -STORE, 140321547616256, 140321547751423, -STORE, 140321547751424, 140321614725119, -STORE, 140321480507392, 140321547616255, -SNULL, 140321782480896, 140321799266303, -STORE, 140321799266304, 140321816051711, -STORE, 140321782480896, 140321799266303, -SNULL, 140321799270399, 140321816051711, -STORE, 140321799266304, 140321799270399, -STORE, 140321799270400, 140321816051711, -STORE, 140321774088192, 140321799266303, -SNULL, 140321774088192, 140321790873599, -STORE, 140321790873600, 140321799266303, -STORE, 140321774088192, 140321790873599, -SNULL, 140321790877695, 140321799266303, -STORE, 140321790873600, 140321790877695, -STORE, 140321790877696, 140321799266303, -SNULL, 140321480642559, 140321547616255, -STORE, 140321480507392, 140321480642559, -STORE, 140321480642560, 140321547616255, -SNULL, 140321774088192, 140321782480895, -STORE, 140321782480896, 140321790873599, -STORE, 140321774088192, 140321782480895, -SNULL, 140321782484991, 140321790873599, -STORE, 140321782480896, 140321782484991, -STORE, 140321782484992, 140321790873599, -SNULL, 140321799270400, 140321807659007, -STORE, 140321807659008, 140321816051711, -STORE, 140321799270400, 140321807659007, -SNULL, 140321807663103, 140321816051711, -STORE, 140321807659008, 140321807663103, -STORE, 140321807663104, 140321816051711, -STORE, 140321765695488, 140321782480895, -STORE, 140321757302784, 140321782480895, -SNULL, 140321757306879, 140321782480895, -STORE, 140321757302784, 140321757306879, -STORE, 140321757306880, 140321782480895, -STORE, 140321472114688, 140321480507391, -STORE, 140321463721984, 140321480507391, -SNULL, 140321463726079, 140321480507391, -STORE, 140321463721984, 140321463726079, -STORE, 140321463726080, 140321480507391, -SNULL, 140321757306880, 140321774088191, -STORE, 140321774088192, 140321782480895, -STORE, 140321757306880, 140321774088191, -SNULL, 140321774092287, 140321782480895, -STORE, 140321774088192, 140321774092287, -STORE, 140321774092288, 140321782480895, -SNULL, 140321463726080, 140321472114687, -STORE, 140321472114688, 140321480507391, -STORE, 140321463726080, 140321472114687, -SNULL, 140321472118783, 140321480507391, -STORE, 140321472114688, 140321472118783, -STORE, 140321472118784, 140321480507391, -SNULL, 140321757306880, 140321765695487, -STORE, 140321765695488, 140321774088191, -STORE, 140321757306880, 140321765695487, -SNULL, 140321765699583, 140321774088191, -STORE, 140321765695488, 140321765699583, -STORE, 140321765699584, 140321774088191, -STORE, 140321455329280, 140321463721983, -SNULL, 140321455333375, 140321463721983, -STORE, 140321455329280, 140321455333375, -STORE, 140321455333376, 140321463721983, -STORE, 140321446936576, 140321455329279, -STORE, 140321438543872, 140321455329279, -STORE, 140321430151168, 140321455329279, -SNULL, 140321430155263, 140321455329279, -STORE, 140321430151168, 140321430155263, -STORE, 140321430155264, 140321455329279, -SNULL, 140321430155264, 140321446936575, -STORE, 140321446936576, 140321455329279, -STORE, 140321430155264, 140321446936575, -SNULL, 140321446940671, 140321455329279, -STORE, 140321446936576, 140321446940671, -STORE, 140321446940672, 140321455329279, -SNULL, 140321430155264, 140321438543871, -STORE, 140321438543872, 140321446936575, -STORE, 140321430155264, 140321438543871, -SNULL, 140321438547967, 140321446936575, -STORE, 140321438543872, 140321438547967, -STORE, 140321438547968, 140321446936575, -STORE, 140321421758464, 140321430151167, -SNULL, 140321421762559, 140321430151167, -STORE, 140321421758464, 140321421762559, -STORE, 140321421762560, 140321430151167, -STORE, 140321413365760, 140321421758463, -SNULL, 140321413369855, 140321421758463, -STORE, 140321413365760, 140321413369855, -STORE, 140321413369856, 140321421758463, -STORE, 140321404973056, 140321413365759, -SNULL, 140321404977151, 140321413365759, -STORE, 140321404973056, 140321404977151, -STORE, 140321404977152, 140321413365759, -STORE, 140321396580352, 140321404973055, -STORE, 140321388187648, 140321404973055, -STORE, 140321253969920, 140321388187647, -SNULL, 140321253969920, 140321279180799, -STORE, 140321279180800, 140321388187647, -STORE, 140321253969920, 140321279180799, -ERASE, 140321253969920, 140321279180799, -SNULL, 140321346289663, 140321388187647, -STORE, 140321279180800, 140321346289663, -STORE, 140321346289664, 140321388187647, -ERASE, 140321346289664, 140321388187647, -STORE, 140321144963072, 140321346289663, -STORE, 140321379794944, 140321404973055, -STORE, 140321371402240, 140321404973055, -STORE, 140321010745344, 140321346289663, -STORE, 140321363009536, 140321404973055, -SNULL, 140321077854207, 140321346289663, -STORE, 140321010745344, 140321077854207, -STORE, 140321077854208, 140321346289663, -SNULL, 140321077854208, 140321144963071, -STORE, 140321144963072, 140321346289663, -STORE, 140321077854208, 140321144963071, -ERASE, 140321077854208, 140321144963071, -STORE, 140321354616832, 140321404973055, -STORE, 140321136570368, 140321144963071, -STORE, 140320943636480, 140321077854207, -STORE, 140320876527616, 140321077854207, -STORE, 140321128177664, 140321144963071, -SNULL, 140320876662783, 140321077854207, -STORE, 140320876527616, 140320876662783, -STORE, 140320876662784, 140321077854207, -STORE, 140321119784960, 140321144963071, -STORE, 140321111392256, 140321144963071, -STORE, 140320742309888, 140320876527615, -STORE, 140321102999552, 140321144963071, -STORE, 140320608092160, 140320876527615, -SNULL, 140320675201023, 140320876527615, -STORE, 140320608092160, 140320675201023, -STORE, 140320675201024, 140320876527615, -SNULL, 140320675201024, 140320742309887, -STORE, 140320742309888, 140320876527615, -STORE, 140320675201024, 140320742309887, -ERASE, 140320675201024, 140320742309887, -STORE, 140321094606848, 140321144963071, -STORE, 140321086214144, 140321144963071, -STORE, 140320608092160, 140320876527615, -SNULL, 140320608092160, 140320675201023, -STORE, 140320675201024, 140320876527615, -STORE, 140320608092160, 140320675201023, -SNULL, 140320675336191, 140320876527615, -STORE, 140320675201024, 140320675336191, -STORE, 140320675336192, 140320876527615, -STORE, 140320599699456, 140320608092159, -STORE, 140320591306752, 140320608092159, -STORE, 140320457089024, 140320591306751, -STORE, 140320448696320, 140320457089023, -STORE, 140320314478592, 140320448696319, -SNULL, 140321144963072, 140321279180799, -STORE, 140321279180800, 140321346289663, -STORE, 140321144963072, 140321279180799, -SNULL, 140321279315967, 140321346289663, -STORE, 140321279180800, 140321279315967, -STORE, 140321279315968, 140321346289663, -SNULL, 140321086214144, 140321136570367, -STORE, 140321136570368, 140321144963071, -STORE, 140321086214144, 140321136570367, -SNULL, 140321136574463, 140321144963071, -STORE, 140321136570368, 140321136574463, -STORE, 140321136574464, 140321144963071, -SNULL, 140321212071935, 140321279180799, -STORE, 140321144963072, 140321212071935, -STORE, 140321212071936, 140321279180799, -ERASE, 140321212071936, 140321279180799, -SNULL, 140321145098239, 140321212071935, -STORE, 140321144963072, 140321145098239, -STORE, 140321145098240, 140321212071935, -SNULL, 140320876662784, 140321010745343, -STORE, 140321010745344, 140321077854207, -STORE, 140320876662784, 140321010745343, -SNULL, 140321010880511, 140321077854207, -STORE, 140321010745344, 140321010880511, -STORE, 140321010880512, 140321077854207, -SNULL, 140321354616832, 140321379794943, -STORE, 140321379794944, 140321404973055, -STORE, 140321354616832, 140321379794943, -SNULL, 140321379799039, 140321404973055, -STORE, 140321379794944, 140321379799039, -STORE, 140321379799040, 140321404973055, -SNULL, 140320876662784, 140320943636479, -STORE, 140320943636480, 140321010745343, -STORE, 140320876662784, 140320943636479, -SNULL, 140320943771647, 140321010745343, -STORE, 140320943636480, 140320943771647, -STORE, 140320943771648, 140321010745343, -SNULL, 140320809418751, 140320876527615, -STORE, 140320675336192, 140320809418751, -STORE, 140320809418752, 140320876527615, -ERASE, 140320809418752, 140320876527615, -SNULL, 140320675336192, 140320742309887, -STORE, 140320742309888, 140320809418751, -STORE, 140320675336192, 140320742309887, -SNULL, 140320742445055, 140320809418751, -STORE, 140320742309888, 140320742445055, -STORE, 140320742445056, 140320809418751, -SNULL, 140320608227327, 140320675201023, -STORE, 140320608092160, 140320608227327, -STORE, 140320608227328, 140320675201023, -SNULL, 140320457089024, 140320473874431, -STORE, 140320473874432, 140320591306751, -STORE, 140320457089024, 140320473874431, -ERASE, 140320457089024, 140320473874431, -SNULL, 140320540983295, 140320591306751, -STORE, 140320473874432, 140320540983295, -STORE, 140320540983296, 140320591306751, -ERASE, 140320540983296, 140320591306751, -SNULL, 140320314478592, 140320339656703, -STORE, 140320339656704, 140320448696319, -STORE, 140320314478592, 140320339656703, -ERASE, 140320314478592, 140320339656703, -SNULL, 140321086214144, 140321128177663, -STORE, 140321128177664, 140321136570367, -STORE, 140321086214144, 140321128177663, -SNULL, 140321128181759, 140321136570367, -STORE, 140321128177664, 140321128181759, -STORE, 140321128181760, 140321136570367, -SNULL, 140321354616832, 140321371402239, -STORE, 140321371402240, 140321379794943, -STORE, 140321354616832, 140321371402239, -SNULL, 140321371406335, 140321379794943, -STORE, 140321371402240, 140321371406335, -STORE, 140321371406336, 140321379794943, -SNULL, 140320591310847, 140320608092159, -STORE, 140320591306752, 140320591310847, -STORE, 140320591310848, 140320608092159, -SNULL, 140321354616832, 140321363009535, -STORE, 140321363009536, 140321371402239, -STORE, 140321354616832, 140321363009535, -SNULL, 140321363013631, 140321371402239, -STORE, 140321363009536, 140321363013631, -STORE, 140321363013632, 140321371402239, -SNULL, 140321086214144, 140321119784959, -STORE, 140321119784960, 140321128177663, -STORE, 140321086214144, 140321119784959, -SNULL, 140321119789055, 140321128177663, -STORE, 140321119784960, 140321119789055, -STORE, 140321119789056, 140321128177663, -SNULL, 140321086218239, 140321119784959, -STORE, 140321086214144, 140321086218239, -STORE, 140321086218240, 140321119784959, -SNULL, 140321086218240, 140321094606847, -STORE, 140321094606848, 140321119784959, -STORE, 140321086218240, 140321094606847, -SNULL, 140321094610943, 140321119784959, -STORE, 140321094606848, 140321094610943, -STORE, 140321094610944, 140321119784959, -SNULL, 140320474009599, 140320540983295, -STORE, 140320473874432, 140320474009599, -STORE, 140320474009600, 140320540983295, -SNULL, 140320406765567, 140320448696319, -STORE, 140320339656704, 140320406765567, -STORE, 140320406765568, 140320448696319, -ERASE, 140320406765568, 140320448696319, -SNULL, 140320339791871, 140320406765567, -STORE, 140320339656704, 140320339791871, -STORE, 140320339791872, 140320406765567, -STORE, 140321270788096, 140321279180799, -STORE, 140321262395392, 140321279180799, -STORE, 140321254002688, 140321279180799, -SNULL, 140321254002688, 140321262395391, -STORE, 140321262395392, 140321279180799, -STORE, 140321254002688, 140321262395391, -SNULL, 140321262399487, 140321279180799, -STORE, 140321262395392, 140321262399487, -STORE, 140321262399488, 140321279180799, -STORE, 140321245609984, 140321262395391, -STORE, 140321237217280, 140321262395391, -SNULL, 140321237217280, 140321245609983, -STORE, 140321245609984, 140321262395391, -STORE, 140321237217280, 140321245609983, -SNULL, 140321245614079, 140321262395391, -STORE, 140321245609984, 140321245614079, -STORE, 140321245614080, 140321262395391, -SNULL, 140321379799040, 140321388187647, -STORE, 140321388187648, 140321404973055, -STORE, 140321379799040, 140321388187647, -SNULL, 140321388191743, 140321404973055, -STORE, 140321388187648, 140321388191743, -STORE, 140321388191744, 140321404973055, -SNULL, 140321354620927, 140321363009535, -STORE, 140321354616832, 140321354620927, -STORE, 140321354620928, 140321363009535, -SNULL, 140321388191744, 140321396580351, -STORE, 140321396580352, 140321404973055, -STORE, 140321388191744, 140321396580351, -SNULL, 140321396584447, 140321404973055, -STORE, 140321396580352, 140321396584447, -STORE, 140321396584448, 140321404973055, -SNULL, 140321094610944, 140321111392255, -STORE, 140321111392256, 140321119784959, -STORE, 140321094610944, 140321111392255, -SNULL, 140321111396351, 140321119784959, -STORE, 140321111392256, 140321111396351, -STORE, 140321111396352, 140321119784959, -STORE, 140321228824576, 140321245609983, -SNULL, 140321094610944, 140321102999551, -STORE, 140321102999552, 140321111392255, -STORE, 140321094610944, 140321102999551, -SNULL, 140321103003647, 140321111392255, -STORE, 140321102999552, 140321103003647, -STORE, 140321103003648, 140321111392255, -STORE, 140321220431872, 140321245609983, -SNULL, 140321220435967, 140321245609983, -STORE, 140321220431872, 140321220435967, -STORE, 140321220435968, 140321245609983, -STORE, 140320868134912, 140320876527615, -SNULL, 140320868139007, 140320876527615, -STORE, 140320868134912, 140320868139007, -STORE, 140320868139008, 140320876527615, -SNULL, 140320591310848, 140320599699455, -STORE, 140320599699456, 140320608092159, -STORE, 140320591310848, 140320599699455, -SNULL, 140320599703551, 140320608092159, -STORE, 140320599699456, 140320599703551, -STORE, 140320599703552, 140320608092159, -STORE, 140320859742208, 140320868134911, -SNULL, 140321262399488, 140321270788095, -STORE, 140321270788096, 140321279180799, -STORE, 140321262399488, 140321270788095, -SNULL, 140321270792191, 140321279180799, -STORE, 140321270788096, 140321270792191, -STORE, 140321270792192, 140321279180799, -STORE, 140320851349504, 140320868134911, -STORE, 140320842956800, 140320868134911, -STORE, 140320834564096, 140320868134911, -STORE, 140320826171392, 140320868134911, -SNULL, 140320826171392, 140320834564095, -STORE, 140320834564096, 140320868134911, -STORE, 140320826171392, 140320834564095, -SNULL, 140320834568191, 140320868134911, -STORE, 140320834564096, 140320834568191, -STORE, 140320834568192, 140320868134911, -SNULL, 140321220435968, 140321228824575, -STORE, 140321228824576, 140321245609983, -STORE, 140321220435968, 140321228824575, -SNULL, 140321228828671, 140321245609983, -STORE, 140321228824576, 140321228828671, -STORE, 140321228828672, 140321245609983, -STORE, 140320817778688, 140320834564095, -SNULL, 140320817782783, 140320834564095, -STORE, 140320817778688, 140320817782783, -STORE, 140320817782784, 140320834564095, -STORE, 140320582914048, 140320591306751, -SNULL, 140321228828672, 140321237217279, -STORE, 140321237217280, 140321245609983, -STORE, 140321228828672, 140321237217279, -SNULL, 140321237221375, 140321245609983, -STORE, 140321237217280, 140321237221375, -STORE, 140321237221376, 140321245609983, -SNULL, 140320448700415, 140320457089023, -STORE, 140320448696320, 140320448700415, -STORE, 140320448700416, 140320457089023, -SNULL, 140321245614080, 140321254002687, -STORE, 140321254002688, 140321262395391, -STORE, 140321245614080, 140321254002687, -SNULL, 140321254006783, 140321262395391, -STORE, 140321254002688, 140321254006783, -STORE, 140321254006784, 140321262395391, -STORE, 140320574521344, 140320591306751, -SNULL, 140320574525439, 140320591306751, -STORE, 140320574521344, 140320574525439, -STORE, 140320574525440, 140320591306751, -STORE, 140320566128640, 140320574521343, -SNULL, 140320566132735, 140320574521343, -STORE, 140320566128640, 140320566132735, -STORE, 140320566132736, 140320574521343, -SNULL, 140320574525440, 140320582914047, -STORE, 140320582914048, 140320591306751, -STORE, 140320574525440, 140320582914047, -SNULL, 140320582918143, 140320591306751, -STORE, 140320582914048, 140320582918143, -STORE, 140320582918144, 140320591306751, -STORE, 140320557735936, 140320566128639, -SNULL, 140320557740031, 140320566128639, -STORE, 140320557735936, 140320557740031, -STORE, 140320557740032, 140320566128639, -STORE, 140320549343232, 140320557735935, -STORE, 140320465481728, 140320473874431, -STORE, 140320448700416, 140320473874431, -SNULL, 140320834568192, 140320859742207, -STORE, 140320859742208, 140320868134911, -STORE, 140320834568192, 140320859742207, -SNULL, 140320859746303, 140320868134911, -STORE, 140320859742208, 140320859746303, -STORE, 140320859746304, 140320868134911, -STORE, 140320440303616, 140320448696319, -STORE, 140320431910912, 140320448696319, -SNULL, 140320834568192, 140320851349503, -STORE, 140320851349504, 140320859742207, -STORE, 140320834568192, 140320851349503, -SNULL, 140320851353599, 140320859742207, -STORE, 140320851349504, 140320851353599, -STORE, 140320851353600, 140320859742207, -SNULL, 140320817782784, 140320826171391, -STORE, 140320826171392, 140320834564095, -STORE, 140320817782784, 140320826171391, -SNULL, 140320826175487, 140320834564095, -STORE, 140320826171392, 140320826175487, -STORE, 140320826175488, 140320834564095, -SNULL, 140320834568192, 140320842956799, -STORE, 140320842956800, 140320851349503, -STORE, 140320834568192, 140320842956799, -SNULL, 140320842960895, 140320851349503, -STORE, 140320842956800, 140320842960895, -STORE, 140320842960896, 140320851349503, -STORE, 140320423518208, 140320448696319, -SNULL, 140320423522303, 140320448696319, -STORE, 140320423518208, 140320423522303, -STORE, 140320423522304, 140320448696319, -STORE, 140320415125504, 140320423518207, -STORE, 140320331264000, 140320339656703, -STORE, 140320322871296, 140320339656703, -STORE, 140320314478592, 140320339656703, -SNULL, 140320314482687, 140320339656703, -STORE, 140320314478592, 140320314482687, -STORE, 140320314482688, 140320339656703, -STORE, 140320306085888, 140320314478591, -SNULL, 140320306089983, 140320314478591, -STORE, 140320306085888, 140320306089983, -STORE, 140320306089984, 140320314478591, -STORE, 140320297693184, 140320306085887, -SNULL, 140320297697279, 140320306085887, -STORE, 140320297693184, 140320297697279, -STORE, 140320297697280, 140320306085887, -STORE, 140320289300480, 140320297693183, -STORE, 140320280907776, 140320297693183, -SNULL, 140320280911871, 140320297693183, -STORE, 140320280907776, 140320280911871, -STORE, 140320280911872, 140320297693183, -SNULL, 140320423522304, 140320431910911, -STORE, 140320431910912, 140320448696319, -STORE, 140320423522304, 140320431910911, -SNULL, 140320431915007, 140320448696319, -STORE, 140320431910912, 140320431915007, -STORE, 140320431915008, 140320448696319, -SNULL, 140320549347327, 140320557735935, -STORE, 140320549343232, 140320549347327, -STORE, 140320549347328, 140320557735935, -STORE, 140320272515072, 140320280907775, -SNULL, 140320448700416, 140320457089023, -STORE, 140320457089024, 140320473874431, -STORE, 140320448700416, 140320457089023, -SNULL, 140320457093119, 140320473874431, -STORE, 140320457089024, 140320457093119, -STORE, 140320457093120, 140320473874431, -STORE, 140320264122368, 140320280907775, -SNULL, 140320457093120, 140320465481727, -STORE, 140320465481728, 140320473874431, -STORE, 140320457093120, 140320465481727, -SNULL, 140320465485823, 140320473874431, -STORE, 140320465481728, 140320465485823, -STORE, 140320465485824, 140320473874431, -SNULL, 140320431915008, 140320440303615, -STORE, 140320440303616, 140320448696319, -STORE, 140320431915008, 140320440303615, -SNULL, 140320440307711, 140320448696319, -STORE, 140320440303616, 140320440307711, -STORE, 140320440307712, 140320448696319, -STORE, 140320255729664, 140320280907775, -STORE, 140320247336960, 140320280907775, -SNULL, 140320247341055, 140320280907775, -STORE, 140320247336960, 140320247341055, -STORE, 140320247341056, 140320280907775, -STORE, 140320238944256, 140320247336959, -STORE, 140320230551552, 140320247336959, -SNULL, 140320230551552, 140320238944255, -STORE, 140320238944256, 140320247336959, -STORE, 140320230551552, 140320238944255, -SNULL, 140320238948351, 140320247336959, -STORE, 140320238944256, 140320238948351, -STORE, 140320238948352, 140320247336959, -SNULL, 140320314482688, 140320331263999, -STORE, 140320331264000, 140320339656703, -STORE, 140320314482688, 140320331263999, -SNULL, 140320331268095, 140320339656703, -STORE, 140320331264000, 140320331268095, -STORE, 140320331268096, 140320339656703, -SNULL, 140320280911872, 140320289300479, -STORE, 140320289300480, 140320297693183, -STORE, 140320280911872, 140320289300479, -SNULL, 140320289304575, 140320297693183, -STORE, 140320289300480, 140320289304575, -STORE, 140320289304576, 140320297693183, -SNULL, 140320415129599, 140320423518207, -STORE, 140320415125504, 140320415129599, -STORE, 140320415129600, 140320423518207, -STORE, 140320222158848, 140320238944255, -STORE, 140320213766144, 140320238944255, -STORE, 140320205373440, 140320238944255, -SNULL, 140320205377535, 140320238944255, -STORE, 140320205373440, 140320205377535, -STORE, 140320205377536, 140320238944255, -SNULL, 140320314482688, 140320322871295, -STORE, 140320322871296, 140320331263999, -STORE, 140320314482688, 140320322871295, -SNULL, 140320322875391, 140320331263999, -STORE, 140320322871296, 140320322875391, -STORE, 140320322875392, 140320331263999, -SNULL, 140320247341056, 140320272515071, -STORE, 140320272515072, 140320280907775, -STORE, 140320247341056, 140320272515071, -SNULL, 140320272519167, 140320280907775, -STORE, 140320272515072, 140320272519167, -STORE, 140320272519168, 140320280907775, -SNULL, 140320247341056, 140320264122367, -STORE, 140320264122368, 140320272515071, -STORE, 140320247341056, 140320264122367, -SNULL, 140320264126463, 140320272515071, -STORE, 140320264122368, 140320264126463, -STORE, 140320264126464, 140320272515071, -SNULL, 140320205377536, 140320230551551, -STORE, 140320230551552, 140320238944255, -STORE, 140320205377536, 140320230551551, -SNULL, 140320230555647, 140320238944255, -STORE, 140320230551552, 140320230555647, -STORE, 140320230555648, 140320238944255, -STORE, 140320196980736, 140320205373439, -SNULL, 140320196984831, 140320205373439, -STORE, 140320196980736, 140320196984831, -STORE, 140320196984832, 140320205373439, -STORE, 140320188588032, 140320196980735, -SNULL, 140320247341056, 140320255729663, -STORE, 140320255729664, 140320264122367, -STORE, 140320247341056, 140320255729663, -SNULL, 140320255733759, 140320264122367, -STORE, 140320255729664, 140320255733759, -STORE, 140320255733760, 140320264122367, -STORE, 140320180195328, 140320196980735, -SNULL, 140320180199423, 140320196980735, -STORE, 140320180195328, 140320180199423, -STORE, 140320180199424, 140320196980735, -STORE, 140320171802624, 140320180195327, -STORE, 140320163409920, 140320180195327, -SNULL, 140320163414015, 140320180195327, -STORE, 140320163409920, 140320163414015, -STORE, 140320163414016, 140320180195327, -SNULL, 140320205377536, 140320222158847, -STORE, 140320222158848, 140320230551551, -STORE, 140320205377536, 140320222158847, -SNULL, 140320222162943, 140320230551551, -STORE, 140320222158848, 140320222162943, -STORE, 140320222162944, 140320230551551, -SNULL, 140320205377536, 140320213766143, -STORE, 140320213766144, 140320222158847, -STORE, 140320205377536, 140320213766143, -SNULL, 140320213770239, 140320222158847, -STORE, 140320213766144, 140320213770239, -STORE, 140320213770240, 140320222158847, -STORE, 140320155017216, 140320163409919, -SNULL, 140320180199424, 140320188588031, -STORE, 140320188588032, 140320196980735, -STORE, 140320180199424, 140320188588031, -SNULL, 140320188592127, 140320196980735, -STORE, 140320188588032, 140320188592127, -STORE, 140320188592128, 140320196980735, -SNULL, 140320155021311, 140320163409919, -STORE, 140320155017216, 140320155021311, -STORE, 140320155021312, 140320163409919, -SNULL, 140320163414016, 140320171802623, -STORE, 140320171802624, 140320180195327, -STORE, 140320163414016, 140320171802623, -SNULL, 140320171806719, 140320180195327, -STORE, 140320171802624, 140320171806719, -STORE, 140320171806720, 140320180195327, -STORE, 140320146624512, 140320155017215, -SNULL, 140320146628607, 140320155017215, -STORE, 140320146624512, 140320146628607, -STORE, 140320146628608, 140320155017215, -STORE, 140321937321984, 140321937350655, -STORE, 140321884942336, 140321887133695, -SNULL, 140321884942336, 140321885032447, -STORE, 140321885032448, 140321887133695, -STORE, 140321884942336, 140321885032447, -SNULL, 140321887125503, 140321887133695, -STORE, 140321885032448, 140321887125503, -STORE, 140321887125504, 140321887133695, -ERASE, 140321887125504, 140321887133695, -STORE, 140321887125504, 140321887133695, -SNULL, 140321887129599, 140321887133695, -STORE, 140321887125504, 140321887129599, -STORE, 140321887129600, 140321887133695, -ERASE, 140321937321984, 140321937350655, -ERASE, 140321086214144, 140321086218239, -ERASE, 140321086218240, 140321094606847, -ERASE, 140321119784960, 140321119789055, -ERASE, 140321119789056, 140321128177663, -ERASE, 140321245609984, 140321245614079, -ERASE, 140321245614080, 140321254002687, -ERASE, 140320574521344, 140320574525439, -ERASE, 140320574525440, 140320582914047, -ERASE, 140320297693184, 140320297697279, -ERASE, 140320297697280, 140320306085887, -ERASE, 140321354616832, 140321354620927, -ERASE, 140321354620928, 140321363009535, -ERASE, 140320834564096, 140320834568191, -ERASE, 140320834568192, 140320842956799, -ERASE, 140320591306752, 140320591310847, -ERASE, 140320591310848, 140320599699455, -ERASE, 140321136570368, 140321136574463, -ERASE, 140321136574464, 140321144963071, -ERASE, 140321237217280, 140321237221375, -ERASE, 140321237221376, 140321245609983, -ERASE, 140321363009536, 140321363013631, -ERASE, 140321363013632, 140321371402239, -ERASE, 140320599699456, 140320599703551, -ERASE, 140320599703552, 140320608092159, -ERASE, 140321396580352, 140321396584447, -ERASE, 140321396584448, 140321404973055, -ERASE, 140320566128640, 140320566132735, -ERASE, 140320566132736, 140320574521343, -ERASE, 140321094606848, 140321094610943, -ERASE, 140321094610944, 140321102999551, -ERASE, 140320582914048, 140320582918143, -ERASE, 140320582918144, 140320591306751, -ERASE, 140320289300480, 140320289304575, -ERASE, 140320289304576, 140320297693183, -ERASE, 140320163409920, 140320163414015, - }; - unsigned long set41[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140728157171712, 140737488351231, -SNULL, 140728157175807, 140737488351231, -STORE, 140728157171712, 140728157175807, -STORE, 140728157040640, 140728157175807, -STORE, 94376106364928, 94376108613631, -SNULL, 94376106487807, 94376108613631, -STORE, 94376106364928, 94376106487807, -STORE, 94376106487808, 94376108613631, -SNULL, 94376106487808, 94376108613631, -STORE, 94376108584960, 94376108593151, -STORE, 94376108593152, 94376108613631, -STORE, 140113496432640, 140113498685439, -SNULL, 140113496575999, 140113498685439, -STORE, 140113496432640, 140113496575999, -STORE, 140113496576000, 140113498685439, -SNULL, 140113496576000, 140113498685439, -STORE, 140113498673152, 140113498681343, -STORE, 140113498681344, 140113498685439, -STORE, 140728157609984, 140728157618175, -STORE, 140728157593600, 140728157609983, -STORE, 140113498636288, 140113498673151, -STORE, 140113498628096, 140113498636287, -STORE, 140113492635648, 140113496432639, -SNULL, 140113492635648, 140113494294527, -STORE, 140113494294528, 140113496432639, -STORE, 140113492635648, 140113494294527, -SNULL, 140113496391679, 140113496432639, -STORE, 140113494294528, 140113496391679, -STORE, 140113496391680, 140113496432639, -SNULL, 140113496391680, 140113496416255, -STORE, 140113496416256, 140113496432639, -STORE, 140113496391680, 140113496416255, -SNULL, 140113496391680, 140113496416255, -STORE, 140113496391680, 140113496416255, -SNULL, 140113496416256, 140113496432639, -STORE, 140113496416256, 140113496432639, -SNULL, 140113496408063, 140113496416255, -STORE, 140113496391680, 140113496408063, -STORE, 140113496408064, 140113496416255, -SNULL, 94376108589055, 94376108593151, -STORE, 94376108584960, 94376108589055, -STORE, 94376108589056, 94376108593151, -SNULL, 140113498677247, 140113498681343, -STORE, 140113498673152, 140113498677247, -STORE, 140113498677248, 140113498681343, -SNULL, 140113498636288, 140113498673151, -STORE, 94376135090176, 94376135094271, -STORE, 94376135090176, 94376135098367, -STORE, 94376139288576, 94376139292671, -STORE, 94376143482880, 94376143486975, -STORE, 94376147677184, 94376147681279, -STORE, 94376151871488, 94376151875583, -STORE, 94376156065792, 94376156069887, -STORE, 94376160260096, 94376160264191, -STORE, 94376164454400, 94376164458495, -STORE, 94376168648704, 94376168652799, -STORE, 94376172843008, 94376172847103, -STORE, 94376177037312, 94376177041407, -STORE, 94376181231616, 94376181235711, -STORE, 94376185425920, 94376185430015, -STORE, 94376189620224, 94376189624319, -STORE, 94376193814528, 94376193818623, -STORE, 94376198008832, 94376198012927, -STORE, 94376202203136, 94376202207231, -STORE, 94376206397440, 94376206401535, -STORE, 94376210591744, 94376210595839, -STORE, 94376214786048, 94376214790143, -STORE, 94376218980352, 94376218984447, -STORE, 94376223174656, 94376223178751, -STORE, 94376227368960, 94376227373055, -STORE, 94376231563264, 94376231567359, -STORE, 94376235757568, 94376235761663, -STORE, 94376239951872, 94376239955967, -STORE, 94376244146176, 94376244150271, -STORE, 94376248340480, 94376248344575, -STORE, 94376252534784, 94376252538879, -STORE, 94376256729088, 94376256733183, -STORE, 94376260923392, 94376260927487, -STORE, 94376265117696, 94376265121791, -STORE, 94376269312000, 94376269316095, -STORE, 94376273506304, 94376273510399, -STORE, 94376277700608, 94376277704703, -STORE, 94376281894912, 94376281899007, -STORE, 94376286089216, 94376286093311, -STORE, 94376290283520, 94376290287615, -STORE, 94376294477824, 94376294481919, -STORE, 94376298672128, 94376298676223, -STORE, 94376302866432, 94376302870527, -STORE, 94376307060736, 94376307064831, -STORE, 94376311255040, 94376311259135, -STORE, 94376315449344, 94376315453439, -STORE, 94376319643648, 94376319647743, -STORE, 94376323837952, 94376323842047, -STORE, 94376328032256, 94376328036351, -STORE, 94376332226560, 94376332230655, -STORE, 94376336420864, 94376336424959, -STORE, 94376340615168, 94376340619263, -STORE, 94376344809472, 94376344813567, -STORE, 94376349003776, 94376349007871, -STORE, 94376353198080, 94376353202175, -STORE, 94376357392384, 94376357396479, -STORE, 94376361586688, 94376361590783, -STORE, 94376365780992, 94376365785087, -STORE, 94376369975296, 94376369979391, -STORE, 94376374169600, 94376374173695, -STORE, 94376378363904, 94376378367999, -STORE, 94376382558208, 94376382562303, -STORE, 94376386752512, 94376386756607, -STORE, 94376390946816, 94376390950911, -STORE, 94376395141120, 94376395145215, -STORE, 94376399335424, 94376399339519, -STORE, 94376403529728, 94376403533823, -STORE, 94376407724032, 94376407728127, -STORE, 94376411918336, 94376411922431, -STORE, 94376416112640, 94376416116735, -STORE, 94376420306944, 94376420311039, -STORE, 94376424501248, 94376424505343, -STORE, 94376428695552, 94376428699647, -STORE, 94376432889856, 94376432893951, -STORE, 94376437084160, 94376437088255, -STORE, 94376441278464, 94376441282559, -STORE, 94376445472768, 94376445476863, -STORE, 94376449667072, 94376449671167, -STORE, 94376453861376, 94376453865471, -STORE, 94376458055680, 94376458059775, -STORE, 94376462249984, 94376462254079, -STORE, 94376466444288, 94376466448383, -STORE, 94376470638592, 94376470642687, -STORE, 94376474832896, 94376474836991, -STORE, 94376479027200, 94376479031295, -STORE, 94376483221504, 94376483225599, -STORE, 94376487415808, 94376487419903, -STORE, 94376491610112, 94376491614207, -STORE, 94376495804416, 94376495808511, -STORE, 94376499998720, 94376500002815, -STORE, 94376504193024, 94376504197119, -STORE, 94376508387328, 94376508391423, -STORE, 94376512581632, 94376512585727, -STORE, 94376516775936, 94376516780031, -STORE, 94376520970240, 94376520974335, -STORE, 94376525164544, 94376525168639, -STORE, 94376529358848, 94376529362943, -STORE, 94376533553152, 94376533557247, -STORE, 94376537747456, 94376537751551, -STORE, 94376541941760, 94376541945855, -STORE, 94376546136064, 94376546140159, -STORE, 94376550330368, 94376550334463, -STORE, 94376554524672, 94376554528767, -STORE, 94376558718976, 94376558723071, -STORE, 94376562913280, 94376562917375, -STORE, 94376567107584, 94376567111679, -STORE, 94376571301888, 94376571305983, -STORE, 94376575496192, 94376575500287, -STORE, 94376579690496, 94376579694591, -STORE, 94376583884800, 94376583888895, -STORE, 94376588079104, 94376588083199, -STORE, 94376592273408, 94376592277503, -STORE, 94376596467712, 94376596471807, -STORE, 94376600662016, 94376600666111, -STORE, 94376604856320, 94376604860415, -STORE, 94376609050624, 94376609054719, -STORE, 94376613244928, 94376613249023, -STORE, 94376617439232, 94376617443327, -STORE, 94376621633536, 94376621637631, -STORE, 94376625827840, 94376625831935, -STORE, 94376630022144, 94376630026239, -STORE, 94376634216448, 94376634220543, -STORE, 94376638410752, 94376638414847, -STORE, 94376642605056, 94376642609151, -STORE, 94376646799360, 94376646803455, -STORE, 94376650993664, 94376650997759, -STORE, 94376655187968, 94376655192063, -STORE, 94376659382272, 94376659386367, -STORE, 94376663576576, 94376663580671, -STORE, 94376667770880, 94376667774975, -STORE, 94376671965184, 94376671969279, -STORE, 94376676159488, 94376676163583, -STORE, 94376680353792, 94376680357887, -STORE, 94376684548096, 94376684552191, -STORE, 94376688742400, 94376688746495, -STORE, 94376692936704, 94376692940799, -STORE, 94376697131008, 94376697135103, -STORE, 94376701325312, 94376701329407, -STORE, 94376705519616, 94376705523711, -STORE, 94376709713920, 94376709718015, -STORE, 94376713908224, 94376713912319, -STORE, 94376718102528, 94376718106623, -STORE, 94376722296832, 94376722300927, -STORE, 94376726491136, 94376726495231, -STORE, 94376730685440, 94376730689535, -STORE, 94376734879744, 94376734883839, -STORE, 94376739074048, 94376739078143, -STORE, 94376743268352, 94376743272447, -STORE, 94376747462656, 94376747466751, -STORE, 94376751656960, 94376751661055, -STORE, 94376755851264, 94376755855359, -STORE, 94376760045568, 94376760049663, -STORE, 94376764239872, 94376764243967, -STORE, 94376768434176, 94376768438271, -STORE, 94376772628480, 94376772632575, -STORE, 94376776822784, 94376776826879, -STORE, 94376781017088, 94376781021183, -STORE, 94376785211392, 94376785215487, -STORE, 94376789405696, 94376789409791, -STORE, 94376793600000, 94376793604095, -STORE, 94376797794304, 94376797798399, -STORE, 94376801988608, 94376801992703, -STORE, 94376806182912, 94376806187007, -STORE, 94376810377216, 94376810381311, -STORE, 94376814571520, 94376814575615, -STORE, 94376818765824, 94376818769919, -STORE, 94376822960128, 94376822964223, -STORE, 94376827154432, 94376827158527, -STORE, 94376831348736, 94376831352831, -STORE, 94376835543040, 94376835547135, -STORE, 94376839737344, 94376839741439, -STORE, 94376843931648, 94376843935743, -STORE, 94376848125952, 94376848130047, -STORE, 94376852320256, 94376852324351, -STORE, 94376856514560, 94376856518655, -STORE, 94376860708864, 94376860712959, -STORE, 94376864903168, 94376864907263, -STORE, 94376869097472, 94376869101567, -STORE, 94376873291776, 94376873295871, -STORE, 94376877486080, 94376877490175, -STORE, 94376881680384, 94376881684479, -STORE, 94376885874688, 94376885878783, -STORE, 94376890068992, 94376890073087, -STORE, 94376894263296, 94376894267391, -STORE, 94376898457600, 94376898461695, -STORE, 94376902651904, 94376902655999, -STORE, 94376906846208, 94376906850303, -STORE, 94376911040512, 94376911044607, -STORE, 94376915234816, 94376915238911, -STORE, 94376919429120, 94376919433215, -STORE, 94376923623424, 94376923627519, -STORE, 94376927817728, 94376927821823, -STORE, 94376932012032, 94376932016127, -STORE, 94376936206336, 94376936210431, -STORE, 94376940400640, 94376940404735, -STORE, 94376944594944, 94376944599039, -STORE, 94376948789248, 94376948793343, -STORE, 94376952983552, 94376952987647, -STORE, 94376957177856, 94376957181951, -STORE, 94376961372160, 94376961376255, -STORE, 94376965566464, 94376965570559, -STORE, 94376969760768, 94376969764863, -STORE, 94376973955072, 94376973959167, -STORE, 94376978149376, 94376978153471, -STORE, 94376982343680, 94376982347775, -STORE, 94376986537984, 94376986542079, -STORE, 94376990732288, 94376990736383, -STORE, 94376994926592, 94376994930687, -STORE, 94376999120896, 94376999124991, -STORE, 94377003315200, 94377003319295, -STORE, 94377007509504, 94377007513599, -STORE, 94377011703808, 94377011707903, -STORE, 94377015898112, 94377015902207, -STORE, 94377020092416, 94377020096511, -STORE, 94377024286720, 94377024290815, -STORE, 94377028481024, 94377028485119, -STORE, 94377032675328, 94377032679423, -STORE, 94377036869632, 94377036873727, -STORE, 94377041063936, 94377041068031, -STORE, 94377045258240, 94377045262335, -STORE, 94377049452544, 94377049456639, -STORE, 94377053646848, 94377053650943, -STORE, 94377057841152, 94377057845247, -STORE, 94377062035456, 94377062039551, -STORE, 94377066229760, 94377066233855, -STORE, 94377070424064, 94377070428159, -STORE, 94377074618368, 94377074622463, -STORE, 94377078812672, 94377078816767, -STORE, 94377083006976, 94377083011071, -STORE, 94377087201280, 94377087205375, -STORE, 94377091395584, 94377091399679, -STORE, 94377095589888, 94377095593983, -STORE, 94377099784192, 94377099788287, -STORE, 94377103978496, 94377103982591, -STORE, 94377108172800, 94377108176895, -STORE, 94377112367104, 94377112371199, -STORE, 94377116561408, 94377116565503, -STORE, 94377120755712, 94377120759807, -STORE, 94377124950016, 94377124954111, -STORE, 94377129144320, 94377129148415, -STORE, 94377133338624, 94377133342719, -STORE, 94377137532928, 94377137537023, -STORE, 94377141727232, 94377141731327, -STORE, 94377145921536, 94377145925631, -STORE, 94377150115840, 94377150119935, -STORE, 94377154310144, 94377154314239, -STORE, 94377158504448, 94377158508543, -STORE, 94377162698752, 94377162702847, -STORE, 94377166893056, 94377166897151, -STORE, 94377171087360, 94377171091455, -STORE, 94377175281664, 94377175285759, -STORE, 94377179475968, 94377179480063, -STORE, 94377183670272, 94377183674367, -STORE, 94377187864576, 94377187868671, -STORE, 94377192058880, 94377192062975, -STORE, 94377196253184, 94377196257279, -STORE, 94377200447488, 94377200451583, -STORE, 94377204641792, 94377204645887, -SNULL, 94376135094271, 94376135098367, -STORE, 94376135090176, 94376135094271, -STORE, 94376135094272, 94376135098367, -SNULL, 94376135094272, 94377208836095, - }; - unsigned long set42[] = { -STORE, 314572800, 1388314623, -STORE, 1462157312, 1462169599, -STORE, 1462169600, 1462185983, -STORE, 1462185984, 1462190079, -STORE, 1462190080, 1462194175, -STORE, 1462194176, 1462198271, -STORE, 1879986176, 1881800703, -STORE, 1881800704, 1882034175, -STORE, 1882034176, 1882193919, -STORE, 1882193920, 1882406911, -STORE, 1882406912, 1882451967, -STORE, 1882451968, 1882996735, -STORE, 1882996736, 1885892607, -STORE, 1885892608, 1885896703, -STORE, 1885896704, 1885904895, -STORE, 1885904896, 1885908991, -STORE, 1885908992, 1885913087, -STORE, 1885913088, 1885966335, -STORE, 1885966336, 1886232575, -STORE, 1886232576, 1886236671, -STORE, 1886236672, 1886240767, -STORE, 1886240768, 1886244863, -STORE, 1886244864, 1886248959, -STORE, 1886248960, 1886294015, -STORE, 1886294016, 1886494719, -STORE, 1886494720, 1886498815, -STORE, 1886498816, 1886502911, -STORE, 1886502912, 1886507007, -STORE, 1886507008, 1886511103, -STORE, 1886511104, 1886556159, -STORE, 1886556160, 1886629887, -STORE, 1886629888, 1886633983, -STORE, 1886633984, 1886638079, -STORE, 1886638080, 1886642175, -STORE, 1886642176, 1886646271, -STORE, 1886646272, 1886666751, -STORE, 1886666752, 1886670847, -STORE, 1886670848, 1886674943, -STORE, 1886674944, 1886679039, -STORE, 1886679040, 1895419903, -STORE, 1895419904, 1895550975, -STORE, 1895550976, 1896148991, -STORE, 1896148992, 1897189375, -STORE, 1897189376, 1897701375, -STORE, 1897701376, 1897803775, -STORE, 1897803776, 1897816063, -STORE, 1897816064, 1899913215, -STORE, 1899913216, 1909379071, -STORE, 1909379072, 1909387263, -STORE, 1909387264, 1909391359, -STORE, 1909391360, 1909432319, -STORE, 1909432320, 1909436415, -STORE, 1909436416, 1909440511, -STORE, 1909440512, 1909460991, -STORE, 1909460992, 1909547007, -STORE, 1909547008, 1909551103, -STORE, 1909551104, 1909555199, -STORE, 1909555200, 1909559295, -STORE, 1909559296, 1909563391, -STORE, 1909563392, 1909739519, -STORE, 1909739520, 1910566911, -STORE, 1910566912, 1910571007, -STORE, 1910571008, 1910575103, -STORE, 1910575104, 1910579199, -STORE, 1910579200, 1910583295, -STORE, 1910583296, 1910587391, -STORE, 1910587392, 1910620159, -STORE, 1910620160, 1910624255, -STORE, 1910624256, 1910628351, -STORE, 1910628352, 1910632447, -STORE, 1910632448, 1910652927, -STORE, 1910652928, 1910657023, -STORE, 1910657024, 1910661119, -STORE, 1910661120, 1910665215, -STORE, 1910665216, 1910669311, -STORE, 1910669312, 1910677503, -STORE, 1910677504, 1910681599, -STORE, 1910681600, 1910685695, -STORE, 1910685696, 1910689791, -STORE, 1910689792, 1910697983, -STORE, 1910697984, 1910702079, -STORE, 1910702080, 1910706175, -STORE, 1910706176, 1910710271, -STORE, 1910710272, 1914093567, -STORE, 1914093568, 1914097663, -STORE, 1914097664, 1969434623, -STORE, 1969434624, 1977819135, -STORE, 3290435584, 3426750463, -STORE, 3426750464, 3426754559, -STORE, 3426754560, 3426762751, -STORE, 3426762752, 3426766847, -STORE, 3426766848, 3426770943, -STORE, 3427037184, 3427061759, -STORE, 3427061760, 3427135487, -STORE, 3427135488, 3427143679, -STORE, 3427143680, 3427147775, -STORE, 3427147776, 3427209215, -STORE, 3427319808, 3432116223, -STORE, 3432116224, 3450130431, -STORE, 3450130432, 3451027455, -STORE, 3451027456, 3451031551, -STORE, 3451031552, 3451461631, -STORE, 3451736064, 3456688127, -STORE, 3456688128, 3475222527, -STORE, 3475222528, 3476119551, -STORE, 3476119552, 3476127743, -STORE, 3476127744, 3476553727, -STORE, 3476631552, 3477315583, -STORE, 3477315584, 3479949311, -STORE, 3479949312, 3480002559, -STORE, 3480002560, 3480006655, -STORE, 3480006656, 3480432639, -STORE, 3480539136, 3480543231, -STORE, 3480543232, 3480547327, -STORE, 3480547328, 3480555519, -STORE, 3480854528, 3480903679, -STORE, 3480903680, 3480969215, -STORE, 3480969216, 3480977407, -STORE, 3480977408, 3480981503, -STORE, 3481030656, 3481092095, -STORE, 3481092096, 3481235455, -STORE, 3481235456, 3481243647, -STORE, 3481243648, 3481247743, -STORE, 3481436160, 3481444351, -STORE, 3481444352, 3481456639, -STORE, 3481456640, 3481460735, -STORE, 3481460736, 3481464831, -STORE, 3481587712, 3481645055, -STORE, 3481645056, 3481772031, -STORE, 3481772032, 3481776127, -STORE, 3481776128, 3481780223, -STORE, 3481874432, 3481935871, -STORE, 3481935872, 3482030079, -STORE, 3482030080, 3482038271, -STORE, 3482038272, 3482042367, -STORE, 3482198016, 3482230783, -STORE, 3482230784, 3482271743, -STORE, 3482271744, 3482279935, -STORE, 3482279936, 3482284031, -STORE, 3482562560, 3482566655, -STORE, 3482566656, 3482570751, -STORE, 3482570752, 3482574847, -STORE, 3482636288, 3482689535, -STORE, 3482689536, 3482746879, -STORE, 3482746880, 3482755071, -STORE, 3482755072, 3482759167, -STORE, 3482972160, 3483062271, -STORE, 3483062272, 3483242495, -STORE, 3483242496, 3483246591, -STORE, 3483246592, 3483250687, -STORE, 3483398144, 3483688959, -STORE, 3483688960, 3484114943, -STORE, 3484114944, 3484131327, -STORE, 3484131328, 3484135423, -STORE, 3484135424, 3484143615, -STORE, 3484184576, 3484475391, -STORE, 3484475392, 3485028351, -STORE, 3485028352, 3485057023, -STORE, 3485057024, 3485061119, -STORE, 3485360128, 3485364223, -STORE, 3485364224, 3485368319, -STORE, 3485368320, 3485372415, -STORE, 3485589504, 3485593599, -STORE, 3485593600, 3485597695, -STORE, 3485597696, 3485601791, -STORE, 3485913088, 3485937663, -STORE, 3485937664, 3485974527, -STORE, 3485974528, 3485982719, -STORE, 3485982720, 3485986815, -STORE, 3486052352, 3486056447, -STORE, 3486056448, 3486064639, -STORE, 3486064640, 3486068735, -STORE, 3486068736, 3486072831, -STORE, 3486294016, 3486302207, -STORE, 3486302208, 3486306303, -STORE, 3486306304, 3486310399, -STORE, 3486310400, 3486314495, -STORE, 3486670848, 3486679039, -STORE, 3486679040, 3486683135, -STORE, 3486683136, 3486687231, -STORE, 3486687232, 3486691327, -STORE, 3486863360, 3486871551, -STORE, 3486871552, 3486875647, -STORE, 3486875648, 3486879743, -STORE, 3486879744, 3486883839, -STORE, 3487584256, 3522543615, -STORE, 3522543616, 3523321855, -STORE, 3523321856, 3523342335, -STORE, 3523342336, 3523387391, -STORE, 3523387392, 3523391487, -STORE, 3523391488, 3523395583, -STORE, 3523477504, 3523686399, -STORE, 3523686400, 3523981311, -STORE, 3523981312, 3523997695, -STORE, 3523997696, 3524001791, -STORE, 3524177920, 3525013503, -STORE, 3525013504, 3526582271, -STORE, 3526582272, 3526606847, -STORE, 3526606848, 3526610943, -STORE, 3526610944, 3526615039, -STORE, 3526672384, 3526746111, -STORE, 3526746112, 3526860799, -STORE, 3526860800, 3526868991, -STORE, 3526868992, 3526873087, -STORE, 3527000064, 3527475199, -STORE, 3527475200, 3527479295, -STORE, 3527479296, 3527573503, -STORE, 3527573504, 3527581695, -STORE, 3527581696, 3527585791, -STORE, 3527585792, 3527606271, -STORE, 3527909376, 3527913471, -STORE, 3527913472, 3527917567, -STORE, 3527917568, 3527921663, -STORE, 3527950336, 3528011775, -STORE, 3528011776, 3528093695, -STORE, 3528093696, 3528101887, -STORE, 3528101888, 3528105983, -STORE, 3528228864, 3528241151, -STORE, 3528241152, 3528261631, -STORE, 3528261632, 3528265727, -STORE, 3528273920, 3528593407, -STORE, 3528593408, 3528609791, -STORE, 3528609792, 3528638463, -STORE, 3528638464, 3528642559, -STORE, 3528642560, 3528646655, -STORE, 3528880128, 3528912895, -STORE, 3528912896, 3528962047, -STORE, 3528962048, 3528966143, -STORE, 3528966144, 3528970239, -STORE, 3528982528, 3530293247, -STORE, 3530366976, 3530825727, -STORE, 3530825728, 3531317247, -STORE, 3531317248, 3541041151, -STORE, 3541041152, 3541303295, -STORE, 3541430272, 3566206975, -STORE, 3566206976, 3566993407, -STORE, 3567239168, 3587571711, -STORE, 3587571712, 3588284415, -STORE, 3588284416, 3588661247, -STORE, 3588661248, 3589066751, -STORE, 3589066752, 3589574655, -STORE, 3589574656, 3590078463, -STORE, 3590078464, 3590373375, -STORE, 3590373376, 3590668287, -STORE, 3590668288, 3590963199, -STORE, 3590963200, 3591294975, -STORE, 3591294976, 3591602175, -STORE, 3591602176, 3591933951, -STORE, 3591933952, 3592241151, -STORE, 3592241152, 3592572927, -STORE, 3592572928, 3592876031, -STORE, 3592876032, 3593211903, -STORE, 3593211904, 3593547775, -STORE, 3593547776, 3593650175, -STORE, 3593650176, 3593928703, -STORE, 3593928704, 3593936895, -STORE, 3593936896, 3593940991, -STORE, 3594006528, 3594301439, -STORE, 3594301440, 3594739711, -STORE, 3594739712, 3594756095, -STORE, 3594756096, 3594760191, -STORE, 3594760192, 3594768383, -STORE, 3594952704, 3595051007, -STORE, 3595051008, 3595223039, -STORE, 3595223040, 3595227135, -STORE, 3595227136, 3595235327, -STORE, 3595431936, 3595775999, -STORE, 3595776000, 3596701695, -STORE, 3596701696, 3596742655, -STORE, 3596742656, 3596746751, -STORE, 3596746752, 3596750847, -STORE, 3596767232, 3597070335, -STORE, 3597070336, 3597402111, -STORE, 3597402112, 3598188543, -STORE, 3598262272, 3623428095, -STORE, 3623428096, 3623432191, -STORE, 3623432192, 3623436287, -STORE, 3623436288, 3623440383, -STORE, 3623616512, 3623878655, -STORE, 3624169472, 3624300543, -STORE, 3627524096, 3628523519, -STORE, 3628523520, 3629522943, -STORE, 3696631808, 3730186239, -STORE, 3730186240, 3763740671, -STORE, 3763740672, 3764027391, -STORE, 3764027392, 3765133311, -STORE, 3765133312, 3765145599, -STORE, 3765145600, 3765149695, -STORE, 3765178368, 3766022143, -STORE, 3766022144, 3768791039, -STORE, 3768791040, 3768840191, -STORE, 3768840192, 3768844287, -STORE, 3768897536, 3768913919, -STORE, 3768913920, 3768934399, -STORE, 3768934400, 3768938495, -STORE, 3769016320, 3769147391, -STORE, 3769147392, 3769233407, -STORE, 3769233408, 3769356287, -STORE, 3769356288, 3769360383, -STORE, 3769360384, 3769368575, -STORE, 3769376768, 3794542591, -STORE, 3794542592, 3794599935, -STORE, 3794599936, 3794731007, -STORE, 3794731008, 3794735103, -STORE, 3794735104, 3794743295, -STORE, 3794849792, 3794980863, -STORE, 3794980864, 3794984959, -STORE, 3794984960, 3794989055, -STORE, 3794989056, 3794993151, -STORE, 3794993152, 3794997247, -STORE, 3795103744, 3795128319, -STORE, 3795128320, 3795165183, -STORE, 3795165184, 3795169279, -STORE, 3795169280, 3795173375, -STORE, 3795210240, 3795357695, -STORE, 3795357696, 3795365887, -STORE, 3795365888, 3795374079, -STORE, 3795374080, 3795378175, -STORE, 3795378176, 3795382271, -STORE, 3795406848, 3795738623, -STORE, 3795738624, 3795742719, -STORE, 3795742720, 3795755007, -STORE, 3795755008, 3795759103, -STORE, 3795763200, 3795894271, -STORE, 3795894272, 3796041727, -STORE, 3796041728, 3796054015, -STORE, 3796054016, 3796066303, -STORE, 3796066304, 3796070399, -STORE, 3796176896, 3796205567, -STORE, 3796205568, 3796250623, -STORE, 3796250624, 3796254719, -STORE, 3796254720, 3796258815, -STORE, 3796262912, 3796393983, -STORE, 3796393984, 3796516863, -STORE, 3796516864, 3796873215, -STORE, 3796873216, 3796885503, -STORE, 3796885504, 3796889599, -STORE, 3796963328, 3796967423, -STORE, 3796967424, 3796975615, -STORE, 3796975616, 3796979711, -STORE, 3797000192, 3797307391, -STORE, 3797307392, 3797311487, -STORE, 3797311488, 3797315583, -STORE, 3797315584, 3797323775, -STORE, 3797327872, 3797450751, -STORE, 3797450752, 3797458943, -STORE, 3797458944, 3797471231, -STORE, 3797471232, 3797475327, -STORE, 3797577728, 3797700607, -STORE, 3797700608, 3797721087, -STORE, 3797721088, 3797733375, -STORE, 3797733376, 3797741567, -STORE, 3797741568, 3797864447, -STORE, 3797864448, 3797995519, -STORE, 3797995520, 3798048767, -STORE, 3798048768, 3798179839, -STORE, 3798179840, 3798188031, -STORE, 3798188032, 3798192127, -STORE, 3798290432, 3798302719, -STORE, 3798302720, 3798323199, -STORE, 3798323200, 3798327295, -STORE, 3798327296, 3798331391, -STORE, 3798429696, 3798433791, -STORE, 3798433792, 3798552575, -STORE, 3798552576, 3798556671, -STORE, 3798556672, 3798568959, -STORE, 3798568960, 3798573055, -STORE, 3798573056, 3798581247, -STORE, 3798618112, 3798749183, -STORE, 3798749184, 3798855679, -STORE, 3798855680, 3798966271, -STORE, 3798966272, 3798982655, -STORE, 3798982656, 3798986751, -STORE, 3799101440, 3799171071, -STORE, 3799171072, 3799240703, -STORE, 3799240704, 3799248895, -STORE, 3799248896, 3799252991, -STORE, 3799326720, 3799650303, -STORE, 3799650304, 3800629247, -STORE, 3800629248, 3800641535, -STORE, 3800641536, 3800645631, -STORE, 3800645632, 3800649727, -STORE, 3800649728, 3800903679, -STORE, 3800903680, 3800936447, -STORE, 3800936448, 3800969215, -STORE, 3800969216, 3800981503, -STORE, 3800981504, 3800985599, -STORE, 3801001984, 3801133055, -STORE, 3801133056, 3801202687, -STORE, 3801202688, 3801591807, -STORE, 3801591808, 3801599999, -STORE, 3801600000, 3801604095, -STORE, 3801604096, 3801608191, -STORE, 3801608192, 3801739263, -STORE, 3801739264, 3801755647, -STORE, 3801755648, 3801796607, -STORE, 3801796608, 3801804799, -STORE, 3801804800, 3801808895, -STORE, 3801878528, 3801944063, -STORE, 3801944064, 3802116095, -STORE, 3802116096, 3802124287, -STORE, 3802124288, 3802128383, -STORE, 3802136576, 3803447295, -STORE, 3803492352, 3803553791, -STORE, 3803553792, 3804233727, -STORE, 3804233728, 3806068735, -STORE, 3806121984, 3806253055, -STORE, 3806253056, 3806674943, -STORE, 3806674944, 3807117311, -STORE, 3807117312, 3807379455, -STORE, 3807379456, 3807432703, -STORE, 3807432704, 3807563775, -STORE, 3807563776, 3809202175, -STORE, 3809202176, 3810250751, -STORE, 3810250752, 3827027967, -STORE, 3827027968, 3829125119, -STORE, 3829125120, 3837513727, -STORE, 3837513728, 3839610879, -STORE, 3839610880, 3847999487, -STORE, 3847999488, 3856392191, -STORE, 3856392192, 3864784895, -STORE, 3864784896, 3868983295, -STORE, 3868983296, 3885760511, -STORE, 3885760512, 3886809087, -STORE, 3886809088, 3887857663, -STORE, 3887857664, 3888119807, -STORE, 3888144384, 3888148479, -STORE, 3888148480, 3888218111, -STORE, 3888218112, 3888222207, -STORE, 3888222208, 3888353279, -STORE, 3888353280, 3889172479, -STORE, 3889172480, 3892314111, -STORE, 3892314112, 3892576255, -STORE, 3892588544, 3892637695, -STORE, 3892637696, 3892686847, -STORE, 3892686848, 3892744191, -STORE, 3892748288, 3892785151, -STORE, 3892785152, 3895459839, -STORE, 3895459840, 3895721983, -STORE, 3895738368, 3895885823, -STORE, 3895885824, 3897081855, -STORE, 3897081856, 3906482175, -STORE, 3906482176, 3916144639, -STORE, 3916144640, 3925766143, -STORE, 3925766144, 3926974463, -STORE, 3926974464, 3928367103, -STORE, 3928367104, 3928911871, -STORE, 3928911872, 3933995007, -STORE, 3933995008, 3935830015, -STORE, 3935830016, 3935846399, -STORE, 3935879168, 3936010239, -STORE, 3936010240, 3936026623, -STORE, 3936026624, 3936034815, -STORE, 3936034816, 3936051199, -STORE, 3936051200, 3936055295, -STORE, 3936071680, 3936137215, -STORE, 3936137216, 3936202751, -STORE, 3936202752, 3936219135, -STORE, 3936235520, 3936251903, -STORE, 3936268288, 3936276479, -STORE, 3936276480, 3936284671, -STORE, 3936284672, 3936288767, -STORE, 3936288768, 3936292863, -STORE, 3936296960, 3936354303, -STORE, 3936354304, 3936616447, -STORE, 3936628736, 3936669695, -STORE, 3936669696, 3936747519, -STORE, 3936747520, 3936870399, -STORE, 3936870400, 3936874495, -STORE, 3936874496, 3936878591, -STORE, 3936882688, 3936903167, -STORE, 3936911360, 3936948223, -STORE, 3936948224, 3936964607, -STORE, 3936964608, 3937103871, -STORE, 3937103872, 3937107967, -STORE, 3937132544, 3937161215, -STORE, 3937189888, 3937255423, -STORE, 3937255424, 3938512895, -STORE, 3938512896, 3945435135, -STORE, 3945435136, 3945476095, -STORE, 3945476096, 3945484287, -STORE, 3945484288, 3945496575, -STORE, 3945500672, 3945541631, -STORE, 3945558016, 3945566207, -STORE, 3945566208, 3945594879, -STORE, 3945594880, 3945598975, -STORE, 3945598976, 3945603071, -STORE, 3945611264, 3945742335, -STORE, 3945742336, 3945844735, -STORE, 3945844736, 3945848831, -STORE, 3945848832, 3945861119, -STORE, 3945861120, 3945865215, -STORE, 3945869312, 3945897983, -STORE, 3945897984, 3946303487, -STORE, 3946303488, 3946397695, -STORE, 3946397696, 3946569727, -STORE, 3946569728, 3946573823, -STORE, 3946573824, 3946594303, -STORE, 3946594304, 3946663935, -STORE, 3946663936, 3946708991, -STORE, 3946708992, 3946823679, -STORE, 3946823680, 3946827775, -STORE, 3946827776, 3946831871, -STORE, 3946831872, 3946860543, -STORE, 3946893312, 3946897407, -STORE, 3946897408, 3946905599, -STORE, 3946905600, 3946909695, -STORE, 3946909696, 3946913791, -STORE, 3946913792, 3946930175, -STORE, 3946930176, 3946967039, -STORE, 3946967040, 3947102207, -STORE, 3947102208, 3948412927, -STORE, 3948441600, 3948556287, -STORE, 3948556288, 3948576767, -STORE, 3948576768, 3948597247, -STORE, 3948597248, 3948605439, -STORE, 3948605440, 3948609535, -STORE, 3948609536, 3948654591, -STORE, 3948654592, 3948781567, -STORE, 3948781568, 3948822527, -STORE, 3948822528, 3948904447, -STORE, 3948904448, 3948908543, -STORE, 3948908544, 3948912639, -STORE, 3948945408, 3949043711, -STORE, 3949043712, 3949174783, -STORE, 3949174784, 3949191167, -STORE, 3949191168, 3949195263, -STORE, 3949207552, 3949252607, -STORE, 3949252608, 3949256703, -STORE, 3949256704, 3949363199, -STORE, 3949363200, 3949367295, -STORE, 3949367296, 3949379583, -STORE, 3949379584, 3949383679, -STORE, 3949383680, 3949400063, -STORE, 3949400064, 3949404159, -STORE, 3949416448, 3949481983, -STORE, 3949481984, 3949486079, -STORE, 3949486080, 3949592575, -STORE, 3949592576, 3949596671, -STORE, 3949596672, 3949621247, -STORE, 3949621248, 3949662207, -STORE, 3949662208, 3949666303, -STORE, 3949694976, 3949727743, -STORE, 3949727744, 3949731839, -STORE, 3949731840, 3949838335, -STORE, 3949838336, 3949842431, -STORE, 3949842432, 3949846527, -STORE, 3949846528, 3949854719, -STORE, 3949854720, 3949858815, -STORE, 3949858816, 3949862911, -STORE, 3949867008, 3949891583, -STORE, 3949891584, 3949928447, -STORE, 3949928448, 3949993983, -STORE, 3949993984, 3950043135, -STORE, 3950043136, 3950059519, -STORE, 3950059520, 3950096383, -STORE, 3950096384, 3950100479, -STORE, 3950100480, 3950104575, -STORE, 3950104576, 3950157823, -STORE, 3950157824, 3950292991, -STORE, 3950292992, 3950346239, -STORE, 3950346240, 3950477311, -STORE, 3950477312, 3950485503, -STORE, 3950485504, 3950489599, -STORE, 3950493696, 3950510079, -STORE, 3950510080, 3950661631, -STORE, 3950661632, 3951005695, -STORE, 3951005696, 3951026175, -STORE, 3951026176, 3951030271, -STORE, 3951030272, 3951054847, -STORE, 3951054848, 3951116287, -STORE, 3951116288, 3951144959, -STORE, 3951144960, 3951149055, -STORE, 3951149056, 3951194111, -STORE, 3951194112, 3951202303, -STORE, 3951202304, 3951206399, -STORE, 3951210496, 3951226879, -STORE, 3951226880, 3951329279, -STORE, 3951329280, 3951366143, -STORE, 3951366144, 3951411199, -STORE, 3951411200, 3951415295, -STORE, 3951415296, 3951419391, -STORE, 3951419392, 3951452159, -STORE, 3951452160, 3951566847, -STORE, 3951566848, 3951812607, -STORE, 3951812608, 3952173055, -STORE, 3952173056, 3952214015, -STORE, 3952214016, 3952218111, -STORE, 3952222208, 3952250879, -STORE, 3952250880, 3952369663, -STORE, 3952369664, 3952488447, -STORE, 3952488448, 3952627711, -STORE, 3952627712, 3952635903, -STORE, 3952635904, 3952639999, -STORE, 3952652288, 3952668671, -STORE, 3952668672, 3953000447, -STORE, 3953000448, 3953004543, -STORE, 3953004544, 3953008639, -STORE, 3953008640, 3953012735, -STORE, 3953012736, 3953037311, -STORE, 3953037312, 3953151999, -STORE, 3953152000, 3953291263, -STORE, 3953291264, 3953324031, -STORE, 3953324032, 3953364991, -STORE, 3953364992, 3953373183, -STORE, 3953373184, 3953377279, -STORE, 3953381376, 3953410047, -STORE, 3953410048, 3953491967, -STORE, 3953491968, 3953643519, -STORE, 3953643520, 3953651711, -STORE, 3953651712, 3953655807, -STORE, 3953659904, 3953766399, -STORE, 3953766400, 3953774591, -STORE, 3953774592, 3953786879, -STORE, 3953786880, 3953790975, -STORE, 3953790976, 3953823743, -STORE, 3953823744, 3953963007, -STORE, 3953963008, 3954024447, -STORE, 3954024448, 3954118655, -STORE, 3954118656, 3954122751, -STORE, 3954122752, 3954126847, -STORE, 3954130944, 3954184191, -STORE, 3954184192, 3954294783, -STORE, 3954294784, 3954323455, -STORE, 3954323456, 3954393087, -STORE, 3954393088, 3954397183, -STORE, 3954397184, 3954401279, -STORE, 3954401280, 3954405375, -STORE, 3954409472, 3954528255, -STORE, 3954528256, 3954737151, -STORE, 3954737152, 3955052543, -STORE, 3955052544, 3955060735, -STORE, 3955060736, 3955064831, -STORE, 3955068928, 3955105791, -STORE, 3955105792, 3955167231, -STORE, 3955167232, 3955277823, -STORE, 3955277824, 3955310591, -STORE, 3955310592, 3955351551, -STORE, 3955351552, 3955359743, -STORE, 3955359744, 3955363839, -STORE, 3955363840, 3955392511, -STORE, 3955392512, 3955453951, -STORE, 3955453952, 3955601407, -STORE, 3955601408, 3955777535, -STORE, 3955777536, 3955982335, -STORE, 3955982336, 3956011007, -STORE, 3956011008, 3956015103, -STORE, 3956023296, 3956039679, -STORE, 3956039680, 3956125695, -STORE, 3956125696, 3956129791, -STORE, 3956129792, 3956133887, -STORE, 3956133888, 3956137983, -STORE, 3956142080, 3956449279, -STORE, 3956449280, 3956543487, -STORE, 3956543488, 3956719615, -STORE, 3956719616, 3956731903, -STORE, 3956731904, 3956735999, -STORE, 3956744192, 3956793343, -STORE, 3956793344, 3956887551, -STORE, 3956887552, 3956953087, -STORE, 3956953088, 3957035007, -STORE, 3957035008, 3957039103, -STORE, 3957039104, 3957047295, -STORE, 3957047296, 3957071871, -STORE, 3957071872, 3957231615, -STORE, 3957231616, 3957563391, -STORE, 3957563392, 3957579775, -STORE, 3957579776, 3957583871, -STORE, 3957592064, 3957608447, -STORE, 3957608448, 3957878783, -STORE, 3957878784, 3958591487, -STORE, 3958591488, 3958599679, -STORE, 3958599680, 3958607871, -STORE, 3958607872, 3958620159, -STORE, 3958620160, 3958624255, -STORE, 3958624256, 3963199487, -STORE, 3963199488, 3963285503, -STORE, 3963285504, 3963371519, -STORE, 3963371520, 3963428863, -STORE, 3963428864, 3963555839, -STORE, 3963555840, 3963559935, -STORE, 3963559936, 3963564031, -STORE, 3963568128, 3963596799, -STORE, 3963596800, 3963682815, -STORE, 3963682816, 3963695103, -STORE, 3963695104, 3963711487, -STORE, 3963711488, 3963715583, -STORE, 3963719680, 3963752447, -STORE, 3963752448, 3963846655, -STORE, 3963846656, 3963932671, -STORE, 3963932672, 3964444671, -STORE, 3964444672, 3964448767, -STORE, 3964448768, 3965808639, -STORE, 3965808640, 3965845503, -STORE, 3965845504, 3965849599, -STORE, 3965853696, 3965935615, -STORE, 3965935616, 3966017535, -STORE, 3966017536, 3966103551, -STORE, 3966103552, 3966685183, -STORE, 3966685184, 3967705087, -STORE, 3967705088, 3967758335, -STORE, 3967758336, 3967762431, -STORE, 3967762432, 3967770623, -STORE, 3967770624, 3967799295, -STORE, 3967799296, 3967848447, -STORE, 3967848448, 3967868927, -STORE, 3967868928, 3967901695, -STORE, 3967901696, 3967905791, -STORE, 3967905792, 3967909887, -STORE, 3967909888, 3967995903, -STORE, 3967995904, 3968077823, -STORE, 3968077824, 3968159743, -STORE, 3968159744, 3968167935, -STORE, 3968167936, 3968172031, -STORE, 3968172032, 3968192511, -STORE, 3968192512, 3968196607, -STORE, 3968196608, 3968200703, -STORE, 3968208896, 3968516095, -STORE, 3968516096, 3968528383, -STORE, 3968528384, 3968552959, -STORE, 3968552960, 3968557055, -STORE, 3968561152, 3968593919, -STORE, 3968593920, 3968626687, -STORE, 3968626688, 3971153919, -STORE, 3971153920, 3973754879, -STORE, 3973754880, 3973804031, -STORE, 3973804032, 3973820415, -STORE, 3973820416, 3973832703, -STORE, 3973840896, 3973873663, -STORE, 3973873664, 3973967871, -STORE, 3973967872, 3973976063, -STORE, 3973976064, 3973984255, -STORE, 3973984256, 3973988351, -STORE, 3973988352, 3973992447, -STORE, 3973996544, 3974008831, -STORE, 3974008832, 3974045695, -STORE, 3974045696, 3974139903, -STORE, 3974139904, 3974254591, -STORE, 3974254592, 3974275071, -STORE, 3974275072, 3974291455, -STORE, 3974291456, 3974295551, -STORE, 3974295552, 3974373375, -STORE, 3974373376, 3974524927, -STORE, 3974524928, 3974529023, -STORE, 3974529024, 3974537215, -STORE, 3974537216, 3974541311, -STORE, 3974541312, 3974545407, -STORE, 3974545408, 3974627327, -STORE, 3974627328, 3974680575, -STORE, 3974680576, 3974811647, -STORE, 3974811648, 3974819839, -STORE, 3974819840, 3974823935, -STORE, 3974832128, 3974918143, -STORE, 3974918144, 3974963199, -STORE, 3974963200, 3975077887, -STORE, 3975077888, 3975090175, -STORE, 3975090176, 3975094271, -STORE, 3975094272, 3975102463, -STORE, 3975102464, 3975114751, -STORE, 3975114752, 3975266303, -STORE, 3975266304, 3975274495, -STORE, 3975274496, 3975286783, -STORE, 3975286784, 3975290879, -STORE, 3975290880, 3975299071, -STORE, 3975299072, 3975315455, -STORE, 3975315456, 3975430143, -STORE, 3975430144, 3975536639, -STORE, 3975536640, 3975651327, -STORE, 3975651328, 3975655423, -STORE, 3975655424, 3975659519, -STORE, 3975659520, 3975770111, -STORE, 3975770112, 3975778303, -STORE, 3975778304, 3975790591, -STORE, 3975790592, 3975794687, -STORE, 3975794688, 3975798783, -STORE, 3975798784, 3975831551, -STORE, 3975831552, 3975872511, -STORE, 3975872512, 3975987199, -STORE, 3975987200, 3976134655, -STORE, 3976134656, 3977175039, -STORE, 3977175040, 3977183231, -STORE, 3977183232, 3977191423, -STORE, 3977191424, 3977195519, -STORE, 3977199616, 3977248767, -STORE, 3977248768, 3977539583, -STORE, 3977539584, 3977965567, -STORE, 3977965568, 3977981951, -STORE, 3977981952, 3977986047, -STORE, 3977986048, 3977994239, -STORE, 3977994240, 3978002431, -STORE, 3978002432, 3978084351, -STORE, 3978084352, 3978125311, -STORE, 3978125312, 3978174463, -STORE, 3978174464, 3978178559, -STORE, 3978178560, 3978182655, -STORE, 3978182656, 3978207231, -STORE, 3978207232, 3978297343, -STORE, 3978297344, 3978301439, -STORE, 3978301440, 3978305535, -STORE, 3978305536, 3978309631, -STORE, 3978309632, 3978317823, -STORE, 3978317824, 3978625023, -STORE, 3978625024, 3978657791, -STORE, 3978657792, 3978727423, -STORE, 3978727424, 3978735615, -STORE, 3978735616, 3978739711, -STORE, 3978739712, 3978760191, -STORE, 3978760192, 3978842111, -STORE, 3978842112, 3978850303, -STORE, 3978850304, 3978858495, -STORE, 3978858496, 3978862591, -STORE, 3978862592, 3978895359, -STORE, 3978895360, 3979014143, -STORE, 3979014144, 3979132927, -STORE, 3979132928, 3979288575, -STORE, 3979288576, 3979481087, -STORE, 3979481088, 3979489279, -STORE, 3979489280, 3979493375, -STORE, 3979497472, 3979583487, -STORE, 3979583488, 3979673599, -STORE, 3979673600, 3979718655, -STORE, 3979718656, 3979829247, -STORE, 3979829248, 3979841535, -STORE, 3979841536, 3979882495, -STORE, 3979882496, 3979964415, -STORE, 3979964416, 3980013567, -STORE, 3980013568, 3980148735, -STORE, 3980148736, 3980152831, -STORE, 3980152832, 3980320767, -STORE, 3980320768, 3980337151, -STORE, 3980337152, 3980341247, -STORE, 3980345344, 3980365823, -STORE, 3980365824, 3980423167, -STORE, 3980423168, 3980460031, -STORE, 3980460032, 3980500991, -STORE, 3980500992, 3980509183, -STORE, 3980509184, 3980513279, -STORE, 3980513280, 3980546047, -STORE, 3980546048, 3980660735, -STORE, 3980660736, 3980951551, -STORE, 3980951552, 3981500415, -STORE, 3981500416, 3981529087, -STORE, 3981529088, 3981533183, -STORE, 3981537280, 3981549567, -STORE, 3981549568, 3981598719, -STORE, 3981598720, 3981717503, -STORE, 3981717504, 3982127103, -STORE, 3982127104, 3982675967, -STORE, 3982675968, 3982733311, -STORE, 3982733312, 3982737407, -STORE, 3982741504, 3982860287, -STORE, 3982860288, 3982905343, -STORE, 3982905344, 3982966783, -STORE, 3982966784, 3982974975, -STORE, 3982974976, 3982979071, -STORE, 3982979072, 3983032319, -STORE, 3983032320, 3983085567, -STORE, 3983085568, 3983208447, -STORE, 3983208448, 3983212543, -STORE, 3983212544, 3983220735, -STORE, 3983220736, 3983224831, -STORE, 3983224832, 3983237119, -STORE, 3983237120, 3983351807, -STORE, 3983351808, 3983376383, -STORE, 3983376384, 3983392767, -STORE, 3983392768, 3983396863, -STORE, 3983396864, 3983400959, -STORE, 3983400960, 3983417343, -STORE, 3983417344, 3983753215, -STORE, 3983753216, 3983757311, -STORE, 3983757312, 3983761407, -STORE, 3983761408, 3983765503, -STORE, 3983765504, 3983769599, -STORE, 3983769600, 3983880191, -STORE, 3983880192, 3983892479, -STORE, 3983892480, 3983900671, -STORE, 3983900672, 3983904767, -STORE, 3983904768, 3983908863, -STORE, 3983908864, 3983941631, -STORE, 3983941632, 3983990783, -STORE, 3983990784, 3984097279, -STORE, 3984097280, 3984105471, -STORE, 3984105472, 3984117759, -STORE, 3984117760, 3984121855, -STORE, 3984121856, 3984125951, -STORE, 3984125952, 3984134143, -STORE, 3984134144, 3984150527, -STORE, 3984150528, 3984416767, -STORE, 3984416768, 3984470015, -STORE, 3984470016, 3984564223, -STORE, 3984564224, 3984568319, -STORE, 3984572416, 3984629759, -STORE, 3984629760, 3984805887, -STORE, 3984805888, 3985096703, -STORE, 3985096704, 3985104895, -STORE, 3985104896, 3985108991, -STORE, 3985113088, 3986862079, -STORE, 3986862080, 3993640959, -STORE, 3993640960, 3993739263, -STORE, 3993739264, 3993743359, -STORE, 3993743360, 3993759743, -STORE, 3993759744, 3993780223, -STORE, 3993780224, 3993784319, -STORE, 3993784320, 3993792511, -STORE, 3993792512, 3993796607, -STORE, 3993796608, 3993800703, -STORE, 3993804800, 3994214399, -STORE, 3994214400, 3994218495, -STORE, 3994218496, 3994222591, -STORE, 3994222592, 3994226687, -STORE, 3994230784, 3994243071, -STORE, 3994243072, 3994255359, -STORE, 3994255360, 3994304511, -STORE, 3994304512, 3994386431, -STORE, 3994386432, 3994509311, -STORE, 3994509312, 3994521599, -STORE, 3994521600, 3994525695, -STORE, 3994529792, 3994542079, -STORE, 3994542080, 3994660863, -STORE, 3994660864, 3994705919, -STORE, 3994705920, 3994796031, -STORE, 3994796032, 3994800127, -STORE, 3994800128, 3994804223, -STORE, 3994804224, 3994812415, -STORE, 3994812416, 3994845183, -STORE, 3994845184, 3994898431, -STORE, 3994898432, 3994902527, -STORE, 3994902528, 3994906623, -STORE, 3994910720, 3994931199, -STORE, 3994931200, 3995181055, -STORE, 3995181056, 3995222015, -STORE, 3995222016, 3995275263, -STORE, 3995275264, 3995279359, -STORE, 3995279360, 3995283455, -STORE, 3995283456, 3995291647, -STORE, 3995291648, 3995324415, -STORE, 3995324416, 3995451391, -STORE, 3995451392, 3995697151, -STORE, 3995697152, 3996078079, -STORE, 3996078080, 3996086271, -STORE, 3996086272, 3996090367, -STORE, 3996094464, 3996119039, -STORE, 3996119040, 3996200959, -STORE, 3996200960, 3996229631, -STORE, 3996229632, 3996233727, -STORE, 3996233728, 3996282879, -STORE, 3996282880, 3996291071, -STORE, 3996291072, 3996295167, -STORE, 3996299264, 3996311551, -STORE, 3996311552, 3996430335, -STORE, 3996430336, 3996467199, -STORE, 3996467200, 3996504063, -STORE, 3996504064, 3996512255, -STORE, 3996512256, 3996516351, -STORE, 3996516352, 3996540927, -STORE, 3996540928, 3996671999, -STORE, 3996672000, 3996676095, -STORE, 3996676096, 3996684287, -STORE, 3996684288, 3996688383, -STORE, 3996688384, 3996692479, -STORE, 3996692480, 3996717055, -STORE, 3996717056, 3997048831, -STORE, 3997048832, 3997057023, -STORE, 3997057024, 3997073407, -STORE, 3997073408, 3997077503, -STORE, 3997077504, 3997081599, -STORE, 3997081600, 3997097983, -STORE, 3997097984, 3997179903, -STORE, 3997179904, 3997356031, -STORE, 3997356032, 3997650943, -STORE, 3997650944, 3997675519, -STORE, 3997675520, 3997679615, -STORE, 3997683712, 3997700095, -STORE, 3997700096, 3997745151, -STORE, 3997745152, 3997802495, -STORE, 3997802496, 3997810687, -STORE, 3997810688, 3997814783, -STORE, 3997814784, 3998064639, -STORE, 3998064640, 3998081023, -STORE, 3998081024, 3998085119, -STORE, 3998085120, 3998130175, -STORE, 3998130176, 3998134271, -STORE, 3998134272, 3998142463, -STORE, 3998142464, 3998179327, -STORE, 3998179328, 3998212095, -STORE, 3998212096, 3998326783, -STORE, 3998326784, 3998351359, -STORE, 3998351360, 3998392319, -STORE, 3998392320, 3998396415, -STORE, 3998396416, 3998400511, -STORE, 3998400512, 3998433279, -STORE, 3998433280, 3998466047, -STORE, 3998466048, 3998613503, -STORE, 3998613504, 3998666751, -STORE, 3998666752, 3998724095, -STORE, 3998724096, 3998732287, -STORE, 3998732288, 3998736383, -STORE, 3998736384, 3998760959, -STORE, 3998760960, 3998777343, -STORE, 3998777344, 3998822399, -STORE, 3998822400, 3998826495, -STORE, 3998826496, 3998830591, -STORE, 3998830592, 3998863359, -STORE, 3998863360, 3998900223, -STORE, 3998900224, 3999043583, -STORE, 3999043584, 3999121407, -STORE, 3999121408, 3999215615, -STORE, 3999215616, 3999223807, -STORE, 3999223808, 3999227903, -STORE, 3999227904, 3999236095, -STORE, 3999236096, 3999268863, -STORE, 3999268864, 3999301631, -STORE, 3999301632, 3999354879, -STORE, 3999354880, 3999428607, -STORE, 3999428608, 3999436799, -STORE, 3999436800, 3999440895, -STORE, 3999444992, 3999461375, -STORE, 3999461376, 3999584255, -STORE, 3999584256, 3999760383, -STORE, 3999760384, 4000219135, -STORE, 4000219136, 4000235519, -STORE, 4000235520, 4000251903, -STORE, 4000251904, 4000501759, -STORE, 4000501760, 4000505855, -STORE, 4000505856, 4000509951, -STORE, 4000509952, 4000518143, -STORE, 4000518144, 4000522239, -STORE, 4000522240, 4000587775, -STORE, 4000587776, 4000645119, -STORE, 4000645120, 4000813055, -STORE, 4000813056, 4000817151, -STORE, 4000821248, 4000837631, -STORE, 4000837632, 4000870399, -STORE, 4000870400, 4000874495, -STORE, 4000874496, 4000878591, -STORE, 4000878592, 4000882687, -STORE, 4000882688, 4000886783, -STORE, 4000886784, 4000890879, -STORE, 4000890880, 4000907263, -STORE, 4000907264, 4001214463, -STORE, 4001214464, 4001558527, -STORE, 4001558528, 4002484223, -STORE, 4002484224, 4002525183, -STORE, 4002525184, 4002529279, -STORE, 4002529280, 4002533375, -STORE, 4002533376, 4002537471, -STORE, 4002537472, 4002660351, -STORE, 4002660352, 4002779135, -STORE, 4002779136, 4002791423, -STORE, 4002791424, 4002799615, -STORE, 4002799616, 4002807807, -STORE, 4002807808, 4002811903, -STORE, 4002811904, 4002828287, -STORE, 4002828288, 4002910207, -STORE, 4002910208, 4003028991, -STORE, 4003028992, 4003037183, -STORE, 4003037184, 4003045375, -STORE, 4003045376, 4003049471, -STORE, 4003049472, 4003053567, -STORE, 4003053568, 4003057663, -STORE, 4003057664, 4003065855, -STORE, 4003065856, 4003135487, -STORE, 4003135488, 4003446783, -STORE, 4003446784, 4003450879, -STORE, 4003450880, 4003454975, -STORE, 4003454976, 4003459071, -STORE, 4003459072, 4003463167, -STORE, 4003463168, 4003495935, -STORE, 4003495936, 4003569663, -STORE, 4003569664, 4003573759, -STORE, 4003573760, 4003704831, -STORE, 4003704832, 4003708927, -STORE, 4003708928, 4003713023, -STORE, 4003713024, 4003737599, -STORE, 4003737600, 4003770367, -STORE, 4003770368, 4003876863, -STORE, 4003876864, 4003880959, -STORE, 4003880960, 4003885055, -STORE, 4003885056, 4003889151, -STORE, 4003889152, 4003893247, -STORE, 4003893248, 4003897343, -STORE, 4003897344, 4003962879, -STORE, 4003962880, 4004069375, -STORE, 4004069376, 4004093951, -STORE, 4004093952, 4004118527, -STORE, 4004118528, 4004122623, -STORE, 4004122624, 4004126719, -STORE, 4004126720, 4004155391, -STORE, 4004155392, 4004286463, -STORE, 4004286464, 4004384767, -STORE, 4004384768, 4004388863, -STORE, 4004388864, 4004646911, -STORE, 4004646912, 4004655103, -STORE, 4004655104, 4004659199, -STORE, 4004659200, 4004667391, -STORE, 4004667392, 4004683775, -STORE, 4004683776, 4004814847, -STORE, 4004814848, 4004818943, -STORE, 4004818944, 4004823039, -STORE, 4004823040, 4004827135, -STORE, 4004827136, 4004835327, -STORE, 4004835328, 4004954111, -STORE, 4004954112, 4005085183, -STORE, 4005085184, 4005306367, -STORE, 4005306368, 4005765119, -STORE, 4005765120, 4005789695, -STORE, 4005789696, 4005793791, -STORE, 4005793792, 4005801983, -STORE, 4005801984, 4005920767, -STORE, 4005920768, 4005945343, -STORE, 4005945344, 4005949439, -STORE, 4005949440, 4005986303, -STORE, 4005986304, 4005990399, -STORE, 4005990400, 4005994495, -STORE, 4005994496, 4006002687, -STORE, 4006002688, 4006109183, -STORE, 4006109184, 4006117375, -STORE, 4006117376, 4006121471, -STORE, 4006121472, 4006133759, -STORE, 4006133760, 4006137855, -STORE, 4006137856, 4006141951, -STORE, 4006141952, 4006150143, -STORE, 4006150144, 4006391807, -STORE, 4006391808, 4006445055, -STORE, 4006445056, 4006563839, -STORE, 4006563840, 4006572031, -STORE, 4006572032, 4006576127, -STORE, 4006576128, 4006584319, -STORE, 4006584320, 4006694911, -STORE, 4006694912, 4006739967, -STORE, 4006739968, 4006776831, -STORE, 4006776832, 4006785023, -STORE, 4006785024, 4006789119, -STORE, 4006789120, 4006797311, -STORE, 4006797312, 4006813695, -STORE, 4006813696, 4006846463, -STORE, 4006846464, 4006977535, -STORE, 4006977536, 4007006207, -STORE, 4007006208, 4007010303, -STORE, 4007010304, 4007067647, -STORE, 4007067648, 4007075839, -STORE, 4007075840, 4007084031, -STORE, 4007084032, 4007100415, -STORE, 4007100416, 4007116799, -STORE, 4007116800, 4007133183, -STORE, 4007133184, 4007153663, -STORE, 4007153664, 4007178239, -STORE, 4007178240, 4007202815, -STORE, 4007202816, 4007206911, -STORE, 4007206912, 4007272447, -STORE, 4007272448, 4007276543, -STORE, 4007276544, 4007280639, -STORE, 4007280640, 4007284735, -STORE, 4007284736, 4007292927, -STORE, 4007292928, 4007423999, -STORE, 4007424000, 4007448575, -STORE, 4007448576, 4007452671, -STORE, 4007452672, 4007505919, -STORE, 4007505920, 4007510015, -STORE, 4007510016, 4007514111, -STORE, 4007514112, 4007645183, -STORE, 4007645184, 4007776255, -STORE, 4007776256, 4007780351, -STORE, 4007780352, 4007784447, -STORE, 4007784448, 4007788543, -STORE, 4007788544, 4007809023, -STORE, 4007809024, 4007829503, -STORE, 4007829504, 4007960575, -STORE, 4007960576, 4008091647, -STORE, 4008091648, 4008296447, -STORE, 4008296448, 4008890367, -STORE, 4008890368, 4008898559, -STORE, 4008898560, 4008902655, -STORE, 4008902656, 4008996863, -STORE, 4008996864, 4009041919, -STORE, 4009041920, 4009082879, -STORE, 4009082880, 4009091071, -STORE, 4009091072, 4009107455, -STORE, 4009107456, 4009349119, -STORE, 4009349120, 4009373695, -STORE, 4009373696, 4009414655, -STORE, 4009414656, 4009422847, -STORE, 4009422848, 4009426943, -STORE, 4009426944, 4009447423, -STORE, 4009447424, 4009471999, -STORE, 4009472000, 4009512959, -STORE, 4009512960, 4009594879, -STORE, 4009594880, 4009598975, -STORE, 4009598976, 4009697279, -STORE, 4009697280, 4009713663, -STORE, 4009713664, 4009717759, -STORE, 4009717760, 4009721855, -STORE, 4009721856, 4009730047, -STORE, 4009730048, 4009861119, -STORE, 4009861120, 4009951231, -STORE, 4009951232, 4010131455, -STORE, 4010131456, 4010135551, -STORE, 4010135552, 4010139647, -STORE, 4010139648, 4010143743, -STORE, 4010143744, 4010164223, -STORE, 4010164224, 4010295295, -STORE, 4010295296, 4010299391, -STORE, 4010299392, 4010491903, -STORE, 4010491904, 4010495999, -STORE, 4010496000, 4010668031, -STORE, 4010668032, 4011028479, -STORE, 4011028480, 4011053055, -STORE, 4011053056, 4011057151, -STORE, 4011057152, 4011118591, -STORE, 4011118592, 4011126783, -STORE, 4011126784, 4011130879, -STORE, 4011130880, 4011143167, -STORE, 4011143168, 4011147263, -STORE, 4011147264, 4011167743, -STORE, 4011167744, 4011171839, -STORE, 4011171840, 4011360255, -STORE, 4011360256, 4011364351, -STORE, 4011364352, 4011626495, -STORE, 4011626496, 4012216319, -STORE, 4012216320, 4012228607, -STORE, 4012228608, 4012232703, -STORE, 4012232704, 4012236799, -STORE, 4012236800, 4012240895, -STORE, 4012240896, 4012261375, -STORE, 4012261376, 4012392447, -STORE, 4012392448, 4012466175, -STORE, 4012466176, 4012597247, -STORE, 4012597248, 4012601343, -STORE, 4012601344, 4012605439, -STORE, 4012605440, 4012609535, -STORE, 4012609536, 4012679167, -STORE, 4012679168, 4013563903, -STORE, 4013563904, 4015366143, -STORE, 4015366144, 4015411199, -STORE, 4015411200, 4015415295, -STORE, 4015415296, 4015419391, -STORE, 4015419392, 4015542271, -STORE, 4015542272, 4015550463, -STORE, 4015550464, 4015558655, -STORE, 4015558656, 4015562751, -STORE, 4015562752, 4015583231, -STORE, 4015583232, 4015587327, -STORE, 4015587328, 4015603711, -STORE, 4015665152, 4015669247, -STORE, 4015669248, 4015812607, -STORE, 4015812608, 4015816703, -STORE, 4015816704, 4016111615, -STORE, 4016111616, 4016467967, -STORE, 4016467968, 4016508927, -STORE, 4016508928, 4016517119, -STORE, 4016517120, 4016525311, -STORE, 4016525312, 4016586751, -STORE, 4016586752, 4016664575, -STORE, 4016664576, 4016697343, -STORE, 4016697344, 4016742399, -STORE, 4016742400, 4016746495, -STORE, 4016746496, 4016750591, -STORE, 4016750592, 4016758783, -STORE, 4016799744, 4016844799, -STORE, 4016844800, 4016902143, -STORE, 4016902144, 4016992255, -STORE, 4016992256, 4017000447, -STORE, 4017000448, 4017004543, -STORE, 4017004544, 4017008639, -STORE, 4017008640, 4017016831, -STORE, 4017016832, 4017020927, -STORE, 4017020928, 4017127423, -STORE, 4017127424, 4017131519, -STORE, 4017131520, 4017229823, -STORE, 4017229824, 4017422335, -STORE, 4017422336, 4017438719, -STORE, 4017438720, 4017442815, -STORE, 4017442816, 4017446911, -STORE, 4017446912, 4017455103, -STORE, 4017455104, 4017766399, -STORE, 4017766400, 4017909759, -STORE, 4017909760, 4018081791, -STORE, 4018081792, 4018089983, -STORE, 4018089984, 4018094079, -STORE, 4018094080, 4018098175, -STORE, 4018098176, 4018327551, -STORE, 4018327552, 4018331647, -STORE, 4018331648, 4018339839, -STORE, 4018339840, 4018348031, -STORE, 4018348032, 4018610175, -STORE, 4018610176, 4018626559, -STORE, 4018626560, 4018647039, -STORE, 4018647040, 4018651135, -STORE, 4018651136, 4018749439, -STORE, 4018749440, 4018761727, -STORE, 4018761728, 4018802687, -STORE, 4018802688, 4018806783, -STORE, 4018806784, 4018810879, -STORE, 4018810880, 4018814975, -STORE, 4018814976, 4018823167, -STORE, 4018823168, 4018954239, -STORE, 4018954240, 4019007487, -STORE, 4019007488, 4019068927, -STORE, 4019068928, 4019077119, -STORE, 4019077120, 4019081215, -STORE, 4019081216, 4019093503, -STORE, 4019093504, 4019208191, -STORE, 4019208192, 4019232767, -STORE, 4019232768, 4019265535, -STORE, 4019265536, 4019269631, -STORE, 4019269632, 4019277823, -STORE, 4019277824, 4019458047, -STORE, 4019458048, 4019519487, -STORE, 4019519488, 4019613695, -STORE, 4019613696, 4019621887, -STORE, 4019621888, 4019625983, -STORE, 4019625984, 4019630079, -STORE, 4019630080, 4019744767, -STORE, 4019744768, 4019822591, -STORE, 4019822592, 4019929087, -STORE, 4019929088, 4019941375, -STORE, 4019941376, 4019945471, -STORE, 4019945472, 4019961855, -STORE, 4019961856, 4019994623, -STORE, 4019994624, 4019998719, -STORE, 4019998720, 4020002815, -STORE, 4020002816, 4020006911, -STORE, 4020006912, 4020011007, -STORE, 4020011008, 4020256767, -STORE, 4020256768, 4020326399, -STORE, 4020326400, 4020457471, -STORE, 4020457472, 4020469759, -STORE, 4020469760, 4020473855, -STORE, 4020473856, 4020482047, -STORE, 4020482048, 4020711423, -STORE, 4020711424, 4020715519, -STORE, 4020715520, 4020719615, -STORE, 4020719616, 4020723711, -STORE, 4020723712, 4020805631, -STORE, 4020805632, 4021051391, -STORE, 4021051392, 4021460991, -STORE, 4021460992, 4021469183, -STORE, 4021469184, 4021473279, -STORE, 4021473280, 4021571583, -STORE, 4021571584, 4021633023, -STORE, 4021633024, 4021727231, -STORE, 4021727232, 4021735423, -STORE, 4021735424, 4021739519, -STORE, 4021739520, 4021747711, -STORE, 4021747712, 4021829631, -STORE, 4021829632, 4021866495, -STORE, 4021866496, 4021919743, -STORE, 4021919744, 4021927935, -STORE, 4021927936, 4021932031, -STORE, 4021932032, 4021944319, -STORE, 4021944320, 4022157311, -STORE, 4022157312, 4022161407, -STORE, 4022161408, 4022173695, -STORE, 4022173696, 4022177791, -STORE, 4022177792, 4022472703, -STORE, 4022472704, 4022509567, -STORE, 4022509568, 4022583295, -STORE, 4022583296, 4022587391, -STORE, 4022587392, 4022591487, -STORE, 4022591488, 4022607871, -STORE, 4022607872, 4022657023, -STORE, 4022657024, 4022722559, -STORE, 4022722560, 4022730751, -STORE, 4022730752, 4022734847, -STORE, 4022734848, 4022865919, -STORE, 4022865920, 4022943743, -STORE, 4022943744, 4023062527, -STORE, 4023062528, 4023074815, -STORE, 4023074816, 4023078911, -STORE, 4023078912, 4023128063, -STORE, 4023128064, 4023218175, -STORE, 4023218176, 4023361535, -STORE, 4023361536, 4023373823, -STORE, 4023373824, 4023377919, -STORE, 4023377920, 4023558143, -STORE, 4023558144, 4023631871, -STORE, 4023631872, 4023816191, -STORE, 4023816192, 4023820287, -STORE, 4023820288, 4023824383, -STORE, 4023824384, 4023832575, -STORE, 4023832576, 4024078335, -STORE, 4024078336, 4024197119, -STORE, 4024197120, 4024389631, -STORE, 4024389632, 4024406015, -STORE, 4024406016, 4024410111, -STORE, 4024410112, 4024422399, -STORE, 4024422400, 4024619007, -STORE, 4024619008, 4024639487, -STORE, 4024639488, 4024655871, -STORE, 4024655872, 4024664063, -STORE, 4024664064, 4024668159, -STORE, 4024668160, 4024676351, -STORE, 4024676352, 4024905727, -STORE, 4024905728, 4024909823, -STORE, 4024909824, 4024918015, -STORE, 4024918016, 4024922111, -STORE, 4024922112, 4024930303, -STORE, 4024930304, 4025110527, -STORE, 4025110528, 4025176063, -STORE, 4025176064, 4025208831, -STORE, 4025208832, 4025212927, -STORE, 4025212928, 4025217023, -STORE, 4025217024, 4025348095, -STORE, 4025348096, 4025372671, -STORE, 4025372672, 4025458687, -STORE, 4025458688, 4025466879, -STORE, 4025466880, 4025565183, -STORE, 4025565184, 4025757695, -STORE, 4025757696, 4026249215, -STORE, 4026249216, 4026261503, -STORE, 4026261504, 4026265599, -STORE, 4026265600, 4026269695, -STORE, 4026269696, 4026302463, -STORE, 4026302464, 4026306559, -STORE, 4026306560, 4026314751, -STORE, 4026314752, 4026318847, -STORE, 4026318848, 4026322943, -STORE, 4026322944, 4026327039, -STORE, 4026327040, 4026654719, -STORE, 4026654720, 4026671103, -STORE, 4026671104, 4026720255, -STORE, 4026720256, 4026724351, -STORE, 4026724352, 4026728447, -STORE, 4026728448, 4026732543, -STORE, 4026732544, 4026863615, -STORE, 4026863616, 4027027455, -STORE, 4027027456, 4027031551, -STORE, 4027031552, 4027514879, -STORE, 4027514880, 4027531263, -STORE, 4027531264, 4027535359, -STORE, 4027535360, 4027539455, -STORE, 4027539456, 4027785215, -STORE, 4027785216, 4027789311, -STORE, 4027789312, 4027793407, -STORE, 4027793408, 4027797503, -STORE, 4027797504, 4027863039, -STORE, 4027863040, 4027899903, -STORE, 4027899904, 4027949055, -STORE, 4027949056, 4027957247, -STORE, 4027957248, 4027961343, -STORE, 4027961344, 4027965439, -STORE, 4027965440, 4028194815, -STORE, 4028194816, 4028252159, -STORE, 4028252160, 4028338175, -STORE, 4028338176, 4028350463, -STORE, 4028350464, 4028354559, -STORE, 4028354560, 4028452863, -STORE, 4028452864, 4028489727, -STORE, 4028489728, 4028530687, -STORE, 4028530688, 4028538879, -STORE, 4028538880, 4028542975, -STORE, 4028542976, 4028551167, -STORE, 4028551168, 4028665855, -STORE, 4028665856, 4029349887, -STORE, 4029349888, 4030468095, -STORE, 4030468096, 4030513151, -STORE, 4030513152, 4030517247, -STORE, 4030517248, 4030525439, -STORE, 4030525440, 4030529535, -STORE, 4030529536, 4030758911, -STORE, 4030758912, 4030828543, -STORE, 4030828544, 4030943231, -STORE, 4030943232, 4030951423, -STORE, 4030951424, 4030955519, -STORE, 4030955520, 4030967807, -STORE, 4030967808, 4031131647, -STORE, 4031131648, 4031135743, -STORE, 4031135744, 4031139839, -STORE, 4031139840, 4031148031, -STORE, 4031148032, 4031152127, -STORE, 4031152128, 4031160319, -STORE, 4031160320, 4031504383, -STORE, 4031504384, 4031598591, -STORE, 4031598592, 4031754239, -STORE, 4031754240, 4031766527, -STORE, 4031766528, 4031770623, -STORE, 4031770624, 4031774719, -STORE, 4031774720, 4031782911, -STORE, 4031782912, 4031799295, -STORE, 4031799296, 4031856639, -STORE, 4031856640, 4031983615, -STORE, 4031983616, 4031987711, -STORE, 4031987712, 4031991807, -STORE, 4031991808, 4032270335, -STORE, 4032270336, 4032274431, -STORE, 4032274432, 4032282623, -STORE, 4032282624, 4032286719, -STORE, 4032286720, 4032290815, -STORE, 4032290816, 4032389119, -STORE, 4032389120, 4032397311, -STORE, 4032397312, 4032405503, -STORE, 4032405504, 4032413695, -STORE, 4032413696, 4032417791, -STORE, 4032417792, 4032565247, -STORE, 4032565248, 4032593919, -STORE, 4032593920, 4032737279, -STORE, 4032737280, 4032741375, -STORE, 4032741376, 4032745471, -STORE, 4032745472, 4032770047, -STORE, 4032770048, 4032933887, -STORE, 4032933888, 4032999423, -STORE, 4032999424, 4033032191, -STORE, 4033032192, 4033036287, -STORE, 4033036288, 4033040383, -STORE, 4033040384, 4033105919, -STORE, 4033105920, 4033396735, -STORE, 4033396736, 4033822719, -STORE, 4033822720, 4033839103, -STORE, 4033839104, 4033843199, -STORE, 4033843200, 4033851391, -STORE, 4033851392, 4033863679, -STORE, 4033863680, 4033880063, -STORE, 4033880064, 4033933311, -STORE, 4033933312, 4034023423, -STORE, 4034023424, 4034031615, -STORE, 4034031616, 4034035711, -STORE, 4034035712, 4034043903, -STORE, 4034043904, 4034142207, -STORE, 4034142208, 4034191359, -STORE, 4034191360, 4034260991, -STORE, 4034260992, 4034269183, -STORE, 4034269184, 4034273279, -STORE, 4034273280, 4034281471, -STORE, 4034281472, 4034412543, -STORE, 4034412544, 4034445311, -STORE, 4034445312, 4034490367, -STORE, 4034490368, 4034494463, -STORE, 4034494464, 4034498559, -STORE, 4034498560, 4034662399, -STORE, 4034662400, 4034666495, -STORE, 4034666496, 4034670591, -STORE, 4034670592, 4034674687, -STORE, 4034674688, 4034678783, -STORE, 4034678784, 4034682879, -STORE, 4034682880, 4034781183, -STORE, 4034781184, 4035043327, -STORE, 4035043328, 4035047423, -STORE, 4035047424, 4035055615, -STORE, 4035055616, 4035059711, -STORE, 4035059712, 4035063807, -STORE, 4035063808, 4035067903, -STORE, 4035067904, 4035100671, -STORE, 4035100672, 4035375103, -STORE, 4035375104, 4035383295, -STORE, 4035383296, 4035395583, -STORE, 4035395584, 4035399679, -STORE, 4035399680, 4035403775, -STORE, 4035403776, 4035407871, -STORE, 4035407872, 4035411967, -STORE, 4035411968, 4035477503, -STORE, 4035477504, 4035608575, -STORE, 4035608576, 4035641343, -STORE, 4035641344, 4035682303, -STORE, 4035682304, 4035686399, -STORE, 4035686400, 4035690495, -STORE, 4035690496, 4035694591, -STORE, 4035694592, 4035743743, -STORE, 4035743744, 4035784703, -STORE, 4035784704, 4035829759, -STORE, 4035829760, 4035837951, -STORE, 4035837952, 4035842047, -STORE, 4035842048, 4035846143, -STORE, 4035846144, 4035850239, -STORE, 4035850240, 4036001791, -STORE, 4036001792, 4036005887, -STORE, 4036005888, 4036214783, -STORE, 4036214784, 4036218879, -STORE, 4036218880, 4036603903, -STORE, 4036603904, 4036648959, -STORE, 4036648960, 4036653055, -STORE, 4036653056, 4036657151, -STORE, 4036657152, 4036665343, -STORE, 4036665344, 4036780031, -STORE, 4036780032, 4036829183, -STORE, 4036829184, 4036984831, -STORE, 4036984832, 4036993023, -STORE, 4036993024, 4036997119, -STORE, 4036997120, 4037001215, -STORE, 4037001216, 4037009407, -STORE, 4037009408, 4037025791, -STORE, 4037025792, 4037095423, -STORE, 4037095424, 4037181439, -STORE, 4037181440, 4037193727, -STORE, 4037193728, 4037197823, -STORE, 4037197824, 4037206015, -STORE, 4037206016, 4037320703, -STORE, 4037320704, 4037337087, -STORE, 4037337088, 4037349375, -STORE, 4037349376, 4037357567, -STORE, 4037357568, 4037361663, -STORE, 4037369856, 4037386239, -STORE, 4037386240, 4037672959, -STORE, 4037672960, 4037689343, -STORE, 4037689344, 4037730303, -STORE, 4037730304, 4037734399, -STORE, 4037734400, 4037738495, -STORE, 4037738496, 4037742591, -STORE, 4037742592, 4037758975, -STORE, 4037758976, 4037890047, -STORE, 4037890048, 4037931007, -STORE, 4037931008, 4037976063, -STORE, 4037976064, 4037984255, -STORE, 4037984256, 4037988351, -STORE, 4037988352, 4038053887, -STORE, 4038053888, 4038184959, -STORE, 4038184960, 4038189055, -STORE, 4038189056, 4038197247, -STORE, 4038197248, 4038201343, -STORE, 4038201344, 4038205439, -STORE, 4038205440, 4038209535, -STORE, 4038217728, 4038250495, -STORE, 4038250496, 4038512639, -STORE, 4038512640, 4038516735, -STORE, 4038516736, 4038520831, -STORE, 4038520832, 4038524927, -STORE, 4038524928, 4038529023, -STORE, 4038529024, 4038533119, -STORE, 4038541312, 4038623231, -STORE, 4038623232, 4038754303, -STORE, 4038754304, 4038885375, -STORE, 4038885376, 4038889471, -STORE, 4038897664, 4038963199, -STORE, 4038963200, 4038967295, -STORE, 4038967296, 4038983679, -STORE, 4038983680, 4039114751, -STORE, 4039114752, 4039245823, -STORE, 4039245824, 4039376895, -STORE, 4039376896, 4040687615, -STORE, 4040687616, 4040691711, -STORE, 4040691712, 4040806399, -STORE, 4040806400, 4040937471, -STORE, 4040937472, 4040941567, -STORE, 4040945664, 4040949759, -STORE, 4040949760, 4041080831, -STORE, 4041080832, 4041211903, -STORE, 4041211904, 4043046911, -STORE, 4043046912, 4043051007, -STORE, 4043051008, 4043055103, -STORE, 4043055104, 4043137023, -STORE, 4043137024, 4043141119, -STORE, 4043141120, 4043145215, -STORE, 4043145216, 4043153407, -STORE, 4043153408, 4043186175, -STORE, 4043186176, 4043317247, -STORE, 4043317248, 4043448319, -STORE, 4043448320, 4043579391, -STORE, 4043579392, 4043583487, -STORE, 4043583488, 4043599871, -STORE, 4043599872, 4043661311, -STORE, 4043661312, 4043792383, -STORE, 4043792384, 4043796479, -STORE, 4043796480, 4043800575, -STORE, 4043800576, 4043816959, -STORE, 4043816960, 4043821055, -STORE, 4043821056, 4043825151, -STORE, 4043825152, 4043829247, -STORE, 4043829248, 4043833343, -STORE, 4043833344, 4047241215, -STORE, 4047241216, 4047249407, -STORE, 4047249408, 4047253503, -STORE, 4047253504, 4047323135, -STORE, 4047323136, 4047327231, -STORE, 4047327232, 4047458303, -STORE, 4047458304, 4047589375, -STORE, 4047589376, 4047720447, -STORE, 4047720448, 4047773695, -STORE, 4047773696, 4047790079, -STORE, 4047790080, 4047921151, -STORE, 4047921152, 4048052223, -STORE, 4048052224, 4048183295, -STORE, 4048183296, 4049002495, -STORE, 4049002496, 4049133567, -STORE, 4049133568, 4049154047, -STORE, 4049154048, 4049158143, -STORE, 4049158144, 4049162239, -STORE, 4049162240, 4049166335, -STORE, 4049166336, 4049174527, -STORE, 4049174528, 4049182719, -STORE, 4049182720, 4049186815, -STORE, 4049186816, 4049190911, -STORE, 4049190912, 4049195007, -STORE, 4049195008, 4049203199, -STORE, 4049203200, 4049207295, -STORE, 4049207296, 4049211391, -STORE, 4049211392, 4049215487, -STORE, 4049215488, 4049219583, -STORE, 4049219584, 4049227775, -STORE, 4049227776, 4049231871, -STORE, 4049231872, 4049235967, -STORE, 4049235968, 4049244159, -STORE, 4049244160, 4049248255, -STORE, 4049248256, 4049252351, -STORE, 4049252352, 4049256447, -STORE, 4049256448, 4049268735, -STORE, 4049268736, 4049272831, -STORE, 4049272832, 4049313791, -STORE, 4049313792, 4049723391, -STORE, 4049723392, 4049727487, -STORE, 4049727488, 4049858559, -STORE, 4049858560, 4049989631, -STORE, 4049989632, 4049993727, -STORE, 4049993728, 4050026495, -STORE, 4050026496, 4050030591, -STORE, 4050030592, 4050161663, -STORE, 4050161664, 4050169855, -STORE, 4050169856, 4050223103, -STORE, 4050223104, 4050632703, -STORE, 4050632704, 4050636799, -STORE, 4050636800, 4050640895, -STORE, 4050640896, 4050644991, -STORE, 4050644992, 4050661375, -STORE, 4050661376, 4050665471, -STORE, 4050665472, 4050673663, -STORE, 4050673664, 4050677759, -STORE, 4050677760, 4050694143, -STORE, 4050694144, 4050702335, -STORE, 4050702336, 4050956287, -STORE, 4050956288, 4051963903, -STORE, 4051963904, 4051980287, -STORE, 4051980288, 4051988479, -STORE, 4051988480, 4052000767, -STORE, 4052000768, 4052004863, -STORE, 4052004864, 4052029439, -STORE, 4284014592, 4284018687, -STORE, 4284018688, 4292403199, -SNULL, 4041080832, 4041211903, -SNULL, 3795763200, 3795894271, -STORE, 3629522944, 3696631807, -SNULL, 3663077375, 3696631807, -STORE, 3629522944, 3663077375, -STORE, 3663077376, 3696631807, -SNULL, 3663077376, 3696631807, -STORE, 3663077376, 3696631807, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3626471424, 3627524095, -SNULL, 3626471424, 3626475519, -STORE, 3626475520, 3627524095, -STORE, 3626471424, 3626475519, -SNULL, 3627519999, 3627524095, -STORE, 3626475520, 3627519999, -STORE, 3627520000, 3627524095, -STORE, 3625418752, 3626475519, -SNULL, 3625418752, 3625422847, -STORE, 3625422848, 3626475519, -STORE, 3625418752, 3625422847, -SNULL, 3626467327, 3626475519, -STORE, 3625422848, 3626467327, -STORE, 3626467328, 3626475519, -STORE, 3624366080, 3625422847, -SNULL, 3624366080, 3624370175, -STORE, 3624370176, 3625422847, -STORE, 3624366080, 3624370175, -SNULL, 3625414655, 3625422847, -STORE, 3624370176, 3625414655, -STORE, 3625414656, 3625422847, -STORE, 4041191424, 4041211903, -SNULL, 4041195519, 4041211903, -STORE, 4041191424, 4041195519, -STORE, 4041195520, 4041211903, -STORE, 4041170944, 4041191423, -SNULL, 4041175039, 4041191423, -STORE, 4041170944, 4041175039, -STORE, 4041175040, 4041191423, -SNULL, 3625426943, 3626467327, -STORE, 3625422848, 3625426943, -STORE, 3625426944, 3626467327, -STORE, 4041162752, 4041170943, -SNULL, 3626479615, 3627519999, -STORE, 3626475520, 3626479615, -STORE, 3626479616, 3627519999, -STORE, 4041154560, 4041162751, -STORE, 4041154560, 4041170943, -STORE, 4041134080, 4041154559, -SNULL, 4041138175, 4041154559, -STORE, 4041134080, 4041138175, -STORE, 4041138176, 4041154559, -SNULL, 3624374271, 3625414655, -STORE, 3624370176, 3624374271, -STORE, 3624374272, 3625414655, -STORE, 4041125888, 4041134079, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -STORE, 3487174656, 3487584255, -STORE, 4041121792, 4041125887, -SNULL, 4041121792, 4041125887, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 3487174656, 3487584255, -STORE, 3222274048, 3223326719, -SNULL, 3222274048, 3222278143, -STORE, 3222278144, 3223326719, -STORE, 3222274048, 3222278143, -SNULL, 3223322623, 3223326719, -STORE, 3222278144, 3223322623, -STORE, 3223322624, 3223326719, -STORE, 3221221376, 3222278143, -SNULL, 3221221376, 3221225471, -STORE, 3221225472, 3222278143, -STORE, 3221221376, 3221225471, -SNULL, 3222269951, 3222278143, -STORE, 3221225472, 3222269951, -STORE, 3222269952, 3222278143, -STORE, 3220168704, 3221225471, -SNULL, 3220168704, 3220172799, -STORE, 3220172800, 3221225471, -STORE, 3220168704, 3220172799, -SNULL, 3221217279, 3221225471, -STORE, 3220172800, 3221217279, -STORE, 3221217280, 3221225471, -STORE, 4041117696, 4041125887, -STORE, 4041117696, 4041134079, -STORE, 3219083264, 3220172799, -SNULL, 3219083264, 3219087359, -STORE, 3219087360, 3220172799, -STORE, 3219083264, 3219087359, -SNULL, 3220164607, 3220172799, -STORE, 3219087360, 3220164607, -STORE, 3220164608, 3220172799, -STORE, 4041109504, 4041117695, -STORE, 4041109504, 4041134079, -STORE, 3217997824, 3219087359, -SNULL, 3217997824, 3218001919, -STORE, 3218001920, 3219087359, -STORE, 3217997824, 3218001919, -SNULL, 3219079167, 3219087359, -STORE, 3218001920, 3219079167, -STORE, 3219079168, 3219087359, -STORE, 4041101312, 4041109503, -STORE, 4041101312, 4041134079, -STORE, 3216912384, 3218001919, -SNULL, 3216912384, 3216916479, -STORE, 3216916480, 3218001919, -STORE, 3216912384, 3216916479, -SNULL, 3217993727, 3218001919, -STORE, 3216916480, 3217993727, -STORE, 3217993728, 3218001919, -STORE, 4041093120, 4041101311, -STORE, 4041093120, 4041134079, -STORE, 3215826944, 3216916479, -SNULL, 3215826944, 3215831039, -STORE, 3215831040, 3216916479, -STORE, 3215826944, 3215831039, -SNULL, 3216908287, 3216916479, -STORE, 3215831040, 3216908287, -STORE, 3216908288, 3216916479, -STORE, 4016779264, 4016799743, -SNULL, 4016783359, 4016799743, -STORE, 4016779264, 4016783359, -STORE, 4016783360, 4016799743, -STORE, 4016758784, 4016779263, -SNULL, 4016762879, 4016779263, -STORE, 4016758784, 4016762879, -STORE, 4016762880, 4016779263, -SNULL, 3222282239, 3223322623, -STORE, 3222278144, 3222282239, -STORE, 3222282240, 3223322623, -STORE, 4041084928, 4041093119, -STORE, 4041084928, 4041134079, -SNULL, 3221229567, 3222269951, -STORE, 3221225472, 3221229567, -STORE, 3221229568, 3222269951, -STORE, 4015644672, 4015665151, -STORE, 4038889472, 4038897663, -SNULL, 4015648767, 4015665151, -STORE, 4015644672, 4015648767, -STORE, 4015648768, 4015665151, -STORE, 4015624192, 4015644671, -SNULL, 4015628287, 4015644671, -STORE, 4015624192, 4015628287, -STORE, 4015628288, 4015644671, -SNULL, 3219091455, 3220164607, -STORE, 3219087360, 3219091455, -STORE, 3219091456, 3220164607, -STORE, 4015603712, 4015624191, -SNULL, 4015607807, 4015624191, -STORE, 4015603712, 4015607807, -STORE, 4015607808, 4015624191, -SNULL, 3218006015, 3219079167, -STORE, 3218001920, 3218006015, -STORE, 3218006016, 3219079167, -STORE, 3949674496, 3949694975, -SNULL, 3949678591, 3949694975, -STORE, 3949674496, 3949678591, -STORE, 3949678592, 3949694975, -SNULL, 3216920575, 3217993727, -STORE, 3216916480, 3216920575, -STORE, 3216920576, 3217993727, -STORE, 3948924928, 3948945407, -SNULL, 3948929023, 3948945407, -STORE, 3948924928, 3948929023, -STORE, 3948929024, 3948945407, -SNULL, 3215835135, 3216908287, -STORE, 3215831040, 3215835135, -STORE, 3215835136, 3216908287, -SNULL, 3220176895, 3221217279, -STORE, 3220172800, 3220176895, -STORE, 3220176896, 3221217279, -STORE, 3214786560, 3215826943, -STORE, 3213733888, 3214786559, -SNULL, 3213733888, 3213737983, -STORE, 3213737984, 3214786559, -STORE, 3213733888, 3213737983, -SNULL, 3214782463, 3214786559, -STORE, 3213737984, 3214782463, -STORE, 3214782464, 3214786559, -STORE, 4038533120, 4038541311, -STORE, 3948421120, 3948441599, -SNULL, 3948425215, 3948441599, -STORE, 3948421120, 3948425215, -STORE, 3948425216, 3948441599, -SNULL, 3213742079, 3214782463, -STORE, 3213737984, 3213742079, -STORE, 3213742080, 3214782463, -STORE, 4038209536, 4038217727, -STORE, 3212681216, 3213737983, -SNULL, 3212681216, 3212685311, -STORE, 3212685312, 3213737983, -STORE, 3212681216, 3212685311, -SNULL, 3213729791, 3213737983, -STORE, 3212685312, 3213729791, -STORE, 3213729792, 3213737983, -STORE, 3795763200, 3795894271, -STORE, 3946872832, 3946893311, -SNULL, 3946876927, 3946893311, -STORE, 3946872832, 3946876927, -STORE, 3946876928, 3946893311, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -STORE, 3487174656, 3487584255, -SNULL, 3212689407, 3213729791, -STORE, 3212685312, 3212689407, -STORE, 3212689408, 3213729791, -STORE, 4041080832, 4041084927, -STORE, 4040941568, 4040945663, -STORE, 4037361664, 4037369855, -STORE, 4000817152, 4000821247, -STORE, 3999440896, 3999444991, -STORE, 3212161024, 3212681215, -SNULL, 3212161024, 3212439551, -STORE, 3212439552, 3212681215, -STORE, 3212161024, 3212439551, -SNULL, 3212161024, 3212439551, -SNULL, 3212464127, 3212681215, -STORE, 3212439552, 3212464127, -STORE, 3212464128, 3212681215, -SNULL, 3212464128, 3212681215, -SNULL, 3212439552, 3212451839, -STORE, 3212451840, 3212464127, -STORE, 3212439552, 3212451839, -SNULL, 3212439552, 3212451839, -STORE, 3212439552, 3212451839, -SNULL, 3212451840, 3212455935, -STORE, 3212455936, 3212464127, -STORE, 3212451840, 3212455935, -SNULL, 3212451840, 3212455935, -STORE, 3212451840, 3212455935, -SNULL, 3212455936, 3212460031, -STORE, 3212460032, 3212464127, -STORE, 3212455936, 3212460031, -SNULL, 3212455936, 3212460031, -STORE, 3212455936, 3212460031, -SNULL, 3212460032, 3212464127, -STORE, 3212460032, 3212464127, -STORE, 3997679616, 3997683711, -SNULL, 4049235968, 4049240063, -STORE, 4049240064, 4049244159, -STORE, 4049235968, 4049240063, -SNULL, 4049240064, 4049244159, -STORE, 4049240064, 4049244159, -SNULL, 3997679616, 3997683711, -SNULL, 3999440896, 3999444991, -SNULL, 4000817152, 4000821247, -SNULL, 4040941568, 4040945663, -SNULL, 4041080832, 4041084927, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 3487174656, 3487584255, -SNULL, 3212451840, 3212455935, -STORE, 3212451840, 3212455935, -STORE, 4041080832, 4041084927, -STORE, 3623890944, 3624169471, -SNULL, 4041080832, 4041084927, -STORE, 4041080832, 4041084927, -SNULL, 4041080832, 4041084927, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -STORE, 4041080832, 4041084927, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -STORE, 3211386880, 3212439551, -SNULL, 3211386880, 3211390975, -STORE, 3211390976, 3212439551, -STORE, 3211386880, 3211390975, -SNULL, 3212435455, 3212439551, -STORE, 3211390976, 3212435455, -STORE, 3212435456, 3212439551, -STORE, 4040941568, 4040945663, -STORE, 3937169408, 3937189887, -STORE, 3623485440, 3623616511, -SNULL, 717225983, 1388314623, -STORE, 314572800, 717225983, -STORE, 717225984, 1388314623, -SNULL, 717225984, 1388314623, -STORE, 3937112064, 3937132543, -SNULL, 3937116159, 3937132543, -STORE, 3937112064, 3937116159, -STORE, 3937116160, 3937132543, -SNULL, 3211395071, 3212435455, -STORE, 3211390976, 3211395071, -STORE, 3211395072, 3212435455, -STORE, 4000817152, 4000821247, -STORE, 3974823936, 3974832127, -STORE, 3595284480, 3595431935, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -STORE, 3487174656, 3487584255, -STORE, 3999440896, 3999444991, -STORE, 3997679616, 3997683711, -STORE, 3996295168, 3996299263, -STORE, 3996090368, 3996094463, -STORE, 3210866688, 3211386879, -SNULL, 3210866688, 3211001855, -STORE, 3211001856, 3211386879, -STORE, 3210866688, 3211001855, -SNULL, 3210866688, 3211001855, -SNULL, 3211038719, 3211386879, -STORE, 3211001856, 3211038719, -STORE, 3211038720, 3211386879, -SNULL, 3211038720, 3211386879, -SNULL, 3211001856, 3211022335, -STORE, 3211022336, 3211038719, -STORE, 3211001856, 3211022335, -SNULL, 3211001856, 3211022335, -STORE, 3211001856, 3211022335, -SNULL, 3211022336, 3211030527, -STORE, 3211030528, 3211038719, -STORE, 3211022336, 3211030527, -SNULL, 3211022336, 3211030527, -STORE, 3211022336, 3211030527, -SNULL, 3211030528, 3211034623, -STORE, 3211034624, 3211038719, -STORE, 3211030528, 3211034623, -SNULL, 3211030528, 3211034623, -STORE, 3211030528, 3211034623, -SNULL, 3211034624, 3211038719, -STORE, 3211034624, 3211038719, -STORE, 3994906624, 3994910719, -SNULL, 4049240064, 4049244159, -STORE, 4049240064, 4049244159, -SNULL, 3994906624, 3994910719, -SNULL, 3996090368, 3996094463, -SNULL, 3996295168, 3996299263, -SNULL, 3997679616, 3997683711, -SNULL, 3999440896, 3999444991, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 3487174656, 3487584255, -SNULL, 3211022336, 3211030527, -STORE, 3211022336, 3211030527, -STORE, 3999440896, 3999444991, -STORE, 3210199040, 3211001855, -SNULL, 3999440896, 3999444991, -STORE, 3999440896, 3999444991, -SNULL, 3999440896, 3999444991, -STORE, 3594821632, 3594952703, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 4048183296, 4048592895, -STORE, 4048592896, 4049002495, -STORE, 4048183296, 4048592895, -STORE, 4048183296, 4049002495, -SNULL, 1914101759, 1969434623, -STORE, 1914097664, 1914101759, -STORE, 1914101760, 1969434623, -STORE, 3567108096, 3567239167, -STORE, 3973832704, 3973840895, -STORE, 3209113600, 3210199039, -SNULL, 3209113600, 3209117695, -STORE, 3209117696, 3210199039, -STORE, 3209113600, 3209117695, -SNULL, 3210194943, 3210199039, -STORE, 3209117696, 3210194943, -STORE, 3210194944, 3210199039, -STORE, 3935858688, 3935879167, -SNULL, 3935862783, 3935879167, -STORE, 3935858688, 3935862783, -STORE, 3935862784, 3935879167, -SNULL, 3209121791, 3210194943, -STORE, 3209117696, 3209121791, -STORE, 3209121792, 3210194943, -STORE, 3528749056, 3528880127, -STORE, 3968200704, 3968208895, -STORE, 3208028160, 3209117695, -SNULL, 3208028160, 3208032255, -STORE, 3208032256, 3209117695, -STORE, 3208028160, 3208032255, -SNULL, 3209109503, 3209117695, -STORE, 3208032256, 3209109503, -STORE, 3209109504, 3209117695, -STORE, 3888123904, 3888144383, -SNULL, 3888127999, 3888144383, -STORE, 3888123904, 3888127999, -STORE, 3888128000, 3888144383, -SNULL, 3208036351, 3209109503, -STORE, 3208032256, 3208036351, -STORE, 3208036352, 3209109503, -SNULL, 3968200704, 3968208895, -SNULL, 3888123904, 3888144383, -SNULL, 3209109504, 3209113599, -STORE, 3209113600, 3209117695, -STORE, 3209109504, 3209113599, -SNULL, 3208028160, 3209113599, -STORE, 3208060928, 3209117695, -SNULL, 3208060928, 3208065023, -STORE, 3208065024, 3209117695, -STORE, 3208060928, 3208065023, -SNULL, 3209109503, 3209117695, -STORE, 3208065024, 3209109503, -STORE, 3209109504, 3209117695, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3888123904, 3888144383, -SNULL, 3888127999, 3888144383, -STORE, 3888123904, 3888127999, -STORE, 3888128000, 3888144383, -SNULL, 3208069119, 3209109503, -STORE, 3208065024, 3208069119, -STORE, 3208069120, 3209109503, -STORE, 3968200704, 3968208895, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3527778304, 3527909375, -STORE, 3999440896, 3999444991, -STORE, 3997679616, 3997683711, -STORE, 1914097664, 1914105855, -STORE, 1914105856, 1969434623, -STORE, 3957583872, 3957592063, -STORE, 3206975488, 3208065023, -SNULL, 3206975488, 3206979583, -STORE, 3206979584, 3208065023, -STORE, 3206975488, 3206979583, -SNULL, 3208056831, 3208065023, -STORE, 3206979584, 3208056831, -STORE, 3208056832, 3208065023, -STORE, 3956736000, 3956744191, -STORE, 3205890048, 3206979583, -SNULL, 3205890048, 3205894143, -STORE, 3205894144, 3206979583, -STORE, 3205890048, 3205894143, -SNULL, 3206971391, 3206979583, -STORE, 3205894144, 3206971391, -STORE, 3206971392, 3206979583, -STORE, 3806101504, 3806121983, -SNULL, 3806105599, 3806121983, -STORE, 3806101504, 3806105599, -STORE, 3806105600, 3806121983, -SNULL, 3206983679, 3208056831, -STORE, 3206979584, 3206983679, -STORE, 3206983680, 3208056831, -STORE, 3806081024, 3806101503, -SNULL, 3806085119, 3806101503, -STORE, 3806081024, 3806085119, -STORE, 3806085120, 3806101503, -SNULL, 3205898239, 3206971391, -STORE, 3205894144, 3205898239, -STORE, 3205898240, 3206971391, -STORE, 3956015104, 3956023295, -STORE, 3204804608, 3205894143, -SNULL, 3204804608, 3204808703, -STORE, 3204808704, 3205894143, -STORE, 3204804608, 3204808703, -SNULL, 3205885951, 3205894143, -STORE, 3204808704, 3205885951, -STORE, 3205885952, 3205894143, -STORE, 3803471872, 3803492351, -STORE, 3803451392, 3803471871, -STORE, 3803451392, 3803492351, -SNULL, 3957583872, 3957592063, -SNULL, 3806101504, 3806121983, -SNULL, 3206975487, 3206979583, -STORE, 3206971392, 3206975487, -STORE, 3206975488, 3206979583, -SNULL, 3208056832, 3208060927, -STORE, 3208060928, 3208065023, -STORE, 3208056832, 3208060927, -SNULL, 3206975488, 3208060927, -STORE, 3801845760, 3801878527, -STORE, 3806101504, 3806121983, -SNULL, 3806105599, 3806121983, -STORE, 3806101504, 3806105599, -STORE, 3806105600, 3806121983, -SNULL, 3204812799, 3205885951, -STORE, 3204808704, 3204812799, -STORE, 3204812800, 3205885951, -STORE, 1914097664, 1914109951, -STORE, 1914109952, 1969434623, -STORE, 3957583872, 3957592063, -STORE, 3206971392, 3208065023, -SNULL, 3206971392, 3206979583, -STORE, 3206979584, 3208065023, -STORE, 3206971392, 3206979583, -SNULL, 3208056831, 3208065023, -STORE, 3206979584, 3208056831, -STORE, 3208056832, 3208065023, -STORE, 3801825280, 3801845759, -SNULL, 3801829375, 3801845759, -STORE, 3801825280, 3801829375, -STORE, 3801829376, 3801845759, -SNULL, 3206983679, 3208056831, -STORE, 3206979584, 3206983679, -STORE, 3206983680, 3208056831, -STORE, 3202707456, 3204804607, -SNULL, 3202707456, 3204804607, -STORE, 3202707456, 3204804607, -STORE, 3200610304, 3202707455, -SNULL, 3202707456, 3204804607, -SNULL, 3200610304, 3202707455, -STORE, 3202707456, 3204804607, -SNULL, 3202707456, 3204804607, -STORE, 3202707456, 3204804607, -SNULL, 3202707456, 3204804607, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3527647232, 3527778303, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -STORE, 3487059968, 3487584255, -SNULL, 3487059968, 3487301631, -STORE, 3487301632, 3487584255, -STORE, 3487059968, 3487301631, -SNULL, 3487059968, 3487301631, -SNULL, 3487563775, 3487584255, -STORE, 3487301632, 3487563775, -STORE, 3487563776, 3487584255, -SNULL, 3487563776, 3487584255, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3524046848, 3524177919, -STORE, 3487170560, 3487301631, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3487039488, 3487170559, -STORE, 3487039488, 3487301631, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3204280320, 3204804607, -SNULL, 3204280320, 3204448255, -STORE, 3204448256, 3204804607, -STORE, 3204280320, 3204448255, -SNULL, 3204280320, 3204448255, -SNULL, 3204710399, 3204804607, -STORE, 3204448256, 3204710399, -STORE, 3204710400, 3204804607, -SNULL, 3204710400, 3204804607, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3996295168, 3996299263, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -SNULL, 3996295168, 3996299263, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3486908416, 3487039487, -STORE, 3486908416, 3487301631, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3223326720, 3290435583, -SNULL, 3223326720, 3256881151, -STORE, 3256881152, 3290435583, -STORE, 3223326720, 3256881151, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -STORE, 3201826816, 3202351103, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -STORE, 3202351104, 3204448255, -SNULL, 3202351104, 3204448255, -SNULL, 3803471871, 3803492351, -STORE, 3803451392, 3803471871, -STORE, 3803471872, 3803492351, -SNULL, 3803471872, 3803492351, -SNULL, 3803451392, 3803471871, -STORE, 3798999040, 3799101439, -SNULL, 3798999040, 3799101439, -STORE, 3952644096, 3952652287, -STORE, 3203362816, 3204448255, -SNULL, 3203362816, 3203366911, -STORE, 3203366912, 3204448255, -STORE, 3203362816, 3203366911, -SNULL, 3204444159, 3204448255, -STORE, 3203366912, 3204444159, -STORE, 3204444160, 3204448255, -STORE, 3803471872, 3803492351, -SNULL, 3803475967, 3803492351, -STORE, 3803471872, 3803475967, -STORE, 3803475968, 3803492351, -SNULL, 3203371007, 3204444159, -STORE, 3203366912, 3203371007, -STORE, 3203371008, 3204444159, -STORE, 3199729664, 3201826815, -SNULL, 3199729664, 3201826815, -STORE, 3199729664, 3201826815, -SNULL, 3199729664, 3201826815, -STORE, 3199729664, 3201826815, -SNULL, 3199729664, 3201826815, -STORE, 3199729664, 3201826815, -SNULL, 3199729664, 3201826815, -STORE, 3199729664, 3201826815, -SNULL, 3199729664, 3201826815, -STORE, 3200774144, 3201826815, -SNULL, 3200774144, 3200778239, -STORE, 3200778240, 3201826815, -STORE, 3200774144, 3200778239, -SNULL, 3201822719, 3201826815, -STORE, 3200778240, 3201822719, -STORE, 3201822720, 3201826815, -STORE, 3803451392, 3803471871, -SNULL, 3803455487, 3803471871, -STORE, 3803451392, 3803455487, -STORE, 3803455488, 3803471871, -SNULL, 3200782335, 3201822719, -STORE, 3200778240, 3200782335, -STORE, 3200782336, 3201822719, -STORE, 3949666304, 3949674495, -STORE, 3949408256, 3949416447, -STORE, 3199688704, 3200778239, -SNULL, 3199688704, 3199692799, -STORE, 3199692800, 3200778239, -STORE, 3199688704, 3199692799, -SNULL, 3200770047, 3200778239, -STORE, 3199692800, 3200770047, -STORE, 3200770048, 3200778239, -STORE, 3799306240, 3799326719, -SNULL, 3799310335, 3799326719, -STORE, 3799306240, 3799310335, -STORE, 3799310336, 3799326719, -SNULL, 3199696895, 3200770047, -STORE, 3199692800, 3199696895, -STORE, 3199696896, 3200770047, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -STORE, 3799277568, 3799306239, -SNULL, 3799277568, 3799306239, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -SNULL, 4041162751, 4041170943, -STORE, 4041154560, 4041162751, -STORE, 4041162752, 4041170943, -SNULL, 4041162752, 4041170943, -SNULL, 4041154560, 4041162751, -SNULL, 4041191424, 4041211903, -SNULL, 4041170944, 4041191423, -SNULL, 3626471423, 3626475519, -STORE, 3626467328, 3626471423, -STORE, 3626471424, 3626475519, -SNULL, 3626471424, 3627524095, -SNULL, 3625418751, 3625422847, -STORE, 3625414656, 3625418751, -STORE, 3625418752, 3625422847, -SNULL, 3625418752, 3626471423, -STORE, 3627393024, 3627524095, -STORE, 3627261952, 3627393023, -STORE, 3627261952, 3627524095, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -STORE, 3195494400, 3197591551, -SNULL, 3197591552, 3199688703, -SNULL, 3195494400, 3197591551, -STORE, 3197591552, 3199688703, -SNULL, 3197591552, 3199688703, -STORE, 3197591552, 3199688703, -STORE, 3195494400, 3197591551, -SNULL, 3197591552, 3199688703, -SNULL, 3195494400, 3197591551, -STORE, 3798999040, 3799101439, -SNULL, 3798999040, 3799101439, -/* - * mmap: unmapped_area_topdown: ffff9a9f14ddaa80 - * Gap was found: mt 4041162752 gap_end 4041183232 - * mmap: window was 4052029440 - 4096 size 28672 - * mmap: mas.min 4041154560 max 4041191423 mas.last 4041191423 - * mmap: mas.index 4041162752 align mask 0 offset 0 - * mmap: rb_find_vma find on 4041162752 => ffff9a9f03d19678 (ffff9a9f03d19678) - */ - }; - - unsigned long set43[] = { -STORE, 140737488347136, 140737488351231, -STORE, 140734187720704, 140737488351231, -SNULL, 140734187724800, 140737488351231, -STORE, 140734187589632, 140734187724799, -STORE, 4194304, 6443007, -STORE, 4337664, 6443007, -STORE, 4194304, 4337663, -SNULL, 4337664, 6443007, -STORE, 6430720, 6443007, -STORE, 206158430208, 206160674815, -STORE, 206158569472, 206160674815, -STORE, 206158430208, 206158569471, -SNULL, 206158569472, 206160674815, -STORE, 206160662528, 206160670719, -STORE, 206160670720, 206160674815, -STORE, 140734188756992, 140734188765183, -STORE, 140734188740608, 140734188756991, -STORE, 140501948112896, 140501948116991, - }; - - int count = 0; - void *ptr = NULL; - - MA_STATE(mas, mt, 0, 0); - - mt_set_non_kernel(3); - check_erase2_testset(mt, set, ARRAY_SIZE(set)); - mt_set_non_kernel(0); - mtree_destroy(mt); - - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set2, ARRAY_SIZE(set2)); - start = 140735933894656; - MT_BUG_ON(mt, !!mt_find(mt, &start, 140735933906943UL)); + /* Create tree of 1-100 */ + check_seq(mt, 100, false); + /* Store 45-168 */ + mt_set_non_kernel(10); + check_store_range(mt, r[10], r[11], xa_mk_value(r[10]), 0); + MT_BUG_ON(mt, !mt_height(mt)); mtree_destroy(mt); - mt_set_non_kernel(2); - mt_init_flags(mt, 0); - check_erase2_testset(mt, set3, ARRAY_SIZE(set3)); - mt_set_non_kernel(0); + /* Create tree of 1-200 */ + check_seq(mt, 200, false); + /* Store 45-168 */ + check_store_range(mt, r[10], r[11], xa_mk_value(r[10]), 0); + MT_BUG_ON(mt, !mt_height(mt)); mtree_destroy(mt); - mt_init_flags(mt, 0); - check_erase2_testset(mt, set4, ARRAY_SIZE(set4)); - rcu_read_lock(); - mas_for_each(&mas, entry, ULONG_MAX) { - if (xa_is_zero(entry)) - continue; - } - rcu_read_unlock(); - rcu_barrier(); + check_seq(mt, 30, false); + check_store_range(mt, 6, 18, xa_mk_value(6), 0); + MT_BUG_ON(mt, !mt_height(mt)); mtree_destroy(mt); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - mt_set_non_kernel(100); - check_erase2_testset(mt, set5, ARRAY_SIZE(set5)); - rcu_barrier(); + /* Overwrite across multiple levels. */ + /* Create tree of 1-400 */ + check_seq(mt, 400, false); + mt_set_non_kernel(50); + /* Store 118-128 */ + check_store_range(mt, r[12], r[13], xa_mk_value(r[12]), 0); + mt_set_non_kernel(50); + mtree_test_erase(mt, 140); + mtree_test_erase(mt, 141); + mtree_test_erase(mt, 142); + mtree_test_erase(mt, 143); + mtree_test_erase(mt, 130); + mtree_test_erase(mt, 131); + mtree_test_erase(mt, 132); + mtree_test_erase(mt, 133); + mtree_test_erase(mt, 134); + mtree_test_erase(mt, 135); + check_load(mt, r[12], xa_mk_value(r[12])); + check_load(mt, r[13], xa_mk_value(r[12])); + check_load(mt, r[13] - 1, xa_mk_value(r[12])); + check_load(mt, r[13] + 1, xa_mk_value(r[13] + 1)); + check_load(mt, 135, NULL); + check_load(mt, 140, NULL); mt_set_non_kernel(0); + MT_BUG_ON(mt, !mt_height(mt)); mtree_destroy(mt); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set6, ARRAY_SIZE(set6)); - rcu_barrier(); - mtree_destroy(mt); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set7, ARRAY_SIZE(set7)); - rcu_barrier(); - mtree_destroy(mt); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set8, ARRAY_SIZE(set8)); - rcu_barrier(); - mtree_destroy(mt); + /* Overwrite multiple levels at the end of the tree (slot 7) */ + mt_set_non_kernel(50); + check_seq(mt, 400, false); + check_store_range(mt, 353, 361, xa_mk_value(353), 0); + check_store_range(mt, 347, 352, xa_mk_value(347), 0); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set9, ARRAY_SIZE(set9)); - rcu_barrier(); + check_load(mt, 346, xa_mk_value(346)); + for (i = 347; i <= 352; i++) + check_load(mt, i, xa_mk_value(347)); + for (i = 353; i <= 361; i++) + check_load(mt, i, xa_mk_value(353)); + check_load(mt, 362, xa_mk_value(362)); + mt_set_non_kernel(0); + MT_BUG_ON(mt, !mt_height(mt)); mtree_destroy(mt); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set10, ARRAY_SIZE(set10)); - rcu_barrier(); + mt_set_non_kernel(50); + check_seq(mt, 400, false); + check_store_range(mt, 352, 364, NULL, 0); + check_store_range(mt, 351, 363, xa_mk_value(352), 0); + check_load(mt, 350, xa_mk_value(350)); + check_load(mt, 351, xa_mk_value(352)); + for (i = 352; i <= 363; i++) + check_load(mt, i, xa_mk_value(352)); + check_load(mt, 364, NULL); + check_load(mt, 365, xa_mk_value(365)); + mt_set_non_kernel(0); + MT_BUG_ON(mt, !mt_height(mt)); mtree_destroy(mt); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set11, ARRAY_SIZE(set11)); - rcu_barrier(); - mas_empty_area_rev(&mas, 12288, 140014592737280, 0x2000); - MT_BUG_ON(mt, mas.last != 140014592573439); + mt_set_non_kernel(5); + check_seq(mt, 400, false); + check_store_range(mt, 352, 364, NULL, 0); + check_store_range(mt, 351, 364, xa_mk_value(352), 0); + check_load(mt, 350, xa_mk_value(350)); + check_load(mt, 351, xa_mk_value(352)); + for (i = 352; i <= 364; i++) + check_load(mt, i, xa_mk_value(352)); + check_load(mt, 365, xa_mk_value(365)); + mt_set_non_kernel(0); + MT_BUG_ON(mt, !mt_height(mt)); mtree_destroy(mt); - mas_reset(&mas); - mas.tree = mt; - count = 0; - mas.index = 0; - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set12, ARRAY_SIZE(set12)); - rcu_barrier(); - mas_for_each(&mas, entry, ULONG_MAX) { - if (xa_is_zero(entry)) - continue; - BUG_ON(count > 12); - count++; - } - mtree_destroy(mt); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set13, ARRAY_SIZE(set13)); - mtree_erase(mt, 140373516443648); - rcu_read_lock(); - mas_empty_area_rev(&mas, 0, 140373518663680, 4096); - rcu_read_unlock(); - mtree_destroy(mt); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set14, ARRAY_SIZE(set14)); - rcu_barrier(); + mt_set_non_kernel(50); + check_seq(mt, 400, false); + check_store_range(mt, 362, 367, xa_mk_value(362), 0); + check_store_range(mt, 353, 361, xa_mk_value(353), 0); + mt_set_non_kernel(0); + mt_validate(mt); + MT_BUG_ON(mt, !mt_height(mt)); mtree_destroy(mt); + /* + * Interesting cases: + * 1. Overwrite the end of a node and end in the first entry of the next + * node. + * 2. Split a single range + * 3. Overwrite the start of a range + * 4. Overwrite the end of a range + * 5. Overwrite the entire range + * 6. Overwrite a range that causes multiple parent nodes to be + * combined + * 7. Overwrite a range that causes multiple parent nodes and part of + * root to be combined + * 8. Overwrite the whole tree + * 9. Try to overwrite the zero entry of an alloc tree. + * 10. Write a range larger than a nodes current pivot + */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set15, ARRAY_SIZE(set15)); - rcu_barrier(); + mt_set_non_kernel(50); + for (i = 0; i <= 500; i++) { + val = i*5; + val2 = (i+1)*5; + check_store_range(mt, val, val2, xa_mk_value(val), 0); + } + check_store_range(mt, 2400, 2400, xa_mk_value(2400), 0); + check_store_range(mt, 2411, 2411, xa_mk_value(2411), 0); + check_store_range(mt, 2412, 2412, xa_mk_value(2412), 0); + check_store_range(mt, 2396, 2400, xa_mk_value(4052020), 0); + check_store_range(mt, 2402, 2402, xa_mk_value(2402), 0); mtree_destroy(mt); + mt_set_non_kernel(0); - /* set16 was to find a bug on limit updating at slot 0. */ - mt_set_non_kernel(99); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set16, ARRAY_SIZE(set16)); - rcu_barrier(); - mas_empty_area_rev(&mas, 4096, 139921865637888, 0x6000); - MT_BUG_ON(mt, mas.last != 139921865547775); + mt_set_non_kernel(50); + for (i = 0; i <= 500; i++) { + val = i*5; + val2 = (i+1)*5; + check_store_range(mt, val, val2, xa_mk_value(val), 0); + } + check_store_range(mt, 2422, 2422, xa_mk_value(2422), 0); + check_store_range(mt, 2424, 2424, xa_mk_value(2424), 0); + check_store_range(mt, 2425, 2425, xa_mk_value(2), 0); + check_store_range(mt, 2460, 2470, NULL, 0); + check_store_range(mt, 2435, 2460, xa_mk_value(2435), 0); + check_store_range(mt, 2461, 2470, xa_mk_value(2461), 0); mt_set_non_kernel(0); + MT_BUG_ON(mt, !mt_height(mt)); mtree_destroy(mt); - /* - * set17 found a bug in walking backwards and not counting nulls at - * the end. This could cause a gap to be missed if the null had any - * size. - */ - mt_set_non_kernel(99); - mas_reset(&mas); + /* Test rebalance gaps */ mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set17, ARRAY_SIZE(set17)); - rcu_barrier(); - mas_empty_area_rev(&mas, 4096, 139953197334528, 0x1000); - MT_BUG_ON(mt, mas.last != 139953197322239); -/* MT_BUG_ON(mt, mas.index != 139953197318144); */ + mt_set_non_kernel(50); + for (i = 0; i <= 50; i++) { + val = i*10; + val2 = (i+1)*10; + check_store_range(mt, val, val2, xa_mk_value(val), 0); + } + check_store_range(mt, 161, 161, xa_mk_value(161), 0); + check_store_range(mt, 162, 162, xa_mk_value(162), 0); + check_store_range(mt, 163, 163, xa_mk_value(163), 0); + check_store_range(mt, 240, 249, NULL, 0); + mtree_erase(mt, 200); + mtree_erase(mt, 210); + mtree_erase(mt, 220); + mtree_erase(mt, 230); mt_set_non_kernel(0); + MT_BUG_ON(mt, !mt_height(mt)); mtree_destroy(mt); - /* - * set18 found a bug in walking backwards and not setting the max from - * the node, but using the parent node. This was only an issue if the - * next slot in the parent had what we needed. - */ - mt_set_non_kernel(99); - mas_reset(&mas); mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set18, ARRAY_SIZE(set18)); - rcu_barrier(); - mas_empty_area_rev(&mas, 4096, 140222972858368, 2215936); - MT_BUG_ON(mt, mas.last != 140222968475647); - /*MT_BUG_ON(mt, mas.index != 140222966259712); */ - mt_set_non_kernel(0); - mtree_destroy(mt); - - /* - * set19 found 2 bugs in prev. - * 1. If we hit root without finding anything, then there was an - * infinite loop. - * 2. The first ascending wasn't using the correct slot which may have - * caused missed entries. - */ - mt_set_non_kernel(99); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set19, ARRAY_SIZE(set19)); - rcu_barrier(); - mas.index = 140656779083776; - entry = mas_find(&mas, ULONG_MAX); - MT_BUG_ON(mt, entry != xa_mk_value(140656779083776)); - entry = mas_prev(&mas, 0); - MT_BUG_ON(mt, entry != xa_mk_value(140656766251008)); - mt_set_non_kernel(0); - mtree_destroy(mt); - - /* - * set20 found a bug in mas_may_move_gap due to the slot being - * overwritten during the __mas_add operation and setting it to zero. - */ - mt_set_non_kernel(99); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set20, ARRAY_SIZE(set20)); - rcu_barrier(); - check_load(mt, 94849009414144, NULL); - mt_set_non_kernel(0); - mtree_destroy(mt); - - mt_set_non_kernel(99); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set21, ARRAY_SIZE(set21)); - rcu_barrier(); - mt_validate(mt); - mt_set_non_kernel(0); - mtree_destroy(mt); - - mt_set_non_kernel(999); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set22, ARRAY_SIZE(set22)); - rcu_barrier(); - mt_validate(mt); - ptr = mtree_load(mt, 140551363362816); - MT_BUG_ON(mt, ptr == mtree_load(mt, 140551363420159)); - mt_set_non_kernel(0); - mtree_destroy(mt); - - mt_set_non_kernel(99); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set23, ARRAY_SIZE(set23)); - rcu_barrier(); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - - mt_set_non_kernel(99); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set24, ARRAY_SIZE(set24)); - rcu_barrier(); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - mt_set_non_kernel(99); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set25, ARRAY_SIZE(set25)); - rcu_barrier(); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - /* Split on NULL followed by delete - causes gap issues. */ - mt_set_non_kernel(99); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set26, ARRAY_SIZE(set26)); - rcu_barrier(); - mas_empty_area_rev(&mas, 4096, 140109042671616, 409600); - MT_BUG_ON(mt, mas.last != 140109040959487); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - /* Split on NULL followed by delete - causes gap issues. */ - mt_set_non_kernel(99); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set27, ARRAY_SIZE(set27)); - rcu_barrier(); - MT_BUG_ON(mt, 0 != mtree_load(mt, 140415537422336)); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - mt_set_non_kernel(99); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set28, ARRAY_SIZE(set28)); - rcu_barrier(); - mas_empty_area_rev(&mas, 4096, 139918413357056, 2097152); - /* Search for the size of gap then align it (offset 0) */ - mas.index = (mas.last + 1 - 2097152 - 0) & (~2093056); - MT_BUG_ON(mt, mas.index != 139918401601536); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - /* This test found issues with retry moving rebalanced nodes so the - * incorrect parent pivot was updated. - */ - mt_set_non_kernel(999); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set29, ARRAY_SIZE(set29)); - rcu_barrier(); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - /* This test found issues with deleting all entries in a node when - * surrounded by entries in the next nodes, then deleting the entries - * surrounding the node filled with deleted entries. - */ - mt_set_non_kernel(999); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set30, ARRAY_SIZE(set30)); - rcu_barrier(); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - /* This test found an issue with deleting all entries in a node that was - * the end node and mas_gap incorrectly set next = curr, and curr = prev - * then moved next to the left, losing data. - */ - mt_set_non_kernel(99); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set31, ARRAY_SIZE(set31)); - rcu_barrier(); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - mt_set_non_kernel(99); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set32, ARRAY_SIZE(set32)); - rcu_barrier(); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - -/* - * mmap: empty_area_topdown: ffff88821c9cb600 Gap was found: - * mt 140582827569152 gap_end 140582869532672 - * mmap: window was 140583656296448 - 4096 size 134217728 - * mmap: mas.min 94133881868288 max 140582961786879 mas.last 140582961786879 - * mmap: mas.index 140582827569152 align mask 0 offset 0 - * mmap: rb_find_vma find on - * 140582827569152 => ffff88821c5bad00 (ffff88821c5bad00) - */ - - /* move gap failed due to an entirely empty node */ - mt_set_non_kernel(99); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set33, ARRAY_SIZE(set33)); - rcu_barrier(); - mas_empty_area_rev(&mas, 4096, 140583656296448, 134217728); - MT_BUG_ON(mt, mas.last != 140583003750399); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - /* - * Incorrect gap in tree caused by mas_prev not setting the limits - * correctly while walking down. - */ - mt_set_non_kernel(99); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set34, ARRAY_SIZE(set34)); - rcu_barrier(); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - /* Empty leaf at the end of a parent caused incorrect gap. */ - mt_set_non_kernel(99); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set35, ARRAY_SIZE(set35)); - rcu_barrier(); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - mt_set_non_kernel(99); - /* Empty leaf at the end of a parent caused incorrect gap. */ - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set36, ARRAY_SIZE(set36)); - rcu_barrier(); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set37, ARRAY_SIZE(set37)); - rcu_barrier(); - MT_BUG_ON(mt, 0 != mtree_load(mt, 94637033459712)); - mt_validate(mt); - mtree_destroy(mt); - - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set38, ARRAY_SIZE(set38)); - rcu_barrier(); - MT_BUG_ON(mt, 0 != mtree_load(mt, 94637033459712)); - mt_validate(mt); - mtree_destroy(mt); - - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set39, ARRAY_SIZE(set39)); - rcu_barrier(); - mt_validate(mt); - mtree_destroy(mt); - - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set40, ARRAY_SIZE(set40)); - rcu_barrier(); - mt_validate(mt); - mtree_destroy(mt); - - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set41, ARRAY_SIZE(set41)); - rcu_barrier(); - mt_validate(mt); - mtree_destroy(mt); - - /* move gap failed due to an entirely empty node. */ - mt_set_non_kernel(99); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set42, ARRAY_SIZE(set42)); - rcu_barrier(); - mas_empty_area_rev(&mas, 4096, 4052029440, 28672); - MT_BUG_ON(mt, mas.last != 4041211903); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); - - /* gap calc off by one */ - mt_set_non_kernel(99); - mas_reset(&mas); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_erase2_testset(mt, set43, ARRAY_SIZE(set43)); - rcu_barrier(); - mt_set_non_kernel(0); - mt_validate(mt); - mtree_destroy(mt); -} - -static noinline void check_alloc_rev_range(struct maple_tree *mt) -{ - /* - * Generated by: - * cat /proc/self/maps | awk '{print $1}'| - * awk -F "-" '{printf "0x%s, 0x%s, ", $1, $2}' - */ - - unsigned long range[] = { - /* Inclusive , Exclusive. */ - 0x565234af2000, 0x565234af4000, - 0x565234af4000, 0x565234af9000, - 0x565234af9000, 0x565234afb000, - 0x565234afc000, 0x565234afd000, - 0x565234afd000, 0x565234afe000, - 0x565235def000, 0x565235e10000, - 0x7f36d4bfd000, 0x7f36d4ee2000, - 0x7f36d4ee2000, 0x7f36d4f04000, - 0x7f36d4f04000, 0x7f36d504c000, - 0x7f36d504c000, 0x7f36d5098000, - 0x7f36d5098000, 0x7f36d5099000, - 0x7f36d5099000, 0x7f36d509d000, - 0x7f36d509d000, 0x7f36d509f000, - 0x7f36d509f000, 0x7f36d50a5000, - 0x7f36d50b9000, 0x7f36d50db000, - 0x7f36d50db000, 0x7f36d50dc000, - 0x7f36d50dc000, 0x7f36d50fa000, - 0x7f36d50fa000, 0x7f36d5102000, - 0x7f36d5102000, 0x7f36d5103000, - 0x7f36d5103000, 0x7f36d5104000, - 0x7f36d5104000, 0x7f36d5105000, - 0x7fff5876b000, 0x7fff5878d000, - 0x7fff5878e000, 0x7fff58791000, - 0x7fff58791000, 0x7fff58793000, - }; - - unsigned long holes[] = { - /* - * Note: start of hole is INCLUSIVE - * end of hole is EXCLUSIVE - * (opposite of the above table.) - * Start of hole, end of hole, size of hole (+1) - */ - 0x565234afb000, 0x565234afc000, 0x1000, - 0x565234afe000, 0x565235def000, 0x12F1000, - 0x565235e10000, 0x7f36d4bfd000, 0x28E49EDED000, - }; - - /* - * req_range consists of 4 values. - * 1. min index - * 2. max index - * 3. size - * 4. number that should be returned. - * 5. return value - */ - unsigned long req_range[] = { - 0x565234af9000, /* Min */ - 0x7fff58791000, /* Max */ - 0x1000, /* Size */ - 0x7fff5878d << 12, /* First rev hole of size 0x1000 */ - 0, /* Return value success. */ - - 0x0, /* Min */ - 0x565234AF1 << 12, /* Max */ - 0x3000, /* Size */ - 0x565234AEE << 12, /* max - 3. */ - 0, /* Return value success. */ - - 0x0, /* Min */ - -1, /* Max */ - 0x1000, /* Size */ - 562949953421311 << 12,/* First rev hole of size 0x1000 */ - 0, /* Return value success. */ - - 0x0, /* Min */ - 0x7F36D510A << 12, /* Max */ - 0x4000, /* Size */ - 0x7F36D5106 << 12, /* First rev hole of size 0x4000 */ - 0, /* Return value success. */ - - /* Ascend test. */ - 0x0, - 34148798629 << 12, - 19 << 12, - 34148797418 << 12, - 0x0, - - /* Too big test. */ - 0x0, - 18446744073709551615UL, - 562915594369134UL << 12, - 0x0, - -EBUSY, - - }; - - int i, range_count = ARRAY_SIZE(range); - int req_range_count = ARRAY_SIZE(req_range); - unsigned long min = 0; - - MA_STATE(mas, mt, 0, 0); - - mtree_store_range(mt, MTREE_ALLOC_MAX, ULONG_MAX, XA_ZERO_ENTRY, - GFP_KERNEL); -#define DEBUG_REV_RANGE 0 - for (i = 0; i < range_count; i += 2) { - /* Inclusive, Inclusive (with the -1) */ - -#if DEBUG_REV_RANGE - pr_debug("\t%s: Insert %lu-%lu\n", __func__, range[i] >> 12, - (range[i + 1] >> 12) - 1); -#endif - check_insert_range(mt, range[i] >> 12, (range[i + 1] >> 12) - 1, - xa_mk_value(range[i] >> 12), 0); - mt_validate(mt); - } - - - for (i = 0; i < ARRAY_SIZE(holes); i += 3) { -#if DEBUG_REV_RANGE - pr_debug("Search from %lu-%lu for gap %lu should be at %lu\n", - min, holes[i+1]>>12, holes[i+2]>>12, - holes[i] >> 12); -#endif - MT_BUG_ON(mt, mas_empty_area_rev(&mas, min, - holes[i+1] >> 12, - holes[i+2] >> 12)); -#if DEBUG_REV_RANGE - pr_debug("Found %lu %lu\n", mas.index, mas.last); - pr_debug("gap %lu %lu\n", (holes[i] >> 12), - (holes[i+1] >> 12)); -#endif - MT_BUG_ON(mt, mas.last + 1 != (holes[i+1] >> 12)); - MT_BUG_ON(mt, mas.index != (holes[i+1] >> 12) - (holes[i+2] >> 12)); - min = holes[i+1] >> 12; - mas_reset(&mas); - } - - for (i = 0; i < req_range_count; i += 5) { -#if DEBUG_REV_RANGE - pr_debug("\tReverse request between %lu-%lu size %lu, should get %lu\n", - req_range[i] >> 12, - (req_range[i + 1] >> 12) - 1, - req_range[i+2] >> 12, - req_range[i+3] >> 12); -#endif - check_mtree_alloc_rrange(mt, - req_range[i] >> 12, /* start */ - req_range[i+1] >> 12, /* end */ - req_range[i+2] >> 12, /* size */ - req_range[i+3] >> 12, /* expected address */ - req_range[i+4], /* expected return */ - xa_mk_value(req_range[i] >> 12)); /* pointer */ - mt_validate(mt); - } - - mt_set_non_kernel(1); - mtree_erase(mt, 34148798727); /* create a deleted range. */ - check_mtree_alloc_rrange(mt, 0, 34359052173, 210253414, - 34148798725, 0, mt); - - mtree_destroy(mt); -} - -static noinline void check_alloc_range(struct maple_tree *mt) -{ - /* - * Generated by: - * cat /proc/self/maps|awk '{print $1}'| - * awk -F "-" '{printf "0x%s, 0x%s, ", $1, $2}' - */ - - unsigned long range[] = { - /* Inclusive , Exclusive. */ - 0x565234af2000, 0x565234af4000, - 0x565234af4000, 0x565234af9000, - 0x565234af9000, 0x565234afb000, - 0x565234afc000, 0x565234afd000, - 0x565234afd000, 0x565234afe000, - 0x565235def000, 0x565235e10000, - 0x7f36d4bfd000, 0x7f36d4ee2000, - 0x7f36d4ee2000, 0x7f36d4f04000, - 0x7f36d4f04000, 0x7f36d504c000, - 0x7f36d504c000, 0x7f36d5098000, - 0x7f36d5098000, 0x7f36d5099000, - 0x7f36d5099000, 0x7f36d509d000, - 0x7f36d509d000, 0x7f36d509f000, - 0x7f36d509f000, 0x7f36d50a5000, - 0x7f36d50b9000, 0x7f36d50db000, - 0x7f36d50db000, 0x7f36d50dc000, - 0x7f36d50dc000, 0x7f36d50fa000, - 0x7f36d50fa000, 0x7f36d5102000, - 0x7f36d5102000, 0x7f36d5103000, - 0x7f36d5103000, 0x7f36d5104000, - 0x7f36d5104000, 0x7f36d5105000, - 0x7fff5876b000, 0x7fff5878d000, - 0x7fff5878e000, 0x7fff58791000, - 0x7fff58791000, 0x7fff58793000, - }; - unsigned long holes[] = { - /* Start of hole, end of hole, size of hole (+1) */ - 0x565234afb000, 0x565234afc000, 0x1000, - 0x565234afe000, 0x565235def000, 0x12F1000, - 0x565235e10000, 0x7f36d4bfd000, 0x28E49EDED000, - }; - - /* - * req_range consists of 4 values. - * 1. min index - * 2. max index - * 3. size - * 4. number that should be returned. - * 5. return value - */ - unsigned long req_range[] = { - 0x565234af9000, /* Min */ - 0x7fff58791000, /* Max */ - 0x1000, /* Size */ - 0x565234afb000, /* First hole in our data of size 1000. */ - 0, /* Return value success. */ - - 0x0, /* Min */ - 0x7fff58791000, /* Max */ - 0x1F00, /* Size */ - 0x0, /* First hole in our data of size 2000. */ - 0, /* Return value success. */ - - /* Test ascend. */ - 34148797436 << 12, /* Min */ - 0x7fff587AF000, /* Max */ - 0x3000, /* Size */ - 34148798629 << 12, /* Expected location */ - 0, /* Return value success. */ - - /* Test failing. */ - 34148798623 << 12, /* Min */ - 34148798683 << 12, /* Max */ - 0x15000, /* Size */ - 0, /* Expected location */ - -EBUSY, /* Return value failed. */ - - /* Test filling entire gap. */ - 34148798623 << 12, /* Min */ - 0x7fff587AF000, /* Max */ - 0x10000, /* Size */ - 34148798632 << 12, /* Expected location */ - 0, /* Return value success. */ - - /* Test walking off the end of root. */ - 0, /* Min */ - -1, /* Max */ - -1, /* Size */ - 0, /* Expected location */ - -EBUSY, /* Return value failure. */ - - /* Test looking for too large a hole across entire range. */ - 0, /* Min */ - -1, /* Max */ - 4503599618982063UL << 12, /* Size */ - 34359052178 << 12, /* Expected location */ - -EBUSY, /* Return failure. */ - }; - int i, range_count = ARRAY_SIZE(range); - int req_range_count = ARRAY_SIZE(req_range); - unsigned long min = 0x565234af2000; - - mtree_store_range(mt, MTREE_ALLOC_MAX, ULONG_MAX, XA_ZERO_ENTRY, - GFP_KERNEL); - for (i = 0; i < range_count; i += 2) { -#define DEBUG_ALLOC_RANGE 0 -#if DEBUG_ALLOC_RANGE - pr_debug("\tInsert %lu-%lu\n", range[i] >> 12, - (range[i + 1] >> 12) - 1); - mt_dump(mt); -#endif - check_insert_range(mt, range[i] >> 12, (range[i + 1] >> 12) - 1, - xa_mk_value(range[i] >> 12), 0); - mt_validate(mt); - } - - - MA_STATE(mas, mt, 0, 0); - - for (i = 0; i < ARRAY_SIZE(holes); i += 3) { - -#if DEBUG_ALLOC_RANGE - pr_debug("\tGet empty %lu-%lu size %lu (%lx-%lx)\n", min >> 12, - holes[i+1] >> 12, holes[i+2] >> 12, - min, holes[i+1]); -#endif - MT_BUG_ON(mt, mas_empty_area(&mas, min >> 12, - holes[i+1] >> 12, - holes[i+2] >> 12)); - MT_BUG_ON(mt, mas.index != holes[i] >> 12); - min = holes[i+1]; - mas_reset(&mas); - } - for (i = 0; i < req_range_count; i += 5) { -#if DEBUG_ALLOC_RANGE - pr_debug("\tTest %d: %lu-%lu size %lu expected %lu (%lu-%lu)\n", - i/5, req_range[i] >> 12, req_range[i + 1] >> 12, - req_range[i + 2] >> 12, req_range[i + 3] >> 12, - req_range[i], req_range[i+1]); -#endif - check_mtree_alloc_range(mt, - req_range[i] >> 12, /* start */ - req_range[i+1] >> 12, /* end */ - req_range[i+2] >> 12, /* size */ - req_range[i+3] >> 12, /* expected address */ - req_range[i+4], /* expected return */ - xa_mk_value(req_range[i] >> 12)); /* pointer */ - mt_validate(mt); -#if DEBUG_ALLOC_RANGE - mt_dump(mt); -#endif - } - - mtree_destroy(mt); -} - -static noinline void check_ranges(struct maple_tree *mt) -{ - int i, val, val2; - unsigned long r[] = { - 10, 15, - 20, 25, - 17, 22, /* Overlaps previous range. */ - 9, 1000, /* Huge. */ - 100, 200, - 45, 168, - 118, 128, - }; - - MT_BUG_ON(mt, !mtree_empty(mt)); - check_insert_range(mt, r[0], r[1], xa_mk_value(r[0]), 0); - check_insert_range(mt, r[2], r[3], xa_mk_value(r[2]), 0); - check_insert_range(mt, r[4], r[5], xa_mk_value(r[4]), -EEXIST); - MT_BUG_ON(mt, !mt_height(mt)); - /* Store */ - check_store_range(mt, r[4], r[5], xa_mk_value(r[4]), 0); - check_store_range(mt, r[6], r[7], xa_mk_value(r[6]), 0); - check_store_range(mt, r[8], r[9], xa_mk_value(r[8]), 0); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - MT_BUG_ON(mt, mt_height(mt)); - - check_seq(mt, 50, false); - mt_set_non_kernel(4); - check_store_range(mt, 5, 47, xa_mk_value(47), 0); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - - /* Create tree of 1-100 */ - check_seq(mt, 100, false); - /* Store 45-168 */ - mt_set_non_kernel(10); - check_store_range(mt, r[10], r[11], xa_mk_value(r[10]), 0); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - - /* Create tree of 1-200 */ - check_seq(mt, 200, false); - /* Store 45-168 */ - check_store_range(mt, r[10], r[11], xa_mk_value(r[10]), 0); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - - check_seq(mt, 30, false); - check_store_range(mt, 6, 18, xa_mk_value(6), 0); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - - /* Overwrite across multiple levels. */ - /* Create tree of 1-400 */ - check_seq(mt, 400, false); - mt_set_non_kernel(50); - /* Store 118-128 */ - check_store_range(mt, r[12], r[13], xa_mk_value(r[12]), 0); - mt_set_non_kernel(50); - mtree_test_erase(mt, 140); - mtree_test_erase(mt, 141); - mtree_test_erase(mt, 142); - mtree_test_erase(mt, 143); - mtree_test_erase(mt, 130); - mtree_test_erase(mt, 131); - mtree_test_erase(mt, 132); - mtree_test_erase(mt, 133); - mtree_test_erase(mt, 134); - mtree_test_erase(mt, 135); - check_load(mt, r[12], xa_mk_value(r[12])); - check_load(mt, r[13], xa_mk_value(r[12])); - check_load(mt, r[13] - 1, xa_mk_value(r[12])); - check_load(mt, r[13] + 1, xa_mk_value(r[13] + 1)); - check_load(mt, 135, NULL); - check_load(mt, 140, NULL); - mt_set_non_kernel(0); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - - - - /* Overwrite multiple levels at the end of the tree (slot 7) */ - mt_set_non_kernel(50); - check_seq(mt, 400, false); - check_store_range(mt, 353, 361, xa_mk_value(353), 0); - check_store_range(mt, 347, 352, xa_mk_value(347), 0); - - check_load(mt, 346, xa_mk_value(346)); - for (i = 347; i <= 352; i++) - check_load(mt, i, xa_mk_value(347)); - for (i = 353; i <= 361; i++) - check_load(mt, i, xa_mk_value(353)); - check_load(mt, 362, xa_mk_value(362)); - mt_set_non_kernel(0); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - - mt_set_non_kernel(50); - check_seq(mt, 400, false); - check_store_range(mt, 352, 364, NULL, 0); - check_store_range(mt, 351, 363, xa_mk_value(352), 0); - check_load(mt, 350, xa_mk_value(350)); - check_load(mt, 351, xa_mk_value(352)); - for (i = 352; i <= 363; i++) - check_load(mt, i, xa_mk_value(352)); - check_load(mt, 364, NULL); - check_load(mt, 365, xa_mk_value(365)); - mt_set_non_kernel(0); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - - mt_set_non_kernel(5); - check_seq(mt, 400, false); - check_store_range(mt, 352, 364, NULL, 0); - check_store_range(mt, 351, 364, xa_mk_value(352), 0); - check_load(mt, 350, xa_mk_value(350)); - check_load(mt, 351, xa_mk_value(352)); - for (i = 352; i <= 364; i++) - check_load(mt, i, xa_mk_value(352)); - check_load(mt, 365, xa_mk_value(365)); - mt_set_non_kernel(0); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - - - mt_set_non_kernel(50); - check_seq(mt, 400, false); - check_store_range(mt, 362, 367, xa_mk_value(362), 0); - check_store_range(mt, 353, 361, xa_mk_value(353), 0); - mt_set_non_kernel(0); - mt_validate(mt); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - /* - * Interesting cases: - * 1. Overwrite the end of a node and end in the first entry of the next - * node. - * 2. Split a single range - * 3. Overwrite the start of a range - * 4. Overwrite the end of a range - * 5. Overwrite the entire range - * 6. Overwrite a range that causes multiple parent nodes to be - * combined - * 7. Overwrite a range that causes multiple parent nodes and part of - * root to be combined - * 8. Overwrite the whole tree - * 9. Try to overwrite the zero entry of an alloc tree. - * 10. Write a range larger than a nodes current pivot - */ - - mt_set_non_kernel(50); - for (i = 0; i <= 500; i++) { - val = i*5; - val2 = (i+1)*5; - check_store_range(mt, val, val2, xa_mk_value(val), 0); - } - check_store_range(mt, 2400, 2400, xa_mk_value(2400), 0); - check_store_range(mt, 2411, 2411, xa_mk_value(2411), 0); - check_store_range(mt, 2412, 2412, xa_mk_value(2412), 0); - check_store_range(mt, 2396, 2400, xa_mk_value(4052020), 0); - check_store_range(mt, 2402, 2402, xa_mk_value(2402), 0); - mtree_destroy(mt); - mt_set_non_kernel(0); - - mt_set_non_kernel(50); - for (i = 0; i <= 500; i++) { - val = i*5; - val2 = (i+1)*5; - check_store_range(mt, val, val2, xa_mk_value(val), 0); - } - check_store_range(mt, 2422, 2422, xa_mk_value(2422), 0); - check_store_range(mt, 2424, 2424, xa_mk_value(2424), 0); - check_store_range(mt, 2425, 2425, xa_mk_value(2), 0); - check_store_range(mt, 2460, 2470, NULL, 0); - check_store_range(mt, 2435, 2460, xa_mk_value(2435), 0); - check_store_range(mt, 2461, 2470, xa_mk_value(2461), 0); - mt_set_non_kernel(0); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - - /* Test rebalance gaps */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - mt_set_non_kernel(50); - for (i = 0; i <= 50; i++) { - val = i*10; - val2 = (i+1)*10; - check_store_range(mt, val, val2, xa_mk_value(val), 0); - } - check_store_range(mt, 161, 161, xa_mk_value(161), 0); - check_store_range(mt, 162, 162, xa_mk_value(162), 0); - check_store_range(mt, 163, 163, xa_mk_value(163), 0); - check_store_range(mt, 240, 249, NULL, 0); - mtree_erase(mt, 200); - mtree_erase(mt, 210); - mtree_erase(mt, 220); - mtree_erase(mt, 230); - mt_set_non_kernel(0); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= 500; i++) { - val = i*10; - val2 = (i+1)*10; - check_store_range(mt, val, val2, xa_mk_value(val), 0); - } - check_store_range(mt, 4600, 4959, xa_mk_value(1), 0); - mt_validate(mt); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= 500; i++) { - val = i*10; - val2 = (i+1)*10; - check_store_range(mt, val, val2, xa_mk_value(val), 0); - } - check_store_range(mt, 4811, 4811, xa_mk_value(4811), 0); - check_store_range(mt, 4812, 4812, xa_mk_value(4812), 0); - check_store_range(mt, 4861, 4861, xa_mk_value(4861), 0); - check_store_range(mt, 4862, 4862, xa_mk_value(4862), 0); - check_store_range(mt, 4842, 4849, NULL, 0); - mt_validate(mt); - MT_BUG_ON(mt, !mt_height(mt)); - mtree_destroy(mt); - - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= 1300; i++) { - val = i*10; - val2 = (i+1)*10; - check_store_range(mt, val, val2, xa_mk_value(val), 0); - MT_BUG_ON(mt, mt_height(mt) >= 4); - } - /* Cause a 3 child split all the way up the tree. */ - for (i = 5; i < 215; i += 10) - check_store_range(mt, 11450 + i, 11450 + i + 1, NULL, 0); - for (i = 5; i < 65; i += 10) - check_store_range(mt, 11770 + i, 11770 + i + 1, NULL, 0); - - MT_BUG_ON(mt, mt_height(mt) >= 4); - for (i = 5; i < 45; i += 10) - check_store_range(mt, 11700 + i, 11700 + i + 1, NULL, 0); - MT_BUG_ON(mt, mt_height(mt) < 4); - mtree_destroy(mt); - - - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= 1200; i++) { - val = i*10; - val2 = (i+1)*10; - check_store_range(mt, val, val2, xa_mk_value(val), 0); - MT_BUG_ON(mt, mt_height(mt) >= 4); - } - /* Fill parents and leaves before split. */ - for (i = 5; i < 455; i += 10) - check_store_range(mt, 7800 + i, 7800 + i + 1, NULL, 0); - - for (i = 1; i < 16; i++) - check_store_range(mt, 8185 + i, 8185 + i + 1, - xa_mk_value(8185+i), 0); - MT_BUG_ON(mt, mt_height(mt) >= 4); - /* triple split across multiple levels. */ - check_store_range(mt, 8184, 8184, xa_mk_value(8184), 0); - MT_BUG_ON(mt, mt_height(mt) != 4); -} - -static noinline void check_next_entry(struct maple_tree *mt) -{ - void *entry = NULL; - unsigned long limit = 30, i = 0; - - MT_BUG_ON(mt, !mtree_empty(mt)); - MA_STATE(mas, mt, i, i); - - check_seq(mt, limit, false); - rcu_read_lock(); - - /* Check the first one and get ma_state in the correct state. */ - MT_BUG_ON(mt, mas_walk(&mas) != xa_mk_value(i++)); - for ( ; i <= limit + 1; i++) { - entry = mas_next(&mas, limit); - if (i > limit) - MT_BUG_ON(mt, entry != NULL); - else - MT_BUG_ON(mt, xa_mk_value(i) != entry); - } - rcu_read_unlock(); - mtree_destroy(mt); -} - -static noinline void check_prev_entry(struct maple_tree *mt) -{ - unsigned long index = 16; - void *value; - int i; - - MA_STATE(mas, mt, index, index); - - MT_BUG_ON(mt, !mtree_empty(mt)); - check_seq(mt, 30, false); - - rcu_read_lock(); - value = mas_find(&mas, ULONG_MAX); - MT_BUG_ON(mt, value != xa_mk_value(index)); - value = mas_prev(&mas, 0); - MT_BUG_ON(mt, value != xa_mk_value(index - 1)); - rcu_read_unlock(); - mtree_destroy(mt); - - /* Check limits on prev */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - mas_lock(&mas); - for (i = 0; i <= index; i++) { - mas_set_range(&mas, i*10, i*10+5); - mas_store_gfp(&mas, xa_mk_value(i), GFP_KERNEL); - } - - mas_set(&mas, 20); - value = mas_walk(&mas); - MT_BUG_ON(mt, value != xa_mk_value(2)); - - value = mas_prev(&mas, 19); - MT_BUG_ON(mt, value != NULL); - - mas_set(&mas, 80); - value = mas_walk(&mas); - MT_BUG_ON(mt, value != xa_mk_value(8)); - - value = mas_prev(&mas, 76); - MT_BUG_ON(mt, value != NULL); - - mas_unlock(&mas); -} - -static noinline void check_root_expand(struct maple_tree *mt) -{ - MA_STATE(mas, mt, 0, 0); - void *ptr; - - - mas_lock(&mas); - mas_set(&mas, 3); - ptr = mas_walk(&mas); - MT_BUG_ON(mt, ptr != NULL); - MT_BUG_ON(mt, mas.index != 0); - MT_BUG_ON(mt, mas.last != ULONG_MAX); - - ptr = &check_prev_entry; - mas_set(&mas, 1); - mas_store_gfp(&mas, ptr, GFP_KERNEL); - - mas_set(&mas, 0); - ptr = mas_walk(&mas); - MT_BUG_ON(mt, ptr != NULL); - - mas_set(&mas, 1); - ptr = mas_walk(&mas); - MT_BUG_ON(mt, ptr != &check_prev_entry); - - mas_set(&mas, 2); - ptr = mas_walk(&mas); - MT_BUG_ON(mt, ptr != NULL); - mas_unlock(&mas); - mtree_destroy(mt); - - - mt_init_flags(mt, 0); - mas_lock(&mas); - - mas_set(&mas, 0); - ptr = &check_prev_entry; - mas_store_gfp(&mas, ptr, GFP_KERNEL); - - mas_set(&mas, 5); - ptr = mas_walk(&mas); - MT_BUG_ON(mt, ptr != NULL); - MT_BUG_ON(mt, mas.index != 1); - MT_BUG_ON(mt, mas.last != ULONG_MAX); - - mas_set_range(&mas, 0, 100); - ptr = mas_walk(&mas); - MT_BUG_ON(mt, ptr != &check_prev_entry); - MT_BUG_ON(mt, mas.last != 0); - mas_unlock(&mas); - mtree_destroy(mt); - - mt_init_flags(mt, 0); - mas_lock(&mas); - - mas_set(&mas, 0); - ptr = (void *)((unsigned long) check_prev_entry | 1UL); - mas_store_gfp(&mas, ptr, GFP_KERNEL); - ptr = mas_next(&mas, ULONG_MAX); - MT_BUG_ON(mt, ptr != NULL); - MT_BUG_ON(mt, (mas.index != 1) && (mas.last != ULONG_MAX)); - - mas_set(&mas, 1); - ptr = mas_prev(&mas, 0); - MT_BUG_ON(mt, (mas.index != 0) && (mas.last != 0)); - MT_BUG_ON(mt, ptr != (void *)((unsigned long) check_prev_entry | 1UL)); - - mas_unlock(&mas); - - mtree_destroy(mt); - - mt_init_flags(mt, 0); - mas_lock(&mas); - mas_set(&mas, 0); - ptr = (void *)((unsigned long) check_prev_entry | 2UL); - mas_store_gfp(&mas, ptr, GFP_KERNEL); - ptr = mas_next(&mas, ULONG_MAX); - MT_BUG_ON(mt, ptr != NULL); - MT_BUG_ON(mt, (mas.index != 1) && (mas.last != ULONG_MAX)); - - mas_set(&mas, 1); - ptr = mas_prev(&mas, 0); - MT_BUG_ON(mt, (mas.index != 0) && (mas.last != 0)); - MT_BUG_ON(mt, ptr != (void *)((unsigned long) check_prev_entry | 2UL)); - - - mas_unlock(&mas); -} - -static noinline void check_prealloc(struct maple_tree *mt) -{ - unsigned long i, max = 100; - unsigned long allocated; - unsigned char height; - struct maple_node *mn; - void *ptr = check_prealloc; - MA_STATE(mas, mt, 10, 20); - - mt_set_non_kernel(1000); - for (i = 0; i <= max; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - allocated = mas_allocated(&mas); - height = mas_mt_height(&mas); - MT_BUG_ON(mt, allocated == 0); - MT_BUG_ON(mt, allocated != 1 + height * 3); - mas_destroy(&mas); - allocated = mas_allocated(&mas); - MT_BUG_ON(mt, allocated != 0); - - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - allocated = mas_allocated(&mas); - height = mas_mt_height(&mas); - MT_BUG_ON(mt, allocated == 0); - MT_BUG_ON(mt, allocated != 1 + height * 3); - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - mas_destroy(&mas); - allocated = mas_allocated(&mas); - MT_BUG_ON(mt, allocated != 0); - - - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - allocated = mas_allocated(&mas); - height = mas_mt_height(&mas); - MT_BUG_ON(mt, allocated == 0); - MT_BUG_ON(mt, allocated != 1 + height * 3); - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, mas_allocated(&mas) != allocated - 1); - ma_free_rcu(mn); - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - mas_destroy(&mas); - allocated = mas_allocated(&mas); - MT_BUG_ON(mt, allocated != 0); - - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - allocated = mas_allocated(&mas); - height = mas_mt_height(&mas); - MT_BUG_ON(mt, allocated == 0); - MT_BUG_ON(mt, allocated != 1 + height * 3); - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, mas_allocated(&mas) != allocated - 1); - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - mas_destroy(&mas); - allocated = mas_allocated(&mas); - MT_BUG_ON(mt, allocated != 0); - ma_free_rcu(mn); - - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - allocated = mas_allocated(&mas); - height = mas_mt_height(&mas); - MT_BUG_ON(mt, allocated == 0); - MT_BUG_ON(mt, allocated != 1 + height * 3); - mn = mas_pop_node(&mas); - MT_BUG_ON(mt, mas_allocated(&mas) != allocated - 1); - mas_push_node(&mas, mn); - MT_BUG_ON(mt, mas_allocated(&mas) != allocated); - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - mas_destroy(&mas); - allocated = mas_allocated(&mas); - MT_BUG_ON(mt, allocated != 0); - - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - allocated = mas_allocated(&mas); - height = mas_mt_height(&mas); - MT_BUG_ON(mt, allocated == 0); - MT_BUG_ON(mt, allocated != 1 + height * 3); - mas_store_prealloc(&mas, ptr); - MT_BUG_ON(mt, mas_allocated(&mas) != 0); - - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - allocated = mas_allocated(&mas); - height = mas_mt_height(&mas); - MT_BUG_ON(mt, allocated == 0); - MT_BUG_ON(mt, allocated != 1 + height * 3); - mas_store_prealloc(&mas, ptr); - MT_BUG_ON(mt, mas_allocated(&mas) != 0); - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - allocated = mas_allocated(&mas); - height = mas_mt_height(&mas); - MT_BUG_ON(mt, allocated == 0); - MT_BUG_ON(mt, allocated != 1 + height * 3); - mas_store_prealloc(&mas, ptr); - - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - allocated = mas_allocated(&mas); - height = mas_mt_height(&mas); - MT_BUG_ON(mt, allocated == 0); - MT_BUG_ON(mt, allocated != 1 + height * 3); - mas_store_prealloc(&mas, ptr); - MT_BUG_ON(mt, mas_allocated(&mas) != 0); - mt_set_non_kernel(1); - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL & GFP_NOWAIT) == 0); - allocated = mas_allocated(&mas); - height = mas_mt_height(&mas); - MT_BUG_ON(mt, allocated != 0); - mas_destroy(&mas); - - - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); - allocated = mas_allocated(&mas); - height = mas_mt_height(&mas); - MT_BUG_ON(mt, allocated == 0); - MT_BUG_ON(mt, allocated != 1 + height * 3); - mas_store_prealloc(&mas, ptr); - MT_BUG_ON(mt, mas_allocated(&mas) != 0); - mt_set_non_kernel(1); - MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL & GFP_NOWAIT) == 0); - allocated = mas_allocated(&mas); - height = mas_mt_height(&mas); - MT_BUG_ON(mt, allocated != 0); -} - -static noinline void check_spanning_write(struct maple_tree *mt) -{ - unsigned long i, max = 5000; - MA_STATE(mas, mt, 1200, 2380); - - for (i = 0; i <= max; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - - mtree_lock(mt); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - mas_set(&mas, 1205); - MT_BUG_ON(mt, mas_walk(&mas) != NULL); - mtree_unlock(mt); - mtree_destroy(mt); - - for (i = 1; i <= max; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - - mtree_lock(mt); - mas_set_range(&mas, 9, 50006); /* Will expand to 0 - ULONG_MAX */ - mas_store_gfp(&mas, NULL, GFP_KERNEL); - mas_set(&mas, 1205); - MT_BUG_ON(mt, mas_walk(&mas) != NULL); - mtree_unlock(mt); - mt_validate(mt); - mtree_destroy(mt); - - /* Test spanning store that requires a right cousin rebalance */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= max; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - - mas_set_range(&mas, 0, 12900); /* Spans more than 2 levels */ - mtree_lock(mt); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - mas_set(&mas, 1205); - MT_BUG_ON(mt, mas_walk(&mas) != NULL); - mtree_unlock(mt); - mtree_destroy(mt); - - /* Test non-alloc tree spanning store */ - mt_init_flags(mt, 0); - for (i = 0; i <= max; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - - mas_set_range(&mas, 0, 300); - mtree_lock(mt); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - mas_set(&mas, 15); - MT_BUG_ON(mt, mas_walk(&mas) != NULL); - mtree_unlock(mt); - mtree_destroy(mt); - - /* Test spanning store that requires a right sibling rebalance */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= max; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - - mas_set_range(&mas, 0, 12865); - mtree_lock(mt); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - mas_set(&mas, 15); - MT_BUG_ON(mt, mas_walk(&mas) != NULL); - mtree_unlock(mt); - mtree_destroy(mt); - - /* Test spanning store that requires a left sibling rebalance */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= max; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - - mas_set_range(&mas, 90, 13665); - mtree_lock(mt); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - mas_set(&mas, 95); - MT_BUG_ON(mt, mas_walk(&mas) != NULL); - mtree_unlock(mt); - mtree_destroy(mt); - - /* Test spanning store that requires a left cousin rebalance */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= max; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - - mas_set_range(&mas, 46805, 49995); - mtree_lock(mt); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - mas_set(&mas, 46815); - MT_BUG_ON(mt, mas_walk(&mas) != NULL); - mtree_unlock(mt); - mtree_destroy(mt); - - /* - * Test spanning store that requires a left cousin rebalance all the way - * to root - */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= max; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - - mas_set_range(&mas, 32395, 49995); - mtree_lock(mt); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - mas_set(&mas, 46815); - MT_BUG_ON(mt, mas_walk(&mas) != NULL); - mtree_unlock(mt); - mtree_destroy(mt); - - /* - * Test spanning store that requires a right cousin rebalance all the - * way to root - */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= max; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - mas_set_range(&mas, 38875, 43190); - mtree_lock(mt); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - mas_set(&mas, 38900); - MT_BUG_ON(mt, mas_walk(&mas) != NULL); - mtree_unlock(mt); - mtree_destroy(mt); - - /* Test spanning store ending at full node (depth 2)*/ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= max; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - mtree_lock(mt); - mas_set(&mas, 47606); - mas_store_gfp(&mas, check_spanning_write, GFP_KERNEL); - mas_set(&mas, 47607); - mas_store_gfp(&mas, check_spanning_write, GFP_KERNEL); - mas_set(&mas, 47608); - mas_store_gfp(&mas, check_spanning_write, GFP_KERNEL); - mas_set(&mas, 47609); - mas_store_gfp(&mas, check_spanning_write, GFP_KERNEL); - /* Ensure the parent node is full */ - mas_ascend(&mas); - MT_BUG_ON(mt, (mas_data_end(&mas)) != mt_slot_count(mas.node) - 1); - mas_set_range(&mas, 11516, 48940); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - mtree_unlock(mt); - mtree_destroy(mt); - - /* Test spanning write with many levels of no siblings */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= max; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - mas_set_range(&mas, 43200, 49999); - mtree_lock(mt); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - mas_set(&mas, 43200); - MT_BUG_ON(mt, mas_walk(&mas) != NULL); - mtree_unlock(mt); - mtree_destroy(mt); - - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= 100; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - - mtree_lock(mt); - mas_set_range(&mas, 76, 875); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - mtree_unlock(mt); -} - -static noinline void check_null_expand(struct maple_tree *mt) -{ - unsigned long i, max = 100; - unsigned char data_end; - MA_STATE(mas, mt, 959, 959); - - for (i = 0; i <= max; i++) - mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); - /* Test expanding null at start. */ - mas_walk(&mas); - data_end = mas_data_end(&mas); - mas_set_range(&mas, 959, 963); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - MT_BUG_ON(mt, mtree_load(mt, 963) != NULL); - MT_BUG_ON(mt, data_end != mas_data_end(&mas)); - - /* Test expanding null at end. */ - mas_set(&mas, 880); - mas_walk(&mas); - data_end = mas_data_end(&mas); - mas_set_range(&mas, 884, 887); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - MT_BUG_ON(mt, mtree_load(mt, 884) != NULL); - MT_BUG_ON(mt, mtree_load(mt, 889) != NULL); - MT_BUG_ON(mt, data_end != mas_data_end(&mas)); - - /* Test expanding null at start and end. */ - mas_set(&mas, 890); - mas_walk(&mas); - data_end = mas_data_end(&mas); - mas_set_range(&mas, 900, 905); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - MT_BUG_ON(mt, mtree_load(mt, 899) != NULL); - MT_BUG_ON(mt, mtree_load(mt, 900) != NULL); - MT_BUG_ON(mt, mtree_load(mt, 905) != NULL); - MT_BUG_ON(mt, mtree_load(mt, 906) != NULL); - MT_BUG_ON(mt, data_end - 2 != mas_data_end(&mas)); - - /* Test expanding null across multiple slots. */ - mas_set(&mas, 800); - mas_walk(&mas); - data_end = mas_data_end(&mas); - mas_set_range(&mas, 810, 825); - mas_store_gfp(&mas, NULL, GFP_KERNEL); - MT_BUG_ON(mt, mtree_load(mt, 809) != NULL); - MT_BUG_ON(mt, mtree_load(mt, 810) != NULL); - MT_BUG_ON(mt, mtree_load(mt, 825) != NULL); - MT_BUG_ON(mt, mtree_load(mt, 826) != NULL); - MT_BUG_ON(mt, data_end - 4 != mas_data_end(&mas)); -} - -static noinline void check_gap_combining(struct maple_tree *mt) -{ - struct maple_enode *mn1, *mn2; - void *entry; - - unsigned long seq100[] = { - /* 0-5 */ - 74, 75, 76, - 50, 100, 2, - - /* 6-12 */ - 44, 45, 46, 43, - 20, 50, 3, - - /* 13-20*/ - 80, 81, 82, - 76, 2, 79, 85, 4, - }; - unsigned long seq2000[] = { - 1152, 1151, - 1100, 1200, 2, - }; - unsigned long seq400[] = { - 286, 318, - 256, 260, 266, 270, 275, 280, 290, 398, - 286, 310, - }; - - unsigned long index = seq100[0]; - - MA_STATE(mas, mt, index, index); - - MT_BUG_ON(mt, !mtree_empty(mt)); - check_seq(mt, 100, false); /* create 100 singletons. */ - - mt_set_non_kernel(1); - mtree_test_erase(mt, seq100[2]); - check_load(mt, seq100[2], NULL); - mtree_test_erase(mt, seq100[1]); - check_load(mt, seq100[1], NULL); - - rcu_read_lock(); - entry = mas_find(&mas, ULONG_MAX); - MT_BUG_ON(mt, entry != xa_mk_value(index)); - mn1 = mas.node; - mas_next(&mas, ULONG_MAX); - entry = mas_next(&mas, ULONG_MAX); - MT_BUG_ON(mt, entry != xa_mk_value(index + 4)); - mn2 = mas.node; - MT_BUG_ON(mt, mn1 == mn2); /* test the test. */ - - /* - * At this point, there is a gap of 2 at index + 1 between seq100[3] and - * seq100[4]. Search for the gap. - */ - mt_set_non_kernel(1); - mas_reset(&mas); - MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq100[3], seq100[4], - seq100[5])); - MT_BUG_ON(mt, mas.index != index + 1); - rcu_read_unlock(); - - mtree_test_erase(mt, seq100[6]); - check_load(mt, seq100[6], NULL); - mtree_test_erase(mt, seq100[7]); - check_load(mt, seq100[7], NULL); - mtree_test_erase(mt, seq100[8]); - index = seq100[9]; - - rcu_read_lock(); - mas.index = index; - mas.last = index; - mas_reset(&mas); - entry = mas_find(&mas, ULONG_MAX); - MT_BUG_ON(mt, entry != xa_mk_value(index)); - mn1 = mas.node; - entry = mas_next(&mas, ULONG_MAX); - MT_BUG_ON(mt, entry != xa_mk_value(index + 4)); - mas_next(&mas, ULONG_MAX); /* go to the next entry. */ - mn2 = mas.node; - MT_BUG_ON(mt, mn1 == mn2); /* test the next entry is in the next node. */ - - /* - * At this point, there is a gap of 3 at seq100[6]. Find it by - * searching 20 - 50 for size 3. - */ - mas_reset(&mas); - MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq100[10], seq100[11], - seq100[12])); - MT_BUG_ON(mt, mas.index != seq100[6]); - rcu_read_unlock(); - - mt_set_non_kernel(1); - mtree_store(mt, seq100[13], NULL, GFP_KERNEL); - check_load(mt, seq100[13], NULL); - check_load(mt, seq100[14], xa_mk_value(seq100[14])); - mtree_store(mt, seq100[14], NULL, GFP_KERNEL); - check_load(mt, seq100[13], NULL); - check_load(mt, seq100[14], NULL); - - mas_reset(&mas); - rcu_read_lock(); - MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq100[16], seq100[15], - seq100[17])); - MT_BUG_ON(mt, mas.index != seq100[13]); - mt_validate(mt); - rcu_read_unlock(); - - /* - * *DEPRECATED: no retries anymore* Test retry entry in the start of a - * gap. - */ - mt_set_non_kernel(2); - mtree_test_store_range(mt, seq100[18], seq100[14], NULL); - mtree_test_erase(mt, seq100[15]); - mas_reset(&mas); - rcu_read_lock(); - MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq100[16], seq100[19], - seq100[20])); - rcu_read_unlock(); - MT_BUG_ON(mt, mas.index != seq100[18]); - mt_validate(mt); - mtree_destroy(mt); - - /* seq 2000 tests are for multi-level tree gaps */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_seq(mt, 2000, false); - mt_set_non_kernel(1); - mtree_test_erase(mt, seq2000[0]); - mtree_test_erase(mt, seq2000[1]); - - mt_set_non_kernel(2); - mas_reset(&mas); - rcu_read_lock(); - MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq2000[2], seq2000[3], - seq2000[4])); - MT_BUG_ON(mt, mas.index != seq2000[1]); - rcu_read_unlock(); - mt_validate(mt); - mtree_destroy(mt); - - /* seq 400 tests rebalancing over two levels. */ - mt_set_non_kernel(99); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_seq(mt, 400, false); - mtree_test_store_range(mt, seq400[0], seq400[1], NULL); - mt_set_non_kernel(0); + for (i = 0; i <= 500; i++) { + val = i*10; + val2 = (i+1)*10; + check_store_range(mt, val, val2, xa_mk_value(val), 0); + } + check_store_range(mt, 4600, 4959, xa_mk_value(1), 0); + mt_validate(mt); + MT_BUG_ON(mt, !mt_height(mt)); mtree_destroy(mt); mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - check_seq(mt, 400, false); - mt_set_non_kernel(50); - mtree_test_store_range(mt, seq400[2], seq400[9], - xa_mk_value(seq400[2])); - mtree_test_store_range(mt, seq400[3], seq400[9], - xa_mk_value(seq400[3])); - mtree_test_store_range(mt, seq400[4], seq400[9], - xa_mk_value(seq400[4])); - mtree_test_store_range(mt, seq400[5], seq400[9], - xa_mk_value(seq400[5])); - mtree_test_store_range(mt, seq400[0], seq400[9], - xa_mk_value(seq400[0])); - mtree_test_store_range(mt, seq400[6], seq400[9], - xa_mk_value(seq400[6])); - mtree_test_store_range(mt, seq400[7], seq400[9], - xa_mk_value(seq400[7])); - mtree_test_store_range(mt, seq400[8], seq400[9], - xa_mk_value(seq400[8])); - mtree_test_store_range(mt, seq400[10], seq400[11], - xa_mk_value(seq400[10])); - mt_validate(mt); - mt_set_non_kernel(0); - mtree_destroy(mt); -} -static noinline void check_node_overwrite(struct maple_tree *mt) -{ - int i, max = 4000; - - for (i = 0; i < max; i++) - mtree_test_store_range(mt, i*100, i*100 + 50, xa_mk_value(i*100)); - - mtree_test_store_range(mt, 319951, 367950, NULL); - /*mt_dump(mt); */ - mt_validate(mt); -} - -static void mas_dfs_preorder(struct ma_state *mas) -{ - - struct maple_enode *prev; - unsigned char end, slot = 0; - - if (mas_is_start(mas)) { - mas_start(mas); - return; - } - - if (mte_is_leaf(mas->node) && mte_is_root(mas->node)) - goto done; - -walk_up: - end = mas_data_end(mas); - if (mte_is_leaf(mas->node) || - (slot > end)) { - if (mte_is_root(mas->node)) - goto done; - - slot = mte_parent_slot(mas->node) + 1; - mas_ascend(mas); - goto walk_up; - } - - prev = mas->node; - mas->node = mas_get_slot(mas, slot); - if (!mas->node || slot > end) { - if (mte_is_root(prev)) - goto done; - - mas->node = prev; - slot = mte_parent_slot(mas->node) + 1; - mas_ascend(mas); - goto walk_up; + for (i = 0; i <= 500; i++) { + val = i*10; + val2 = (i+1)*10; + check_store_range(mt, val, val2, xa_mk_value(val), 0); } - - return; -done: - mas->node = MAS_NONE; -} - - -static void check_dfs_preorder(struct maple_tree *mt) -{ - unsigned long count = 0, max = 1000; - - MA_STATE(mas, mt, 0, 0); - - check_seq(mt, max, false); - do { - count++; - mas_dfs_preorder(&mas); - } while (!mas_is_none(&mas)); - MT_BUG_ON(mt, count != 74); + check_store_range(mt, 4811, 4811, xa_mk_value(4811), 0); + check_store_range(mt, 4812, 4812, xa_mk_value(4812), 0); + check_store_range(mt, 4861, 4861, xa_mk_value(4861), 0); + check_store_range(mt, 4862, 4862, xa_mk_value(4862), 0); + check_store_range(mt, 4842, 4849, NULL, 0); + mt_validate(mt); + MT_BUG_ON(mt, !mt_height(mt)); mtree_destroy(mt); mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - mas_reset(&mas); - count = 0; - check_seq(mt, max, false); - do { - count++; - mas_dfs_preorder(&mas); - } while (!mas_is_none(&mas)); - /*printk("count %lu\n", count); */ - MT_BUG_ON(mt, count != 77); - mtree_destroy(mt); + for (i = 0; i <= 1300; i++) { + val = i*10; + val2 = (i+1)*10; + check_store_range(mt, val, val2, xa_mk_value(val), 0); + MT_BUG_ON(mt, mt_height(mt) >= 4); + } + /* Cause a 3 child split all the way up the tree. */ + for (i = 5; i < 215; i += 10) + check_store_range(mt, 11450 + i, 11450 + i + 1, NULL, 0); + for (i = 5; i < 65; i += 10) + check_store_range(mt, 11770 + i, 11770 + i + 1, NULL, 0); - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - mas_reset(&mas); - count = 0; - check_rev_seq(mt, max, false); - do { - count++; - mas_dfs_preorder(&mas); - } while (!mas_is_none(&mas)); - /*printk("count %lu\n", count); */ - MT_BUG_ON(mt, count != 77); + MT_BUG_ON(mt, mt_height(mt) >= 4); + for (i = 5; i < 45; i += 10) + check_store_range(mt, 11700 + i, 11700 + i + 1, NULL, 0); + if (!MAPLE_32BIT) + MT_BUG_ON(mt, mt_height(mt) < 4); mtree_destroy(mt); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - mas_reset(&mas); - mt_zero_nr_tallocated(); - mt_set_non_kernel(200); - mas_expected_entries(&mas, max); - for (count = 0; count <= max; count++) { - mas.index = mas.last = count; - mas_store(&mas, xa_mk_value(count)); - MT_BUG_ON(mt, mas_is_err(&mas)); + for (i = 0; i <= 1200; i++) { + val = i*10; + val2 = (i+1)*10; + check_store_range(mt, val, val2, xa_mk_value(val), 0); + MT_BUG_ON(mt, mt_height(mt) >= 4); } - mas_destroy(&mas); - rcu_barrier(); - /* - * pr_info(" ->seq test of 0-%lu %luK in %d active (%d total)\n", - * max, mt_get_alloc_size()/1024, mt_nr_allocated(), - * mt_nr_tallocated()); - */ + /* Fill parents and leaves before split. */ + for (i = 5; i < 455; i += 10) + check_store_range(mt, 7800 + i, 7800 + i + 1, NULL, 0); + for (i = 1; i < 16; i++) + check_store_range(mt, 8185 + i, 8185 + i + 1, + xa_mk_value(8185+i), 0); + MT_BUG_ON(mt, mt_height(mt) >= 4); + /* triple split across multiple levels. */ + check_store_range(mt, 8184, 8184, xa_mk_value(8184), 0); + if (!MAPLE_32BIT) + MT_BUG_ON(mt, mt_height(mt) != 4); } -#if defined(BENCH_SLOT_STORE) -static noinline void bench_slot_store(struct maple_tree *mt) +static noinline void check_next_entry(struct maple_tree *mt) { - int i, brk = 105, max = 1040, brk_start = 100, count = 20000000; + void *entry = NULL; + unsigned long limit = 30, i = 0; + MA_STATE(mas, mt, i, i); - for (i = 0; i < max; i += 10) - mtree_store_range(mt, i, i + 5, xa_mk_value(i), GFP_KERNEL); + MT_BUG_ON(mt, !mtree_empty(mt)); - for (i = 0; i < count; i++) { - mtree_store_range(mt, brk, brk, NULL, GFP_KERNEL); - mtree_store_range(mt, brk_start, brk, xa_mk_value(brk), - GFP_KERNEL); + check_seq(mt, limit, false); + rcu_read_lock(); + + /* Check the first one and get ma_state in the correct state. */ + MT_BUG_ON(mt, mas_walk(&mas) != xa_mk_value(i++)); + for ( ; i <= limit + 1; i++) { + entry = mas_next(&mas, limit); + if (i > limit) + MT_BUG_ON(mt, entry != NULL); + else + MT_BUG_ON(mt, xa_mk_value(i) != entry); } + rcu_read_unlock(); + mtree_destroy(mt); } -#endif -#if defined(BENCH_NODE_STORE) -static noinline void bench_node_store(struct maple_tree *mt) +static noinline void check_prev_entry(struct maple_tree *mt) { - int i, overwrite = 76, max = 240, count = 20000000; - - for (i = 0; i < max; i += 10) - mtree_store_range(mt, i, i + 5, xa_mk_value(i), GFP_KERNEL); + unsigned long index = 16; + void *value; + int i; - for (i = 0; i < count; i++) { - mtree_store_range(mt, overwrite, overwrite + 15, - xa_mk_value(overwrite), GFP_KERNEL); + MA_STATE(mas, mt, index, index); - overwrite += 5; - if (overwrite >= 135) - overwrite = 76; - } -} -#endif + MT_BUG_ON(mt, !mtree_empty(mt)); + check_seq(mt, 30, false); -#if defined(BENCH_AWALK) -static noinline void bench_awalk(struct maple_tree *mt) -{ - int i, max = 2500, count = 50000000; - MA_STATE(mas, mt, 1470, 1470); + rcu_read_lock(); + value = mas_find(&mas, ULONG_MAX); + MT_BUG_ON(mt, value != xa_mk_value(index)); + value = mas_prev(&mas, 0); + MT_BUG_ON(mt, value != xa_mk_value(index - 1)); + rcu_read_unlock(); + mtree_destroy(mt); - for (i = 0; i < max; i += 10) - mtree_store_range(mt, i, i + 5, xa_mk_value(i), GFP_KERNEL); + /* Check limits on prev */ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + mas_lock(&mas); + for (i = 0; i <= index; i++) { + mas_set_range(&mas, i*10, i*10+5); + mas_store_gfp(&mas, xa_mk_value(i), GFP_KERNEL); + } - mtree_store_range(mt, 1470, 1475, NULL, GFP_KERNEL); + mas_set(&mas, 20); + value = mas_walk(&mas); + MT_BUG_ON(mt, value != xa_mk_value(2)); - for (i = 0; i < count; i++) { - mas_empty_area_rev(&mas, 0, 2000, 10); - mas_reset(&mas); - } -} -#endif -#if defined(BENCH_WALK) -static noinline void bench_walk(struct maple_tree *mt) -{ - int i, max = 2500, count = 550000000; - MA_STATE(mas, mt, 1470, 1470); + value = mas_prev(&mas, 19); + MT_BUG_ON(mt, value != NULL); - for (i = 0; i < max; i += 10) - mtree_store_range(mt, i, i + 5, xa_mk_value(i), GFP_KERNEL); + mas_set(&mas, 80); + value = mas_walk(&mas); + MT_BUG_ON(mt, value != xa_mk_value(8)); - for (i = 0; i < count; i++) { - mas_walk(&mas); - mas_reset(&mas); - } + value = mas_prev(&mas, 76); + MT_BUG_ON(mt, value != NULL); + mas_unlock(&mas); } -#endif -#if defined(BENCH_MT_FOR_EACH) -static noinline void bench_mt_for_each(struct maple_tree *mt) +static noinline void check_root_expand(struct maple_tree *mt) { - int i, count = 1000000; - unsigned long max = 2500, index = 0; - void *entry; + MA_STATE(mas, mt, 0, 0); + void *ptr; - for (i = 0; i < max; i += 5) - mtree_store_range(mt, i, i + 4, xa_mk_value(i), GFP_KERNEL); - for (i = 0; i < count; i++) { - unsigned long j = 0; + mas_lock(&mas); + mas_set(&mas, 3); + ptr = mas_walk(&mas); + MT_BUG_ON(mt, ptr != NULL); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != ULONG_MAX); - mt_for_each(mt, entry, index, max) { - MT_BUG_ON(mt, entry != xa_mk_value(j)); - j += 5; - } + ptr = &check_prev_entry; + mas_set(&mas, 1); + mas_store_gfp(&mas, ptr, GFP_KERNEL); - index = 0; - } + mas_set(&mas, 0); + ptr = mas_walk(&mas); + MT_BUG_ON(mt, ptr != NULL); -} -#endif + mas_set(&mas, 1); + ptr = mas_walk(&mas); + MT_BUG_ON(mt, ptr != &check_prev_entry); -static noinline void check_forking(struct maple_tree *mt) -{ + mas_set(&mas, 2); + ptr = mas_walk(&mas); + MT_BUG_ON(mt, ptr != NULL); + mas_unlock(&mas); + mtree_destroy(mt); - struct maple_tree newmt; - int i, nr_entries = 134; - void *val; - MA_STATE(mas, mt, 0, 0); - MA_STATE(newmas, mt, 0, 0); - for (i = 0; i <= nr_entries; i++) - mtree_store_range(mt, i*10, i*10 + 5, - xa_mk_value(i), GFP_KERNEL); + mt_init_flags(mt, 0); + mas_lock(&mas); - mt_set_non_kernel(99999); - mt_init_flags(&newmt, MT_FLAGS_ALLOC_RANGE); - newmas.tree = &newmt; - mas_reset(&newmas); - mas_reset(&mas); - mas.index = 0; - mas.last = 0; - if (mas_expected_entries(&newmas, nr_entries)) { - pr_err("OOM!"); - BUG_ON(1); - } - mas_for_each(&mas, val, ULONG_MAX) { - newmas.index = mas.index; - newmas.last = mas.last; - mas_store(&newmas, val); - } - mas_destroy(&newmas); - mt_validate(&newmt); - mt_set_non_kernel(0); - mtree_destroy(&newmt); -} + mas_set(&mas, 0); + ptr = &check_prev_entry; + mas_store_gfp(&mas, ptr, GFP_KERNEL); -static noinline void check_mas_store_gfp(struct maple_tree *mt) -{ + mas_set(&mas, 5); + ptr = mas_walk(&mas); + MT_BUG_ON(mt, ptr != NULL); + MT_BUG_ON(mt, mas.index != 1); + MT_BUG_ON(mt, mas.last != ULONG_MAX); - struct maple_tree newmt; - int i, nr_entries = 135; - void *val; - MA_STATE(mas, mt, 0, 0); - MA_STATE(newmas, mt, 0, 0); + mas_set_range(&mas, 0, 100); + ptr = mas_walk(&mas); + MT_BUG_ON(mt, ptr != &check_prev_entry); + MT_BUG_ON(mt, mas.last != 0); + mas_unlock(&mas); + mtree_destroy(mt); - for (i = 0; i <= nr_entries; i++) - mtree_store_range(mt, i*10, i*10 + 5, - xa_mk_value(i), GFP_KERNEL); + mt_init_flags(mt, 0); + mas_lock(&mas); + + mas_set(&mas, 0); + ptr = (void *)((unsigned long) check_prev_entry | 1UL); + mas_store_gfp(&mas, ptr, GFP_KERNEL); + ptr = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, ptr != NULL); + MT_BUG_ON(mt, (mas.index != 1) && (mas.last != ULONG_MAX)); + + mas_set(&mas, 1); + ptr = mas_prev(&mas, 0); + MT_BUG_ON(mt, (mas.index != 0) && (mas.last != 0)); + MT_BUG_ON(mt, ptr != (void *)((unsigned long) check_prev_entry | 1UL)); - mt_set_non_kernel(99999); - mt_init_flags(&newmt, MT_FLAGS_ALLOC_RANGE); - newmas.tree = &newmt; - mas_reset(&newmas); - mas_set(&mas, 0); - mas_for_each(&mas, val, ULONG_MAX) { - newmas.index = mas.index; - newmas.last = mas.last; - mas_store_gfp(&newmas, val, GFP_KERNEL); - } + mas_unlock(&mas); - mt_validate(&newmt); - mt_set_non_kernel(0); - mtree_destroy(&newmt); -} + mtree_destroy(mt); -#if defined(BENCH_FORK) -static noinline void bench_forking(struct maple_tree *mt) -{ + mt_init_flags(mt, 0); + mas_lock(&mas); + mas_set(&mas, 0); + ptr = (void *)((unsigned long) check_prev_entry | 2UL); + mas_store_gfp(&mas, ptr, GFP_KERNEL); + ptr = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, ptr != NULL); + MT_BUG_ON(mt, (mas.index != 1) && (mas.last != ULONG_MAX)); - struct maple_tree newmt; - int i, nr_entries = 134, nr_fork = 80000; - void *val; - MA_STATE(mas, mt, 0, 0); - MA_STATE(newmas, mt, 0, 0); + mas_set(&mas, 1); + ptr = mas_prev(&mas, 0); + MT_BUG_ON(mt, (mas.index != 0) && (mas.last != 0)); + MT_BUG_ON(mt, ptr != (void *)((unsigned long) check_prev_entry | 2UL)); - for (i = 0; i <= nr_entries; i++) - mtree_store_range(mt, i*10, i*10 + 5, - xa_mk_value(i), GFP_KERNEL); - for (i = 0; i < nr_fork; i++) { - mt_set_non_kernel(99999); - mt_init_flags(&newmt, MT_FLAGS_ALLOC_RANGE); - newmas.tree = &newmt; - mas_reset(&newmas); - mas_reset(&mas); - mas.index = 0; - mas.last = 0; - if (mas_expected_entries(&newmas, nr_entries)) { - printk("OOM!"); - BUG_ON(1); - } - mas_for_each(&mas, val, ULONG_MAX) { - newmas.index = mas.index; - newmas.last = mas.last; - mas_store(&newmas, val); - } - mas_destroy(&newmas); - mt_validate(&newmt); - mt_set_non_kernel(0); - mtree_destroy(&newmt); - } + mas_unlock(&mas); } -#endif -static noinline void next_prev_test(struct maple_tree *mt) +static noinline void check_gap_combining(struct maple_tree *mt) { - int i, nr_entries = 200; - void *val; - MA_STATE(mas, mt, 0, 0); - struct maple_enode *mn; + struct maple_enode *mn1, *mn2; + void *entry; + unsigned long singletons = 100; + unsigned long *seq100; + unsigned long seq100_64[] = { + /* 0-5 */ + 74, 75, 76, + 50, 100, 2, - for (i = 0; i <= nr_entries; i++) - mtree_store_range(mt, i*10, i*10 + 5, - xa_mk_value(i), GFP_KERNEL); + /* 6-12 */ + 44, 45, 46, 43, + 20, 50, 3, - for (i = 0; i <= nr_entries / 2; i++) { - mas_next(&mas, 1000); - if (mas_is_none(&mas)) - break; + /* 13-20*/ + 80, 81, 82, + 76, 2, 79, 85, 4, + }; - } - mas_reset(&mas); - mas_set(&mas, 0); - i = 0; - mas_for_each(&mas, val, 1000) { - i++; - } + unsigned long seq100_32[] = { + /* 0-5 */ + 61, 62, 63, + 50, 100, 2, - mas_reset(&mas); - mas_set(&mas, 0); - i = 0; - mas_for_each(&mas, val, 1000) { - mas_pause(&mas); - i++; - } + /* 6-12 */ + 31, 32, 33, 30, + 20, 50, 3, - /* - * 680 - 685 = 0x61a00001930c - * 686 - 689 = NULL; - * 690 - 695 = 0x61a00001930c - * Check simple next/prev - */ - mas_set(&mas, 686); - val = mas_walk(&mas); - MT_BUG_ON(mt, val != NULL); + /* 13-20*/ + 80, 81, 82, + 76, 2, 79, 85, 4, + }; - val = mas_next(&mas, 1000); - MT_BUG_ON(mt, val != xa_mk_value(690 / 10)); - MT_BUG_ON(mt, mas.index != 690); - MT_BUG_ON(mt, mas.last != 695); + unsigned long seq2000[] = { + 1152, 1151, + 1100, 1200, 2, + }; + unsigned long seq400[] = { + 286, 318, + 256, 260, 266, 270, 275, 280, 290, 398, + 286, 310, + }; - val = mas_prev(&mas, 0); - MT_BUG_ON(mt, val != xa_mk_value(680 / 10)); - MT_BUG_ON(mt, mas.index != 680); - MT_BUG_ON(mt, mas.last != 685); + unsigned long index; - val = mas_next(&mas, 1000); - MT_BUG_ON(mt, val != xa_mk_value(690 / 10)); - MT_BUG_ON(mt, mas.index != 690); - MT_BUG_ON(mt, mas.last != 695); + MA_STATE(mas, mt, 0, 0); - val = mas_next(&mas, 1000); - MT_BUG_ON(mt, val != xa_mk_value(700 / 10)); - MT_BUG_ON(mt, mas.index != 700); - MT_BUG_ON(mt, mas.last != 705); + if (MAPLE_32BIT) + seq100 = seq100_32; + else + seq100 = seq100_64; - /* Check across node boundaries of the tree */ - mas_set(&mas, 70); - val = mas_walk(&mas); - MT_BUG_ON(mt, val != xa_mk_value(70 / 10)); - MT_BUG_ON(mt, mas.index != 70); - MT_BUG_ON(mt, mas.last != 75); + index = seq100[0]; + mas_set(&mas, index); + MT_BUG_ON(mt, !mtree_empty(mt)); + check_seq(mt, singletons, false); /* create 100 singletons. */ - val = mas_next(&mas, 1000); - MT_BUG_ON(mt, val != xa_mk_value(80 / 10)); - MT_BUG_ON(mt, mas.index != 80); - MT_BUG_ON(mt, mas.last != 85); + mt_set_non_kernel(1); + mtree_test_erase(mt, seq100[2]); + check_load(mt, seq100[2], NULL); + mtree_test_erase(mt, seq100[1]); + check_load(mt, seq100[1], NULL); - val = mas_prev(&mas, 70); - MT_BUG_ON(mt, val != xa_mk_value(70 / 10)); - MT_BUG_ON(mt, mas.index != 70); - MT_BUG_ON(mt, mas.last != 75); + rcu_read_lock(); + entry = mas_find(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != xa_mk_value(index)); + mn1 = mas.node; + mas_next(&mas, ULONG_MAX); + entry = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != xa_mk_value(index + 4)); + mn2 = mas.node; + MT_BUG_ON(mt, mn1 == mn2); /* test the test. */ - /* Check across two levels of the tree */ + /* + * At this point, there is a gap of 2 at index + 1 between seq100[3] and + * seq100[4]. Search for the gap. + */ + mt_set_non_kernel(1); mas_reset(&mas); - mas_set(&mas, 707); - val = mas_walk(&mas); - MT_BUG_ON(mt, val != NULL); - val = mas_next(&mas, 1000); - MT_BUG_ON(mt, val != xa_mk_value(710 / 10)); - MT_BUG_ON(mt, mas.index != 710); - MT_BUG_ON(mt, mas.last != 715); - mn = mas.node; - - val = mas_next(&mas, 1000); - MT_BUG_ON(mt, val != xa_mk_value(720 / 10)); - MT_BUG_ON(mt, mas.index != 720); - MT_BUG_ON(mt, mas.last != 725); - MT_BUG_ON(mt, mn == mas.node); + MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq100[3], seq100[4], + seq100[5])); + MT_BUG_ON(mt, mas.index != index + 1); + rcu_read_unlock(); - val = mas_prev(&mas, 0); - MT_BUG_ON(mt, val != xa_mk_value(710 / 10)); - MT_BUG_ON(mt, mas.index != 710); - MT_BUG_ON(mt, mas.last != 715); + mtree_test_erase(mt, seq100[6]); + check_load(mt, seq100[6], NULL); + mtree_test_erase(mt, seq100[7]); + check_load(mt, seq100[7], NULL); + mtree_test_erase(mt, seq100[8]); + index = seq100[9]; - /* Check running off the end and back on */ + rcu_read_lock(); + mas.index = index; + mas.last = index; mas_reset(&mas); - mas_set(&mas, 2000); - val = mas_walk(&mas); - MT_BUG_ON(mt, val != xa_mk_value(2000 / 10)); - MT_BUG_ON(mt, mas.index != 2000); - MT_BUG_ON(mt, mas.last != 2005); - - val = mas_next(&mas, ULONG_MAX); - MT_BUG_ON(mt, val != NULL); - MT_BUG_ON(mt, mas.index != ULONG_MAX); - MT_BUG_ON(mt, mas.last != ULONG_MAX); - - val = mas_prev(&mas, 0); - MT_BUG_ON(mt, val != xa_mk_value(2000 / 10)); - MT_BUG_ON(mt, mas.index != 2000); - MT_BUG_ON(mt, mas.last != 2005); + entry = mas_find(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != xa_mk_value(index)); + mn1 = mas.node; + entry = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != xa_mk_value(index + 4)); + mas_next(&mas, ULONG_MAX); /* go to the next entry. */ + mn2 = mas.node; + MT_BUG_ON(mt, mn1 == mn2); /* test the next entry is in the next node. */ - /* Check running off the start and back on */ + /* + * At this point, there is a gap of 3 at seq100[6]. Find it by + * searching 20 - 50 for size 3. + */ mas_reset(&mas); - mas_set(&mas, 10); - val = mas_walk(&mas); - MT_BUG_ON(mt, val != xa_mk_value(1)); - MT_BUG_ON(mt, mas.index != 10); - MT_BUG_ON(mt, mas.last != 15); + MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq100[10], seq100[11], + seq100[12])); + MT_BUG_ON(mt, mas.index != seq100[6]); + rcu_read_unlock(); - val = mas_prev(&mas, 0); - MT_BUG_ON(mt, val != xa_mk_value(0)); - MT_BUG_ON(mt, mas.index != 0); - MT_BUG_ON(mt, mas.last != 5); + mt_set_non_kernel(1); + mtree_store(mt, seq100[13], NULL, GFP_KERNEL); + check_load(mt, seq100[13], NULL); + check_load(mt, seq100[14], xa_mk_value(seq100[14])); + mtree_store(mt, seq100[14], NULL, GFP_KERNEL); + check_load(mt, seq100[13], NULL); + check_load(mt, seq100[14], NULL); - val = mas_prev(&mas, 0); - MT_BUG_ON(mt, val != NULL); - MT_BUG_ON(mt, mas.index != 0); - MT_BUG_ON(mt, mas.last != 0); + mas_reset(&mas); + rcu_read_lock(); + MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq100[16], seq100[15], + seq100[17])); + MT_BUG_ON(mt, mas.index != seq100[13]); + mt_validate(mt); + rcu_read_unlock(); - mas.index = 0; - mas.last = 5; - mas_store(&mas, NULL); + /* + * *DEPRECATED: no retries anymore* Test retry entry in the start of a + * gap. + */ + mt_set_non_kernel(2); + mtree_test_store_range(mt, seq100[18], seq100[14], NULL); + mtree_test_erase(mt, seq100[15]); mas_reset(&mas); - mas_set(&mas, 10); - mas_walk(&mas); + rcu_read_lock(); + MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq100[16], seq100[19], + seq100[20])); + rcu_read_unlock(); + MT_BUG_ON(mt, mas.index != seq100[18]); + mt_validate(mt); + mtree_destroy(mt); - val = mas_prev(&mas, 0); - MT_BUG_ON(mt, val != NULL); - MT_BUG_ON(mt, mas.index != 0); - MT_BUG_ON(mt, mas.last != 0); + /* seq 2000 tests are for multi-level tree gaps */ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_seq(mt, 2000, false); + mt_set_non_kernel(1); + mtree_test_erase(mt, seq2000[0]); + mtree_test_erase(mt, seq2000[1]); + mt_set_non_kernel(2); + mas_reset(&mas); + rcu_read_lock(); + MT_BUG_ON(mt, mas_empty_area_rev(&mas, seq2000[2], seq2000[3], + seq2000[4])); + MT_BUG_ON(mt, mas.index != seq2000[1]); + rcu_read_unlock(); + mt_validate(mt); mtree_destroy(mt); - mt_init(mt); - mtree_store_range(mt, 0, 0, xa_mk_value(0), GFP_KERNEL); - mtree_store_range(mt, 5, 5, xa_mk_value(5), GFP_KERNEL); - mas_set(&mas, 5); - val = mas_prev(&mas, 4); - MT_BUG_ON(mt, val != NULL); -} + /* seq 400 tests rebalancing over two levels. */ + mt_set_non_kernel(99); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_seq(mt, 400, false); + mtree_test_store_range(mt, seq400[0], seq400[1], NULL); + mt_set_non_kernel(0); + mtree_destroy(mt); -#define RCU_RANGE_COUNT 1000 -#define RCU_MT_BUG_ON(test, y) {if (y) { test->stop = true;} MT_BUG_ON(test->mt, y);} -struct rcu_test_struct2 { - struct maple_tree *mt; - - bool start; - bool stop; - unsigned int thread_count; - - unsigned int seen_toggle; - unsigned int seen_added; - unsigned int seen_modified; - unsigned int seen_deleted; - int pause; - - unsigned long index[RCU_RANGE_COUNT]; - unsigned long last[RCU_RANGE_COUNT]; -}; - -struct rcu_reader_struct { - unsigned int id; - int mod; - int del; - int flip; - int add; - int next; - struct rcu_test_struct2 *test; -}; - -/* RCU reader helper function */ -static void rcu_reader_register(struct rcu_test_struct2 *test) + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_seq(mt, 400, false); + mt_set_non_kernel(50); + mtree_test_store_range(mt, seq400[2], seq400[9], + xa_mk_value(seq400[2])); + mtree_test_store_range(mt, seq400[3], seq400[9], + xa_mk_value(seq400[3])); + mtree_test_store_range(mt, seq400[4], seq400[9], + xa_mk_value(seq400[4])); + mtree_test_store_range(mt, seq400[5], seq400[9], + xa_mk_value(seq400[5])); + mtree_test_store_range(mt, seq400[0], seq400[9], + xa_mk_value(seq400[0])); + mtree_test_store_range(mt, seq400[6], seq400[9], + xa_mk_value(seq400[6])); + mtree_test_store_range(mt, seq400[7], seq400[9], + xa_mk_value(seq400[7])); + mtree_test_store_range(mt, seq400[8], seq400[9], + xa_mk_value(seq400[8])); + mtree_test_store_range(mt, seq400[10], seq400[11], + xa_mk_value(seq400[10])); + mt_validate(mt); + mt_set_non_kernel(0); + mtree_destroy(mt); +} +static noinline void check_node_overwrite(struct maple_tree *mt) { - rcu_register_thread(); - uatomic_inc(&test->thread_count); + int i, max = 4000; - while (!test->start) - usleep(test->pause * 100); -} + for (i = 0; i < max; i++) + mtree_test_store_range(mt, i*100, i*100 + 50, xa_mk_value(i*100)); -static void rcu_reader_setup(struct rcu_reader_struct *reader, - unsigned int id, struct rcu_test_struct2 *test) -{ - reader->id = id; - reader->test = test; - reader->mod = reader->id % 10; - reader->del = (reader->mod + 1) % 10; - reader->flip = (reader->mod + 2) % 10; - reader->add = (reader->mod + 3) % 10; - reader->next = (reader->mod + 4) % 10; + mtree_test_store_range(mt, 319951, 367950, NULL); + /*mt_dump(mt); */ + mt_validate(mt); } -/* RCU reader in increasing index */ -static void *rcu_reader_fwd(void *ptr) +#if defined(BENCH_SLOT_STORE) +static noinline void bench_slot_store(struct maple_tree *mt) { - struct rcu_reader_struct *reader = (struct rcu_reader_struct *)ptr; - struct rcu_test_struct2 *test = reader->test; - unsigned long index = reader->id; - bool toggled, modified, deleted, added; - int i; - void *entry, *prev = NULL; - MA_STATE(mas, test->mt, 0, 0); + int i, brk = 105, max = 1040, brk_start = 100, count = 20000000; - rcu_reader_register(test); - toggled = modified = deleted = added = false; + for (i = 0; i < max; i += 10) + mtree_store_range(mt, i, i + 5, xa_mk_value(i), GFP_KERNEL); - while (!test->stop) { - i = 0; - /* mas_for_each ?*/ - rcu_read_lock(); - mas_set(&mas, test->index[index]); - mas_for_each(&mas, entry, test->last[index + 9]) { - unsigned long r_start, r_end, alt_start; - void *expected, *alt; - - r_start = test->index[index + i]; - r_end = test->last[index + i]; - expected = xa_mk_value(r_start); - - if (i == reader->del) { - if (!deleted) { - alt_start = test->index[index + reader->flip]; - /* delete occurred. */ - if (mas.index == alt_start) { - uatomic_inc(&test->seen_deleted); - deleted = true; - } - } - if (deleted) { - i = reader->flip; - r_start = test->index[index + i]; - r_end = test->last[index + i]; - expected = xa_mk_value(r_start); - } - } - - if (!added && (i == reader->add)) { - alt_start = test->index[index + reader->next]; - if (mas.index == r_start) { - uatomic_inc(&test->seen_added); - added = true; - } else if (mas.index == alt_start) { - i = reader->next; - r_start = test->index[index + i]; - r_end = test->last[index + i]; - expected = xa_mk_value(r_start); - } - } - - RCU_MT_BUG_ON(test, mas.index != r_start); - RCU_MT_BUG_ON(test, mas.last != r_end); - - if (i == reader->flip) { - alt = xa_mk_value(index + i + RCU_RANGE_COUNT); - if (prev) { - if (toggled && entry == expected) - uatomic_inc(&test->seen_toggle); - else if (!toggled && entry == alt) - uatomic_inc(&test->seen_toggle); - } - - if (entry == expected) - toggled = false; - else if (entry == alt) - toggled = true; - else { - printk("!!%lu-%lu -> %p not %p or %p\n", mas.index, mas.last, entry, expected, alt); - RCU_MT_BUG_ON(test, 1); - } - - prev = entry; - } else if (i == reader->mod) { - alt = xa_mk_value(index + i * 2 + 1 + - RCU_RANGE_COUNT); - if (entry != expected) { - if (!modified) - uatomic_inc(&test->seen_modified); - modified = true; - } else { - if (modified) - uatomic_inc(&test->seen_modified); - modified = false; - } - - if (modified) - RCU_MT_BUG_ON(test, entry != alt); - - } else { - if (entry != expected) - printk("!!%lu-%lu -> %p not %p\n", mas.index, mas.last, entry, expected); - RCU_MT_BUG_ON(test, entry != expected); - } - - i++; - } - rcu_read_unlock(); - usleep(test->pause); + for (i = 0; i < count; i++) { + mtree_store_range(mt, brk, brk, NULL, GFP_KERNEL); + mtree_store_range(mt, brk_start, brk, xa_mk_value(brk), + GFP_KERNEL); } - - rcu_unregister_thread(); - return NULL; } +#endif -/* RCU reader in decreasing index */ -static void *rcu_reader_rev(void *ptr) +#if defined(BENCH_NODE_STORE) +static noinline void bench_node_store(struct maple_tree *mt) { - struct rcu_reader_struct *reader = (struct rcu_reader_struct *)ptr; - struct rcu_test_struct2 *test = reader->test; - unsigned long index = reader->id; - bool toggled, modified, deleted, added; - int i; - void *prev = NULL; - MA_STATE(mas, test->mt, 0, 0); - - rcu_reader_register(test); - toggled = modified = deleted = added = false; - - - while (!test->stop) { - void *entry; - - i = 9; - mas_set(&mas, test->index[index + i]); - - rcu_read_lock(); - while (i--) { - unsigned long r_start, r_end, alt_start; - void *expected, *alt; - int line = __LINE__; - - entry = mas_prev(&mas, test->index[index]); - r_start = test->index[index + i]; - r_end = test->last[index + i]; - expected = xa_mk_value(r_start); - - if (i == reader->del) { - alt_start = test->index[index + reader->mod]; - if (mas.index == alt_start) { - line = __LINE__; - if (!deleted) - uatomic_inc(&test->seen_deleted); - deleted = true; - } - if (deleted) { - line = __LINE__; - i = reader->mod; - r_start = test->index[index + i]; - r_end = test->last[index + i]; - expected = xa_mk_value(r_start); - } - } - if (!added && (i == reader->add)) { - alt_start = test->index[index + reader->flip]; - if (mas.index == r_start) { - line = __LINE__; - uatomic_inc(&test->seen_added); - added = true; - } else if (mas.index == alt_start) { - line = __LINE__; - i = reader->flip; - r_start = test->index[index + i]; - r_end = test->last[index + i]; - expected = xa_mk_value(r_start); - } - } - - if (i == reader->mod) - line = __LINE__; - else if (i == reader->flip) - line = __LINE__; - - if (mas.index != r_start) { - alt = xa_mk_value(index + i * 2 + 1 + - RCU_RANGE_COUNT); - mt_dump(test->mt); - printk("Error: %lu-%lu %p != %lu-%lu %p %p line %d i %d\n", - mas.index, mas.last, entry, - r_start, r_end, expected, alt, - line, i); - } - RCU_MT_BUG_ON(test, mas.index != r_start); - RCU_MT_BUG_ON(test, mas.last != r_end); - - if (i == reader->mod) { - alt = xa_mk_value(index + i * 2 + 1 + - RCU_RANGE_COUNT); - - if (entry != expected) { - if (!modified) - uatomic_inc(&test->seen_modified); - modified = true; - } else { - if (modified) - uatomic_inc(&test->seen_modified); - modified = false; - } - if (modified) - RCU_MT_BUG_ON(test, entry != alt); - - - } else if (i == reader->flip) { - alt = xa_mk_value(index + i + - RCU_RANGE_COUNT); - if (prev) { - if (toggled && entry == expected) - uatomic_inc(&test->seen_toggle); - else if (!toggled && entry == alt) - uatomic_inc(&test->seen_toggle); - } - - if (entry == expected) - toggled = false; - else if (entry == alt) - toggled = true; - else { - printk("%lu-%lu %p != %p or %p\n", - mas.index, mas.last, entry, - expected, alt); - RCU_MT_BUG_ON(test, 1); - } - - prev = entry; - } else { - if (entry != expected) - printk("%lu-%lu %p != %p\n", mas.index, - mas.last, entry, expected); - RCU_MT_BUG_ON(test, entry != expected); - } - } - rcu_read_unlock(); - usleep(test->pause); - } + int i, overwrite = 76, max = 240, count = 20000000; - rcu_unregister_thread(); - return NULL; -} + for (i = 0; i < max; i += 10) + mtree_store_range(mt, i, i + 5, xa_mk_value(i), GFP_KERNEL); -static void rcu_stress_rev(struct maple_tree *mt, struct rcu_test_struct2 *test, - int count, struct rcu_reader_struct *test_reader) -{ - int i, j = 10000; - bool toggle = true; - - test->start = true; /* Release the hounds! */ - usleep(5); - - while (j--) { - toggle = !toggle; - i = count; - while (i--) { - unsigned long start, end; - struct rcu_reader_struct *this = &test_reader[i]; - - /* Mod offset */ - if (j == 600) { - start = test->index[this->id + this->mod]; - end = test->last[this->id + this->mod]; - mtree_store_range(mt, start, end, - xa_mk_value(this->id + this->mod * 2 + - 1 + RCU_RANGE_COUNT), - GFP_KERNEL); - } - - /* Toggle */ - if (!(j % 5)) { - start = test->index[this->id + this->flip]; - end = test->last[this->id + this->flip]; - mtree_store_range(mt, start, end, - xa_mk_value((toggle ? start : - this->id + this->flip + - RCU_RANGE_COUNT)), - GFP_KERNEL); - } - - /* delete */ - if (j == 400) { - start = test->index[this->id + this->del]; - end = test->last[this->id + this->del]; - mtree_store_range(mt, start, end, NULL, GFP_KERNEL); - } - - /* add */ - if (j == 500) { - start = test->index[this->id + this->add]; - end = test->last[this->id + this->add]; - mtree_store_range(mt, start, end, - xa_mk_value(start), GFP_KERNEL); - } - } - usleep(test->pause); - /* If a test fails, don't flood the console */ - if (test->stop) - break; - } -} + for (i = 0; i < count; i++) { + mtree_store_range(mt, overwrite, overwrite + 15, + xa_mk_value(overwrite), GFP_KERNEL); -static void rcu_stress_fwd(struct maple_tree *mt, struct rcu_test_struct2 *test, - int count, struct rcu_reader_struct *test_reader) -{ - int j, i; - bool toggle = true; - - test->start = true; /* Release the hounds! */ - usleep(5); - for (j = 0; j < 10000; j++) { - toggle = !toggle; - for (i = 0; i < count; i++) { - unsigned long start, end; - struct rcu_reader_struct *this = &test_reader[i]; - - /* Mod offset */ - if (j == 600) { - start = test->index[this->id + this->mod]; - end = test->last[this->id + this->mod]; - mtree_store_range(mt, start, end, - xa_mk_value(this->id + this->mod * 2 + - 1 + RCU_RANGE_COUNT), - GFP_KERNEL); - } - - /* Toggle */ - if (!(j % 5)) { - start = test->index[this->id + this->flip]; - end = test->last[this->id + this->flip]; - mtree_store_range(mt, start, end, - xa_mk_value((toggle ? start : - this->id + this->flip + - RCU_RANGE_COUNT)), - GFP_KERNEL); - } - - /* delete */ - if (j == 400) { - start = test->index[this->id + this->del]; - end = test->last[this->id + this->del]; - mtree_store_range(mt, start, end, NULL, GFP_KERNEL); - } - - /* add */ - if (j == 500) { - start = test->index[this->id + this->add]; - end = test->last[this->id + this->add]; - mtree_store_range(mt, start, end, - xa_mk_value(start), GFP_KERNEL); - } - } - usleep(test->pause); - /* If a test fails, don't flood the console */ - if (test->stop) - break; + overwrite += 5; + if (overwrite >= 135) + overwrite = 76; } } +#endif -/* - * This is to check: - * 1. Range that is not ever present - * 2. Range that is always present - * 3. Things being added but not removed. - * 4. Things being removed but not added. - * 5. Things are being added and removed, searches my succeed or fail - * - * This sets up two readers for every 10 entries; one forward and one reverse - * reading. - */ -static void rcu_stress(struct maple_tree *mt, bool forward) +#if defined(BENCH_AWALK) +static noinline void bench_awalk(struct maple_tree *mt) { - unsigned int count, i; - unsigned long r, seed; - pthread_t readers[RCU_RANGE_COUNT / 5]; - struct rcu_test_struct2 test; - struct rcu_reader_struct test_reader[RCU_RANGE_COUNT / 5]; - void *(*function)(void *); - - /* Test setup */ - test.mt = mt; - test.pause = 5; - test.seen_toggle = 0; - test.seen_deleted = 0; - test.seen_added = 0; - test.seen_modified = 0; - test.thread_count = 0; - test.start = test.stop = false; - seed = time(NULL); - srand(seed); - for (i = 0; i < RCU_RANGE_COUNT; i++) { - r = seed + rand(); - mtree_store_range(mt, seed, r, - xa_mk_value(seed), GFP_KERNEL); - - /* Record start and end of entry */ - test.index[i] = seed; - test.last[i] = r; - seed = 1 + r + rand() % 10; - } + int i, max = 2500, count = 50000000; + MA_STATE(mas, mt, 1470, 1470); - i = count = ARRAY_SIZE(readers); - while (i--) { - unsigned long id; + for (i = 0; i < max; i += 10) + mtree_store_range(mt, i, i + 5, xa_mk_value(i), GFP_KERNEL); - id = i / 2 * 10; - if (i % 2) - function = rcu_reader_fwd; - else - function = rcu_reader_rev; + mtree_store_range(mt, 1470, 1475, NULL, GFP_KERNEL); - rcu_reader_setup(&test_reader[i], id, &test); - if (pthread_create(&readers[i], NULL, *function, - &test_reader[i])) { - perror("creating reader thread"); - exit(1); - } + for (i = 0; i < count; i++) { + mas_empty_area_rev(&mas, 0, 2000, 10); + mas_reset(&mas); } +} +#endif +#if defined(BENCH_WALK) +static noinline void bench_walk(struct maple_tree *mt) +{ + int i, max = 2500, count = 550000000; + MA_STATE(mas, mt, 1470, 1470); - for (i = 0; i < ARRAY_SIZE(readers); i++) { - struct rcu_reader_struct *this = &test_reader[i]; - int add = this->id + this->add; + for (i = 0; i < max; i += 10) + mtree_store_range(mt, i, i + 5, xa_mk_value(i), GFP_KERNEL); - /* Remove add entries from the tree for later addition */ - mtree_store_range(mt, test.index[add], test.last[add], - NULL, GFP_KERNEL); + for (i = 0; i < count; i++) { + mas_walk(&mas); + mas_reset(&mas); } - mt_set_in_rcu(mt); - do { - usleep(5); - } while (test.thread_count > ARRAY_SIZE(readers)); - - if (forward) - rcu_stress_fwd(mt, &test, count, test_reader); - else - rcu_stress_rev(mt, &test, count, test_reader); - - test.stop = true; - while (count--) - pthread_join(readers[count], NULL); - - mt_validate(mt); } +#endif - -struct rcu_test_struct { - struct maple_tree *mt; /* the maple tree */ - int count; /* Number of times to check value(s) */ - unsigned long index; /* The first index to check */ - void *entry1; /* The first entry value */ - void *entry2; /* The second entry value */ - void *entry3; /* The third entry value */ - - bool update_2; - bool update_3; - unsigned long range_start; - unsigned long range_end; - unsigned int loop_sleep; - unsigned int val_sleep; - - unsigned int failed; /* failed detection for other threads */ - unsigned int seen_entry2; /* Number of threads that have seen the new value */ - unsigned int seen_entry3; /* Number of threads that have seen the new value */ - unsigned int seen_both; /* Number of threads that have seen both new values */ - unsigned int seen_toggle; - unsigned int seen_added; - unsigned int seen_removed; - unsigned long last; /* The end of the range to write. */ - - unsigned long removed; /* The index of the removed entry */ - unsigned long added; /* The index of the removed entry */ - unsigned long toggle; /* The index of the removed entry */ -}; - -static inline -int eval_rcu_entry(struct rcu_test_struct *test, void *entry, bool *update_2, - bool *update_3) +#if defined(BENCH_MT_FOR_EACH) +static noinline void bench_mt_for_each(struct maple_tree *mt) { - if (entry == test->entry1) - return 0; + int i, count = 1000000; + unsigned long max = 2500, index = 0; + void *entry; - if (entry == test->entry2) { - if (!(*update_2)) { - uatomic_inc(&test->seen_entry2); - *update_2 = true; - if (update_3) - uatomic_inc(&test->seen_both); - } - return 0; - } + for (i = 0; i < max; i += 5) + mtree_store_range(mt, i, i + 4, xa_mk_value(i), GFP_KERNEL); + + for (i = 0; i < count; i++) { + unsigned long j = 0; - if (entry == test->entry3) { - if (!(*update_3)) { - uatomic_inc(&test->seen_entry3); - *update_3 = true; - if (update_2) - uatomic_inc(&test->seen_both); + mt_for_each(mt, entry, index, max) { + MT_BUG_ON(mt, entry != xa_mk_value(j)); + j += 5; } - return 0; + + index = 0; } - return 1; } +#endif -/* - * rcu_val() - Read a given value in the tree test->count times using the - * regular API - * - * @ptr: The pointer to the rcu_test_struct - */ -static void *rcu_val(void *ptr) +/* check_forking - simulate the kernel forking sequence with the tree. */ +static noinline void check_forking(struct maple_tree *mt) { - struct rcu_test_struct *test = (struct rcu_test_struct *)ptr; - unsigned long count = test->count; - bool update_2 = false; - bool update_3 = false; - void *entry; - rcu_register_thread(); - while (count--) { - usleep(test->val_sleep); - /* - * No locking required, regular API locking is handled in the - * maple tree code - */ - entry = mtree_load(test->mt, test->index); - MT_BUG_ON(test->mt, eval_rcu_entry(test, entry, &update_2, - &update_3)); + struct maple_tree newmt; + int i, nr_entries = 134; + void *val; + MA_STATE(mas, mt, 0, 0); + MA_STATE(newmas, mt, 0, 0); + + for (i = 0; i <= nr_entries; i++) + mtree_store_range(mt, i*10, i*10 + 5, + xa_mk_value(i), GFP_KERNEL); + + mt_set_non_kernel(99999); + mt_init_flags(&newmt, MT_FLAGS_ALLOC_RANGE); + newmas.tree = &newmt; + mas_reset(&newmas); + mas_reset(&mas); + mas_lock(&newmas); + mas.index = 0; + mas.last = 0; + if (mas_expected_entries(&newmas, nr_entries)) { + pr_err("OOM!"); + BUG_ON(1); + } + rcu_read_lock(); + mas_for_each(&mas, val, ULONG_MAX) { + newmas.index = mas.index; + newmas.last = mas.last; + mas_store(&newmas, val); } - rcu_unregister_thread(); - return NULL; + rcu_read_unlock(); + mas_destroy(&newmas); + mas_unlock(&newmas); + mt_validate(&newmt); + mt_set_non_kernel(0); + mtree_destroy(&newmt); } -/* - * rcu_loop() - Loop over a section of the maple tree, checking for an expected - * value using the advanced API - * - * @ptr - The pointer to the rcu_test_struct - */ -static void *rcu_loop(void *ptr) +static noinline void check_mas_store_gfp(struct maple_tree *mt) { - struct rcu_test_struct *test = (struct rcu_test_struct *)ptr; - unsigned long count = test->count; - void *entry, *expected; - bool update_2 = false; - bool update_3 = false; - MA_STATE(mas, test->mt, test->range_start, test->range_start); - rcu_register_thread(); - - /* - * Loop through the test->range_start - test->range_end test->count - * times - */ - while (count--) { - usleep(test->loop_sleep); - rcu_read_lock(); - mas_for_each(&mas, entry, test->range_end) { - /* The expected value is based on the start range. */ - expected = xa_mk_value(mas.index ? mas.index / 10 : 0); - - /* Out of the interesting range */ - if (mas.index < test->index || mas.index > test->last) { - if (entry != expected) { - printk("%lx - %lx = %p not %p\n", - mas.index, mas.last, entry, expected); - } - MT_BUG_ON(test->mt, entry != expected); - continue; - } + struct maple_tree newmt; + int i, nr_entries = 135; + void *val; + MA_STATE(mas, mt, 0, 0); + MA_STATE(newmas, mt, 0, 0); - if (entry == expected) - continue; /* Not seen. */ + for (i = 0; i <= nr_entries; i++) + mtree_store_range(mt, i*10, i*10 + 5, + xa_mk_value(i), GFP_KERNEL); - /* In the interesting range */ - MT_BUG_ON(test->mt, eval_rcu_entry(test, entry, - &update_2, - &update_3)); - } - rcu_read_unlock(); - mas_set(&mas, test->range_start); + mt_set_non_kernel(99999); + mt_init_flags(&newmt, MT_FLAGS_ALLOC_RANGE); + newmas.tree = &newmt; + rcu_read_lock(); + mas_lock(&newmas); + mas_reset(&newmas); + mas_set(&mas, 0); + mas_for_each(&mas, val, ULONG_MAX) { + newmas.index = mas.index; + newmas.last = mas.last; + mas_store_gfp(&newmas, val, GFP_KERNEL); } - - rcu_unregister_thread(); - return NULL; + mas_unlock(&newmas); + rcu_read_unlock(); + mt_validate(&newmt); + mt_set_non_kernel(0); + mtree_destroy(&newmt); } -static noinline -void run_check_rcu(struct maple_tree *mt, struct rcu_test_struct *vals) +#if defined(BENCH_FORK) +static noinline void bench_forking(struct maple_tree *mt) { - int i; - void *(*function)(void *); - pthread_t readers[20]; - - mt_set_in_rcu(mt); - MT_BUG_ON(mt, !mt_in_rcu(mt)); + struct maple_tree newmt; + int i, nr_entries = 134, nr_fork = 80000; + void *val; + MA_STATE(mas, mt, 0, 0); + MA_STATE(newmas, mt, 0, 0); - for (i = 0; i < ARRAY_SIZE(readers); i++) { - if (i % 2) - function = rcu_loop; - else - function = rcu_val; + for (i = 0; i <= nr_entries; i++) + mtree_store_range(mt, i*10, i*10 + 5, + xa_mk_value(i), GFP_KERNEL); - if (pthread_create(&readers[i], NULL, *function, vals)) { - perror("creating reader thread"); - exit(1); + for (i = 0; i < nr_fork; i++) { + mt_set_non_kernel(99999); + mt_init_flags(&newmt, MT_FLAGS_ALLOC_RANGE); + newmas.tree = &newmt; + mas_reset(&newmas); + mas_reset(&mas); + mas.index = 0; + mas.last = 0; + rcu_read_lock(); + mas_lock(&newmas); + if (mas_expected_entries(&newmas, nr_entries)) { + printk("OOM!"); + BUG_ON(1); + } + mas_for_each(&mas, val, ULONG_MAX) { + newmas.index = mas.index; + newmas.last = mas.last; + mas_store(&newmas, val); } + mas_destroy(&newmas); + mas_unlock(&newmas); + rcu_read_unlock(); + mt_validate(&newmt); + mt_set_non_kernel(0); + mtree_destroy(&newmt); } - - usleep(5); /* small yield to ensure all threads are at least started. */ - mtree_store_range(mt, vals->index, vals->last, vals->entry2, - GFP_KERNEL); - while (i--) - pthread_join(readers[i], NULL); - - /* Make sure the test caught at least one update. */ - MT_BUG_ON(mt, !vals->seen_entry2); } +#endif -static noinline -void run_check_rcu_slowread(struct maple_tree *mt, struct rcu_test_struct *vals) +static noinline void next_prev_test(struct maple_tree *mt) { + int i, nr_entries; + void *val; + MA_STATE(mas, mt, 0, 0); + struct maple_enode *mn; + unsigned long *level2; + unsigned long level2_64[] = {707, 1000, 710, 715, 720, 725}; + unsigned long level2_32[] = {1747, 2000, 1750, 1755, 1760, 1765}; - int i; - void *(*function)(void *); - pthread_t readers[20]; - unsigned int index = vals->index; + if (MAPLE_32BIT) { + nr_entries = 500; + level2 = level2_32; + } else { + nr_entries = 200; + level2 = level2_64; + } - mt_set_in_rcu(mt); - MT_BUG_ON(mt, !mt_in_rcu(mt)); + for (i = 0; i <= nr_entries; i++) + mtree_store_range(mt, i*10, i*10 + 5, + xa_mk_value(i), GFP_KERNEL); - for (i = 0; i < ARRAY_SIZE(readers); i++) { - if (i % 2) - function = rcu_loop; - else - function = rcu_val; + mas_lock(&mas); + for (i = 0; i <= nr_entries / 2; i++) { + mas_next(&mas, 1000); + if (mas_is_none(&mas)) + break; - if (pthread_create(&readers[i], NULL, *function, vals)) { - perror("creating reader thread"); - exit(1); - } } - - usleep(5); /* small yield to ensure all threads are at least started. */ - - while (index <= vals->last) { - mtree_store(mt, index, - (index % 2 ? vals->entry2 : vals->entry3), - GFP_KERNEL); - index++; - usleep(5); + mas_reset(&mas); + mas_set(&mas, 0); + i = 0; + mas_for_each(&mas, val, 1000) { + i++; } - while (i--) - pthread_join(readers[i], NULL); - - /* Make sure the test caught at least one update. */ - MT_BUG_ON(mt, !vals->seen_entry2); - MT_BUG_ON(mt, !vals->seen_entry3); - MT_BUG_ON(mt, !vals->seen_both); -} -static noinline void check_rcu_simulated(struct maple_tree *mt) -{ - unsigned long i, nr_entries = 1000; - unsigned long target = 4320; - unsigned long val = 0xDEAD; + mas_reset(&mas); + mas_set(&mas, 0); + i = 0; + mas_for_each(&mas, val, 1000) { + mas_pause(&mas); + i++; + } - MA_STATE(mas_writer, mt, 0, 0); - MA_STATE(mas_reader, mt, target, target); + /* + * 680 - 685 = 0x61a00001930c + * 686 - 689 = NULL; + * 690 - 695 = 0x61a00001930c + * Check simple next/prev + */ + mas_set(&mas, 686); + val = mas_walk(&mas); + MT_BUG_ON(mt, val != NULL); - rcu_register_thread(); + val = mas_next(&mas, 1000); + MT_BUG_ON(mt, val != xa_mk_value(690 / 10)); + MT_BUG_ON(mt, mas.index != 690); + MT_BUG_ON(mt, mas.last != 695); - mt_set_in_rcu(mt); - mas_lock(&mas_writer); - for (i = 0; i <= nr_entries; i++) { - mas_writer.index = i * 10; - mas_writer.last = i * 10 + 5; - mas_store_gfp(&mas_writer, xa_mk_value(i), GFP_KERNEL); - } - mas_unlock(&mas_writer); + val = mas_prev(&mas, 0); + MT_BUG_ON(mt, val != xa_mk_value(680 / 10)); + MT_BUG_ON(mt, mas.index != 680); + MT_BUG_ON(mt, mas.last != 685); - /* Overwrite one entry with a new value. */ - mas_set_range(&mas_writer, target, target + 5); - rcu_read_lock(); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); - mas_unlock(&mas_writer); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(val)); - rcu_read_unlock(); + val = mas_next(&mas, 1000); + MT_BUG_ON(mt, val != xa_mk_value(690 / 10)); + MT_BUG_ON(mt, mas.index != 690); + MT_BUG_ON(mt, mas.last != 695); - /* Restore value. */ - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(target/10), GFP_KERNEL); - mas_unlock(&mas_writer); - mas_reset(&mas_reader); + val = mas_next(&mas, 1000); + MT_BUG_ON(mt, val != xa_mk_value(700 / 10)); + MT_BUG_ON(mt, mas.index != 700); + MT_BUG_ON(mt, mas.last != 705); + /* Check across node boundaries of the tree */ + mas_set(&mas, 70); + val = mas_walk(&mas); + MT_BUG_ON(mt, val != xa_mk_value(70 / 10)); + MT_BUG_ON(mt, mas.index != 70); + MT_BUG_ON(mt, mas.last != 75); - /* Overwrite 1/2 the entry */ - mas_set_range(&mas_writer, target, target + 2); - rcu_read_lock(); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); - mas_unlock(&mas_writer); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(val)); - rcu_read_unlock(); + val = mas_next(&mas, 1000); + MT_BUG_ON(mt, val != xa_mk_value(80 / 10)); + MT_BUG_ON(mt, mas.index != 80); + MT_BUG_ON(mt, mas.last != 85); + val = mas_prev(&mas, 70); + MT_BUG_ON(mt, val != xa_mk_value(70 / 10)); + MT_BUG_ON(mt, mas.index != 70); + MT_BUG_ON(mt, mas.last != 75); - /* Restore value. */ - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(target/10), GFP_KERNEL); - mas_unlock(&mas_writer); - mas_reset(&mas_reader); + /* Check across two levels of the tree */ + mas_reset(&mas); + mas_set(&mas, level2[0]); + val = mas_walk(&mas); + MT_BUG_ON(mt, val != NULL); + val = mas_next(&mas, level2[1]); + MT_BUG_ON(mt, val != xa_mk_value(level2[2] / 10)); + MT_BUG_ON(mt, mas.index != level2[2]); + MT_BUG_ON(mt, mas.last != level2[3]); + mn = mas.node; - /* Overwrite last 1/2 the entry */ - mas_set_range(&mas_writer, target + 2, target + 5); - rcu_read_lock(); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); - mas_unlock(&mas_writer); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); - rcu_read_unlock(); + val = mas_next(&mas, level2[1]); + MT_BUG_ON(mt, val != xa_mk_value(level2[4] / 10)); + MT_BUG_ON(mt, mas.index != level2[4]); + MT_BUG_ON(mt, mas.last != level2[5]); + MT_BUG_ON(mt, mn == mas.node); + val = mas_prev(&mas, 0); + MT_BUG_ON(mt, val != xa_mk_value(level2[2] / 10)); + MT_BUG_ON(mt, mas.index != level2[2]); + MT_BUG_ON(mt, mas.last != level2[3]); - /* Restore value. */ - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(target/10), GFP_KERNEL); - mas_unlock(&mas_writer); - mas_reset(&mas_reader); + /* Check running off the end and back on */ + mas_set(&mas, nr_entries * 10); + val = mas_walk(&mas); + MT_BUG_ON(mt, val != xa_mk_value(nr_entries)); + MT_BUG_ON(mt, mas.index != (nr_entries * 10)); + MT_BUG_ON(mt, mas.last != (nr_entries * 10 + 5)); - /* Overwrite more than the entry */ - mas_set_range(&mas_writer, target - 5, target + 15); - rcu_read_lock(); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); - mas_unlock(&mas_writer); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(val)); - rcu_read_unlock(); + val = mas_next(&mas, ULONG_MAX); + MT_BUG_ON(mt, val != NULL); + MT_BUG_ON(mt, mas.index != ULONG_MAX); + MT_BUG_ON(mt, mas.last != ULONG_MAX); - /* Restore value. */ - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(target/10), GFP_KERNEL); - mas_unlock(&mas_writer); - mas_reset(&mas_reader); + val = mas_prev(&mas, 0); + MT_BUG_ON(mt, val != xa_mk_value(nr_entries)); + MT_BUG_ON(mt, mas.index != (nr_entries * 10)); + MT_BUG_ON(mt, mas.last != (nr_entries * 10 + 5)); - /* Overwrite more than the node. */ - mas_set_range(&mas_writer, target - 400, target + 400); - rcu_read_lock(); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); - mas_unlock(&mas_writer); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(val)); - rcu_read_unlock(); + /* Check running off the start and back on */ + mas_reset(&mas); + mas_set(&mas, 10); + val = mas_walk(&mas); + MT_BUG_ON(mt, val != xa_mk_value(1)); + MT_BUG_ON(mt, mas.index != 10); + MT_BUG_ON(mt, mas.last != 15); - /* Restore value. */ - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(target/10), GFP_KERNEL); - mas_unlock(&mas_writer); - mas_reset(&mas_reader); + val = mas_prev(&mas, 0); + MT_BUG_ON(mt, val != xa_mk_value(0)); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 5); - /* Overwrite the tree */ - mas_set_range(&mas_writer, 0, ULONG_MAX); - rcu_read_lock(); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); - mas_unlock(&mas_writer); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(val)); - rcu_read_unlock(); + val = mas_prev(&mas, 0); + MT_BUG_ON(mt, val != NULL); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); - /* Clear out tree & recreate it */ - mas_lock(&mas_writer); - mas_set_range(&mas_writer, 0, ULONG_MAX); - mas_store_gfp(&mas_writer, NULL, GFP_KERNEL); - mas_set_range(&mas_writer, 0, 0); - for (i = 0; i <= nr_entries; i++) { - mas_writer.index = i * 10; - mas_writer.last = i * 10 + 5; - mas_store_gfp(&mas_writer, xa_mk_value(i), GFP_KERNEL); - } - mas_unlock(&mas_writer); + mas.index = 0; + mas.last = 5; + mas_store(&mas, NULL); + mas_reset(&mas); + mas_set(&mas, 10); + mas_walk(&mas); - /* next check */ - /* Overwrite one entry with a new value. */ - mas_reset(&mas_reader); - mas_set_range(&mas_writer, target, target + 5); - mas_set_range(&mas_reader, target, target); - rcu_read_lock(); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); - mas_prev(&mas_reader, 0); - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); - mas_unlock(&mas_writer); - MT_BUG_ON(mt, mas_next(&mas_reader, ULONG_MAX) != xa_mk_value(val)); - rcu_read_unlock(); + val = mas_prev(&mas, 0); + MT_BUG_ON(mt, val != NULL); + MT_BUG_ON(mt, mas.index != 0); + MT_BUG_ON(mt, mas.last != 0); + mas_unlock(&mas); - /* Restore value. */ - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(target/10), GFP_KERNEL); - mas_unlock(&mas_writer); + mtree_destroy(mt); - /* prev check */ - /* Overwrite one entry with a new value. */ - mas_reset(&mas_reader); - mas_set_range(&mas_writer, target, target + 5); - mas_set_range(&mas_reader, target, target); + mt_init(mt); + mtree_store_range(mt, 0, 0, xa_mk_value(0), GFP_KERNEL); + mtree_store_range(mt, 5, 5, xa_mk_value(5), GFP_KERNEL); rcu_read_lock(); - MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); - mas_next(&mas_reader, ULONG_MAX); - mas_lock(&mas_writer); - mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); - mas_unlock(&mas_writer); - MT_BUG_ON(mt, mas_prev(&mas_reader, 0) != xa_mk_value(val)); + mas_set(&mas, 5); + val = mas_prev(&mas, 4); + MT_BUG_ON(mt, val != NULL); rcu_read_unlock(); - - rcu_unregister_thread(); } -static noinline void check_rcu_threaded(struct maple_tree *mt) -{ - unsigned long i, nr_entries = 1000; - struct rcu_test_struct vals; - - vals.val_sleep = 200; - vals.loop_sleep = 110; - - rcu_register_thread(); - for (i = 0; i <= nr_entries; i++) - mtree_store_range(mt, i*10, i*10 + 5, - xa_mk_value(i), GFP_KERNEL); - /* Store across several slots. */ - vals.count = 1000; - vals.mt = mt; - vals.index = 8650; - vals.last = 8666; - vals.entry1 = xa_mk_value(865); - vals.entry2 = xa_mk_value(8650); - vals.entry3 = xa_mk_value(8650); - vals.range_start = 0; - vals.range_end = ULONG_MAX; - vals.seen_entry2 = 0; - vals.seen_entry3 = 0; - - run_check_rcu(mt, &vals); - mtree_destroy(mt); - - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= nr_entries; i++) - mtree_store_range(mt, i*10, i*10 + 5, - xa_mk_value(i), GFP_KERNEL); - - /* 4390-4395: value 439 (0x1b7) [0x36f] */ - /* Store across several slots. */ - /* Spanning store. */ - vals.count = 10000; - vals.mt = mt; - vals.index = 4390; - vals.last = 4398; - vals.entry1 = xa_mk_value(4390); - vals.entry2 = xa_mk_value(439); - vals.entry3 = xa_mk_value(439); - vals.seen_entry2 = 0; - vals.range_start = 4316; - vals.range_end = 5035; - run_check_rcu(mt, &vals); - mtree_destroy(mt); - - - /* Forward writer for rcu stress */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - rcu_stress(mt, true); - mtree_destroy(mt); - - /* Reverse writer for rcu stress */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - rcu_stress(mt, false); - mtree_destroy(mt); - - /* Slow reader test with spanning store. */ - mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); - for (i = 0; i <= nr_entries; i++) - mtree_store_range(mt, i*10, i*10 + 5, - xa_mk_value(i), GFP_KERNEL); - - /* 4390-4395: value 439 (0x1b7) [0x36f] */ - /* Store across several slots. */ - /* Spanning store. */ - vals.count = 15000; - vals.mt = mt; - vals.index = 4390; - vals.last = 4398; - vals.entry1 = xa_mk_value(4390); - vals.entry2 = xa_mk_value(439); - vals.entry3 = xa_mk_value(4391); - vals.seen_toggle = 0; - vals.seen_added = 0; - vals.seen_removed = 0; - vals.range_start = 4316; - vals.range_end = 5035; - vals.removed = 4360; - vals.added = 4396; - vals.toggle = 4347; - vals.val_sleep = 400; - vals.loop_sleep = 200; - vals.seen_entry2 = 0; - vals.seen_entry3 = 0; - vals.seen_both = 0; - vals.entry3 = xa_mk_value(438); - - run_check_rcu_slowread(mt, &vals); - rcu_unregister_thread(); -} -extern void test_kmem_cache_bulk(void); /* Test spanning writes that require balancing right sibling or right cousin */ static noinline void check_spanning_relatives(struct maple_tree *mt) @@ -37556,7 +2021,7 @@ static noinline void check_fuzzer(struct maple_tree *mt) * Also discovered issue with metadata setting. */ mt_init_flags(mt, 0); - mtree_test_store_range(mt, 0, 18446744073709551615UL, (void *)0x1); + mtree_test_store_range(mt, 0, ULONG_MAX, (void *)0x1); mtree_test_store(mt, 4, (void *)0x9); mtree_test_erase(mt, 5); mtree_test_erase(mt, 0); @@ -37612,9 +2077,9 @@ static noinline void check_fuzzer(struct maple_tree *mt) mtree_test_insert(mt, 8, (void *)0x11); mtree_test_insert(mt, 4, (void *)0x9); mtree_test_insert(mt, 2480, (void *)0x1361); - mtree_test_insert(mt, 18446744073709551615UL, + mtree_test_insert(mt, ULONG_MAX, (void *)0xffffffffffffffff); - mtree_test_erase(mt, 18446744073709551615UL); + mtree_test_erase(mt, ULONG_MAX); mtree_destroy(mt); /* @@ -37883,8 +2348,8 @@ static noinline void check_fuzzer(struct maple_tree *mt) mtree_test_insert(mt, 8, (void *)0x11); mtree_test_insert(mt, 21, (void *)0x2b); mtree_test_insert(mt, 2, (void *)0x5); - mtree_test_insert(mt, 18446744073709551605UL, (void *)0xffffffffffffffeb); - mtree_test_erase(mt, 18446744073709551605UL); + mtree_test_insert(mt, ULONG_MAX - 10, (void *)0xffffffffffffffeb); + mtree_test_erase(mt, ULONG_MAX - 10); mtree_test_store_range(mt, 0, 281, (void *)0x1); mtree_test_erase(mt, 2); mtree_test_insert(mt, 1211, (void *)0x977); @@ -37900,9 +2365,11 @@ static noinline void check_fuzzer(struct maple_tree *mt) mtree_test_insert(mt, 8, (void *)0x11); mtree_test_insert(mt, 21, (void *)0x2b); mtree_test_insert(mt, 2, (void *)0x5); - mtree_test_insert(mt, 18446744073709551605UL, (void *)0xffffffffffffffeb); - mtree_test_erase(mt, 18446744073709551605UL); + mtree_test_insert(mt, ULONG_MAX - 10, (void *)0xffffffffffffffeb); + mtree_test_erase(mt, ULONG_MAX - 10); } + +/* duplicate the tree with a specific gap */ static noinline void check_dup_gaps(struct maple_tree *mt, unsigned long nr_entries, bool zero_start, unsigned long gap) @@ -37914,7 +2381,6 @@ static noinline void check_dup_gaps(struct maple_tree *mt, MA_STATE(mas, mt, 0, 0); MA_STATE(newmas, &newmt, 0, 0); - if (!zero_start) i = 1; @@ -37925,58 +2391,78 @@ static noinline void check_dup_gaps(struct maple_tree *mt, mt_init_flags(&newmt, MT_FLAGS_ALLOC_RANGE); mt_set_non_kernel(99999); + mas_lock(&newmas); ret = mas_expected_entries(&newmas, nr_entries); mt_set_non_kernel(0); MT_BUG_ON(mt, ret != 0); + rcu_read_lock(); mas_for_each(&mas, tmp, ULONG_MAX) { newmas.index = mas.index; newmas.last = mas.last; mas_store(&newmas, tmp); } - - mas_destroy(&mas); + rcu_read_unlock(); mas_destroy(&newmas); + mas_unlock(&newmas); + mtree_destroy(&newmt); } +/* Duplicate many sizes of trees. Mainly to test expected entry values */ static noinline void check_dup(struct maple_tree *mt) { int i; + int big_start = 100010; /* Check with a value at zero */ for (i = 10; i < 1000; i++) { mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); check_dup_gaps(mt, i, true, 5); mtree_destroy(mt); + rcu_barrier(); } + cond_resched(); + mt_cache_shrink(); /* Check with a value at zero, no gap */ for (i = 1000; i < 2000; i++) { mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); check_dup_gaps(mt, i, true, 0); mtree_destroy(mt); + rcu_barrier(); } + cond_resched(); + mt_cache_shrink(); /* Check with a value at zero and unreasonably large */ - for (i = 100010; i < 100020; i++) { + for (i = big_start; i < big_start + 10; i++) { mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); check_dup_gaps(mt, i, true, 5); mtree_destroy(mt); + rcu_barrier(); } + cond_resched(); + mt_cache_shrink(); /* Small to medium size not starting at zero*/ for (i = 200; i < 1000; i++) { mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); check_dup_gaps(mt, i, false, 5); mtree_destroy(mt); + rcu_barrier(); } + cond_resched(); + mt_cache_shrink(); /* Unreasonably large not starting at zero*/ - for (i = 100010; i < 100020; i++) { + for (i = big_start; i < big_start + 10; i++) { mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); check_dup_gaps(mt, i, false, 5); mtree_destroy(mt); + rcu_barrier(); + cond_resched(); + mt_cache_shrink(); } /* Check non-allocation tree not starting at zero */ @@ -37984,22 +2470,32 @@ static noinline void check_dup(struct maple_tree *mt) mt_init_flags(mt, 0); check_dup_gaps(mt, i, false, 5); mtree_destroy(mt); + rcu_barrier(); + cond_resched(); + if (i % 2 == 0) + mt_cache_shrink(); } + mt_cache_shrink(); /* Check non-allocation tree starting at zero */ for (i = 200; i < 1000; i++) { mt_init_flags(mt, 0); check_dup_gaps(mt, i, true, 5); mtree_destroy(mt); + rcu_barrier(); + cond_resched(); } + mt_cache_shrink(); /* Unreasonably large */ - for (i = 100015; i < 100020; i++) { + for (i = big_start + 5; i < big_start + 10; i++) { mt_init_flags(mt, 0); check_dup_gaps(mt, i, true, 5); mtree_destroy(mt); + rcu_barrier(); + mt_cache_shrink(); + cond_resched(); } - } static DEFINE_MTREE(tree); @@ -38059,28 +2555,6 @@ static int maple_tree_seed(void) goto skip; #endif - test_kmem_cache_bulk(); - - mt_init_flags(&tree, 0); - check_new_node(&tree); - mtree_destroy(&tree); - - mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); - check_prealloc(&tree); - mtree_destroy(&tree); - - mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); - check_spanning_write(&tree); - mtree_destroy(&tree); - - mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); - check_null_expand(&tree); - mtree_destroy(&tree); - - mt_init_flags(&tree, 0); - check_dfs_preorder(&tree); - mtree_destroy(&tree); - mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); check_forking(&tree); mtree_destroy(&tree); @@ -38094,6 +2568,8 @@ static int maple_tree_seed(void) check_ranges(&tree); mtree_destroy(&tree); +#if defined(CONFIG_64BIT) + /* These tests have ranges outside of 4GB */ mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); check_alloc_range(&tree); mtree_destroy(&tree); @@ -38101,6 +2577,7 @@ static int maple_tree_seed(void) mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); check_alloc_rev_range(&tree); mtree_destroy(&tree); +#endif mt_init_flags(&tree, 0); @@ -38159,10 +2636,6 @@ static int maple_tree_seed(void) /* Clear out the tree */ mtree_destroy(&tree); - mt_init_flags(&tree, 0); - check_erase_testset(&tree); - mtree_destroy(&tree); - mt_init_flags(&tree, 0); /* * set[] = {5015, 5014, 5017, 25, 1000, @@ -38215,7 +2688,6 @@ static int maple_tree_seed(void) check_load(&tree, set[9], &tree); mtree_destroy(&tree); - check_nomem(&tree); mt_init_flags(&tree, 0); check_seq(&tree, 16, false); mtree_destroy(&tree); @@ -38242,10 +2714,6 @@ static int maple_tree_seed(void) check_prev_entry(&tree); mtree_destroy(&tree); - mt_init_flags(&tree, 0); - check_erase2_sets(&tree); - mtree_destroy(&tree); - mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); check_gap_combining(&tree); mtree_destroy(&tree); @@ -38258,14 +2726,6 @@ static int maple_tree_seed(void) next_prev_test(&tree); mtree_destroy(&tree); - mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); - check_rcu_simulated(&tree); - mtree_destroy(&tree); - - mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); - check_rcu_threaded(&tree); - mtree_destroy(&tree); - mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); check_spanning_relatives(&tree); mtree_destroy(&tree); diff --git a/lib/vdso/Makefile b/lib/vdso/Makefile index c415a685d61bb16ae92d196fb035ca7e3f397c6d..e814061d6aa010e90ab11a75e8a8171dc4cf8755 100644 --- a/lib/vdso/Makefile +++ b/lib/vdso/Makefile @@ -17,6 +17,6 @@ $(error ARCH_REL_TYPE_ABS is not set) endif quiet_cmd_vdso_check = VDSOCHK $@ - cmd_vdso_check = if $(OBJDUMP) -R $@ | egrep -h "$(ARCH_REL_TYPE_ABS)"; \ + cmd_vdso_check = if $(OBJDUMP) -R $@ | grep -E -h "$(ARCH_REL_TYPE_ABS)"; \ then (echo >&2 "$@: dynamic relocations are not supported"; \ rm -f $@; /bin/false); fi diff --git a/mm/compaction.c b/mm/compaction.c index c51f7f545afe98644da0f1485f43c35448fd7406..1f6da31dd9a501ca2df334d162cfe1e1432dfa8e 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -984,29 +984,29 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, goto isolate_fail; } + /* + * Be careful not to clear PageLRU until after we're + * sure the page is not being freed elsewhere -- the + * page release code relies on it. + */ + if (unlikely(!get_page_unless_zero(page))) + goto isolate_fail; + /* * Migration will fail if an anonymous page is pinned in memory, * so avoid taking lru_lock and isolating it unnecessarily in an * admittedly racy check. */ mapping = page_mapping(page); - if (!mapping && page_count(page) > page_mapcount(page)) - goto isolate_fail; + if (!mapping && (page_count(page) - 1) > total_mapcount(page)) + goto isolate_fail_put; /* * Only allow to migrate anonymous pages in GFP_NOFS context * because those do not depend on fs locks. */ if (!(cc->gfp_mask & __GFP_FS) && mapping) - goto isolate_fail; - - /* - * Be careful not to clear PageLRU until after we're - * sure the page is not being freed elsewhere -- the - * page release code relies on it. - */ - if (unlikely(!get_page_unless_zero(page))) - goto isolate_fail; + goto isolate_fail_put; /* Only take pages on LRU: a check now makes later tests safe */ if (!PageLRU(page)) diff --git a/mm/damon/dbgfs.c b/mm/damon/dbgfs.c index 6f0ae7d3ae39bb62125cb654d1083c96aa4dab43..b3f454a5c6828fa2675cd7eb7c94dff5d34102c9 100644 --- a/mm/damon/dbgfs.c +++ b/mm/damon/dbgfs.c @@ -890,6 +890,7 @@ static ssize_t dbgfs_mk_context_write(struct file *file, static int dbgfs_rm_context(char *name) { struct dentry *root, *dir, **new_dirs; + struct inode *inode; struct damon_ctx **new_ctxs; int i, j; int ret = 0; @@ -905,6 +906,12 @@ static int dbgfs_rm_context(char *name) if (!dir) return -ENOENT; + inode = d_inode(dir); + if (!S_ISDIR(inode->i_mode)) { + ret = -EINVAL; + goto out_dput; + } + new_dirs = kmalloc_array(dbgfs_nr_ctxs - 1, sizeof(*dbgfs_dirs), GFP_KERNEL); if (!new_dirs) { diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index 9f1219a67e3f17bf49794581fa266f6b45782d59..07e5f1bdf025fa932aa28dca6f997e9b85753f34 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -2283,12 +2283,54 @@ static struct damos *damon_sysfs_mk_scheme( &wmarks); } +static void damon_sysfs_update_scheme(struct damos *scheme, + struct damon_sysfs_scheme *sysfs_scheme) +{ + struct damon_sysfs_access_pattern *access_pattern = + sysfs_scheme->access_pattern; + struct damon_sysfs_quotas *sysfs_quotas = sysfs_scheme->quotas; + struct damon_sysfs_weights *sysfs_weights = sysfs_quotas->weights; + struct damon_sysfs_watermarks *sysfs_wmarks = sysfs_scheme->watermarks; + + scheme->pattern.min_sz_region = access_pattern->sz->min; + scheme->pattern.max_sz_region = access_pattern->sz->max; + scheme->pattern.min_nr_accesses = access_pattern->nr_accesses->min; + scheme->pattern.max_nr_accesses = access_pattern->nr_accesses->max; + scheme->pattern.min_age_region = access_pattern->age->min; + scheme->pattern.max_age_region = access_pattern->age->max; + + scheme->action = sysfs_scheme->action; + + scheme->quota.ms = sysfs_quotas->ms; + scheme->quota.sz = sysfs_quotas->sz; + scheme->quota.reset_interval = sysfs_quotas->reset_interval_ms; + scheme->quota.weight_sz = sysfs_weights->sz; + scheme->quota.weight_nr_accesses = sysfs_weights->nr_accesses; + scheme->quota.weight_age = sysfs_weights->age; + + scheme->wmarks.metric = sysfs_wmarks->metric; + scheme->wmarks.interval = sysfs_wmarks->interval_us; + scheme->wmarks.high = sysfs_wmarks->high; + scheme->wmarks.mid = sysfs_wmarks->mid; + scheme->wmarks.low = sysfs_wmarks->low; +} + static int damon_sysfs_set_schemes(struct damon_ctx *ctx, struct damon_sysfs_schemes *sysfs_schemes) { - int i; + struct damos *scheme, *next; + int i = 0; - for (i = 0; i < sysfs_schemes->nr; i++) { + damon_for_each_scheme_safe(scheme, next, ctx) { + if (i < sysfs_schemes->nr) + damon_sysfs_update_scheme(scheme, + sysfs_schemes->schemes_arr[i]); + else + damon_destroy_scheme(scheme); + i++; + } + + for (; i < sysfs_schemes->nr; i++) { struct damos *scheme, *next; scheme = damon_sysfs_mk_scheme(sysfs_schemes->schemes_arr[i]); @@ -2339,6 +2381,10 @@ static int damon_sysfs_upd_schemes_stats(struct damon_sysfs_kdamond *kdamond) damon_for_each_scheme(scheme, ctx) { struct damon_sysfs_stats *sysfs_stats; + /* user could have removed the scheme sysfs dir */ + if (schemes_idx >= sysfs_schemes->nr) + break; + sysfs_stats = sysfs_schemes->schemes_arr[schemes_idx++]->stats; sysfs_stats->nr_tried = scheme->stat.nr_tried; sysfs_stats->sz_tried = scheme->stat.sz_tried; diff --git a/mm/failslab.c b/mm/failslab.c index 58df9789f1d22627f569e92d527c50068f276062..ffc420c0e767f097380e587cb833eb495a484d49 100644 --- a/mm/failslab.c +++ b/mm/failslab.c @@ -16,6 +16,8 @@ static struct { bool __should_failslab(struct kmem_cache *s, gfp_t gfpflags) { + int flags = 0; + /* No fault-injection for bootstrap cache */ if (unlikely(s == kmem_cache)) return false; @@ -30,10 +32,16 @@ bool __should_failslab(struct kmem_cache *s, gfp_t gfpflags) if (failslab.cache_filter && !(s->flags & SLAB_FAILSLAB)) return false; + /* + * In some cases, it expects to specify __GFP_NOWARN + * to avoid printing any information(not just a warning), + * thus avoiding deadlocks. See commit 6b9dbedbe349 for + * details. + */ if (gfpflags & __GFP_NOWARN) - failslab.attr.no_warn = true; + flags |= FAULT_NOWARN; - return should_fail(&failslab.attr, s->object_size); + return should_fail_ex(&failslab.attr, s->object_size, flags); } static int __init setup_failslab(char *str) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 561a42567477dce391b8993125a680106c6dcae9..811d19b5c4f606f4bf6e31df751d376ee000aaef 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2206,9 +2206,12 @@ static void __split_huge_pmd_locked(struct vm_area_struct *vma, pmd_t *pmd, entry = pte_wrprotect(entry); if (!young) entry = pte_mkold(entry); - /* NOTE: this may set soft-dirty too on some archs */ - if (dirty) - entry = pte_mkdirty(entry); + /* + * NOTE: we don't do pte_mkdirty when dirty==true + * because it breaks sparc64 which can sigsegv + * random process. Need to revisit when we figure + * out what is special with sparc64. + */ if (soft_dirty) entry = pte_mksoft_dirty(entry); if (uffd_wp) diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 546df97c31e4cb2ed15d15f160480a21b9825ea2..e36ca75311a5c8f4900f22685afcae1b775a57da 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -1800,6 +1800,7 @@ static bool __prep_compound_gigantic_page(struct page *page, unsigned int order, /* we rely on prep_new_huge_page to set the destructor */ set_compound_order(page, order); + __ClearPageReserved(page); __SetPageHead(page); for (i = 0; i < nr_pages; i++) { p = nth_page(page, i); @@ -1816,7 +1817,8 @@ static bool __prep_compound_gigantic_page(struct page *page, unsigned int order, * on the head page when they need know if put_page() is needed * after get_user_pages(). */ - __ClearPageReserved(p); + if (i != 0) /* head page cleared above */ + __ClearPageReserved(p); /* * Subtle and very unlikely * @@ -5204,17 +5206,22 @@ void __unmap_hugepage_range_final(struct mmu_gather *tlb, __unmap_hugepage_range(tlb, vma, start, end, ref_page, zap_flags); - /* - * Unlock and free the vma lock before releasing i_mmap_rwsem. When - * the vma_lock is freed, this makes the vma ineligible for pmd - * sharing. And, i_mmap_rwsem is required to set up pmd sharing. - * This is important as page tables for this unmapped range will - * be asynchrously deleted. If the page tables are shared, there - * will be issues when accessed by someone else. - */ - __hugetlb_vma_unlock_write_free(vma); - - i_mmap_unlock_write(vma->vm_file->f_mapping); + if (zap_flags & ZAP_FLAG_UNMAP) { /* final unmap */ + /* + * Unlock and free the vma lock before releasing i_mmap_rwsem. + * When the vma_lock is freed, this makes the vma ineligible + * for pmd sharing. And, i_mmap_rwsem is required to set up + * pmd sharing. This is important as page tables for this + * unmapped range will be asynchrously deleted. If the page + * tables are shared, there will be issues when accessed by + * someone else. + */ + __hugetlb_vma_unlock_write_free(vma); + i_mmap_unlock_write(vma->vm_file->f_mapping); + } else { + i_mmap_unlock_write(vma->vm_file->f_mapping); + hugetlb_vma_unlock_write(vma); + } } void unmap_hugepage_range(struct vm_area_struct *vma, unsigned long start, @@ -6111,6 +6118,10 @@ int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm, ptl = huge_pte_lock(h, dst_mm, dst_pte); + ret = -EIO; + if (PageHWPoison(page)) + goto out_release_unlock; + /* * We allow to overwrite a pte marker: consider when both MISSING|WP * registered, we firstly wr-protect a none pte which has no page cache diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c index ba2a2596fb4e853dfdfa86476eb938ffe1430e26..4962dd1ba4a680a1c9cca118bf8dc7908be9a78a 100644 --- a/mm/hugetlb_vmemmap.c +++ b/mm/hugetlb_vmemmap.c @@ -11,6 +11,7 @@ #define pr_fmt(fmt) "HugeTLB: " fmt #include +#include #include #include #include diff --git a/mm/kfence/report.c b/mm/kfence/report.c index 7e496856c2ebeb6b5f0b7dc88aa8c6904e8d5db3..46ecea18c4ca0ccd7142e6822082cf4bfdad17c5 100644 --- a/mm/kfence/report.c +++ b/mm/kfence/report.c @@ -75,18 +75,23 @@ static int get_stack_skipnr(const unsigned long stack_entries[], int num_entries if (str_has_prefix(buf, ARCH_FUNC_PREFIX "kfence_") || str_has_prefix(buf, ARCH_FUNC_PREFIX "__kfence_") || + str_has_prefix(buf, ARCH_FUNC_PREFIX "__kmem_cache_free") || !strncmp(buf, ARCH_FUNC_PREFIX "__slab_free", len)) { /* - * In case of tail calls from any of the below - * to any of the above. + * In case of tail calls from any of the below to any of + * the above, optimized by the compiler such that the + * stack trace would omit the initial entry point below. */ fallback = skipnr + 1; } - /* Also the *_bulk() variants by only checking prefixes. */ + /* + * The below list should only include the initial entry points + * into the slab allocators. Includes the *_bulk() variants by + * checking prefixes. + */ if (str_has_prefix(buf, ARCH_FUNC_PREFIX "kfree") || str_has_prefix(buf, ARCH_FUNC_PREFIX "kmem_cache_free") || - str_has_prefix(buf, ARCH_FUNC_PREFIX "__kmem_cache_free") || str_has_prefix(buf, ARCH_FUNC_PREFIX "__kmalloc") || str_has_prefix(buf, ARCH_FUNC_PREFIX "kmem_cache_alloc")) goto found; diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 4734315f79407bc75db0f995445621f41b1d2f17..3703a56571c125e84cebc3058956c9d09681e06b 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -97,8 +97,8 @@ struct collapse_control { /* Num pages scanned per node */ u32 node_load[MAX_NUMNODES]; - /* Last target selected in hpage_collapse_find_target_node() */ - int last_target_node; + /* nodemask for allocation fallback */ + nodemask_t alloc_nmask; }; /** @@ -734,7 +734,6 @@ static void khugepaged_alloc_sleep(void) struct collapse_control khugepaged_collapse_control = { .is_khugepaged = true, - .last_target_node = NUMA_NO_NODE, }; static bool hpage_collapse_scan_abort(int nid, struct collapse_control *cc) @@ -783,16 +782,11 @@ static int hpage_collapse_find_target_node(struct collapse_control *cc) target_node = nid; } - /* do some balance if several nodes have the same hit record */ - if (target_node <= cc->last_target_node) - for (nid = cc->last_target_node + 1; nid < MAX_NUMNODES; - nid++) - if (max_value == cc->node_load[nid]) { - target_node = nid; - break; - } + for_each_online_node(nid) { + if (max_value == cc->node_load[nid]) + node_set(nid, cc->alloc_nmask); + } - cc->last_target_node = target_node; return target_node; } #else @@ -802,9 +796,10 @@ static int hpage_collapse_find_target_node(struct collapse_control *cc) } #endif -static bool hpage_collapse_alloc_page(struct page **hpage, gfp_t gfp, int node) +static bool hpage_collapse_alloc_page(struct page **hpage, gfp_t gfp, int node, + nodemask_t *nmask) { - *hpage = __alloc_pages_node(node, gfp, HPAGE_PMD_ORDER); + *hpage = __alloc_pages(gfp, HPAGE_PMD_ORDER, node, nmask); if (unlikely(!*hpage)) { count_vm_event(THP_COLLAPSE_ALLOC_FAILED); return false; @@ -955,12 +950,11 @@ static int __collapse_huge_page_swapin(struct mm_struct *mm, static int alloc_charge_hpage(struct page **hpage, struct mm_struct *mm, struct collapse_control *cc) { - /* Only allocate from the target node */ gfp_t gfp = (cc->is_khugepaged ? alloc_hugepage_khugepaged_gfpmask() : - GFP_TRANSHUGE) | __GFP_THISNODE; + GFP_TRANSHUGE); int node = hpage_collapse_find_target_node(cc); - if (!hpage_collapse_alloc_page(hpage, gfp, node)) + if (!hpage_collapse_alloc_page(hpage, gfp, node, &cc->alloc_nmask)) return SCAN_ALLOC_HUGE_PAGE_FAIL; if (unlikely(mem_cgroup_charge(page_folio(*hpage), mm, gfp))) return SCAN_CGROUP_CHARGE_FAIL; @@ -1057,6 +1051,7 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address, _pmd = pmdp_collapse_flush(vma, address, pmd); spin_unlock(pmd_ptl); mmu_notifier_invalidate_range_end(&range); + tlb_remove_table_sync_one(); spin_lock(pte_ptl); result = __collapse_huge_page_isolate(vma, address, pte, cc, @@ -1144,6 +1139,7 @@ static int hpage_collapse_scan_pmd(struct mm_struct *mm, goto out; memset(cc->node_load, 0, sizeof(cc->node_load)); + nodes_clear(cc->alloc_nmask); pte = pte_offset_map_lock(mm, pmd, address, &ptl); for (_address = address, _pte = pte; _pte < pte + HPAGE_PMD_NR; _pte++, _address += PAGE_SIZE) { @@ -1384,16 +1380,43 @@ static int set_huge_pmd(struct vm_area_struct *vma, unsigned long addr, return SCAN_SUCCEED; } +/* + * A note about locking: + * Trying to take the page table spinlocks would be useless here because those + * are only used to synchronize: + * + * - modifying terminal entries (ones that point to a data page, not to another + * page table) + * - installing *new* non-terminal entries + * + * Instead, we need roughly the same kind of protection as free_pgtables() or + * mm_take_all_locks() (but only for a single VMA): + * The mmap lock together with this VMA's rmap locks covers all paths towards + * the page table entries we're messing with here, except for hardware page + * table walks and lockless_pages_from_mm(). + */ static void collapse_and_free_pmd(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, pmd_t *pmdp) { - spinlock_t *ptl; pmd_t pmd; + struct mmu_notifier_range range; mmap_assert_write_locked(mm); - ptl = pmd_lock(vma->vm_mm, pmdp); + if (vma->vm_file) + lockdep_assert_held_write(&vma->vm_file->f_mapping->i_mmap_rwsem); + /* + * All anon_vmas attached to the VMA have the same root and are + * therefore locked by the same lock. + */ + if (vma->anon_vma) + lockdep_assert_held_write(&vma->anon_vma->root->rwsem); + + mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, NULL, mm, addr, + addr + HPAGE_PMD_SIZE); + mmu_notifier_invalidate_range_start(&range); pmd = pmdp_collapse_flush(vma, addr, pmdp); - spin_unlock(ptl); + tlb_remove_table_sync_one(); + mmu_notifier_invalidate_range_end(&range); mm_dec_nr_ptes(mm); page_table_check_pte_clear_range(mm, addr, pmd); pte_free(mm, pmd_pgtable(pmd)); @@ -1444,6 +1467,14 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr, if (!hugepage_vma_check(vma, vma->vm_flags, false, false, false)) return SCAN_VMA_CHECK; + /* + * Symmetry with retract_page_tables(): Exclude MAP_PRIVATE mappings + * that got written to. Without this, we'd have to also lock the + * anon_vma if one exists. + */ + if (vma->anon_vma) + return SCAN_VMA_CHECK; + /* Keep pmd pgtable for uffd-wp; see comment in retract_page_tables() */ if (userfaultfd_wp(vma)) return SCAN_PTE_UFFD_WP; @@ -1477,6 +1508,20 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr, goto drop_hpage; } + /* + * We need to lock the mapping so that from here on, only GUP-fast and + * hardware page walks can access the parts of the page tables that + * we're operating on. + * See collapse_and_free_pmd(). + */ + i_mmap_lock_write(vma->vm_file->f_mapping); + + /* + * This spinlock should be unnecessary: Nobody else should be accessing + * the page tables under spinlock protection here, only + * lockless_pages_from_mm() and the hardware page walker can access page + * tables while all the high-level locks are held in write mode. + */ start_pte = pte_offset_map_lock(mm, pmd, haddr, &ptl); result = SCAN_FAIL; @@ -1531,6 +1576,8 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr, /* step 4: remove pte entries */ collapse_and_free_pmd(mm, vma, haddr, pmd); + i_mmap_unlock_write(vma->vm_file->f_mapping); + maybe_install_pmd: /* step 5: install pmd entry */ result = install_pmd @@ -1544,6 +1591,7 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr, abort: pte_unmap_unlock(start_pte, ptl); + i_mmap_unlock_write(vma->vm_file->f_mapping); goto drop_hpage; } @@ -1600,7 +1648,8 @@ static int retract_page_tables(struct address_space *mapping, pgoff_t pgoff, * An alternative would be drop the check, but check that page * table is clear before calling pmdp_collapse_flush() under * ptl. It has higher chance to recover THP for the VMA, but - * has higher cost too. + * has higher cost too. It would also probably require locking + * the anon_vma. */ if (vma->anon_vma) { result = SCAN_PAGE_ANON; @@ -2077,6 +2126,7 @@ static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, present = 0; swap = 0; memset(cc->node_load, 0, sizeof(cc->node_load)); + nodes_clear(cc->alloc_nmask); rcu_read_lock(); xas_for_each(&xas, page, start + HPAGE_PMD_NR - 1) { if (xas_retry(&xas, page)) @@ -2157,8 +2207,7 @@ static int hpage_collapse_scan_file(struct mm_struct *mm, unsigned long addr, } } - trace_mm_khugepaged_scan_file(mm, page, file->f_path.dentry->d_iname, - present, swap, result); + trace_mm_khugepaged_scan_file(mm, page, file, present, swap, result); return result; } #else @@ -2576,7 +2625,6 @@ int madvise_collapse(struct vm_area_struct *vma, struct vm_area_struct **prev, if (!cc) return -ENOMEM; cc->is_khugepaged = false; - cc->last_target_node = NUMA_NO_NODE; mmgrab(mm); lru_add_drain_all(); @@ -2602,6 +2650,7 @@ int madvise_collapse(struct vm_area_struct *vma, struct vm_area_struct **prev, } mmap_assert_locked(mm); memset(cc->node_load, 0, sizeof(cc->node_load)); + nodes_clear(cc->alloc_nmask); if (IS_ENABLED(CONFIG_SHMEM) && vma->vm_file) { struct file *file = get_file(vma->vm_file); pgoff_t pgoff = linear_page_index(vma, addr); diff --git a/mm/kmsan/kmsan.h b/mm/kmsan/kmsan.h index 7019c46d33a745be541f78d7e270cc769677eafe..a1474420543515e447dc34ec658856a52320fc1d 100644 --- a/mm/kmsan/kmsan.h +++ b/mm/kmsan/kmsan.h @@ -124,6 +124,8 @@ static __always_inline bool kmsan_in_runtime(void) { if ((hardirq_count() >> HARDIRQ_SHIFT) > 1) return true; + if (in_nmi()) + return true; return kmsan_get_context()->kmsan_in_runtime; } diff --git a/mm/maccess.c b/mm/maccess.c index 5f4d240f67ecc0cae5c0900ae6e9545185847e0b..074f6b086671ebd25c59cabf84591344e6248aef 100644 --- a/mm/maccess.c +++ b/mm/maccess.c @@ -97,7 +97,7 @@ long strncpy_from_kernel_nofault(char *dst, const void *unsafe_addr, long count) return src - unsafe_addr; Efault: pagefault_enable(); - dst[-1] = '\0'; + dst[0] = '\0'; return -EFAULT; } diff --git a/mm/madvise.c b/mm/madvise.c index c7105ec6d08c00b9501763165819ad678a4d579d..b913ba6efc10beb7e60b0a4851b68ca6f47f2af3 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -772,8 +772,8 @@ static int madvise_free_single_vma(struct vm_area_struct *vma, * Application no longer needs these pages. If the pages are dirty, * it's OK to just throw them away. The app will be more careful about * data it wants to keep. Be sure to free swap resources too. The - * zap_page_range call sets things up for shrink_active_list to actually free - * these pages later if no one else has touched them in the meantime, + * zap_page_range_single call sets things up for shrink_active_list to actually + * free these pages later if no one else has touched them in the meantime, * although we could add these pages to a global reuse list for * shrink_active_list to pick up before reclaiming other pages. * @@ -790,7 +790,7 @@ static int madvise_free_single_vma(struct vm_area_struct *vma, static long madvise_dontneed_single_vma(struct vm_area_struct *vma, unsigned long start, unsigned long end) { - zap_page_range(vma, start, end - start); + zap_page_range_single(vma, start, end - start, NULL); return 0; } diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 2d8549ae1b3004f78c244e578d3bf0ce36b0b844..a1a35c12635ef7ea49528c8857fae9016644cfc9 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3026,7 +3026,7 @@ struct obj_cgroup *get_obj_cgroup_from_page(struct page *page) { struct obj_cgroup *objcg; - if (!memcg_kmem_enabled() || memcg_kmem_bypass()) + if (!memcg_kmem_enabled()) return NULL; if (PageMemcgKmem(page)) { diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 145bb561ddb3ad2b8a0b723a4fec4fc2ef487254..bead6bccc7f28ebd001e7ed982979d5da26e7da5 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1080,6 +1080,7 @@ static int me_huge_page(struct page_state *ps, struct page *p) int res; struct page *hpage = compound_head(p); struct address_space *mapping; + bool extra_pins = false; if (!PageHuge(hpage)) return MF_DELAYED; @@ -1087,6 +1088,8 @@ static int me_huge_page(struct page_state *ps, struct page *p) mapping = page_mapping(hpage); if (mapping) { res = truncate_error_page(hpage, page_to_pfn(p), mapping); + /* The page is kept in page cache. */ + extra_pins = true; unlock_page(hpage); } else { unlock_page(hpage); @@ -1104,7 +1107,7 @@ static int me_huge_page(struct page_state *ps, struct page *p) } } - if (has_extra_refcount(ps, p, false)) + if (has_extra_refcount(ps, p, extra_pins)) res = MF_FAILED; return res; diff --git a/mm/memory.c b/mm/memory.c index f88c351aecd4177b84b4bc34d5c2ed438d76a6b0..8c8420934d60345dbbc9b1b5861b0c470140b710 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1341,15 +1341,6 @@ copy_page_range(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma) return ret; } -/* - * Parameter block passed down to zap_pte_range in exceptional cases. - */ -struct zap_details { - struct folio *single_folio; /* Locked folio to be unmapped */ - bool even_cows; /* Zap COWed private pages too? */ - zap_flags_t zap_flags; /* Extra flags for zapping */ -}; - /* Whether we should zap all COWed (private) pages too */ static inline bool should_zap_cows(struct zap_details *details) { @@ -1720,7 +1711,7 @@ void unmap_vmas(struct mmu_gather *tlb, struct maple_tree *mt, { struct mmu_notifier_range range; struct zap_details details = { - .zap_flags = ZAP_FLAG_DROP_MARKER, + .zap_flags = ZAP_FLAG_DROP_MARKER | ZAP_FLAG_UNMAP, /* Careful - we need to zap private pages too! */ .even_cows = true, }; @@ -1774,19 +1765,27 @@ void zap_page_range(struct vm_area_struct *vma, unsigned long start, * * The range must fit into one VMA. */ -static void zap_page_range_single(struct vm_area_struct *vma, unsigned long address, +void zap_page_range_single(struct vm_area_struct *vma, unsigned long address, unsigned long size, struct zap_details *details) { + const unsigned long end = address + size; struct mmu_notifier_range range; struct mmu_gather tlb; lru_add_drain(); mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, vma->vm_mm, - address, address + size); + address, end); + if (is_vm_hugetlb_page(vma)) + adjust_range_if_pmd_sharing_possible(vma, &range.start, + &range.end); tlb_gather_mmu(&tlb, vma->vm_mm); update_hiwater_rss(vma->vm_mm); mmu_notifier_invalidate_range_start(&range); - unmap_single_vma(&tlb, vma, address, range.end, details); + /* + * unmap 'address-end' not 'range.start-range.end' as range + * could have been expanded for hugetlb pmd sharing. + */ + unmap_single_vma(&tlb, vma, address, end, details); mmu_notifier_invalidate_range_end(&range); tlb_finish_mmu(&tlb); } @@ -3763,7 +3762,7 @@ vm_fault_t do_swap_page(struct vm_fault *vmf) */ get_page(vmf->page); pte_unmap_unlock(vmf->pte, vmf->ptl); - vmf->page->pgmap->ops->migrate_to_ram(vmf); + ret = vmf->page->pgmap->ops->migrate_to_ram(vmf); put_page(vmf->page); } else if (is_hwpoison_entry(entry)) { ret = VM_FAULT_HWPOISON; diff --git a/mm/memremap.c b/mm/memremap.c index 421bec3a29ee730c5f6fd6532f37abc28962b339..08cbf54fe037081af32eed15c1f98dfdeb2ded8e 100644 --- a/mm/memremap.c +++ b/mm/memremap.c @@ -335,6 +335,7 @@ void *memremap_pages(struct dev_pagemap *pgmap, int nid) WARN(1, "File system DAX not supported\n"); return ERR_PTR(-EINVAL); } + params.pgprot = pgprot_decrypted(params.pgprot); break; case MEMORY_DEVICE_GENERIC: break; diff --git a/mm/migrate_device.c b/mm/migrate_device.c index 6fa682eef7a002737e35fd32a96e2afadc184ebd..721b2365dbca966e6f56a916a374596b710459c1 100644 --- a/mm/migrate_device.c +++ b/mm/migrate_device.c @@ -357,7 +357,8 @@ static bool migrate_vma_check_page(struct page *page, struct page *fault_page) } /* - * Unmaps pages for migration. Returns number of unmapped pages. + * Unmaps pages for migration. Returns number of source pfns marked as + * migrating. */ static unsigned long migrate_device_unmap(unsigned long *src_pfns, unsigned long npages, @@ -373,8 +374,11 @@ static unsigned long migrate_device_unmap(unsigned long *src_pfns, struct page *page = migrate_pfn_to_page(src_pfns[i]); struct folio *folio; - if (!page) + if (!page) { + if (src_pfns[i] & MIGRATE_PFN_MIGRATE) + unmapped++; continue; + } /* ZONE_DEVICE pages are not on LRU */ if (!is_zone_device_page(page)) { diff --git a/mm/mmap.c b/mm/mmap.c index 2def55555e05f10336802ae2f09c6a77a39e7e51..a5eb2f175da0a7fbb93d7e31a20ab2bfd85c8d4b 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -456,7 +456,7 @@ void vma_mas_remove(struct vm_area_struct *vma, struct ma_state *mas) * vma_mas_szero() - Set a given range to zero. Used when modifying a * vm_area_struct start or end. * - * @mm: The struct_mm + * @mas: The maple tree ma_state * @start: The start address to zero * @end: The end address to zero. */ @@ -1779,9 +1779,6 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len, */ pgoff = 0; get_area = shmem_get_unmapped_area; - } else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) { - /* Ensures that larger anonymous mappings are THP aligned. */ - get_area = thp_get_unmapped_area; } addr = get_area(file, addr, len, pgoff, flags); @@ -2674,6 +2671,8 @@ unsigned long mmap_region(struct file *file, unsigned long addr, error = -EINVAL; if (file) goto close_and_free_vma; + else if (vma->vm_file) + goto unmap_and_free_vma; else goto free_vma; } @@ -2682,6 +2681,8 @@ unsigned long mmap_region(struct file *file, unsigned long addr, error = -ENOMEM; if (file) goto close_and_free_vma; + else if (vma->vm_file) + goto unmap_and_free_vma; else goto free_vma; } @@ -2751,7 +2752,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr, /* Undo any partial mapping done by a device driver. */ unmap_region(mm, mas.tree, vma, prev, next, vma->vm_start, vma->vm_end); - if (vm_flags & VM_SHARED) + if (file && (vm_flags & VM_SHARED)) mapping_unmap_writable(file->f_mapping); free_vma: vm_area_free(vma); diff --git a/mm/mmu_gather.c b/mm/mmu_gather.c index add4244e5790df28140b8ea7e41125be37b59fbb..3a2c3f8cad2fe8f097fe9352967c7b163d893ebe 100644 --- a/mm/mmu_gather.c +++ b/mm/mmu_gather.c @@ -153,7 +153,7 @@ static void tlb_remove_table_smp_sync(void *arg) /* Simply deliver the interrupt */ } -static void tlb_remove_table_sync_one(void) +void tlb_remove_table_sync_one(void) { /* * This isn't an RCU grace period and hence the page-tables cannot be @@ -177,8 +177,6 @@ static void tlb_remove_table_free(struct mmu_table_batch *batch) #else /* !CONFIG_MMU_GATHER_RCU_TABLE_FREE */ -static void tlb_remove_table_sync_one(void) { } - static void tlb_remove_table_free(struct mmu_table_batch *batch) { __tlb_remove_table_free(batch); diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 218b28ee49ed378523c1d252d4aed0b4d5aedc05..6e60657875d3289defa20e70c116593f0ca38829 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3887,6 +3887,8 @@ __setup("fail_page_alloc=", setup_fail_page_alloc); static bool __should_fail_alloc_page(gfp_t gfp_mask, unsigned int order) { + int flags = 0; + if (order < fail_page_alloc.min_order) return false; if (gfp_mask & __GFP_NOFAIL) @@ -3897,10 +3899,11 @@ static bool __should_fail_alloc_page(gfp_t gfp_mask, unsigned int order) (gfp_mask & __GFP_DIRECT_RECLAIM)) return false; + /* See comment in __should_failslab() */ if (gfp_mask & __GFP_NOWARN) - fail_page_alloc.attr.no_warn = true; + flags |= FAULT_NOWARN; - return should_fail(&fail_page_alloc.attr, 1 << order); + return should_fail_ex(&fail_page_alloc.attr, 1 << order, flags); } #ifdef CONFIG_FAULT_INJECTION_DEBUG_FS diff --git a/mm/page_ext.c b/mm/page_ext.c index affe80243b6d66bdc4a7fb75f575177c7e839c36..ddf1968560f0c09a89079410d4661f3a70ff562f 100644 --- a/mm/page_ext.c +++ b/mm/page_ext.c @@ -166,7 +166,7 @@ struct page_ext *page_ext_get(struct page *page) /** * page_ext_put() - Working with page extended information is done. - * @page_ext - Page extended information received from page_ext_get(). + * @page_ext: Page extended information received from page_ext_get(). * * The page extended information of the page may not be valid after this * function is called. diff --git a/mm/slab_common.c b/mm/slab_common.c index 33b1886b06ebfd4a137c91ae7d4ad22d1e4265f7..0042fb2730d1e1ef107a213627716b149ae96cb7 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -941,7 +941,7 @@ void *__do_kmalloc_node(size_t size, gfp_t flags, int node, unsigned long caller if (unlikely(size > KMALLOC_MAX_CACHE_SIZE)) { ret = __kmalloc_large_node(size, flags, node); - trace_kmalloc(_RET_IP_, ret, size, + trace_kmalloc(caller, ret, size, PAGE_SIZE << get_order(size), flags, node); return ret; } @@ -953,7 +953,7 @@ void *__do_kmalloc_node(size_t size, gfp_t flags, int node, unsigned long caller ret = __kmem_cache_alloc_node(s, flags, node, size, caller); ret = kasan_kmalloc(s, ret, size, flags); - trace_kmalloc(_RET_IP_, ret, size, s->size, flags, node); + trace_kmalloc(caller, ret, size, s->size, flags, node); return ret; } @@ -1010,7 +1010,7 @@ EXPORT_SYMBOL(kfree); /** * __ksize -- Report full size of underlying allocation - * @objp: pointer to the object + * @object: pointer to the object * * This should only be used internally to query the true size of allocations. * It is not meant to be a way to discover the usable size of an allocation @@ -1018,7 +1018,7 @@ EXPORT_SYMBOL(kfree); * the originally requested allocation size may trigger KASAN, UBSAN_BOUNDS, * and/or FORTIFY_SOURCE. * - * Return: size of the actual memory used by @objp in bytes + * Return: size of the actual memory used by @object in bytes */ size_t __ksize(const void *object) { @@ -1040,7 +1040,6 @@ size_t __ksize(const void *object) return slab_ksize(folio_slab(folio)->slab_cache); } -#ifdef CONFIG_TRACING void *kmalloc_trace(struct kmem_cache *s, gfp_t gfpflags, size_t size) { void *ret = __kmem_cache_alloc_node(s, gfpflags, NUMA_NO_NODE, @@ -1064,7 +1063,6 @@ void *kmalloc_node_trace(struct kmem_cache *s, gfp_t gfpflags, return ret; } EXPORT_SYMBOL(kmalloc_node_trace); -#endif /* !CONFIG_TRACING */ #endif /* !CONFIG_SLOB */ gfp_t kmalloc_fix_flags(gfp_t flags) @@ -1411,20 +1409,6 @@ void kfree_sensitive(const void *p) } EXPORT_SYMBOL(kfree_sensitive); -/** - * ksize - get the actual amount of memory allocated for a given object - * @objp: Pointer to the object - * - * kmalloc may internally round up allocations and return more memory - * than requested. ksize() can be used to determine the actual amount of - * memory allocated. The caller may use this additional memory, even though - * a smaller amount of memory was initially specified with the kmalloc call. - * The caller must guarantee that objp points to a valid object previously - * allocated with either kmalloc() or kmem_cache_alloc(). The object - * must not be freed during the duration of the call. - * - * Return: size of the actual memory used by @objp in bytes - */ size_t ksize(const void *objp) { size_t size; diff --git a/mm/swapfile.c b/mm/swapfile.c index 5fc1237a9f214d45a30984ea45a842f8e62d522b..72e481aacd5dfc76b1d091e84bac82835f302d6e 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -973,23 +973,23 @@ static int scan_swap_map_slots(struct swap_info_struct *si, scan: spin_unlock(&si->lock); while (++offset <= READ_ONCE(si->highest_bit)) { - if (swap_offset_available_and_locked(si, offset)) - goto checks; if (unlikely(--latency_ration < 0)) { cond_resched(); latency_ration = LATENCY_LIMIT; scanned_many = true; } + if (swap_offset_available_and_locked(si, offset)) + goto checks; } offset = si->lowest_bit; while (offset < scan_base) { - if (swap_offset_available_and_locked(si, offset)) - goto checks; if (unlikely(--latency_ration < 0)) { cond_resched(); latency_ration = LATENCY_LIMIT; scanned_many = true; } + if (swap_offset_available_and_locked(si, offset)) + goto checks; offset++; } spin_lock(&si->lock); diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index 3d0fef3980b3f93847620f6bc268e671427cd0dd..650ab6cfd5f49a36ff478149b9a14586fa6740cf 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -64,7 +64,7 @@ int mfill_atomic_install_pte(struct mm_struct *dst_mm, pmd_t *dst_pmd, pte_t _dst_pte, *dst_pte; bool writable = dst_vma->vm_flags & VM_WRITE; bool vm_shared = dst_vma->vm_flags & VM_SHARED; - bool page_in_cache = page->mapping; + bool page_in_cache = page_mapping(page); spinlock_t *ptl; struct inode *inode; pgoff_t offset, max_off; diff --git a/mm/vmscan.c b/mm/vmscan.c index 04d8b88e521648752342e3319d3136a02a838a5a..8fcc5fa768c07c0dfea6fcdd7999eabd3b2e844a 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2514,8 +2514,20 @@ static unsigned long shrink_inactive_list(unsigned long nr_to_scan, * the flushers simply cannot keep up with the allocation * rate. Nudge the flusher threads in case they are asleep. */ - if (stat.nr_unqueued_dirty == nr_taken) + if (stat.nr_unqueued_dirty == nr_taken) { wakeup_flusher_threads(WB_REASON_VMSCAN); + /* + * For cgroupv1 dirty throttling is achieved by waking up + * the kernel flusher here and later waiting on folios + * which are in writeback to finish (see shrink_folio_list()). + * + * Flusher may not be able to issue writeback quickly + * enough for cgroupv1 writeback throttling to work + * on a large system. + */ + if (!writeback_throttling_sane(sc)) + reclaim_throttle(pgdat, VMSCAN_THROTTLE_WRITEBACK); + } sc->nr.dirty += stat.nr_dirty; sc->nr.congested += stat.nr_congested; @@ -3975,7 +3987,7 @@ static void walk_pmd_range_locked(pud_t *pud, unsigned long next, struct vm_area goto next; if (!pmd_trans_huge(pmd[i])) { - if (IS_ENABLED(CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG) && + if (arch_has_hw_nonleaf_pmd_young() && get_cap(LRU_GEN_NONLEAF_YOUNG)) pmdp_test_and_clear_young(vma, addr, pmd + i); goto next; @@ -4073,14 +4085,14 @@ static void walk_pmd_range(pud_t *pud, unsigned long start, unsigned long end, #endif walk->mm_stats[MM_NONLEAF_TOTAL]++; -#ifdef CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG - if (get_cap(LRU_GEN_NONLEAF_YOUNG)) { + if (arch_has_hw_nonleaf_pmd_young() && + get_cap(LRU_GEN_NONLEAF_YOUNG)) { if (!pmd_young(val)) continue; walk_pmd_range_locked(pud, addr, vma, args, bitmap, &pos); } -#endif + if (!walk->force_scan && !test_bloom_filter(walk->lruvec, walk->max_seq, pmd + i)) continue; @@ -4971,10 +4983,13 @@ static int evict_folios(struct lruvec *lruvec, struct scan_control *sc, int swap int scanned; int reclaimed; LIST_HEAD(list); + LIST_HEAD(clean); struct folio *folio; + struct folio *next; enum vm_event_item item; struct reclaim_stat stat; struct lru_gen_mm_walk *walk; + bool skip_retry = false; struct mem_cgroup *memcg = lruvec_memcg(lruvec); struct pglist_data *pgdat = lruvec_pgdat(lruvec); @@ -4991,20 +5006,37 @@ static int evict_folios(struct lruvec *lruvec, struct scan_control *sc, int swap if (list_empty(&list)) return scanned; - +retry: reclaimed = shrink_folio_list(&list, pgdat, sc, &stat, false); + sc->nr_reclaimed += reclaimed; - list_for_each_entry(folio, &list, lru) { - /* restore LRU_REFS_FLAGS cleared by isolate_folio() */ - if (folio_test_workingset(folio)) - folio_set_referenced(folio); + list_for_each_entry_safe_reverse(folio, next, &list, lru) { + if (!folio_evictable(folio)) { + list_del(&folio->lru); + folio_putback_lru(folio); + continue; + } - /* don't add rejected pages to the oldest generation */ if (folio_test_reclaim(folio) && - (folio_test_dirty(folio) || folio_test_writeback(folio))) - folio_clear_active(folio); - else - folio_set_active(folio); + (folio_test_dirty(folio) || folio_test_writeback(folio))) { + /* restore LRU_REFS_FLAGS cleared by isolate_folio() */ + if (folio_test_workingset(folio)) + folio_set_referenced(folio); + continue; + } + + if (skip_retry || folio_test_active(folio) || folio_test_referenced(folio) || + folio_mapped(folio) || folio_test_locked(folio) || + folio_test_dirty(folio) || folio_test_writeback(folio)) { + /* don't add rejected folios to the oldest generation */ + set_mask_bits(&folio->flags, LRU_REFS_MASK | LRU_REFS_FLAGS, + BIT(PG_active)); + continue; + } + + /* retry folios that may have missed folio_rotate_reclaimable() */ + list_move(&folio->lru, &clean); + sc->nr_scanned -= folio_nr_pages(folio); } spin_lock_irq(&lruvec->lru_lock); @@ -5026,7 +5058,13 @@ static int evict_folios(struct lruvec *lruvec, struct scan_control *sc, int swap mem_cgroup_uncharge_list(&list); free_unref_page_list(&list); - sc->nr_reclaimed += reclaimed; + INIT_LIST_HEAD(&list); + list_splice_init(&clean, &list); + + if (!list_empty(&list)) { + skip_retry = true; + goto retry; + } if (need_swapping && type == LRU_GEN_ANON) *need_swapping = true; @@ -5354,7 +5392,7 @@ static ssize_t show_enabled(struct kobject *kobj, struct kobj_attribute *attr, c if (arch_has_hw_pte_young() && get_cap(LRU_GEN_MM_WALK)) caps |= BIT(LRU_GEN_MM_WALK); - if (IS_ENABLED(CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG) && get_cap(LRU_GEN_NONLEAF_YOUNG)) + if (arch_has_hw_nonleaf_pmd_young() && get_cap(LRU_GEN_NONLEAF_YOUNG)) caps |= BIT(LRU_GEN_NONLEAF_YOUNG); return snprintf(buf, PAGE_SIZE, "0x%04x\n", caps); @@ -5844,8 +5882,8 @@ static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) enum lru_list lru; unsigned long nr_reclaimed = 0; unsigned long nr_to_reclaim = sc->nr_to_reclaim; + bool proportional_reclaim; struct blk_plug plug; - bool scan_adjusted; if (lru_gen_enabled()) { lru_gen_shrink_lruvec(lruvec, sc); @@ -5868,8 +5906,8 @@ static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) * abort proportional reclaim if either the file or anon lru has already * dropped to zero at the first pass. */ - scan_adjusted = (!cgroup_reclaim(sc) && !current_is_kswapd() && - sc->priority == DEF_PRIORITY); + proportional_reclaim = (!cgroup_reclaim(sc) && !current_is_kswapd() && + sc->priority == DEF_PRIORITY); blk_start_plug(&plug); while (nr[LRU_INACTIVE_ANON] || nr[LRU_ACTIVE_FILE] || @@ -5889,7 +5927,7 @@ static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) cond_resched(); - if (nr_reclaimed < nr_to_reclaim || scan_adjusted) + if (nr_reclaimed < nr_to_reclaim || proportional_reclaim) continue; /* @@ -5940,8 +5978,6 @@ static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) nr_scanned = targets[lru] - nr[lru]; nr[lru] = targets[lru] * (100 - percentage) / 100; nr[lru] -= min(nr[lru], nr_scanned); - - scan_adjusted = true; } blk_finish_plug(&plug); sc->nr_reclaimed += nr_reclaimed; diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c index 56a1867687501a21d85dfd84105ef8f76b9c4d1d..07db2f436d44b03cb706a042df91825b37580f05 100644 --- a/net/9p/trans_fd.c +++ b/net/9p/trans_fd.c @@ -120,7 +120,7 @@ struct p9_conn { struct list_head unsent_req_list; struct p9_req_t *rreq; struct p9_req_t *wreq; - char tmp_buf[7]; + char tmp_buf[P9_HDRSZ]; struct p9_fcall rc; int wpos; int wsize; @@ -202,9 +202,11 @@ static void p9_conn_cancel(struct p9_conn *m, int err) list_for_each_entry_safe(req, rtmp, &m->req_list, req_list) { list_move(&req->req_list, &cancel_list); + req->status = REQ_STATUS_ERROR; } list_for_each_entry_safe(req, rtmp, &m->unsent_req_list, req_list) { list_move(&req->req_list, &cancel_list); + req->status = REQ_STATUS_ERROR; } spin_unlock(&m->req_lock); @@ -291,7 +293,7 @@ static void p9_read_work(struct work_struct *work) if (!m->rc.sdata) { m->rc.sdata = m->tmp_buf; m->rc.offset = 0; - m->rc.capacity = 7; /* start by reading header */ + m->rc.capacity = P9_HDRSZ; /* start by reading header */ } clear_bit(Rpending, &m->wsched); @@ -314,7 +316,7 @@ static void p9_read_work(struct work_struct *work) p9_debug(P9_DEBUG_TRANS, "got new header\n"); /* Header size */ - m->rc.size = 7; + m->rc.size = P9_HDRSZ; err = p9_parse_header(&m->rc, &m->rc.size, NULL, NULL, 0); if (err) { p9_debug(P9_DEBUG_ERROR, @@ -322,14 +324,6 @@ static void p9_read_work(struct work_struct *work) goto error; } - if (m->rc.size >= m->client->msize) { - p9_debug(P9_DEBUG_ERROR, - "requested packet size too big: %d\n", - m->rc.size); - err = -EIO; - goto error; - } - p9_debug(P9_DEBUG_TRANS, "mux %p pkt: size: %d bytes tag: %d\n", m, m->rc.size, m->rc.tag); @@ -342,6 +336,14 @@ static void p9_read_work(struct work_struct *work) goto error; } + if (m->rc.size > m->rreq->rc.capacity) { + p9_debug(P9_DEBUG_ERROR, + "requested packet size too big: %d for tag %d with capacity %zd\n", + m->rc.size, m->rc.tag, m->rreq->rc.capacity); + err = -EIO; + goto error; + } + if (!m->rreq->rc.sdata) { p9_debug(P9_DEBUG_ERROR, "No recv fcall for tag %d (req %p), disconnecting!\n", @@ -860,8 +862,10 @@ static int p9_socket_open(struct p9_client *client, struct socket *csocket) struct file *file; p = kzalloc(sizeof(struct p9_trans_fd), GFP_KERNEL); - if (!p) + if (!p) { + sock_release(csocket); return -ENOMEM; + } csocket->sk->sk_allocation = GFP_NOIO; file = sock_alloc_file(csocket, 0, NULL); diff --git a/net/9p/trans_xen.c b/net/9p/trans_xen.c index b15c64128c3e58e7c93bcfe94a3ffa28ffad2611..aaa5fd364691b0bd32957f56a36a80d4989ed7d1 100644 --- a/net/9p/trans_xen.c +++ b/net/9p/trans_xen.c @@ -208,6 +208,14 @@ static void p9_xen_response(struct work_struct *work) continue; } + if (h.size > req->rc.capacity) { + dev_warn(&priv->dev->dev, + "requested packet size too big: %d for tag %d with capacity %zd\n", + h.size, h.tag, req->rc.capacity); + req->status = REQ_STATUS_ERROR; + goto recv_error; + } + memcpy(&req->rc, &h, sizeof(h)); req->rc.offset = 0; @@ -217,6 +225,7 @@ static void p9_xen_response(struct work_struct *work) masked_prod, &masked_cons, XEN_9PFS_RING_SIZE(ring)); +recv_error: virt_mb(); cons += h.size; ring->intf->in_cons = cons; diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index 7a59c44870503ee12d37f64b8428b5c5cc7c4a69..a6c12863a2532ab86c8021a8c5152b0e90979c56 100644 --- a/net/bluetooth/hci_conn.c +++ b/net/bluetooth/hci_conn.c @@ -1067,10 +1067,21 @@ int hci_conn_del(struct hci_conn *conn) hdev->acl_cnt += conn->sent; } else { struct hci_conn *acl = conn->link; + if (acl) { acl->link = NULL; hci_conn_drop(acl); } + + /* Unacked ISO frames */ + if (conn->type == ISO_LINK) { + if (hdev->iso_pkts) + hdev->iso_cnt += conn->sent; + else if (hdev->le_pkts) + hdev->le_cnt += conn->sent; + else + hdev->acl_cnt += conn->sent; + } } if (conn->amp_mgr) @@ -1761,6 +1772,7 @@ struct hci_conn *hci_bind_cis(struct hci_dev *hdev, bdaddr_t *dst, if (!cis) return ERR_PTR(-ENOMEM); cis->cleanup = cis_cleanup; + cis->dst_type = dst_type; } if (cis->state == BT_CONNECTED) @@ -2140,12 +2152,6 @@ struct hci_conn *hci_connect_cis(struct hci_dev *hdev, bdaddr_t *dst, struct hci_conn *le; struct hci_conn *cis; - /* Convert from ISO socket address type to HCI address type */ - if (dst_type == BDADDR_LE_PUBLIC) - dst_type = ADDR_LE_DEV_PUBLIC; - else - dst_type = ADDR_LE_DEV_RANDOM; - if (hci_dev_test_flag(hdev, HCI_ADVERTISING)) le = hci_connect_le(hdev, dst, dst_type, false, BT_SECURITY_LOW, diff --git a/net/bluetooth/iso.c b/net/bluetooth/iso.c index 613039ba5dbf54b05f2cee49e1588c1816fddd29..f825857db6d0b74656b3bd5742374b8ce48096bf 100644 --- a/net/bluetooth/iso.c +++ b/net/bluetooth/iso.c @@ -235,6 +235,14 @@ static int iso_chan_add(struct iso_conn *conn, struct sock *sk, return err; } +static inline u8 le_addr_type(u8 bdaddr_type) +{ + if (bdaddr_type == BDADDR_LE_PUBLIC) + return ADDR_LE_DEV_PUBLIC; + else + return ADDR_LE_DEV_RANDOM; +} + static int iso_connect_bis(struct sock *sk) { struct iso_conn *conn; @@ -328,14 +336,16 @@ static int iso_connect_cis(struct sock *sk) /* Just bind if DEFER_SETUP has been set */ if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { hcon = hci_bind_cis(hdev, &iso_pi(sk)->dst, - iso_pi(sk)->dst_type, &iso_pi(sk)->qos); + le_addr_type(iso_pi(sk)->dst_type), + &iso_pi(sk)->qos); if (IS_ERR(hcon)) { err = PTR_ERR(hcon); goto done; } } else { hcon = hci_connect_cis(hdev, &iso_pi(sk)->dst, - iso_pi(sk)->dst_type, &iso_pi(sk)->qos); + le_addr_type(iso_pi(sk)->dst_type), + &iso_pi(sk)->qos); if (IS_ERR(hcon)) { err = PTR_ERR(hcon); goto done; diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 1f34b82ca0ec93669c9b4e2478756e0634aaecf5..9c24947aa41ef0b182a270f7d8cc2c119dca40c6 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -1990,7 +1990,7 @@ static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm, if (link_type == LE_LINK && c->src_type == BDADDR_BREDR) continue; - if (c->psm == psm) { + if (c->chan_type != L2CAP_CHAN_FIXED && c->psm == psm) { int src_match, dst_match; int src_any, dst_any; @@ -3764,7 +3764,8 @@ static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data, size_t data l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc), (unsigned long) &rfc, endptr - ptr); - if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) { + if (remote_efs && + test_bit(FLAG_EFS_ENABLE, &chan->flags)) { chan->remote_id = efs.id; chan->remote_stype = efs.stype; chan->remote_msdu = le16_to_cpu(efs.msdu); @@ -5813,6 +5814,19 @@ static int l2cap_le_connect_req(struct l2cap_conn *conn, BT_DBG("psm 0x%2.2x scid 0x%4.4x mtu %u mps %u", __le16_to_cpu(psm), scid, mtu, mps); + /* BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 3, Part A + * page 1059: + * + * Valid range: 0x0001-0x00ff + * + * Table 4.15: L2CAP_LE_CREDIT_BASED_CONNECTION_REQ SPSM ranges + */ + if (!psm || __le16_to_cpu(psm) > L2CAP_PSM_LE_DYN_END) { + result = L2CAP_CR_LE_BAD_PSM; + chan = NULL; + goto response; + } + /* Check if we have socket listening on psm */ pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src, &conn->hcon->dst, LE_LINK); @@ -6001,6 +6015,18 @@ static inline int l2cap_ecred_conn_req(struct l2cap_conn *conn, psm = req->psm; + /* BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 3, Part A + * page 1059: + * + * Valid range: 0x0001-0x00ff + * + * Table 4.15: L2CAP_LE_CREDIT_BASED_CONNECTION_REQ SPSM ranges + */ + if (!psm || __le16_to_cpu(psm) > L2CAP_PSM_LE_DYN_END) { + result = L2CAP_CR_LE_BAD_PSM; + goto response; + } + BT_DBG("psm 0x%2.2x mtu %u mps %u", __le16_to_cpu(psm), mtu, mps); memset(&pdu, 0, sizeof(pdu)); @@ -6885,6 +6911,7 @@ static int l2cap_rx_state_recv(struct l2cap_chan *chan, struct l2cap_ctrl *control, struct sk_buff *skb, u8 event) { + struct l2cap_ctrl local_control; int err = 0; bool skb_in_use = false; @@ -6909,15 +6936,32 @@ static int l2cap_rx_state_recv(struct l2cap_chan *chan, chan->buffer_seq = chan->expected_tx_seq; skb_in_use = true; + /* l2cap_reassemble_sdu may free skb, hence invalidate + * control, so make a copy in advance to use it after + * l2cap_reassemble_sdu returns and to avoid the race + * condition, for example: + * + * The current thread calls: + * l2cap_reassemble_sdu + * chan->ops->recv == l2cap_sock_recv_cb + * __sock_queue_rcv_skb + * Another thread calls: + * bt_sock_recvmsg + * skb_recv_datagram + * skb_free_datagram + * Then the current thread tries to access control, but + * it was freed by skb_free_datagram. + */ + local_control = *control; err = l2cap_reassemble_sdu(chan, skb, control); if (err) break; - if (control->final) { + if (local_control.final) { if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state)) { - control->final = 0; - l2cap_retransmit_all(chan, control); + local_control.final = 0; + l2cap_retransmit_all(chan, &local_control); l2cap_ertm_send(chan); } } @@ -7297,11 +7341,27 @@ static int l2cap_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control, static int l2cap_stream_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control, struct sk_buff *skb) { + /* l2cap_reassemble_sdu may free skb, hence invalidate control, so store + * the txseq field in advance to use it after l2cap_reassemble_sdu + * returns and to avoid the race condition, for example: + * + * The current thread calls: + * l2cap_reassemble_sdu + * chan->ops->recv == l2cap_sock_recv_cb + * __sock_queue_rcv_skb + * Another thread calls: + * bt_sock_recvmsg + * skb_recv_datagram + * skb_free_datagram + * Then the current thread tries to access control, but it was freed by + * skb_free_datagram. + */ + u16 txseq = control->txseq; + BT_DBG("chan %p, control %p, skb %p, state %d", chan, control, skb, chan->rx_state); - if (l2cap_classify_txseq(chan, control->txseq) == - L2CAP_TXSEQ_EXPECTED) { + if (l2cap_classify_txseq(chan, txseq) == L2CAP_TXSEQ_EXPECTED) { l2cap_pass_to_tx(chan, control); BT_DBG("buffer_seq %u->%u", chan->buffer_seq, @@ -7324,8 +7384,8 @@ static int l2cap_stream_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control, } } - chan->last_acked_seq = control->txseq; - chan->expected_tx_seq = __next_seq(chan, control->txseq); + chan->last_acked_seq = txseq; + chan->expected_tx_seq = __next_seq(chan, txseq); return 0; } @@ -7581,6 +7641,7 @@ static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid, return; } + l2cap_chan_hold(chan); l2cap_chan_lock(chan); } else { BT_DBG("unknown cid 0x%4.4x", cid); @@ -8426,9 +8487,8 @@ void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) * expected length. */ if (skb->len < L2CAP_LEN_SIZE) { - if (l2cap_recv_frag(conn, skb, conn->mtu) < 0) - goto drop; - return; + l2cap_recv_frag(conn, skb, conn->mtu); + break; } len = get_unaligned_le16(skb->data) + L2CAP_HDR_SIZE; @@ -8472,7 +8532,7 @@ void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) /* Header still could not be read just continue */ if (conn->rx_skb->len < L2CAP_LEN_SIZE) - return; + break; } if (skb->len > conn->rx_len) { diff --git a/net/bpf/test_run.c b/net/bpf/test_run.c index 13d578ce2a096a85c62f22d6bc728552d4746e33..fcb3e6c5e03c0f6663aa3f854c849c75c01ed171 100644 --- a/net/bpf/test_run.c +++ b/net/bpf/test_run.c @@ -774,6 +774,7 @@ static void *bpf_test_init(const union bpf_attr *kattr, u32 user_size, if (user_size > size) return ERR_PTR(-EMSGSIZE); + size = SKB_DATA_ALIGN(size); data = kzalloc(size + headroom + tailroom, GFP_USER); if (!data) return ERR_PTR(-ENOMEM); diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c index 5aeb3646e74c7d1f9c9f14bffd7999c6a6ad8516..d087fd4c784ac798d854e82604b55b76dfadbb5f 100644 --- a/net/bridge/br_netlink.c +++ b/net/bridge/br_netlink.c @@ -1332,7 +1332,7 @@ static int br_changelink(struct net_device *brdev, struct nlattr *tb[], if (data[IFLA_BR_FDB_FLUSH]) { struct net_bridge_fdb_flush_desc desc = { - .flags_mask = BR_FDB_STATIC + .flags_mask = BIT(BR_FDB_STATIC) }; br_fdb_flush(br, &desc); diff --git a/net/bridge/br_sysfs_br.c b/net/bridge/br_sysfs_br.c index 612e367fff20d9c180ca15af87db114d3c967d48..ea733542244c7e7feeffef3c993404529ba88559 100644 --- a/net/bridge/br_sysfs_br.c +++ b/net/bridge/br_sysfs_br.c @@ -345,7 +345,7 @@ static int set_flush(struct net_bridge *br, unsigned long val, struct netlink_ext_ack *extack) { struct net_bridge_fdb_flush_desc desc = { - .flags_mask = BR_FDB_STATIC + .flags_mask = BIT(BR_FDB_STATIC) }; br_fdb_flush(br, &desc); diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c index 6e53dc991409429f26316d2c407e01c50c47c664..9ffd40b8270c17e4ca3845638ccacb59f7b7ff2b 100644 --- a/net/bridge/br_vlan.c +++ b/net/bridge/br_vlan.c @@ -959,6 +959,8 @@ int __br_vlan_set_proto(struct net_bridge *br, __be16 proto, list_for_each_entry(p, &br->port_list, list) { vg = nbp_vlan_group(p); list_for_each_entry(vlan, &vg->vlan_list, vlist) { + if (vlan->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV) + continue; err = vlan_vid_add(p->dev, proto, vlan->vid); if (err) goto err_filt; @@ -973,8 +975,11 @@ int __br_vlan_set_proto(struct net_bridge *br, __be16 proto, /* Delete VLANs for the old proto from the device filter. */ list_for_each_entry(p, &br->port_list, list) { vg = nbp_vlan_group(p); - list_for_each_entry(vlan, &vg->vlan_list, vlist) + list_for_each_entry(vlan, &vg->vlan_list, vlist) { + if (vlan->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV) + continue; vlan_vid_del(p->dev, oldproto, vlan->vid); + } } return 0; @@ -983,13 +988,19 @@ int __br_vlan_set_proto(struct net_bridge *br, __be16 proto, attr.u.vlan_protocol = ntohs(oldproto); switchdev_port_attr_set(br->dev, &attr, NULL); - list_for_each_entry_continue_reverse(vlan, &vg->vlan_list, vlist) + list_for_each_entry_continue_reverse(vlan, &vg->vlan_list, vlist) { + if (vlan->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV) + continue; vlan_vid_del(p->dev, proto, vlan->vid); + } list_for_each_entry_continue_reverse(p, &br->port_list, list) { vg = nbp_vlan_group(p); - list_for_each_entry(vlan, &vg->vlan_list, vlist) + list_for_each_entry(vlan, &vg->vlan_list, vlist) { + if (vlan->priv_flags & BR_VLFLAG_ADDED_BY_SWITCHDEV) + continue; vlan_vid_del(p->dev, proto, vlan->vid); + } } return err; diff --git a/net/caif/chnl_net.c b/net/caif/chnl_net.c index 4d63ef13a1fd7d5e13f1aa735c74b90356463865..f35fc87c453a2a3b16c63ed1cf0e920e57f5472a 100644 --- a/net/caif/chnl_net.c +++ b/net/caif/chnl_net.c @@ -310,9 +310,6 @@ static int chnl_net_open(struct net_device *dev) if (result == 0) { pr_debug("connect timeout\n"); - caif_disconnect_client(dev_net(dev), &priv->chnl); - priv->state = CAIF_DISCONNECTED; - pr_debug("state disconnected\n"); result = -ETIMEDOUT; goto error; } diff --git a/net/can/af_can.c b/net/can/af_can.c index 9503ab10f9b8f7a9735b9646d1e82d6c7295c981..27dcdcc0b8089feda3a3e790e128cb5f6bb7793c 100644 --- a/net/can/af_can.c +++ b/net/can/af_can.c @@ -450,7 +450,7 @@ int can_rx_register(struct net *net, struct net_device *dev, canid_t can_id, /* insert new receiver (dev,canid,mask) -> (func,data) */ - if (dev && dev->type != ARPHRD_CAN) + if (dev && (dev->type != ARPHRD_CAN || !can_get_ml_priv(dev))) return -ENODEV; if (dev && !net_eq(net, dev_net(dev))) @@ -902,6 +902,7 @@ static __init int can_init(void) static __exit void can_exit(void) { /* protocol unregister */ + dev_remove_pack(&canxl_packet); dev_remove_pack(&canfd_packet); dev_remove_pack(&can_packet); sock_unregister(PF_CAN); diff --git a/net/can/isotp.c b/net/can/isotp.c index a9d1357f8489f4803128a94896811c814c960628..608f8c24ae46b60722904eae1dd0dff23b91c571 100644 --- a/net/can/isotp.c +++ b/net/can/isotp.c @@ -111,6 +111,9 @@ MODULE_ALIAS("can-proto-6"); #define ISOTP_FC_WT 1 /* wait */ #define ISOTP_FC_OVFLW 2 /* overflow */ +#define ISOTP_FC_TIMEOUT 1 /* 1 sec */ +#define ISOTP_ECHO_TIMEOUT 2 /* 2 secs */ + enum { ISOTP_IDLE = 0, ISOTP_WAIT_FIRST_FC, @@ -258,7 +261,8 @@ static int isotp_send_fc(struct sock *sk, int ae, u8 flowstatus) so->lastrxcf_tstamp = ktime_set(0, 0); /* start rx timeout watchdog */ - hrtimer_start(&so->rxtimer, ktime_set(1, 0), HRTIMER_MODE_REL_SOFT); + hrtimer_start(&so->rxtimer, ktime_set(ISOTP_FC_TIMEOUT, 0), + HRTIMER_MODE_REL_SOFT); return 0; } @@ -344,6 +348,8 @@ static int check_pad(struct isotp_sock *so, struct canfd_frame *cf, return 0; } +static void isotp_send_cframe(struct isotp_sock *so); + static int isotp_rcv_fc(struct isotp_sock *so, struct canfd_frame *cf, int ae) { struct sock *sk = &so->sk; @@ -398,14 +404,15 @@ static int isotp_rcv_fc(struct isotp_sock *so, struct canfd_frame *cf, int ae) case ISOTP_FC_CTS: so->tx.bs = 0; so->tx.state = ISOTP_SENDING; - /* start cyclic timer for sending CF frame */ - hrtimer_start(&so->txtimer, so->tx_gap, + /* send CF frame and enable echo timeout handling */ + hrtimer_start(&so->txtimer, ktime_set(ISOTP_ECHO_TIMEOUT, 0), HRTIMER_MODE_REL_SOFT); + isotp_send_cframe(so); break; case ISOTP_FC_WT: /* start timer to wait for next FC frame */ - hrtimer_start(&so->txtimer, ktime_set(1, 0), + hrtimer_start(&so->txtimer, ktime_set(ISOTP_FC_TIMEOUT, 0), HRTIMER_MODE_REL_SOFT); break; @@ -600,7 +607,7 @@ static int isotp_rcv_cf(struct sock *sk, struct canfd_frame *cf, int ae, /* perform blocksize handling, if enabled */ if (!so->rxfc.bs || ++so->rx.bs < so->rxfc.bs) { /* start rx timeout watchdog */ - hrtimer_start(&so->rxtimer, ktime_set(1, 0), + hrtimer_start(&so->rxtimer, ktime_set(ISOTP_FC_TIMEOUT, 0), HRTIMER_MODE_REL_SOFT); return 0; } @@ -829,7 +836,7 @@ static void isotp_rcv_echo(struct sk_buff *skb, void *data) struct isotp_sock *so = isotp_sk(sk); struct canfd_frame *cf = (struct canfd_frame *)skb->data; - /* only handle my own local echo skb's */ + /* only handle my own local echo CF/SF skb's (no FF!) */ if (skb->sk != sk || so->cfecho != *(u32 *)cf->data) return; @@ -849,13 +856,16 @@ static void isotp_rcv_echo(struct sk_buff *skb, void *data) if (so->txfc.bs && so->tx.bs >= so->txfc.bs) { /* stop and wait for FC with timeout */ so->tx.state = ISOTP_WAIT_FC; - hrtimer_start(&so->txtimer, ktime_set(1, 0), + hrtimer_start(&so->txtimer, ktime_set(ISOTP_FC_TIMEOUT, 0), HRTIMER_MODE_REL_SOFT); return; } /* no gap between data frames needed => use burst mode */ if (!so->tx_gap) { + /* enable echo timeout handling */ + hrtimer_start(&so->txtimer, ktime_set(ISOTP_ECHO_TIMEOUT, 0), + HRTIMER_MODE_REL_SOFT); isotp_send_cframe(so); return; } @@ -879,7 +889,7 @@ static enum hrtimer_restart isotp_tx_timer_handler(struct hrtimer *hrtimer) /* start timeout for unlikely lost echo skb */ hrtimer_set_expires(&so->txtimer, ktime_add(ktime_get(), - ktime_set(2, 0))); + ktime_set(ISOTP_ECHO_TIMEOUT, 0))); restart = HRTIMER_RESTART; /* push out the next consecutive frame */ @@ -907,7 +917,8 @@ static enum hrtimer_restart isotp_tx_timer_handler(struct hrtimer *hrtimer) break; default: - WARN_ON_ONCE(1); + WARN_ONCE(1, "can-isotp: tx timer state %08X cfecho %08X\n", + so->tx.state, so->cfecho); } return restart; @@ -923,7 +934,7 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) struct canfd_frame *cf; int ae = (so->opt.flags & CAN_ISOTP_EXTEND_ADDR) ? 1 : 0; int wait_tx_done = (so->opt.flags & CAN_ISOTP_WAIT_TX_DONE) ? 1 : 0; - s64 hrtimer_sec = 0; + s64 hrtimer_sec = ISOTP_ECHO_TIMEOUT; int off; int err; @@ -942,6 +953,8 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) err = wait_event_interruptible(so->wait, so->tx.state == ISOTP_IDLE); if (err) goto err_out; + + so->tx.state = ISOTP_SENDING; } if (!size || size > MAX_MSG_LENGTH) { @@ -986,6 +999,10 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) cf = (struct canfd_frame *)skb->data; skb_put_zero(skb, so->ll.mtu); + /* cfecho should have been zero'ed by init / former isotp_rcv_echo() */ + if (so->cfecho) + pr_notice_once("can-isotp: uninit cfecho %08X\n", so->cfecho); + /* check for single frame transmission depending on TX_DL */ if (size <= so->tx.ll_dl - SF_PCI_SZ4 - ae - off) { /* The message size generally fits into a SingleFrame - good. @@ -1011,11 +1028,8 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) else cf->data[ae] |= size; - so->tx.state = ISOTP_IDLE; - wake_up_interruptible(&so->wait); - - /* don't enable wait queue for a single frame transmission */ - wait_tx_done = 0; + /* set CF echo tag for isotp_rcv_echo() (SF-mode) */ + so->cfecho = *(u32 *)cf->data; } else { /* send first frame */ @@ -1031,31 +1045,23 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) /* disable wait for FCs due to activated block size */ so->txfc.bs = 0; - /* cfecho should have been zero'ed by init */ - if (so->cfecho) - pr_notice_once("can-isotp: no fc cfecho %08X\n", - so->cfecho); - - /* set consecutive frame echo tag */ + /* set CF echo tag for isotp_rcv_echo() (CF-mode) */ so->cfecho = *(u32 *)cf->data; - - /* switch directly to ISOTP_SENDING state */ - so->tx.state = ISOTP_SENDING; - - /* start timeout for unlikely lost echo skb */ - hrtimer_sec = 2; } else { /* standard flow control check */ so->tx.state = ISOTP_WAIT_FIRST_FC; /* start timeout for FC */ - hrtimer_sec = 1; - } + hrtimer_sec = ISOTP_FC_TIMEOUT; - hrtimer_start(&so->txtimer, ktime_set(hrtimer_sec, 0), - HRTIMER_MODE_REL_SOFT); + /* no CF echo tag for isotp_rcv_echo() (FF-mode) */ + so->cfecho = 0; + } } + hrtimer_start(&so->txtimer, ktime_set(hrtimer_sec, 0), + HRTIMER_MODE_REL_SOFT); + /* send the first or only CAN frame */ cf->flags = so->ll.tx_flags; @@ -1068,8 +1074,7 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) __func__, ERR_PTR(err)); /* no transmission -> no timeout monitoring */ - if (hrtimer_sec) - hrtimer_cancel(&so->txtimer); + hrtimer_cancel(&so->txtimer); /* reset consecutive frame echo tag */ so->cfecho = 0; diff --git a/net/can/j1939/main.c b/net/can/j1939/main.c index 144c86b0e3ffe3b99937d0b08dd9170ba5e479a3..821d4ff303b35ebe2f89b9d963c89b69162e2316 100644 --- a/net/can/j1939/main.c +++ b/net/can/j1939/main.c @@ -336,6 +336,9 @@ int j1939_send_one(struct j1939_priv *priv, struct sk_buff *skb) /* re-claim the CAN_HDR from the SKB */ cf = skb_push(skb, J1939_CAN_HDR); + /* initialize header structure */ + memset(cf, 0, J1939_CAN_HDR); + /* make it a full can frame again */ skb_put(skb, J1939_CAN_FTR + (8 - dlc)); diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index 25cd35f5922e6a3197ad7e5dcf3c05fefc0bdd1d..007730412947db51da891447efd03d2264e0d42a 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c @@ -296,7 +296,7 @@ skb_flow_dissect_ct(const struct sk_buff *skb, key->ct_zone = ct->zone.id; #endif #if IS_ENABLED(CONFIG_NF_CONNTRACK_MARK) - key->ct_mark = ct->mark; + key->ct_mark = READ_ONCE(ct->mark); #endif cl = nf_ct_labels_find(ct); diff --git a/net/core/lwtunnel.c b/net/core/lwtunnel.c index 6fac2f0ef0742d46db21d955b284db451f1e109a..711cd3b4347a7948ae3958257de1518685c7fbff 100644 --- a/net/core/lwtunnel.c +++ b/net/core/lwtunnel.c @@ -48,9 +48,11 @@ static const char *lwtunnel_encap_str(enum lwtunnel_encap_types encap_type) return "RPL"; case LWTUNNEL_ENCAP_IOAM6: return "IOAM6"; + case LWTUNNEL_ENCAP_XFRM: + /* module autoload not supported for encap type */ + return NULL; case LWTUNNEL_ENCAP_IP6: case LWTUNNEL_ENCAP_IP: - case LWTUNNEL_ENCAP_XFRM: case LWTUNNEL_ENCAP_NONE: case __LWTUNNEL_ENCAP_MAX: /* should not have got here */ diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 3c4786b9990703814995832027af16d8c8e06c72..952a54763358e013f9659d90d28e365ea9afc3d0 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -307,7 +307,31 @@ static int neigh_del_timer(struct neighbour *n) return 0; } -static void pneigh_queue_purge(struct sk_buff_head *list, struct net *net) +static struct neigh_parms *neigh_get_dev_parms_rcu(struct net_device *dev, + int family) +{ + switch (family) { + case AF_INET: + return __in_dev_arp_parms_get_rcu(dev); + case AF_INET6: + return __in6_dev_nd_parms_get_rcu(dev); + } + return NULL; +} + +static void neigh_parms_qlen_dec(struct net_device *dev, int family) +{ + struct neigh_parms *p; + + rcu_read_lock(); + p = neigh_get_dev_parms_rcu(dev, family); + if (p) + p->qlen--; + rcu_read_unlock(); +} + +static void pneigh_queue_purge(struct sk_buff_head *list, struct net *net, + int family) { struct sk_buff_head tmp; unsigned long flags; @@ -321,13 +345,7 @@ static void pneigh_queue_purge(struct sk_buff_head *list, struct net *net) struct net_device *dev = skb->dev; if (net == NULL || net_eq(dev_net(dev), net)) { - struct in_device *in_dev; - - rcu_read_lock(); - in_dev = __in_dev_get_rcu(dev); - if (in_dev) - in_dev->arp_parms->qlen--; - rcu_read_unlock(); + neigh_parms_qlen_dec(dev, family); __skb_unlink(skb, list); __skb_queue_tail(&tmp, skb); } @@ -409,7 +427,8 @@ static int __neigh_ifdown(struct neigh_table *tbl, struct net_device *dev, write_lock_bh(&tbl->lock); neigh_flush_dev(tbl, dev, skip_perm); pneigh_ifdown_and_unlock(tbl, dev); - pneigh_queue_purge(&tbl->proxy_queue, dev_net(dev)); + pneigh_queue_purge(&tbl->proxy_queue, dev ? dev_net(dev) : NULL, + tbl->family); if (skb_queue_empty_lockless(&tbl->proxy_queue)) del_timer_sync(&tbl->proxy_timer); return 0; @@ -1621,13 +1640,8 @@ static void neigh_proxy_process(struct timer_list *t) if (tdif <= 0) { struct net_device *dev = skb->dev; - struct in_device *in_dev; - rcu_read_lock(); - in_dev = __in_dev_get_rcu(dev); - if (in_dev) - in_dev->arp_parms->qlen--; - rcu_read_unlock(); + neigh_parms_qlen_dec(dev, tbl->family); __skb_unlink(skb, &tbl->proxy_queue); if (tbl->proxy_redo && netif_running(dev)) { @@ -1821,7 +1835,7 @@ int neigh_table_clear(int index, struct neigh_table *tbl) cancel_delayed_work_sync(&tbl->managed_work); cancel_delayed_work_sync(&tbl->gc_work); del_timer_sync(&tbl->proxy_timer); - pneigh_queue_purge(&tbl->proxy_queue, NULL); + pneigh_queue_purge(&tbl->proxy_queue, NULL, tbl->family); neigh_ifdown(tbl, NULL); if (atomic_read(&tbl->entries)) pr_crit("neighbour leakage\n"); @@ -3539,18 +3553,6 @@ static int proc_unres_qlen(struct ctl_table *ctl, int write, return ret; } -static struct neigh_parms *neigh_get_dev_parms_rcu(struct net_device *dev, - int family) -{ - switch (family) { - case AF_INET: - return __in_dev_arp_parms_get_rcu(dev); - case AF_INET6: - return __in6_dev_nd_parms_get_rcu(dev); - } - return NULL; -} - static void neigh_copy_dflt_parms(struct net *net, struct neigh_parms *p, int index) { diff --git a/net/core/skbuff.c b/net/core/skbuff.c index d1a3fa6f3f1265497c0a65f8b958c6312f5f0663..88fa40571d0c773fea3794b65b2c7791a2873411 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -4134,23 +4134,25 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb, int i = 0; int pos; - if (list_skb && !list_skb->head_frag && skb_headlen(list_skb) && - (skb_shinfo(head_skb)->gso_type & SKB_GSO_DODGY)) { - /* gso_size is untrusted, and we have a frag_list with a linear - * non head_frag head. - * - * (we assume checking the first list_skb member suffices; - * i.e if either of the list_skb members have non head_frag - * head, then the first one has too). - * - * If head_skb's headlen does not fit requested gso_size, it - * means that the frag_list members do NOT terminate on exact - * gso_size boundaries. Hence we cannot perform skb_frag_t page - * sharing. Therefore we must fallback to copying the frag_list - * skbs; we do so by disabling SG. - */ - if (mss != GSO_BY_FRAGS && mss != skb_headlen(head_skb)) - features &= ~NETIF_F_SG; + if ((skb_shinfo(head_skb)->gso_type & SKB_GSO_DODGY) && + mss != GSO_BY_FRAGS && mss != skb_headlen(head_skb)) { + struct sk_buff *check_skb; + + for (check_skb = list_skb; check_skb; check_skb = check_skb->next) { + if (skb_headlen(check_skb) && !check_skb->head_frag) { + /* gso_size is untrusted, and we have a frag_list with + * a linear non head_frag item. + * + * If head_skb's headlen does not fit requested gso_size, + * it means that the frag_list members do NOT terminate + * on exact gso_size boundaries. Hence we cannot perform + * skb_frag_t page sharing. Therefore we must fallback to + * copying the frag_list skbs; we do so by disabling SG. + */ + features &= ~NETIF_F_SG; + break; + } + } } __skb_push(head_skb, doffset); diff --git a/net/core/skmsg.c b/net/core/skmsg.c index 1efdc47a999b44089e1abfee15a5a93269851997..e6b9ced3eda82f8af545c88eeeeaa899f54f5f9f 100644 --- a/net/core/skmsg.c +++ b/net/core/skmsg.c @@ -803,16 +803,13 @@ static void sk_psock_link_destroy(struct sk_psock *psock) } } -void sk_psock_stop(struct sk_psock *psock, bool wait) +void sk_psock_stop(struct sk_psock *psock) { spin_lock_bh(&psock->ingress_lock); sk_psock_clear_state(psock, SK_PSOCK_TX_ENABLED); sk_psock_cork_free(psock); __sk_psock_zap_ingress(psock); spin_unlock_bh(&psock->ingress_lock); - - if (wait) - cancel_work_sync(&psock->work); } static void sk_psock_done_strp(struct sk_psock *psock); @@ -850,7 +847,7 @@ void sk_psock_drop(struct sock *sk, struct sk_psock *psock) sk_psock_stop_verdict(sk, psock); write_unlock_bh(&sk->sk_callback_lock); - sk_psock_stop(psock, false); + sk_psock_stop(psock); INIT_RCU_WORK(&psock->rwork, sk_psock_destroy); queue_rcu_work(system_wq, &psock->rwork); diff --git a/net/core/sock_map.c b/net/core/sock_map.c index a660baedd9e799e0e90bdc005144a96d84560a47..81beb16ab1ebfcb166f51f89a029fe1c28a629a4 100644 --- a/net/core/sock_map.c +++ b/net/core/sock_map.c @@ -1596,7 +1596,7 @@ void sock_map_destroy(struct sock *sk) saved_destroy = psock->saved_destroy; sock_map_remove_links(sk, psock); rcu_read_unlock(); - sk_psock_stop(psock, false); + sk_psock_stop(psock); sk_psock_put(sk, psock); saved_destroy(sk); } @@ -1619,9 +1619,10 @@ void sock_map_close(struct sock *sk, long timeout) saved_close = psock->saved_close; sock_map_remove_links(sk, psock); rcu_read_unlock(); - sk_psock_stop(psock, true); - sk_psock_put(sk, psock); + sk_psock_stop(psock); release_sock(sk); + cancel_work_sync(&psock->work); + sk_psock_put(sk, psock); saved_close(sk, timeout); } EXPORT_SYMBOL_GPL(sock_map_close); diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index 713b7b8dad7e58844e67da727b831d0f9f28dc38..b780827f5e0a5b4296e1e6a2e78dbd7f111d3402 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c @@ -45,11 +45,10 @@ static unsigned int dccp_v4_pernet_id __read_mostly; int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) { const struct sockaddr_in *usin = (struct sockaddr_in *)uaddr; - struct inet_bind_hashbucket *prev_addr_hashbucket = NULL; - __be32 daddr, nexthop, prev_sk_rcv_saddr; struct inet_sock *inet = inet_sk(sk); struct dccp_sock *dp = dccp_sk(sk); __be16 orig_sport, orig_dport; + __be32 daddr, nexthop; struct flowi4 *fl4; struct rtable *rt; int err; @@ -91,26 +90,13 @@ int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) daddr = fl4->daddr; if (inet->inet_saddr == 0) { - if (inet_csk(sk)->icsk_bind2_hash) { - prev_addr_hashbucket = - inet_bhashfn_portaddr(&dccp_hashinfo, sk, - sock_net(sk), - inet->inet_num); - prev_sk_rcv_saddr = sk->sk_rcv_saddr; - } - inet->inet_saddr = fl4->saddr; - } - - sk_rcv_saddr_set(sk, inet->inet_saddr); - - if (prev_addr_hashbucket) { - err = inet_bhash2_update_saddr(prev_addr_hashbucket, sk); + err = inet_bhash2_update_saddr(sk, &fl4->saddr, AF_INET); if (err) { - inet->inet_saddr = 0; - sk_rcv_saddr_set(sk, prev_sk_rcv_saddr); ip_rt_put(rt); return err; } + } else { + sk_rcv_saddr_set(sk, inet->inet_saddr); } inet->inet_dport = usin->sin_port; @@ -157,6 +143,7 @@ int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) * This unhashes the socket and releases the local port, if necessary. */ dccp_set_state(sk, DCCP_CLOSED); + inet_bhash2_reset_saddr(sk); ip_rt_put(rt); sk->sk_route_caps = 0; inet->inet_dport = 0; diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c index e57b43006074627776c8119a9b349d99ea27b1d4..602f3432d80bc33af799b49ad4f702fdd76c146f 100644 --- a/net/dccp/ipv6.c +++ b/net/dccp/ipv6.c @@ -934,26 +934,11 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr, } if (saddr == NULL) { - struct inet_bind_hashbucket *prev_addr_hashbucket = NULL; - struct in6_addr prev_v6_rcv_saddr; - - if (icsk->icsk_bind2_hash) { - prev_addr_hashbucket = inet_bhashfn_portaddr(&dccp_hashinfo, - sk, sock_net(sk), - inet->inet_num); - prev_v6_rcv_saddr = sk->sk_v6_rcv_saddr; - } - saddr = &fl6.saddr; - sk->sk_v6_rcv_saddr = *saddr; - - if (prev_addr_hashbucket) { - err = inet_bhash2_update_saddr(prev_addr_hashbucket, sk); - if (err) { - sk->sk_v6_rcv_saddr = prev_v6_rcv_saddr; - goto failure; - } - } + + err = inet_bhash2_update_saddr(sk, saddr, AF_INET6); + if (err) + goto failure; } /* set the source address */ @@ -985,6 +970,7 @@ static int dccp_v6_connect(struct sock *sk, struct sockaddr *uaddr, late_failure: dccp_set_state(sk, DCCP_CLOSED); + inet_bhash2_reset_saddr(sk); __sk_dst_reset(sk); failure: inet->inet_dport = 0; diff --git a/net/dccp/proto.c b/net/dccp/proto.c index c548ca3e9b0e81a27380d8e026f5a5a420f96737..85e35c5e88902549ddd5eb5678ff52587eab251a 100644 --- a/net/dccp/proto.c +++ b/net/dccp/proto.c @@ -279,8 +279,7 @@ int dccp_disconnect(struct sock *sk, int flags) inet->inet_dport = 0; - if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK)) - inet_reset_saddr(sk); + inet_bhash2_reset_saddr(sk); sk->sk_shutdown = 0; sock_reset_flag(sk, SOCK_DONE); diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index af0e2c0394ac3f1589ddd80f503f2d070fb91493..5417f7b1187cbf41498043798635e47614a437bb 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -864,6 +864,14 @@ static int dsa_switch_setup_tag_protocol(struct dsa_switch *ds) return err; } +static void dsa_switch_teardown_tag_protocol(struct dsa_switch *ds) +{ + const struct dsa_device_ops *tag_ops = ds->dst->tag_ops; + + if (tag_ops->disconnect) + tag_ops->disconnect(ds); +} + static int dsa_switch_setup(struct dsa_switch *ds) { struct dsa_devlink_priv *dl_priv; @@ -953,6 +961,8 @@ static void dsa_switch_teardown(struct dsa_switch *ds) ds->slave_mii_bus = NULL; } + dsa_switch_teardown_tag_protocol(ds); + if (ds->ops->teardown) ds->ops->teardown(ds); @@ -1409,9 +1419,9 @@ static enum dsa_tag_protocol dsa_get_tag_protocol(struct dsa_port *dp, static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *master, const char *user_protocol) { + const struct dsa_device_ops *tag_ops = NULL; struct dsa_switch *ds = dp->ds; struct dsa_switch_tree *dst = ds->dst; - const struct dsa_device_ops *tag_ops; enum dsa_tag_protocol default_proto; /* Find out which protocol the switch would prefer. */ @@ -1434,10 +1444,17 @@ static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *master, } tag_ops = dsa_find_tagger_by_name(user_protocol); - } else { - tag_ops = dsa_tag_driver_get(default_proto); + if (IS_ERR(tag_ops)) { + dev_warn(ds->dev, + "Failed to find a tagging driver for protocol %s, using default\n", + user_protocol); + tag_ops = NULL; + } } + if (!tag_ops) + tag_ops = dsa_tag_driver_get(default_proto); + if (IS_ERR(tag_ops)) { if (PTR_ERR(tag_ops) == -ENOPROTOOPT) return -EPROBE_DEFER; diff --git a/net/dsa/dsa_priv.h b/net/dsa/dsa_priv.h index 6e65c7ffd6f32f778b490d4fc94a7269104fb390..71e9707d11d48b70ed249635020fe74d497267c1 100644 --- a/net/dsa/dsa_priv.h +++ b/net/dsa/dsa_priv.h @@ -210,6 +210,7 @@ static inline struct net_device *dsa_master_find_slave(struct net_device *dev, extern struct rtnl_link_ops dsa_link_ops __read_mostly; /* port.c */ +bool dsa_port_supports_hwtstamp(struct dsa_port *dp, struct ifreq *ifr); void dsa_port_set_tag_protocol(struct dsa_port *cpu_dp, const struct dsa_device_ops *tag_ops); int dsa_port_set_state(struct dsa_port *dp, u8 state, bool do_fast_age); diff --git a/net/dsa/master.c b/net/dsa/master.c index 40367ab41cf8f7d7cdcda922f0dc0e21d2f532b4..421de166515fa615545c4c0f3dbf2c3db189d44e 100644 --- a/net/dsa/master.c +++ b/net/dsa/master.c @@ -204,8 +204,7 @@ static int dsa_master_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) * switch in the tree that is PTP capable. */ list_for_each_entry(dp, &dst->ports, list) - if (dp->ds->ops->port_hwtstamp_get || - dp->ds->ops->port_hwtstamp_set) + if (dsa_port_supports_hwtstamp(dp, ifr)) return -EBUSY; break; } diff --git a/net/dsa/port.c b/net/dsa/port.c index 208168276995aba29afab8c29312454598dc19b2..750fe68d9b2a00ca40d33ff3efefbb71bd6710ba 100644 --- a/net/dsa/port.c +++ b/net/dsa/port.c @@ -110,6 +110,22 @@ static bool dsa_port_can_configure_learning(struct dsa_port *dp) return !err; } +bool dsa_port_supports_hwtstamp(struct dsa_port *dp, struct ifreq *ifr) +{ + struct dsa_switch *ds = dp->ds; + int err; + + if (!ds->ops->port_hwtstamp_get || !ds->ops->port_hwtstamp_set) + return false; + + /* "See through" shim implementations of the "get" method. + * This will clobber the ifreq structure, but we will either return an + * error, or the master will overwrite it with proper values. + */ + err = ds->ops->port_hwtstamp_get(ds, dp->index, ifr); + return err != -EOPNOTSUPP; +} + int dsa_port_set_state(struct dsa_port *dp, u8 state, bool do_fast_age) { struct dsa_switch *ds = dp->ds; diff --git a/net/hsr/hsr_forward.c b/net/hsr/hsr_forward.c index a50429a62f7442e99e6c101f9caf33df16c69faf..56bb27d67a2ee393d6135c86cbea16d1c13250bb 100644 --- a/net/hsr/hsr_forward.c +++ b/net/hsr/hsr_forward.c @@ -351,17 +351,18 @@ static void hsr_deliver_master(struct sk_buff *skb, struct net_device *dev, struct hsr_node *node_src) { bool was_multicast_frame; - int res; + int res, recv_len; was_multicast_frame = (skb->pkt_type == PACKET_MULTICAST); hsr_addr_subst_source(node_src, skb); skb_pull(skb, ETH_HLEN); + recv_len = skb->len; res = netif_rx(skb); if (res == NET_RX_DROP) { dev->stats.rx_dropped++; } else { dev->stats.rx_packets++; - dev->stats.rx_bytes += skb->len; + dev->stats.rx_bytes += recv_len; if (was_multicast_frame) dev->stats.multicast++; } diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig index e983bb0c50127059c735c9e989747c9215596784..2dfb12230f08943e52c39e36e22616db794cd1f7 100644 --- a/net/ipv4/Kconfig +++ b/net/ipv4/Kconfig @@ -402,6 +402,16 @@ config INET_IPCOMP If unsure, say Y. +config INET_TABLE_PERTURB_ORDER + int "INET: Source port perturbation table size (as power of 2)" if EXPERT + default 16 + help + Source port perturbation table size (as power of 2) for + RFC 6056 3.3.4. Algorithm 4: Double-Hash Port Selection Algorithm. + + The default is almost always what you want. + Only change this if you know what you are doing. + config INET_XFRM_TUNNEL tristate select INET_TUNNEL diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 3dd02396517df599cf4ff3b9ab8463ea959770a1..0da67941133080d818b35036201d5d17bc2749da 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -754,6 +754,8 @@ int inet_accept(struct socket *sock, struct socket *newsock, int flags, (TCPF_ESTABLISHED | TCPF_SYN_RECV | TCPF_CLOSE_WAIT | TCPF_CLOSE))); + if (test_bit(SOCK_SUPPORT_ZC, &sock->flags)) + set_bit(SOCK_SUPPORT_ZC, &newsock->flags); sock_graft(sk2, newsock); newsock->state = SS_CONNECTED; @@ -1228,7 +1230,6 @@ EXPORT_SYMBOL(inet_unregister_protosw); static int inet_sk_reselect_saddr(struct sock *sk) { - struct inet_bind_hashbucket *prev_addr_hashbucket; struct inet_sock *inet = inet_sk(sk); __be32 old_saddr = inet->inet_saddr; __be32 daddr = inet->inet_daddr; @@ -1258,16 +1259,8 @@ static int inet_sk_reselect_saddr(struct sock *sk) return 0; } - prev_addr_hashbucket = - inet_bhashfn_portaddr(tcp_or_dccp_get_hashinfo(sk), sk, - sock_net(sk), inet->inet_num); - - inet->inet_saddr = inet->inet_rcv_saddr = new_saddr; - - err = inet_bhash2_update_saddr(prev_addr_hashbucket, sk); + err = inet_bhash2_update_saddr(sk, &new_saddr, AF_INET); if (err) { - inet->inet_saddr = old_saddr; - inet->inet_rcv_saddr = old_saddr; ip_rt_put(rt); return err; } diff --git a/net/ipv4/esp4_offload.c b/net/ipv4/esp4_offload.c index 170152772d3328421bd4bcdb86b9222de38a72e8..3969fa805679cd25f373526f5a7d0b7be7172040 100644 --- a/net/ipv4/esp4_offload.c +++ b/net/ipv4/esp4_offload.c @@ -314,6 +314,9 @@ static int esp_xmit(struct xfrm_state *x, struct sk_buff *skb, netdev_features_ xo->seq.low += skb_shinfo(skb)->gso_segs; } + if (xo->seq.low < seq) + xo->seq.hi++; + esp.seqno = cpu_to_be64(seq + ((u64)xo->seq.hi << 32)); ip_hdr(skb)->tot_len = htons(skb->len); diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c index f721c308248bad8b37d6ffb5b651883799630d33..19a662003eef331172fba9f93ab74970cbfd063b 100644 --- a/net/ipv4/fib_semantics.c +++ b/net/ipv4/fib_semantics.c @@ -888,9 +888,11 @@ int fib_nh_match(struct net *net, struct fib_config *cfg, struct fib_info *fi, return 1; } - /* cannot match on nexthop object attributes */ - if (fi->nh) - return 1; + if (fi->nh) { + if (cfg->fc_oif || cfg->fc_gw_family || cfg->fc_mp) + return 1; + return 0; + } if (cfg->fc_oif || cfg->fc_gw_family) { struct fib_nh *nh; diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index 452ff177e4da954f518c948ae7004565938e7667..74d403dbd2b4e6128dacd1bfc3579a1fc3d635aa 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c @@ -126,7 +126,7 @@ struct key_vector { /* This list pointer if valid if (pos | bits) == 0 (LEAF) */ struct hlist_head leaf; /* This array is valid if (pos | bits) > 0 (TNODE) */ - struct key_vector __rcu *tnode[0]; + DECLARE_FLEX_ARRAY(struct key_vector __rcu *, tnode); }; }; @@ -1381,8 +1381,10 @@ int fib_table_insert(struct net *net, struct fib_table *tb, /* The alias was already inserted, so the node must exist. */ l = l ? l : fib_find_node(t, &tp, key); - if (WARN_ON_ONCE(!l)) + if (WARN_ON_ONCE(!l)) { + err = -ENOENT; goto out_free_new_fa; + } if (fib_find_alias(&l->leaf, new_fa->fa_slen, 0, 0, tb->tb_id, true) == new_fa) { diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c index d3dc281566229479aa9027229a37973f8507d014..3cec471a2cd2f16d4a9c344b442097f1403e22eb 100644 --- a/net/ipv4/inet_hashtables.c +++ b/net/ipv4/inet_hashtables.c @@ -858,34 +858,80 @@ inet_bhash2_addr_any_hashbucket(const struct sock *sk, const struct net *net, in return &hinfo->bhash2[hash & (hinfo->bhash_size - 1)]; } -int inet_bhash2_update_saddr(struct inet_bind_hashbucket *prev_saddr, struct sock *sk) +static void inet_update_saddr(struct sock *sk, void *saddr, int family) +{ + if (family == AF_INET) { + inet_sk(sk)->inet_saddr = *(__be32 *)saddr; + sk_rcv_saddr_set(sk, inet_sk(sk)->inet_saddr); + } +#if IS_ENABLED(CONFIG_IPV6) + else { + sk->sk_v6_rcv_saddr = *(struct in6_addr *)saddr; + } +#endif +} + +static int __inet_bhash2_update_saddr(struct sock *sk, void *saddr, int family, bool reset) { struct inet_hashinfo *hinfo = tcp_or_dccp_get_hashinfo(sk); + struct inet_bind_hashbucket *head, *head2; struct inet_bind2_bucket *tb2, *new_tb2; int l3mdev = inet_sk_bound_l3mdev(sk); - struct inet_bind_hashbucket *head2; int port = inet_sk(sk)->inet_num; struct net *net = sock_net(sk); + int bhash; + + if (!inet_csk(sk)->icsk_bind2_hash) { + /* Not bind()ed before. */ + if (reset) + inet_reset_saddr(sk); + else + inet_update_saddr(sk, saddr, family); + + return 0; + } /* Allocate a bind2 bucket ahead of time to avoid permanently putting * the bhash2 table in an inconsistent state if a new tb2 bucket * allocation fails. */ new_tb2 = kmem_cache_alloc(hinfo->bind2_bucket_cachep, GFP_ATOMIC); - if (!new_tb2) + if (!new_tb2) { + if (reset) { + /* The (INADDR_ANY, port) bucket might have already + * been freed, then we cannot fixup icsk_bind2_hash, + * so we give up and unlink sk from bhash/bhash2 not + * to leave inconsistency in bhash2. + */ + inet_put_port(sk); + inet_reset_saddr(sk); + } + return -ENOMEM; + } + bhash = inet_bhashfn(net, port, hinfo->bhash_size); + head = &hinfo->bhash[bhash]; head2 = inet_bhashfn_portaddr(hinfo, sk, net, port); - if (prev_saddr) { - spin_lock_bh(&prev_saddr->lock); - __sk_del_bind2_node(sk); - inet_bind2_bucket_destroy(hinfo->bind2_bucket_cachep, - inet_csk(sk)->icsk_bind2_hash); - spin_unlock_bh(&prev_saddr->lock); - } + /* If we change saddr locklessly, another thread + * iterating over bhash might see corrupted address. + */ + spin_lock_bh(&head->lock); - spin_lock_bh(&head2->lock); + spin_lock(&head2->lock); + __sk_del_bind2_node(sk); + inet_bind2_bucket_destroy(hinfo->bind2_bucket_cachep, inet_csk(sk)->icsk_bind2_hash); + spin_unlock(&head2->lock); + + if (reset) + inet_reset_saddr(sk); + else + inet_update_saddr(sk, saddr, family); + + head2 = inet_bhashfn_portaddr(hinfo, sk, net, port); + + spin_lock(&head2->lock); tb2 = inet_bind2_bucket_find(head2, net, port, l3mdev, sk); if (!tb2) { tb2 = new_tb2; @@ -893,26 +939,40 @@ int inet_bhash2_update_saddr(struct inet_bind_hashbucket *prev_saddr, struct soc } sk_add_bind2_node(sk, &tb2->owners); inet_csk(sk)->icsk_bind2_hash = tb2; - spin_unlock_bh(&head2->lock); + spin_unlock(&head2->lock); + + spin_unlock_bh(&head->lock); if (tb2 != new_tb2) kmem_cache_free(hinfo->bind2_bucket_cachep, new_tb2); return 0; } + +int inet_bhash2_update_saddr(struct sock *sk, void *saddr, int family) +{ + return __inet_bhash2_update_saddr(sk, saddr, family, false); +} EXPORT_SYMBOL_GPL(inet_bhash2_update_saddr); +void inet_bhash2_reset_saddr(struct sock *sk) +{ + if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK)) + __inet_bhash2_update_saddr(sk, NULL, 0, true); +} +EXPORT_SYMBOL_GPL(inet_bhash2_reset_saddr); + /* RFC 6056 3.3.4. Algorithm 4: Double-Hash Port Selection Algorithm * Note that we use 32bit integers (vs RFC 'short integers') * because 2^16 is not a multiple of num_ephemeral and this * property might be used by clever attacker. + * * RFC claims using TABLE_LENGTH=10 buckets gives an improvement, though - * attacks were since demonstrated, thus we use 65536 instead to really - * give more isolation and privacy, at the expense of 256kB of kernel - * memory. + * attacks were since demonstrated, thus we use 65536 by default instead + * to really give more isolation and privacy, at the expense of 256kB + * of kernel memory. */ -#define INET_TABLE_PERTURB_SHIFT 16 -#define INET_TABLE_PERTURB_SIZE (1 << INET_TABLE_PERTURB_SHIFT) +#define INET_TABLE_PERTURB_SIZE (1 << CONFIG_INET_TABLE_PERTURB_ORDER) static u32 *table_perturb; int __inet_hash_connect(struct inet_timewait_death_row *death_row, diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c index 1b512390b3cf30dd123d75a6794b993553589b09..e880ce77322aaa5043dd12fbbd487d8361661673 100644 --- a/net/ipv4/ip_input.c +++ b/net/ipv4/ip_input.c @@ -366,6 +366,11 @@ static int ip_rcv_finish_core(struct net *net, struct sock *sk, iph->tos, dev); if (unlikely(err)) goto drop_error; + } else { + struct in_device *in_dev = __in_dev_get_rcu(dev); + + if (in_dev && IN_DEV_ORCONF(in_dev, NOPOLICY)) + IPCB(skb)->flags |= IPSKB_NOPOLICY; } #ifdef CONFIG_IP_ROUTE_CLASSID diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c index f8e176c77d1c1e177bb374379e24fabe2040fc5d..b3cc416ed29230d337e9658c71e3ab9c176cea9f 100644 --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c @@ -435,7 +435,7 @@ clusterip_tg(struct sk_buff *skb, const struct xt_action_param *par) switch (ctinfo) { case IP_CT_NEW: - ct->mark = hash; + WRITE_ONCE(ct->mark, hash); break; case IP_CT_RELATED: case IP_CT_RELATED_REPLY: @@ -452,7 +452,7 @@ clusterip_tg(struct sk_buff *skb, const struct xt_action_param *par) #ifdef DEBUG nf_ct_dump_tuple_ip(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple); #endif - pr_debug("hash=%u ct_hash=%u ", hash, ct->mark); + pr_debug("hash=%u ct_hash=%u ", hash, READ_ONCE(ct->mark)); if (!clusterip_responsible(cipinfo->config, hash)) { pr_debug("not responsible\n"); return NF_DROP; diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index ef14efa1fb70eaaecfc7884de32b74c49bb25a39..4f2205756cfeeea7b4f3a1b2de1eec355db35072 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -3114,8 +3114,7 @@ int tcp_disconnect(struct sock *sk, int flags) inet->inet_dport = 0; - if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK)) - inet_reset_saddr(sk); + inet_bhash2_reset_saddr(sk); sk->sk_shutdown = 0; sock_reset_flag(sk, SOCK_DONE); @@ -3647,7 +3646,7 @@ int do_tcp_setsockopt(struct sock *sk, int level, int optname, case TCP_REPAIR_OPTIONS: if (!tp->repair) err = -EINVAL; - else if (sk->sk_state == TCP_ESTABLISHED) + else if (sk->sk_state == TCP_ESTABLISHED && !tp->bytes_sent) err = tcp_repair_options_est(sk, optval, optlen); else err = -EPERM; diff --git a/net/ipv4/tcp_bpf.c b/net/ipv4/tcp_bpf.c index a1626afe87a10d3506c96531a85a9ccb6ce3f8df..cf9c3e8f7ccbf97dfcaaaac6cc564a1ea7f30513 100644 --- a/net/ipv4/tcp_bpf.c +++ b/net/ipv4/tcp_bpf.c @@ -278,7 +278,7 @@ static int tcp_bpf_send_verdict(struct sock *sk, struct sk_psock *psock, { bool cork = false, enospc = sk_msg_full(msg); struct sock *sk_redir; - u32 tosend, delta = 0; + u32 tosend, origsize, sent, delta = 0; u32 eval = __SK_NONE; int ret; @@ -333,10 +333,12 @@ static int tcp_bpf_send_verdict(struct sock *sk, struct sk_psock *psock, cork = true; psock->cork = NULL; } - sk_msg_return(sk, msg, msg->sg.size); + sk_msg_return(sk, msg, tosend); release_sock(sk); + origsize = msg->sg.size; ret = tcp_bpf_sendmsg_redir(sk_redir, msg, tosend, flags); + sent = origsize - msg->sg.size; if (eval == __SK_REDIRECT) sock_put(sk_redir); @@ -375,7 +377,7 @@ static int tcp_bpf_send_verdict(struct sock *sk, struct sk_psock *psock, msg->sg.data[msg->sg.start].page_link && msg->sg.data[msg->sg.start].length) { if (eval == __SK_REDIRECT) - sk_mem_charge(sk, msg->sg.size); + sk_mem_charge(sk, tosend - sent); goto more_data; } } @@ -607,7 +609,7 @@ int tcp_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore) } else { sk->sk_write_space = psock->saved_write_space; /* Pairs with lockless read in sk_clone_lock() */ - WRITE_ONCE(sk->sk_prot, psock->sk_proto); + sock_replace_proto(sk, psock->sk_proto); } return 0; } @@ -620,7 +622,7 @@ int tcp_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore) } /* Pairs with lockless read in sk_clone_lock() */ - WRITE_ONCE(sk->sk_prot, &tcp_bpf_prots[family][config]); + sock_replace_proto(sk, &tcp_bpf_prots[family][config]); return 0; } EXPORT_SYMBOL_GPL(tcp_bpf_update_proto); diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 87d440f47a703bb5aa4736551cac3597935290e5..da46357f501b3f2f74069c0e1e97c47af39c81f7 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -199,15 +199,14 @@ static int tcp_v4_pre_connect(struct sock *sk, struct sockaddr *uaddr, /* This will initiate an outgoing connection. */ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) { - struct inet_bind_hashbucket *prev_addr_hashbucket = NULL; struct sockaddr_in *usin = (struct sockaddr_in *)uaddr; struct inet_timewait_death_row *tcp_death_row; - __be32 daddr, nexthop, prev_sk_rcv_saddr; struct inet_sock *inet = inet_sk(sk); struct tcp_sock *tp = tcp_sk(sk); struct ip_options_rcu *inet_opt; struct net *net = sock_net(sk); __be16 orig_sport, orig_dport; + __be32 daddr, nexthop; struct flowi4 *fl4; struct rtable *rt; int err; @@ -251,24 +250,13 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) tcp_death_row = &sock_net(sk)->ipv4.tcp_death_row; if (!inet->inet_saddr) { - if (inet_csk(sk)->icsk_bind2_hash) { - prev_addr_hashbucket = inet_bhashfn_portaddr(tcp_death_row->hashinfo, - sk, net, inet->inet_num); - prev_sk_rcv_saddr = sk->sk_rcv_saddr; - } - inet->inet_saddr = fl4->saddr; - } - - sk_rcv_saddr_set(sk, inet->inet_saddr); - - if (prev_addr_hashbucket) { - err = inet_bhash2_update_saddr(prev_addr_hashbucket, sk); + err = inet_bhash2_update_saddr(sk, &fl4->saddr, AF_INET); if (err) { - inet->inet_saddr = 0; - sk_rcv_saddr_set(sk, prev_sk_rcv_saddr); ip_rt_put(rt); return err; } + } else { + sk_rcv_saddr_set(sk, inet->inet_saddr); } if (tp->rx_opt.ts_recent_stamp && inet->inet_daddr != daddr) { @@ -343,6 +331,7 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) * if necessary. */ tcp_set_state(sk, TCP_CLOSE); + inet_bhash2_reset_saddr(sk); ip_rt_put(rt); sk->sk_route_caps = 0; inet->inet_dport = 0; diff --git a/net/ipv4/tcp_ulp.c b/net/ipv4/tcp_ulp.c index 7c27aa629af191d44cd1c278b888846d482f1205..9ae50b1bd8444163acedd6f8df70afbb3583bc4b 100644 --- a/net/ipv4/tcp_ulp.c +++ b/net/ipv4/tcp_ulp.c @@ -136,6 +136,9 @@ static int __tcp_set_ulp(struct sock *sk, const struct tcp_ulp_ops *ulp_ops) if (icsk->icsk_ulp_ops) goto out_err; + if (sk->sk_socket) + clear_bit(SOCK_SUPPORT_ZC, &sk->sk_socket->flags); + err = ulp_ops->init(sk); if (err) goto out_err; diff --git a/net/ipv4/udp_bpf.c b/net/ipv4/udp_bpf.c index ff15918b7bdc7fac21a1b8eb51a5342349cff31a..e5dc91d0e0793ce6b203e0a6e4e0ffbd617b6820 100644 --- a/net/ipv4/udp_bpf.c +++ b/net/ipv4/udp_bpf.c @@ -141,14 +141,14 @@ int udp_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool restore) if (restore) { sk->sk_write_space = psock->saved_write_space; - WRITE_ONCE(sk->sk_prot, psock->sk_proto); + sock_replace_proto(sk, psock->sk_proto); return 0; } if (sk->sk_family == AF_INET6) udp_bpf_check_v6_needs_rebuild(psock->sk_proto); - WRITE_ONCE(sk->sk_prot, &udp_bpf_prots[family]); + sock_replace_proto(sk, &udp_bpf_prots[family]); return 0; } EXPORT_SYMBOL_GPL(udp_bpf_update_proto); diff --git a/net/ipv6/addrlabel.c b/net/ipv6/addrlabel.c index 8a22486cf27020c93f94670ebb1ec1aa93c8fb19..17ac45aa7194ce9c148ed95e14dd575d17feeb98 100644 --- a/net/ipv6/addrlabel.c +++ b/net/ipv6/addrlabel.c @@ -437,6 +437,7 @@ static void ip6addrlbl_putmsg(struct nlmsghdr *nlh, { struct ifaddrlblmsg *ifal = nlmsg_data(nlh); ifal->ifal_family = AF_INET6; + ifal->__ifal_reserved = 0; ifal->ifal_prefixlen = prefixlen; ifal->ifal_flags = 0; ifal->ifal_index = ifindex; diff --git a/net/ipv6/esp6_offload.c b/net/ipv6/esp6_offload.c index 79d43548279cb1be4766ba1e6c2b761c5fe65e8c..242f4295940e62fd504593dfa566f39a6170368a 100644 --- a/net/ipv6/esp6_offload.c +++ b/net/ipv6/esp6_offload.c @@ -346,6 +346,9 @@ static int esp6_xmit(struct xfrm_state *x, struct sk_buff *skb, netdev_features xo->seq.low += skb_shinfo(skb)->gso_segs; } + if (xo->seq.low < seq) + xo->seq.hi++; + esp.seqno = cpu_to_be64(xo->seq.low + ((u64)xo->seq.hi << 32)); len = skb->len - sizeof(struct ipv6hdr); diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 69252eb462b2d2f2612edd3d84e34ce1686a24ca..2f355f0ec32ac2fa5ae56db82c2c3632a3e58996 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -6555,10 +6555,16 @@ static void __net_exit ip6_route_net_exit(struct net *net) static int __net_init ip6_route_net_init_late(struct net *net) { #ifdef CONFIG_PROC_FS - proc_create_net("ipv6_route", 0, net->proc_net, &ipv6_route_seq_ops, - sizeof(struct ipv6_route_iter)); - proc_create_net_single("rt6_stats", 0444, net->proc_net, - rt6_stats_seq_show, NULL); + if (!proc_create_net("ipv6_route", 0, net->proc_net, + &ipv6_route_seq_ops, + sizeof(struct ipv6_route_iter))) + return -ENOMEM; + + if (!proc_create_net_single("rt6_stats", 0444, net->proc_net, + rt6_stats_seq_show, NULL)) { + remove_proc_entry("ipv6_route", net->proc_net); + return -ENOMEM; + } #endif return 0; } diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 2a3f9296df1e505b40e925c31b0d2aa2a2327cfd..f0548dbcabd2ddbc8089e2017b3982afe2586a4b 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -292,24 +292,11 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, tcp_death_row = &sock_net(sk)->ipv4.tcp_death_row; if (!saddr) { - struct inet_bind_hashbucket *prev_addr_hashbucket = NULL; - struct in6_addr prev_v6_rcv_saddr; - - if (icsk->icsk_bind2_hash) { - prev_addr_hashbucket = inet_bhashfn_portaddr(tcp_death_row->hashinfo, - sk, net, inet->inet_num); - prev_v6_rcv_saddr = sk->sk_v6_rcv_saddr; - } saddr = &fl6.saddr; - sk->sk_v6_rcv_saddr = *saddr; - if (prev_addr_hashbucket) { - err = inet_bhash2_update_saddr(prev_addr_hashbucket, sk); - if (err) { - sk->sk_v6_rcv_saddr = prev_v6_rcv_saddr; - goto failure; - } - } + err = inet_bhash2_update_saddr(sk, saddr, AF_INET6); + if (err) + goto failure; } /* set the source address */ @@ -359,6 +346,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, late_failure: tcp_set_state(sk, TCP_CLOSE); + inet_bhash2_reset_saddr(sk); failure: inet->inet_dport = 0; sk->sk_route_caps = 0; diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 129ec5a9b0eb7a1f8ae99581bb43eaf2c788b101..bc65e5b7195b3cc0c17f05877896721e70e6984b 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -66,6 +66,7 @@ int udpv6_init_sock(struct sock *sk) { skb_queue_head_init(&udp_sk(sk)->reader_queue); sk->sk_destruct = udpv6_destruct_sock; + set_bit(SOCK_SUPPORT_ZC, &sk->sk_socket->flags); return 0; } diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c index 4a4b0e49ec92d1af402aa8fe2b863bead9765c2b..ea435eba30534cfd22fabe7d77964e8b2fb72049 100644 --- a/net/ipv6/xfrm6_policy.c +++ b/net/ipv6/xfrm6_policy.c @@ -287,9 +287,13 @@ int __init xfrm6_init(void) if (ret) goto out_state; - register_pernet_subsys(&xfrm6_net_ops); + ret = register_pernet_subsys(&xfrm6_net_ops); + if (ret) + goto out_protocol; out: return ret; +out_protocol: + xfrm6_protocol_fini(); out_state: xfrm6_state_fini(); out_policy: diff --git a/net/kcm/kcmsock.c b/net/kcm/kcmsock.c index a5004228111de324a563ef6f26863181616c0241..890a2423f559eda103d03799dec6cd4e4e0c3df9 100644 --- a/net/kcm/kcmsock.c +++ b/net/kcm/kcmsock.c @@ -222,7 +222,7 @@ static void requeue_rx_msgs(struct kcm_mux *mux, struct sk_buff_head *head) struct sk_buff *skb; struct kcm_sock *kcm; - while ((skb = __skb_dequeue(head))) { + while ((skb = skb_dequeue(head))) { /* Reset destructor to avoid calling kcm_rcv_ready */ skb->destructor = sock_rfree; skb_orphan(skb); @@ -1085,53 +1085,17 @@ static int kcm_sendmsg(struct socket *sock, struct msghdr *msg, size_t len) return err; } -static struct sk_buff *kcm_wait_data(struct sock *sk, int flags, - long timeo, int *err) -{ - struct sk_buff *skb; - - while (!(skb = skb_peek(&sk->sk_receive_queue))) { - if (sk->sk_err) { - *err = sock_error(sk); - return NULL; - } - - if (sock_flag(sk, SOCK_DONE)) - return NULL; - - if ((flags & MSG_DONTWAIT) || !timeo) { - *err = -EAGAIN; - return NULL; - } - - sk_wait_data(sk, &timeo, NULL); - - /* Handle signals */ - if (signal_pending(current)) { - *err = sock_intr_errno(timeo); - return NULL; - } - } - - return skb; -} - static int kcm_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, int flags) { struct sock *sk = sock->sk; struct kcm_sock *kcm = kcm_sk(sk); int err = 0; - long timeo; struct strp_msg *stm; int copied = 0; struct sk_buff *skb; - timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT); - - lock_sock(sk); - - skb = kcm_wait_data(sk, flags, timeo, &err); + skb = skb_recv_datagram(sk, flags, &err); if (!skb) goto out; @@ -1162,14 +1126,11 @@ static int kcm_recvmsg(struct socket *sock, struct msghdr *msg, /* Finished with message */ msg->msg_flags |= MSG_EOR; KCM_STATS_INCR(kcm->stats.rx_msgs); - skb_unlink(skb, &sk->sk_receive_queue); - kfree_skb(skb); } } out: - release_sock(sk); - + skb_free_datagram(sk, skb); return copied ? : err; } @@ -1179,7 +1140,6 @@ static ssize_t kcm_splice_read(struct socket *sock, loff_t *ppos, { struct sock *sk = sock->sk; struct kcm_sock *kcm = kcm_sk(sk); - long timeo; struct strp_msg *stm; int err = 0; ssize_t copied; @@ -1187,11 +1147,7 @@ static ssize_t kcm_splice_read(struct socket *sock, loff_t *ppos, /* Only support splice for SOCKSEQPACKET */ - timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT); - - lock_sock(sk); - - skb = kcm_wait_data(sk, flags, timeo, &err); + skb = skb_recv_datagram(sk, flags, &err); if (!skb) goto err_out; @@ -1219,13 +1175,11 @@ static ssize_t kcm_splice_read(struct socket *sock, loff_t *ppos, * finish reading the message. */ - release_sock(sk); - + skb_free_datagram(sk, skb); return copied; err_out: - release_sock(sk); - + skb_free_datagram(sk, skb); return err; } diff --git a/net/key/af_key.c b/net/key/af_key.c index c85df5b958d266ce37fb27caba1bad74e8ef70a7..95edcbedf6ef28a000503c389361796c68f6bd47 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c @@ -2905,7 +2905,7 @@ static int count_ah_combs(const struct xfrm_tmpl *t) break; if (!aalg->pfkey_supported) continue; - if (aalg_tmpl_set(t, aalg) && aalg->available) + if (aalg_tmpl_set(t, aalg)) sz += sizeof(struct sadb_comb); } return sz + sizeof(struct sadb_prop); @@ -2923,7 +2923,7 @@ static int count_esp_combs(const struct xfrm_tmpl *t) if (!ealg->pfkey_supported) continue; - if (!(ealg_tmpl_set(t, ealg) && ealg->available)) + if (!(ealg_tmpl_set(t, ealg))) continue; for (k = 1; ; k++) { @@ -2934,16 +2934,17 @@ static int count_esp_combs(const struct xfrm_tmpl *t) if (!aalg->pfkey_supported) continue; - if (aalg_tmpl_set(t, aalg) && aalg->available) + if (aalg_tmpl_set(t, aalg)) sz += sizeof(struct sadb_comb); } } return sz + sizeof(struct sadb_prop); } -static void dump_ah_combs(struct sk_buff *skb, const struct xfrm_tmpl *t) +static int dump_ah_combs(struct sk_buff *skb, const struct xfrm_tmpl *t) { struct sadb_prop *p; + int sz = 0; int i; p = skb_put(skb, sizeof(struct sadb_prop)); @@ -2971,13 +2972,17 @@ static void dump_ah_combs(struct sk_buff *skb, const struct xfrm_tmpl *t) c->sadb_comb_soft_addtime = 20*60*60; c->sadb_comb_hard_usetime = 8*60*60; c->sadb_comb_soft_usetime = 7*60*60; + sz += sizeof(*c); } } + + return sz + sizeof(*p); } -static void dump_esp_combs(struct sk_buff *skb, const struct xfrm_tmpl *t) +static int dump_esp_combs(struct sk_buff *skb, const struct xfrm_tmpl *t) { struct sadb_prop *p; + int sz = 0; int i, k; p = skb_put(skb, sizeof(struct sadb_prop)); @@ -3019,8 +3024,11 @@ static void dump_esp_combs(struct sk_buff *skb, const struct xfrm_tmpl *t) c->sadb_comb_soft_addtime = 20*60*60; c->sadb_comb_hard_usetime = 8*60*60; c->sadb_comb_soft_usetime = 7*60*60; + sz += sizeof(*c); } } + + return sz + sizeof(*p); } static int key_notify_policy_expire(struct xfrm_policy *xp, const struct km_event *c) @@ -3150,6 +3158,7 @@ static int pfkey_send_acquire(struct xfrm_state *x, struct xfrm_tmpl *t, struct struct sadb_x_sec_ctx *sec_ctx; struct xfrm_sec_ctx *xfrm_ctx; int ctx_size = 0; + int alg_size = 0; sockaddr_size = pfkey_sockaddr_size(x->props.family); if (!sockaddr_size) @@ -3161,16 +3170,16 @@ static int pfkey_send_acquire(struct xfrm_state *x, struct xfrm_tmpl *t, struct sizeof(struct sadb_x_policy); if (x->id.proto == IPPROTO_AH) - size += count_ah_combs(t); + alg_size = count_ah_combs(t); else if (x->id.proto == IPPROTO_ESP) - size += count_esp_combs(t); + alg_size = count_esp_combs(t); if ((xfrm_ctx = x->security)) { ctx_size = PFKEY_ALIGN8(xfrm_ctx->ctx_len); size += sizeof(struct sadb_x_sec_ctx) + ctx_size; } - skb = alloc_skb(size + 16, GFP_ATOMIC); + skb = alloc_skb(size + alg_size + 16, GFP_ATOMIC); if (skb == NULL) return -ENOMEM; @@ -3224,10 +3233,13 @@ static int pfkey_send_acquire(struct xfrm_state *x, struct xfrm_tmpl *t, struct pol->sadb_x_policy_priority = xp->priority; /* Set sadb_comb's. */ + alg_size = 0; if (x->id.proto == IPPROTO_AH) - dump_ah_combs(skb, t); + alg_size = dump_ah_combs(skb, t); else if (x->id.proto == IPPROTO_ESP) - dump_esp_combs(skb, t); + alg_size = dump_esp_combs(skb, t); + + hdr->sadb_msg_len += alg_size / 8; /* security context */ if (xfrm_ctx) { @@ -3382,7 +3394,7 @@ static int pfkey_send_new_mapping(struct xfrm_state *x, xfrm_address_t *ipaddr, hdr->sadb_msg_len = size / sizeof(uint64_t); hdr->sadb_msg_errno = 0; hdr->sadb_msg_reserved = 0; - hdr->sadb_msg_seq = x->km.seq = get_acqseq(); + hdr->sadb_msg_seq = x->km.seq; hdr->sadb_msg_pid = 0; /* SA */ diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c index 7499c51b18502c6df7014644f1403dfdf7be2715..9a1415fe3fa78bf419efc86c4a6ccfc7e0f0c78b 100644 --- a/net/l2tp/l2tp_core.c +++ b/net/l2tp/l2tp_core.c @@ -1150,8 +1150,10 @@ static void l2tp_tunnel_destruct(struct sock *sk) } /* Remove hooks into tunnel socket */ + write_lock_bh(&sk->sk_callback_lock); sk->sk_destruct = tunnel->old_sk_destruct; sk->sk_user_data = NULL; + write_unlock_bh(&sk->sk_callback_lock); /* Call the original destructor */ if (sk->sk_destruct) @@ -1469,16 +1471,19 @@ int l2tp_tunnel_register(struct l2tp_tunnel *tunnel, struct net *net, sock = sockfd_lookup(tunnel->fd, &ret); if (!sock) goto err; - - ret = l2tp_validate_socket(sock->sk, net, tunnel->encap); - if (ret < 0) - goto err_sock; } + sk = sock->sk; + write_lock_bh(&sk->sk_callback_lock); + ret = l2tp_validate_socket(sk, net, tunnel->encap); + if (ret < 0) + goto err_inval_sock; + rcu_assign_sk_user_data(sk, tunnel); + write_unlock_bh(&sk->sk_callback_lock); + tunnel->l2tp_net = net; pn = l2tp_pernet(net); - sk = sock->sk; sock_hold(sk); tunnel->sock = sk; @@ -1503,8 +1508,6 @@ int l2tp_tunnel_register(struct l2tp_tunnel *tunnel, struct net *net, }; setup_udp_tunnel_sock(net, sock, &udp_cfg); - } else { - sk->sk_user_data = tunnel; } tunnel->old_sk_destruct = sk->sk_destruct; @@ -1521,6 +1524,11 @@ int l2tp_tunnel_register(struct l2tp_tunnel *tunnel, struct net *net, return 0; err_sock: + write_lock_bh(&sk->sk_callback_lock); + rcu_assign_sk_user_data(sk, NULL); +err_inval_sock: + write_unlock_bh(&sk->sk_callback_lock); + if (tunnel->fd < 0) sock_release(sock); else diff --git a/net/mac80211/airtime.c b/net/mac80211/airtime.c index 2e66598fac7915fef48590b15f21fd493f721cba..e8ebd343e2bff66df17fcc47d292e91347815da4 100644 --- a/net/mac80211/airtime.c +++ b/net/mac80211/airtime.c @@ -452,6 +452,9 @@ static u32 ieee80211_get_rate_duration(struct ieee80211_hw *hw, (status->encoding == RX_ENC_HE && streams > 8))) return 0; + if (idx >= MCS_GROUP_RATES) + return 0; + duration = airtime_mcs_groups[group].duration[idx]; duration <<= airtime_mcs_groups[group].shift; *overhead = 36 + (streams << 2); diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 46f3eddc23887c78598a5349191419a3993acd8b..02b5abc7326bc52ea38ade9d19d1e5870110a3e1 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c @@ -1439,8 +1439,10 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) ieee80211_led_exit(local); destroy_workqueue(local->workqueue); fail_workqueue: - if (local->wiphy_ciphers_allocated) + if (local->wiphy_ciphers_allocated) { kfree(local->hw.wiphy->cipher_suites); + local->wiphy_ciphers_allocated = false; + } kfree(local->int_scan_req); return result; } @@ -1508,8 +1510,10 @@ void ieee80211_free_hw(struct ieee80211_hw *hw) mutex_destroy(&local->iflist_mtx); mutex_destroy(&local->mtx); - if (local->wiphy_ciphers_allocated) + if (local->wiphy_ciphers_allocated) { kfree(local->hw.wiphy->cipher_suites); + local->wiphy_ciphers_allocated = false; + } idr_for_each(&local->ack_status_frames, ieee80211_free_ack_frame, NULL); diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c index acc1c299f1ae525e5c614e05b79cde02b9cffd8e..69d5e1ec6edefd63bf811688e4d8fb406119df79 100644 --- a/net/mac80211/mesh_pathtbl.c +++ b/net/mac80211/mesh_pathtbl.c @@ -710,7 +710,7 @@ int mesh_path_send_to_gates(struct mesh_path *mpath) void mesh_path_discard_frame(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb) { - kfree_skb(skb); + ieee80211_free_txskb(&sdata->local->hw, skb); sdata->u.mesh.mshstats.dropped_frames_no_route++; } diff --git a/net/mac80211/s1g.c b/net/mac80211/s1g.c index 8ca7d45d6daae8b07b21d7d7a194bc6569c8cf7e..c1f964e9991cd20ebab2d72ce317b32b78f25840 100644 --- a/net/mac80211/s1g.c +++ b/net/mac80211/s1g.c @@ -112,6 +112,9 @@ ieee80211_s1g_rx_twt_setup(struct ieee80211_sub_if_data *sdata, goto out; } + /* TWT Information not supported yet */ + twt->control |= IEEE80211_TWT_CONTROL_RX_DISABLED; + drv_add_twt_setup(sdata->local, sdata, &sta->sta, twt); out: ieee80211_s1g_send_twt_setup(sdata, mgmt->sa, sdata->vif.addr, twt); diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index a364148149f9413b632e6639ec1d66f32da8aa54..874f2a4d831d02704fcd5a66270d82f19d8930a0 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -4418,6 +4418,11 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, if (likely(!is_multicast_ether_addr(eth->h_dest))) goto normal; + if (unlikely(!ieee80211_sdata_running(sdata))) { + kfree_skb(skb); + return NETDEV_TX_OK; + } + if (unlikely(ieee80211_multicast_to_unicast(skb, dev))) { struct sk_buff_head queue; diff --git a/net/mctp/af_mctp.c b/net/mctp/af_mctp.c index b6b5e496fa403cc94331d3efbf1ba1dcbc405110..fc9e728b6333a1f126d8ac615e28fb66028217bc 100644 --- a/net/mctp/af_mctp.c +++ b/net/mctp/af_mctp.c @@ -665,12 +665,14 @@ static __init int mctp_init(void) rc = mctp_neigh_init(); if (rc) - goto err_unreg_proto; + goto err_unreg_routes; mctp_device_init(); return 0; +err_unreg_routes: + mctp_routes_exit(); err_unreg_proto: proto_unregister(&mctp_proto); err_unreg_sock: diff --git a/net/mctp/route.c b/net/mctp/route.c index 2155f15a074cd10649a4e7e09ce0dba3acc66f72..f9a80b82dc511dbcde9e116838702259c7765759 100644 --- a/net/mctp/route.c +++ b/net/mctp/route.c @@ -1400,7 +1400,7 @@ int __init mctp_routes_init(void) return register_pernet_subsys(&mctp_net_ops); } -void __exit mctp_routes_exit(void) +void mctp_routes_exit(void) { unregister_pernet_subsys(&mctp_net_ops); rtnl_unregister(PF_MCTP, RTM_DELROUTE); diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index b6dc6e260334f52032a225535afd0afff2532cc2..1dbc6253725954ac45bc091144276369aec2f0ff 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2354,12 +2354,7 @@ static void __mptcp_close_ssk(struct sock *sk, struct sock *ssk, goto out; } - /* if we are invoked by the msk cleanup code, the subflow is - * already orphaned - */ - if (ssk->sk_socket) - sock_orphan(ssk); - + sock_orphan(ssk); subflow->disposable = 1; /* if ssk hit tcp_done(), tcp_cleanup_ulp() cleared the related ops @@ -2940,7 +2935,11 @@ bool __mptcp_close(struct sock *sk, long timeout) if (ssk == msk->first) subflow->fail_tout = 0; - sock_orphan(ssk); + /* detach from the parent socket, but allow data_ready to + * push incoming data into the mptcp stack, to properly ack it + */ + ssk->sk_socket = NULL; + ssk->sk_wq = NULL; unlock_sock_fast(ssk, slow); } sock_orphan(sk); diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 02a54d59697b51450b61d79f1e77f3fd5523e4fb..2159b5f9988f8069db3fc0f8317eedd5ec92225c 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1745,16 +1745,16 @@ void mptcp_subflow_queue_clean(struct sock *listener_ssk) for (msk = head; msk; msk = next) { struct sock *sk = (struct sock *)msk; - bool slow, do_cancel_work; + bool do_cancel_work; sock_hold(sk); - slow = lock_sock_fast_nested(sk); + lock_sock_nested(sk, SINGLE_DEPTH_NESTING); next = msk->dl_next; msk->first = NULL; msk->dl_next = NULL; do_cancel_work = __mptcp_close(sk, 0); - unlock_sock_fast(sk, slow); + release_sock(sk); if (do_cancel_work) mptcp_cancel_work(sk); sock_put(sk); diff --git a/net/netfilter/ipset/ip_set_hash_gen.h b/net/netfilter/ipset/ip_set_hash_gen.h index 6e391308431da0279317bb2c2ac807c0c8b3a78d..7499192af58666151b51f86a0d03fe6509b97806 100644 --- a/net/netfilter/ipset/ip_set_hash_gen.h +++ b/net/netfilter/ipset/ip_set_hash_gen.h @@ -42,31 +42,8 @@ #define AHASH_MAX_SIZE (6 * AHASH_INIT_SIZE) /* Max muber of elements in the array block when tuned */ #define AHASH_MAX_TUNED 64 - #define AHASH_MAX(h) ((h)->bucketsize) -/* Max number of elements can be tuned */ -#ifdef IP_SET_HASH_WITH_MULTI -static u8 -tune_bucketsize(u8 curr, u32 multi) -{ - u32 n; - - if (multi < curr) - return curr; - - n = curr + AHASH_INIT_SIZE; - /* Currently, at listing one hash bucket must fit into a message. - * Therefore we have a hard limit here. - */ - return n > curr && n <= AHASH_MAX_TUNED ? n : curr; -} -#define TUNE_BUCKETSIZE(h, multi) \ - ((h)->bucketsize = tune_bucketsize((h)->bucketsize, multi)) -#else -#define TUNE_BUCKETSIZE(h, multi) -#endif - /* A hash bucket */ struct hbucket { struct rcu_head rcu; /* for call_rcu */ @@ -936,7 +913,12 @@ mtype_add(struct ip_set *set, void *value, const struct ip_set_ext *ext, goto set_full; /* Create a new slot */ if (n->pos >= n->size) { - TUNE_BUCKETSIZE(h, multi); +#ifdef IP_SET_HASH_WITH_MULTI + if (h->bucketsize >= AHASH_MAX_TUNED) + goto set_full; + else if (h->bucketsize <= multi) + h->bucketsize += AHASH_INIT_SIZE; +#endif if (n->size >= AHASH_MAX(h)) { /* Trigger rehashing */ mtype_data_next(&h->next, d); diff --git a/net/netfilter/ipset/ip_set_hash_ip.c b/net/netfilter/ipset/ip_set_hash_ip.c index dd30c03d5a23f5b3e4aabb41d20ccae5295a376a..75d556d71652d953965639914c03556d3572ade2 100644 --- a/net/netfilter/ipset/ip_set_hash_ip.c +++ b/net/netfilter/ipset/ip_set_hash_ip.c @@ -151,18 +151,16 @@ hash_ip4_uadt(struct ip_set *set, struct nlattr *tb[], if (((u64)ip_to - ip + 1) >> (32 - h->netmask) > IPSET_MAX_RANGE) return -ERANGE; - if (retried) { + if (retried) ip = ntohl(h->next.ip); - e.ip = htonl(ip); - } for (; ip <= ip_to;) { + e.ip = htonl(ip); ret = adtfn(set, &e, &ext, &ext, flags); if (ret && !ip_set_eexist(ret, flags)) return ret; ip += hosts; - e.ip = htonl(ip); - if (e.ip == 0) + if (ip == 0) return 0; ret = 0; diff --git a/net/netfilter/ipvs/ip_vs_app.c b/net/netfilter/ipvs/ip_vs_app.c index f9b16f2b221918f1be0ae6bd8da118b2046670a2..fdacbc3c15bef972cbc8237add6567d3123d3354 100644 --- a/net/netfilter/ipvs/ip_vs_app.c +++ b/net/netfilter/ipvs/ip_vs_app.c @@ -599,13 +599,19 @@ static const struct seq_operations ip_vs_app_seq_ops = { int __net_init ip_vs_app_net_init(struct netns_ipvs *ipvs) { INIT_LIST_HEAD(&ipvs->app_list); - proc_create_net("ip_vs_app", 0, ipvs->net->proc_net, &ip_vs_app_seq_ops, - sizeof(struct seq_net_private)); +#ifdef CONFIG_PROC_FS + if (!proc_create_net("ip_vs_app", 0, ipvs->net->proc_net, + &ip_vs_app_seq_ops, + sizeof(struct seq_net_private))) + return -ENOMEM; +#endif return 0; } void __net_exit ip_vs_app_net_cleanup(struct netns_ipvs *ipvs) { unregister_ip_vs_app(ipvs, NULL /* all */); +#ifdef CONFIG_PROC_FS remove_proc_entry("ip_vs_app", ipvs->net->proc_net); +#endif } diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c index 8c04bb57dd6fe3870efd75b7263f73d398c2888b..13534e02346cce368f14ab02eef1212d562665a0 100644 --- a/net/netfilter/ipvs/ip_vs_conn.c +++ b/net/netfilter/ipvs/ip_vs_conn.c @@ -1265,8 +1265,8 @@ static inline int todrop_entry(struct ip_vs_conn *cp) * The drop rate array needs tuning for real environments. * Called from timer bh only => no locking */ - static const char todrop_rate[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; - static char todrop_counter[9] = {0}; + static const signed char todrop_rate[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; + static signed char todrop_counter[9] = {0}; int i; /* if the conn entry hasn't lasted for 60 seconds, don't drop it. @@ -1447,20 +1447,36 @@ int __net_init ip_vs_conn_net_init(struct netns_ipvs *ipvs) { atomic_set(&ipvs->conn_count, 0); - proc_create_net("ip_vs_conn", 0, ipvs->net->proc_net, - &ip_vs_conn_seq_ops, sizeof(struct ip_vs_iter_state)); - proc_create_net("ip_vs_conn_sync", 0, ipvs->net->proc_net, - &ip_vs_conn_sync_seq_ops, - sizeof(struct ip_vs_iter_state)); +#ifdef CONFIG_PROC_FS + if (!proc_create_net("ip_vs_conn", 0, ipvs->net->proc_net, + &ip_vs_conn_seq_ops, + sizeof(struct ip_vs_iter_state))) + goto err_conn; + + if (!proc_create_net("ip_vs_conn_sync", 0, ipvs->net->proc_net, + &ip_vs_conn_sync_seq_ops, + sizeof(struct ip_vs_iter_state))) + goto err_conn_sync; +#endif + return 0; + +#ifdef CONFIG_PROC_FS +err_conn_sync: + remove_proc_entry("ip_vs_conn", ipvs->net->proc_net); +err_conn: + return -ENOMEM; +#endif } void __net_exit ip_vs_conn_net_cleanup(struct netns_ipvs *ipvs) { /* flush all the connection entries first */ ip_vs_conn_flush(ipvs); +#ifdef CONFIG_PROC_FS remove_proc_entry("ip_vs_conn", ipvs->net->proc_net); remove_proc_entry("ip_vs_conn_sync", ipvs->net->proc_net); +#endif } int __init ip_vs_conn_init(void) diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c index f97bda06d2a9064cc36f07e27dd9c04e9de2602f..2692139ce4172c7a28bebb1bc0d9520ee7546f0d 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c @@ -1781,7 +1781,7 @@ init_conntrack(struct net *net, struct nf_conn *tmpl, } #ifdef CONFIG_NF_CONNTRACK_MARK - ct->mark = exp->master->mark; + ct->mark = READ_ONCE(exp->master->mark); #endif #ifdef CONFIG_NF_CONNTRACK_SECMARK ct->secmark = exp->master->secmark; diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index 7562b215b932a0046b49ebd710a29b052e00344b..d71150a40fb0882fcbebb85cd02089ba0f8c6716 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c @@ -328,9 +328,9 @@ ctnetlink_dump_timestamp(struct sk_buff *skb, const struct nf_conn *ct) } #ifdef CONFIG_NF_CONNTRACK_MARK -static int ctnetlink_dump_mark(struct sk_buff *skb, const struct nf_conn *ct) +static int ctnetlink_dump_mark(struct sk_buff *skb, u32 mark) { - if (nla_put_be32(skb, CTA_MARK, htonl(ct->mark))) + if (nla_put_be32(skb, CTA_MARK, htonl(mark))) goto nla_put_failure; return 0; @@ -543,7 +543,7 @@ static int ctnetlink_dump_extinfo(struct sk_buff *skb, static int ctnetlink_dump_info(struct sk_buff *skb, struct nf_conn *ct) { if (ctnetlink_dump_status(skb, ct) < 0 || - ctnetlink_dump_mark(skb, ct) < 0 || + ctnetlink_dump_mark(skb, READ_ONCE(ct->mark)) < 0 || ctnetlink_dump_secctx(skb, ct) < 0 || ctnetlink_dump_id(skb, ct) < 0 || ctnetlink_dump_use(skb, ct) < 0 || @@ -722,6 +722,7 @@ ctnetlink_conntrack_event(unsigned int events, const struct nf_ct_event *item) struct sk_buff *skb; unsigned int type; unsigned int flags = 0, group; + u32 mark; int err; if (events & (1 << IPCT_DESTROY)) { @@ -826,8 +827,9 @@ ctnetlink_conntrack_event(unsigned int events, const struct nf_ct_event *item) } #ifdef CONFIG_NF_CONNTRACK_MARK - if ((events & (1 << IPCT_MARK) || ct->mark) - && ctnetlink_dump_mark(skb, ct) < 0) + mark = READ_ONCE(ct->mark); + if ((events & (1 << IPCT_MARK) || mark) && + ctnetlink_dump_mark(skb, mark) < 0) goto nla_put_failure; #endif nlmsg_end(skb, nlh); @@ -1154,7 +1156,7 @@ static int ctnetlink_filter_match(struct nf_conn *ct, void *data) } #ifdef CONFIG_NF_CONNTRACK_MARK - if ((ct->mark & filter->mark.mask) != filter->mark.val) + if ((READ_ONCE(ct->mark) & filter->mark.mask) != filter->mark.val) goto ignore_entry; #endif status = (u32)READ_ONCE(ct->status); @@ -2002,9 +2004,9 @@ static void ctnetlink_change_mark(struct nf_conn *ct, mask = ~ntohl(nla_get_be32(cda[CTA_MARK_MASK])); mark = ntohl(nla_get_be32(cda[CTA_MARK])); - newmark = (ct->mark & mask) ^ mark; - if (newmark != ct->mark) - ct->mark = newmark; + newmark = (READ_ONCE(ct->mark) & mask) ^ mark; + if (newmark != READ_ONCE(ct->mark)) + WRITE_ONCE(ct->mark, newmark); } #endif @@ -2669,6 +2671,7 @@ static int __ctnetlink_glue_build(struct sk_buff *skb, struct nf_conn *ct) { const struct nf_conntrack_zone *zone; struct nlattr *nest_parms; + u32 mark; zone = nf_ct_zone(ct); @@ -2730,7 +2733,8 @@ static int __ctnetlink_glue_build(struct sk_buff *skb, struct nf_conn *ct) goto nla_put_failure; #ifdef CONFIG_NF_CONNTRACK_MARK - if (ct->mark && ctnetlink_dump_mark(skb, ct) < 0) + mark = READ_ONCE(ct->mark); + if (mark && ctnetlink_dump_mark(skb, mark) < 0) goto nla_put_failure; #endif if (ctnetlink_dump_labels(skb, ct) < 0) diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c index 4ffe84c5a82cbda032fc51a0ee5b0bfb0c1cedd0..bca839ab1ae8df851a3a3730339d6f6f61685ec2 100644 --- a/net/netfilter/nf_conntrack_standalone.c +++ b/net/netfilter/nf_conntrack_standalone.c @@ -366,7 +366,7 @@ static int ct_seq_show(struct seq_file *s, void *v) goto release; #if defined(CONFIG_NF_CONNTRACK_MARK) - seq_printf(s, "mark=%u ", ct->mark); + seq_printf(s, "mark=%u ", READ_ONCE(ct->mark)); #endif ct_show_secctx(s, ct); diff --git a/net/netfilter/nf_flow_table_offload.c b/net/netfilter/nf_flow_table_offload.c index b04645ced89baabda0afd23d18dbb5e8b4ed793e..00b522890d77b42a3a0c234564356b7dc7235959 100644 --- a/net/netfilter/nf_flow_table_offload.c +++ b/net/netfilter/nf_flow_table_offload.c @@ -1098,6 +1098,7 @@ static int nf_flow_table_block_setup(struct nf_flowtable *flowtable, struct flow_block_cb *block_cb, *next; int err = 0; + down_write(&flowtable->flow_block_lock); switch (cmd) { case FLOW_BLOCK_BIND: list_splice(&bo->cb_list, &flowtable->flow_block.cb_list); @@ -1112,6 +1113,7 @@ static int nf_flow_table_block_setup(struct nf_flowtable *flowtable, WARN_ON_ONCE(1); err = -EOPNOTSUPP; } + up_write(&flowtable->flow_block_lock); return err; } @@ -1168,7 +1170,9 @@ static int nf_flow_table_offload_cmd(struct flow_block_offload *bo, nf_flow_table_block_offload_init(bo, dev_net(dev), cmd, flowtable, extack); + down_write(&flowtable->flow_block_lock); err = dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_FT, bo); + up_write(&flowtable->flow_block_lock); if (err < 0) return err; diff --git a/net/netfilter/nf_nat_core.c b/net/netfilter/nf_nat_core.c index 18319a6e68062bf2bdd7c1ef44a9ee5a7a5185ad..e29e4ccb5c5a3aebaaee298b42a1976064a10941 100644 --- a/net/netfilter/nf_nat_core.c +++ b/net/netfilter/nf_nat_core.c @@ -1152,7 +1152,16 @@ static int __init nf_nat_init(void) WARN_ON(nf_nat_hook != NULL); RCU_INIT_POINTER(nf_nat_hook, &nat_hook); - return register_nf_nat_bpf(); + ret = register_nf_nat_bpf(); + if (ret < 0) { + RCU_INIT_POINTER(nf_nat_hook, NULL); + nf_ct_helper_expectfn_unregister(&follow_master_nat); + synchronize_net(); + unregister_pernet_subsys(&nat_net_ops); + kvfree(nf_nat_bysource); + } + + return ret; } static void __exit nf_nat_cleanup(void) diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c index 58d9cbc9ccdc75d480659188cb09002fe7f55eeb..7a09421f19e15f50008344ef109c272f35071988 100644 --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c @@ -5958,7 +5958,8 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set, &timeout); if (err) return err; - } else if (set->flags & NFT_SET_TIMEOUT) { + } else if (set->flags & NFT_SET_TIMEOUT && + !(flags & NFT_SET_ELEM_INTERVAL_END)) { timeout = set->timeout; } @@ -6024,7 +6025,8 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set, err = -EOPNOTSUPP; goto err_set_elem_expr; } - } else if (set->num_exprs > 0) { + } else if (set->num_exprs > 0 && + !(flags & NFT_SET_ELEM_INTERVAL_END)) { err = nft_set_elem_expr_clone(ctx, set, expr_array); if (err < 0) goto err_set_elem_expr_clone; @@ -8465,9 +8467,6 @@ static void nft_commit_release(struct nft_trans *trans) nf_tables_chain_destroy(&trans->ctx); break; case NFT_MSG_DELRULE: - if (trans->ctx.chain->flags & NFT_CHAIN_HW_OFFLOAD) - nft_flow_rule_destroy(nft_trans_flow_rule(trans)); - nf_tables_rule_destroy(&trans->ctx, nft_trans_rule(trans)); break; case NFT_MSG_DELSET: @@ -8973,6 +8972,9 @@ static int nf_tables_commit(struct net *net, struct sk_buff *skb) nft_rule_expr_deactivate(&trans->ctx, nft_trans_rule(trans), NFT_TRANS_COMMIT); + + if (trans->ctx.chain->flags & NFT_CHAIN_HW_OFFLOAD) + nft_flow_rule_destroy(nft_trans_flow_rule(trans)); break; case NFT_MSG_NEWSET: nft_clear(net, nft_trans_set(trans)); @@ -10030,6 +10032,8 @@ static int nft_rcv_nl_event(struct notifier_block *this, unsigned long event, nft_net = nft_pernet(net); deleted = 0; mutex_lock(&nft_net->commit_mutex); + if (!list_empty(&nf_tables_destroy_list)) + rcu_barrier(); again: list_for_each_entry(table, &nft_net->tables, list) { if (nft_table_has_owner(table) && @@ -10088,7 +10092,8 @@ static void __net_exit nf_tables_exit_net(struct net *net) struct nftables_pernet *nft_net = nft_pernet(net); mutex_lock(&nft_net->commit_mutex); - if (!list_empty(&nft_net->commit_list)) + if (!list_empty(&nft_net->commit_list) || + !list_empty(&nft_net->module_list)) __nf_tables_abort(net, NFNL_ABORT_NONE); __nft_release_tables(net); mutex_unlock(&nft_net->commit_mutex); diff --git a/net/netfilter/nfnetlink.c b/net/netfilter/nfnetlink.c index 9c44518cb70ff74c3b0754c95b5d65fa2495f88e..6d18fb3468683fe3cfbad5d8a9604ea46a89437c 100644 --- a/net/netfilter/nfnetlink.c +++ b/net/netfilter/nfnetlink.c @@ -294,6 +294,7 @@ static int nfnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, nfnl_lock(subsys_id); if (nfnl_dereference_protected(subsys_id) != ss || nfnetlink_find_client(type, ss) != nc) { + nfnl_unlock(subsys_id); err = -EAGAIN; break; } diff --git a/net/netfilter/nft_ct.c b/net/netfilter/nft_ct.c index a3f01f209a53383ade9f9322601dc9e5f56deb4f..641dc21f92b438a5fddf2ade8041342c8631a053 100644 --- a/net/netfilter/nft_ct.c +++ b/net/netfilter/nft_ct.c @@ -98,7 +98,7 @@ static void nft_ct_get_eval(const struct nft_expr *expr, return; #ifdef CONFIG_NF_CONNTRACK_MARK case NFT_CT_MARK: - *dest = ct->mark; + *dest = READ_ONCE(ct->mark); return; #endif #ifdef CONFIG_NF_CONNTRACK_SECMARK @@ -297,8 +297,8 @@ static void nft_ct_set_eval(const struct nft_expr *expr, switch (priv->key) { #ifdef CONFIG_NF_CONNTRACK_MARK case NFT_CT_MARK: - if (ct->mark != value) { - ct->mark = value; + if (READ_ONCE(ct->mark) != value) { + WRITE_ONCE(ct->mark, value); nf_conntrack_event_cache(IPCT_MARK, ct); } break; diff --git a/net/netfilter/nft_payload.c b/net/netfilter/nft_payload.c index 088244f9d83833b3f40e29a9a40ab0480cf50744..4edd899aeb9bb5a21cc3919997f9851ccc7768b4 100644 --- a/net/netfilter/nft_payload.c +++ b/net/netfilter/nft_payload.c @@ -173,10 +173,10 @@ static const struct nla_policy nft_payload_policy[NFTA_PAYLOAD_MAX + 1] = { [NFTA_PAYLOAD_SREG] = { .type = NLA_U32 }, [NFTA_PAYLOAD_DREG] = { .type = NLA_U32 }, [NFTA_PAYLOAD_BASE] = { .type = NLA_U32 }, - [NFTA_PAYLOAD_OFFSET] = NLA_POLICY_MAX_BE(NLA_U32, 255), - [NFTA_PAYLOAD_LEN] = NLA_POLICY_MAX_BE(NLA_U32, 255), + [NFTA_PAYLOAD_OFFSET] = NLA_POLICY_MAX(NLA_BE32, 255), + [NFTA_PAYLOAD_LEN] = NLA_POLICY_MAX(NLA_BE32, 255), [NFTA_PAYLOAD_CSUM_TYPE] = { .type = NLA_U32 }, - [NFTA_PAYLOAD_CSUM_OFFSET] = NLA_POLICY_MAX_BE(NLA_U32, 255), + [NFTA_PAYLOAD_CSUM_OFFSET] = NLA_POLICY_MAX(NLA_BE32, 255), [NFTA_PAYLOAD_CSUM_FLAGS] = { .type = NLA_U32 }, }; diff --git a/net/netfilter/xt_connmark.c b/net/netfilter/xt_connmark.c index e5ebc0810675a98c54a0ae0f2b961d3ab35d2055..ad3c033db64e70dd642a63e9b48914fc0ac12cb9 100644 --- a/net/netfilter/xt_connmark.c +++ b/net/netfilter/xt_connmark.c @@ -30,6 +30,7 @@ connmark_tg_shift(struct sk_buff *skb, const struct xt_connmark_tginfo2 *info) u_int32_t new_targetmark; struct nf_conn *ct; u_int32_t newmark; + u_int32_t oldmark; ct = nf_ct_get(skb, &ctinfo); if (ct == NULL) @@ -37,14 +38,15 @@ connmark_tg_shift(struct sk_buff *skb, const struct xt_connmark_tginfo2 *info) switch (info->mode) { case XT_CONNMARK_SET: - newmark = (ct->mark & ~info->ctmask) ^ info->ctmark; + oldmark = READ_ONCE(ct->mark); + newmark = (oldmark & ~info->ctmask) ^ info->ctmark; if (info->shift_dir == D_SHIFT_RIGHT) newmark >>= info->shift_bits; else newmark <<= info->shift_bits; - if (ct->mark != newmark) { - ct->mark = newmark; + if (READ_ONCE(ct->mark) != newmark) { + WRITE_ONCE(ct->mark, newmark); nf_conntrack_event_cache(IPCT_MARK, ct); } break; @@ -55,15 +57,15 @@ connmark_tg_shift(struct sk_buff *skb, const struct xt_connmark_tginfo2 *info) else new_targetmark <<= info->shift_bits; - newmark = (ct->mark & ~info->ctmask) ^ + newmark = (READ_ONCE(ct->mark) & ~info->ctmask) ^ new_targetmark; - if (ct->mark != newmark) { - ct->mark = newmark; + if (READ_ONCE(ct->mark) != newmark) { + WRITE_ONCE(ct->mark, newmark); nf_conntrack_event_cache(IPCT_MARK, ct); } break; case XT_CONNMARK_RESTORE: - new_targetmark = (ct->mark & info->ctmask); + new_targetmark = (READ_ONCE(ct->mark) & info->ctmask); if (info->shift_dir == D_SHIFT_RIGHT) new_targetmark >>= info->shift_bits; else @@ -126,7 +128,7 @@ connmark_mt(const struct sk_buff *skb, struct xt_action_param *par) if (ct == NULL) return false; - return ((ct->mark & info->mask) == info->mark) ^ info->invert; + return ((READ_ONCE(ct->mark) & info->mask) == info->mark) ^ info->invert; } static int connmark_mt_check(const struct xt_mtchk_param *par) diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c index 6a193cce2a754e18950555ea6ce9f2853c348a83..4ffdf2f45c4447a611040c1e6025dd20d3a2cc58 100644 --- a/net/nfc/nci/core.c +++ b/net/nfc/nci/core.c @@ -542,7 +542,7 @@ static int nci_open_device(struct nci_dev *ndev) skb_queue_purge(&ndev->tx_q); ndev->ops->close(ndev); - ndev->flags = 0; + ndev->flags &= BIT(NCI_UNREG); } done: diff --git a/net/nfc/nci/data.c b/net/nfc/nci/data.c index aa5e712adf0782f69827290911e6d9a8a9efe67f..3d36ea5701f022b4c77ade10ef04901676116a7a 100644 --- a/net/nfc/nci/data.c +++ b/net/nfc/nci/data.c @@ -279,8 +279,10 @@ void nci_rx_data_packet(struct nci_dev *ndev, struct sk_buff *skb) nci_plen(skb->data)); conn_info = nci_get_conn_info_by_conn_id(ndev, nci_conn_id(skb->data)); - if (!conn_info) + if (!conn_info) { + kfree_skb(skb); return; + } /* strip the nci data header */ skb_pull(skb, NCI_DATA_HDR_SIZE); diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c index c7b10234cf7c48e13c0cc2075dd03cba40348abb..c8eaf4234b2e04bc9784e607d4ef8dae55525a99 100644 --- a/net/openvswitch/conntrack.c +++ b/net/openvswitch/conntrack.c @@ -152,7 +152,7 @@ static u8 ovs_ct_get_state(enum ip_conntrack_info ctinfo) static u32 ovs_ct_get_mark(const struct nf_conn *ct) { #if IS_ENABLED(CONFIG_NF_CONNTRACK_MARK) - return ct ? ct->mark : 0; + return ct ? READ_ONCE(ct->mark) : 0; #else return 0; #endif @@ -340,9 +340,9 @@ static int ovs_ct_set_mark(struct nf_conn *ct, struct sw_flow_key *key, #if IS_ENABLED(CONFIG_NF_CONNTRACK_MARK) u32 new_mark; - new_mark = ct_mark | (ct->mark & ~(mask)); - if (ct->mark != new_mark) { - ct->mark = new_mark; + new_mark = ct_mark | (READ_ONCE(ct->mark) & ~(mask)); + if (READ_ONCE(ct->mark) != new_mark) { + WRITE_ONCE(ct->mark, new_mark); if (nf_ct_is_confirmed(ct)) nf_conntrack_event_cache(IPCT_MARK, ct); key->ct.mark = new_mark; diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c index 155263e735124960cad3285264c84d03a1d4a4ad..8b84869eb2ac70d1421e35d5edafb6045153db0b 100644 --- a/net/openvswitch/datapath.c +++ b/net/openvswitch/datapath.c @@ -2544,6 +2544,7 @@ struct genl_family dp_vport_genl_family __ro_after_init = { .parallel_ops = true, .small_ops = dp_vport_genl_ops, .n_small_ops = ARRAY_SIZE(dp_vport_genl_ops), + .resv_start_op = OVS_VPORT_CMD_SET + 1, .mcgrps = &ovs_dp_vport_multicast_group, .n_mcgrps = 1, .module = THIS_MODULE, diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 6ce8dd19f33c3aafef0b9dab648a44fdd3478866..1ab65f7f2a0aee3491b075ac5abf5ea627174415 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -2293,8 +2293,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev, if (skb->ip_summed == CHECKSUM_PARTIAL) status |= TP_STATUS_CSUMNOTREADY; else if (skb->pkt_type != PACKET_OUTGOING && - (skb->ip_summed == CHECKSUM_COMPLETE || - skb_csum_unnecessary(skb))) + skb_csum_unnecessary(skb)) status |= TP_STATUS_CSUM_VALID; if (snaplen > res) @@ -3520,8 +3519,7 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, if (skb->ip_summed == CHECKSUM_PARTIAL) aux.tp_status |= TP_STATUS_CSUMNOTREADY; else if (skb->pkt_type != PACKET_OUTGOING && - (skb->ip_summed == CHECKSUM_COMPLETE || - skb_csum_unnecessary(skb))) + skb_csum_unnecessary(skb)) aux.tp_status |= TP_STATUS_CSUM_VALID; aux.tp_len = origlen; diff --git a/net/rose/rose_link.c b/net/rose/rose_link.c index 8b96a56d3a49b39beeedffbbc0d16aa82340c9cd..0f77ae8ef944a727437b7c1463903f369be3f811 100644 --- a/net/rose/rose_link.c +++ b/net/rose/rose_link.c @@ -236,6 +236,9 @@ void rose_transmit_clear_request(struct rose_neigh *neigh, unsigned int lci, uns unsigned char *dptr; int len; + if (!neigh->dev) + return; + len = AX25_BPQ_HEADER_LEN + AX25_MAX_HEADER_LEN + ROSE_MIN_LEN + 3; if ((skb = alloc_skb(len, GFP_ATOMIC)) == NULL) diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h index 1ad0ec5afb50ce5817b3e79757240762b7034573..8499ceb7719c80baee1382caf0ad5734abb4be18 100644 --- a/net/rxrpc/ar-internal.h +++ b/net/rxrpc/ar-internal.h @@ -399,6 +399,7 @@ enum rxrpc_conn_proto_state { struct rxrpc_bundle { struct rxrpc_conn_parameters params; refcount_t ref; + atomic_t active; /* Number of active users */ unsigned int debug_id; bool try_upgrade; /* True if the bundle is attempting upgrade */ bool alloc_conn; /* True if someone's getting a conn */ diff --git a/net/rxrpc/conn_client.c b/net/rxrpc/conn_client.c index 3c9eeb5b750c11262db88034927062c225b1ad60..bdb335cb2d0570ae5a141df90be37d5b3617db70 100644 --- a/net/rxrpc/conn_client.c +++ b/net/rxrpc/conn_client.c @@ -40,6 +40,8 @@ __read_mostly unsigned long rxrpc_conn_idle_client_fast_expiry = 2 * HZ; DEFINE_IDR(rxrpc_client_conn_ids); static DEFINE_SPINLOCK(rxrpc_conn_id_lock); +static void rxrpc_deactivate_bundle(struct rxrpc_bundle *bundle); + /* * Get a connection ID and epoch for a client connection from the global pool. * The connection struct pointer is then recorded in the idr radix tree. The @@ -123,6 +125,7 @@ static struct rxrpc_bundle *rxrpc_alloc_bundle(struct rxrpc_conn_parameters *cp, bundle->params = *cp; rxrpc_get_peer(bundle->params.peer); refcount_set(&bundle->ref, 1); + atomic_set(&bundle->active, 1); spin_lock_init(&bundle->channel_lock); INIT_LIST_HEAD(&bundle->waiting_calls); } @@ -149,7 +152,7 @@ void rxrpc_put_bundle(struct rxrpc_bundle *bundle) dead = __refcount_dec_and_test(&bundle->ref, &r); - _debug("PUT B=%x %d", d, r); + _debug("PUT B=%x %d", d, r - 1); if (dead) rxrpc_free_bundle(bundle); } @@ -338,6 +341,7 @@ static struct rxrpc_bundle *rxrpc_look_up_bundle(struct rxrpc_conn_parameters *c rxrpc_free_bundle(candidate); found_bundle: rxrpc_get_bundle(bundle); + atomic_inc(&bundle->active); spin_unlock(&local->client_bundles_lock); _leave(" = %u [found]", bundle->debug_id); return bundle; @@ -435,6 +439,7 @@ static void rxrpc_add_conn_to_bundle(struct rxrpc_bundle *bundle, gfp_t gfp) if (old) trace_rxrpc_client(old, -1, rxrpc_client_replace); candidate->bundle_shift = shift; + atomic_inc(&bundle->active); bundle->conns[i] = candidate; for (j = 0; j < RXRPC_MAXCALLS; j++) set_bit(shift + j, &bundle->avail_chans); @@ -725,6 +730,7 @@ int rxrpc_connect_call(struct rxrpc_sock *rx, smp_rmb(); out_put_bundle: + rxrpc_deactivate_bundle(bundle); rxrpc_put_bundle(bundle); out: _leave(" = %d", ret); @@ -900,9 +906,8 @@ void rxrpc_disconnect_client_call(struct rxrpc_bundle *bundle, struct rxrpc_call static void rxrpc_unbundle_conn(struct rxrpc_connection *conn) { struct rxrpc_bundle *bundle = conn->bundle; - struct rxrpc_local *local = bundle->params.local; unsigned int bindex; - bool need_drop = false, need_put = false; + bool need_drop = false; int i; _enter("C=%x", conn->debug_id); @@ -921,15 +926,22 @@ static void rxrpc_unbundle_conn(struct rxrpc_connection *conn) } spin_unlock(&bundle->channel_lock); - /* If there are no more connections, remove the bundle */ - if (!bundle->avail_chans) { - _debug("maybe unbundle"); - spin_lock(&local->client_bundles_lock); + if (need_drop) { + rxrpc_deactivate_bundle(bundle); + rxrpc_put_connection(conn); + } +} - for (i = 0; i < ARRAY_SIZE(bundle->conns); i++) - if (bundle->conns[i]) - break; - if (i == ARRAY_SIZE(bundle->conns) && !bundle->params.exclusive) { +/* + * Drop the active count on a bundle. + */ +static void rxrpc_deactivate_bundle(struct rxrpc_bundle *bundle) +{ + struct rxrpc_local *local = bundle->params.local; + bool need_put = false; + + if (atomic_dec_and_lock(&bundle->active, &local->client_bundles_lock)) { + if (!bundle->params.exclusive) { _debug("erase bundle"); rb_erase(&bundle->local_node, &local->client_bundles); need_put = true; @@ -939,10 +951,6 @@ static void rxrpc_unbundle_conn(struct rxrpc_connection *conn) if (need_put) rxrpc_put_bundle(bundle); } - - if (need_drop) - rxrpc_put_connection(conn); - _leave(""); } /* diff --git a/net/sched/Kconfig b/net/sched/Kconfig index 1e8ab4749c6c3cd81501bd0109469f7aecf945aa..4662a6ce8a7e7a91f81dbca1e096e55789f93cd4 100644 --- a/net/sched/Kconfig +++ b/net/sched/Kconfig @@ -976,7 +976,7 @@ config NET_ACT_TUNNEL_KEY config NET_ACT_CT tristate "connection tracking tc action" - depends on NET_CLS_ACT && NF_CONNTRACK && NF_NAT && NF_FLOW_TABLE + depends on NET_CLS_ACT && NF_CONNTRACK && (!NF_NAT || NF_NAT) && NF_FLOW_TABLE help Say Y here to allow sending the packets to conntrack module. diff --git a/net/sched/act_connmark.c b/net/sched/act_connmark.c index 66b143bb04ac94935b3999691abc1273f252e7b5..d41002e4613ff339925d56538f47d44ff4466b11 100644 --- a/net/sched/act_connmark.c +++ b/net/sched/act_connmark.c @@ -61,7 +61,7 @@ static int tcf_connmark_act(struct sk_buff *skb, const struct tc_action *a, c = nf_ct_get(skb, &ctinfo); if (c) { - skb->mark = c->mark; + skb->mark = READ_ONCE(c->mark); /* using overlimits stats to count how many packets marked */ ca->tcf_qstats.overlimits++; goto out; @@ -81,7 +81,7 @@ static int tcf_connmark_act(struct sk_buff *skb, const struct tc_action *a, c = nf_ct_tuplehash_to_ctrack(thash); /* using overlimits stats to count how many packets marked */ ca->tcf_qstats.overlimits++; - skb->mark = c->mark; + skb->mark = READ_ONCE(c->mark); nf_ct_put(c); out: diff --git a/net/sched/act_ct.c b/net/sched/act_ct.c index b38d91d6b249b475ffc10303ad5e2c49f9497e00..4c7f7861ea967ceda37494ddfa560e4fbd809f0a 100644 --- a/net/sched/act_ct.c +++ b/net/sched/act_ct.c @@ -178,7 +178,7 @@ static void tcf_ct_flow_table_add_action_meta(struct nf_conn *ct, entry = tcf_ct_flow_table_flow_action_get_next(action); entry->id = FLOW_ACTION_CT_METADATA; #if IS_ENABLED(CONFIG_NF_CONNTRACK_MARK) - entry->ct_metadata.mark = ct->mark; + entry->ct_metadata.mark = READ_ONCE(ct->mark); #endif ctinfo = dir == IP_CT_DIR_ORIGINAL ? IP_CT_ESTABLISHED : IP_CT_ESTABLISHED_REPLY; @@ -936,9 +936,9 @@ static void tcf_ct_act_set_mark(struct nf_conn *ct, u32 mark, u32 mask) if (!mask) return; - new_mark = mark | (ct->mark & ~(mask)); - if (ct->mark != new_mark) { - ct->mark = new_mark; + new_mark = mark | (READ_ONCE(ct->mark) & ~(mask)); + if (READ_ONCE(ct->mark) != new_mark) { + WRITE_ONCE(ct->mark, new_mark); if (nf_ct_is_confirmed(ct)) nf_conntrack_event_cache(IPCT_MARK, ct); } diff --git a/net/sched/act_ctinfo.c b/net/sched/act_ctinfo.c index d4102f0a9abd133092f801b3a33e6bb3f8c269f7..eaa02f098d1c308c9d72bc53d701e83b04122adb 100644 --- a/net/sched/act_ctinfo.c +++ b/net/sched/act_ctinfo.c @@ -32,7 +32,7 @@ static void tcf_ctinfo_dscp_set(struct nf_conn *ct, struct tcf_ctinfo *ca, { u8 dscp, newdscp; - newdscp = (((ct->mark & cp->dscpmask) >> cp->dscpmaskshift) << 2) & + newdscp = (((READ_ONCE(ct->mark) & cp->dscpmask) >> cp->dscpmaskshift) << 2) & ~INET_ECN_MASK; switch (proto) { @@ -72,7 +72,7 @@ static void tcf_ctinfo_cpmark_set(struct nf_conn *ct, struct tcf_ctinfo *ca, struct sk_buff *skb) { ca->stats_cpmark_set++; - skb->mark = ct->mark & cp->cpmarkmask; + skb->mark = READ_ONCE(ct->mark) & cp->cpmarkmask; } static int tcf_ctinfo_act(struct sk_buff *skb, const struct tc_action *a, @@ -130,7 +130,7 @@ static int tcf_ctinfo_act(struct sk_buff *skb, const struct tc_action *a, } if (cp->mode & CTINFO_MODE_DSCP) - if (!cp->dscpstatemask || (ct->mark & cp->dscpstatemask)) + if (!cp->dscpstatemask || (READ_ONCE(ct->mark) & cp->dscpstatemask)) tcf_ctinfo_dscp_set(ct, ca, cp, skb, wlen, proto); if (cp->mode & CTINFO_MODE_CPMARK) diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c index a5a401f93c1a2654b6ada19177e6111079312b3b..98129324e1573b5178c60300ac93666afe154dbe 100644 --- a/net/sched/sch_red.c +++ b/net/sched/sch_red.c @@ -72,6 +72,7 @@ static int red_enqueue(struct sk_buff *skb, struct Qdisc *sch, { struct red_sched_data *q = qdisc_priv(sch); struct Qdisc *child = q->qdisc; + unsigned int len; int ret; q->vars.qavg = red_calc_qavg(&q->parms, @@ -126,9 +127,10 @@ static int red_enqueue(struct sk_buff *skb, struct Qdisc *sch, break; } + len = qdisc_pkt_len(skb); ret = qdisc_enqueue(skb, child, to_free); if (likely(ret == NET_XMIT_SUCCESS)) { - qdisc_qstats_backlog_inc(sch, skb); + sch->qstats.backlog += len; sch->q.qlen++; } else if (net_xmit_drop_count(ret)) { q->stats.pdrop++; diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c index e213aaf45d67c61edbd22abc8be6cd4a197a9ed8..20831079fb09e7a043c79761e8ba3a09f995df9b 100644 --- a/net/sctp/outqueue.c +++ b/net/sctp/outqueue.c @@ -384,6 +384,7 @@ static int sctp_prsctp_prune_unsent(struct sctp_association *asoc, { struct sctp_outq *q = &asoc->outqueue; struct sctp_chunk *chk, *temp; + struct sctp_stream_out *sout; q->sched->unsched_all(&asoc->stream); @@ -398,12 +399,14 @@ static int sctp_prsctp_prune_unsent(struct sctp_association *asoc, sctp_sched_dequeue_common(q, chk); asoc->sent_cnt_removable--; asoc->abandoned_unsent[SCTP_PR_INDEX(PRIO)]++; - if (chk->sinfo.sinfo_stream < asoc->stream.outcnt) { - struct sctp_stream_out *streamout = - SCTP_SO(&asoc->stream, chk->sinfo.sinfo_stream); - streamout->ext->abandoned_unsent[SCTP_PR_INDEX(PRIO)]++; - } + sout = SCTP_SO(&asoc->stream, chk->sinfo.sinfo_stream); + sout->ext->abandoned_unsent[SCTP_PR_INDEX(PRIO)]++; + + /* clear out_curr if all frag chunks are pruned */ + if (asoc->stream.out_curr == sout && + list_is_last(&chk->frag_list, &chk->msg->chunks)) + asoc->stream.out_curr = NULL; msg_len -= chk->skb->truesize + sizeof(struct sctp_chunk); sctp_chunk_free(chk); diff --git a/net/sctp/stream.c b/net/sctp/stream.c index ef9fceadef8d5a9b643567ae8ebb802608354a96..ee6514af830f7867588fc066739db5e77a00e350 100644 --- a/net/sctp/stream.c +++ b/net/sctp/stream.c @@ -52,6 +52,19 @@ static void sctp_stream_shrink_out(struct sctp_stream *stream, __u16 outcnt) } } +static void sctp_stream_free_ext(struct sctp_stream *stream, __u16 sid) +{ + struct sctp_sched_ops *sched; + + if (!SCTP_SO(stream, sid)->ext) + return; + + sched = sctp_sched_ops_from_stream(stream); + sched->free_sid(stream, sid); + kfree(SCTP_SO(stream, sid)->ext); + SCTP_SO(stream, sid)->ext = NULL; +} + /* Migrates chunks from stream queues to new stream queues if needed, * but not across associations. Also, removes those chunks to streams * higher than the new max. @@ -70,16 +83,14 @@ static void sctp_stream_outq_migrate(struct sctp_stream *stream, * sctp_stream_update will swap ->out pointers. */ for (i = 0; i < outcnt; i++) { - kfree(SCTP_SO(new, i)->ext); + sctp_stream_free_ext(new, i); SCTP_SO(new, i)->ext = SCTP_SO(stream, i)->ext; SCTP_SO(stream, i)->ext = NULL; } } - for (i = outcnt; i < stream->outcnt; i++) { - kfree(SCTP_SO(stream, i)->ext); - SCTP_SO(stream, i)->ext = NULL; - } + for (i = outcnt; i < stream->outcnt; i++) + sctp_stream_free_ext(stream, i); } static int sctp_stream_alloc_out(struct sctp_stream *stream, __u16 outcnt, @@ -174,9 +185,9 @@ void sctp_stream_free(struct sctp_stream *stream) struct sctp_sched_ops *sched = sctp_sched_ops_from_stream(stream); int i; - sched->free(stream); + sched->unsched_all(stream); for (i = 0; i < stream->outcnt; i++) - kfree(SCTP_SO(stream, i)->ext); + sctp_stream_free_ext(stream, i); genradix_free(&stream->out); genradix_free(&stream->in); } diff --git a/net/sctp/stream_sched.c b/net/sctp/stream_sched.c index 1ad565ed56273c5996ddf1efcb5b54f4f6778c60..7c8f9d89e16a838bd7a1da7243e8882c55075fc3 100644 --- a/net/sctp/stream_sched.c +++ b/net/sctp/stream_sched.c @@ -46,6 +46,10 @@ static int sctp_sched_fcfs_init_sid(struct sctp_stream *stream, __u16 sid, return 0; } +static void sctp_sched_fcfs_free_sid(struct sctp_stream *stream, __u16 sid) +{ +} + static void sctp_sched_fcfs_free(struct sctp_stream *stream) { } @@ -96,6 +100,7 @@ static struct sctp_sched_ops sctp_sched_fcfs = { .get = sctp_sched_fcfs_get, .init = sctp_sched_fcfs_init, .init_sid = sctp_sched_fcfs_init_sid, + .free_sid = sctp_sched_fcfs_free_sid, .free = sctp_sched_fcfs_free, .enqueue = sctp_sched_fcfs_enqueue, .dequeue = sctp_sched_fcfs_dequeue, diff --git a/net/sctp/stream_sched_prio.c b/net/sctp/stream_sched_prio.c index 80b5a2c4cbc7b847882362411b182710b926c087..4fc9f2923ed116cbc02bc2e9d4771c888588fe8c 100644 --- a/net/sctp/stream_sched_prio.c +++ b/net/sctp/stream_sched_prio.c @@ -204,6 +204,24 @@ static int sctp_sched_prio_init_sid(struct sctp_stream *stream, __u16 sid, return sctp_sched_prio_set(stream, sid, 0, gfp); } +static void sctp_sched_prio_free_sid(struct sctp_stream *stream, __u16 sid) +{ + struct sctp_stream_priorities *prio = SCTP_SO(stream, sid)->ext->prio_head; + int i; + + if (!prio) + return; + + SCTP_SO(stream, sid)->ext->prio_head = NULL; + for (i = 0; i < stream->outcnt; i++) { + if (SCTP_SO(stream, i)->ext && + SCTP_SO(stream, i)->ext->prio_head == prio) + return; + } + + kfree(prio); +} + static void sctp_sched_prio_free(struct sctp_stream *stream) { struct sctp_stream_priorities *prio, *n; @@ -323,6 +341,7 @@ static struct sctp_sched_ops sctp_sched_prio = { .get = sctp_sched_prio_get, .init = sctp_sched_prio_init, .init_sid = sctp_sched_prio_init_sid, + .free_sid = sctp_sched_prio_free_sid, .free = sctp_sched_prio_free, .enqueue = sctp_sched_prio_enqueue, .dequeue = sctp_sched_prio_dequeue, diff --git a/net/sctp/stream_sched_rr.c b/net/sctp/stream_sched_rr.c index ff425aed62c7f430d370b59270df1182fb650a2c..cc444fe0d67c2df1cbc53e5a6f7bcb036a555d36 100644 --- a/net/sctp/stream_sched_rr.c +++ b/net/sctp/stream_sched_rr.c @@ -90,6 +90,10 @@ static int sctp_sched_rr_init_sid(struct sctp_stream *stream, __u16 sid, return 0; } +static void sctp_sched_rr_free_sid(struct sctp_stream *stream, __u16 sid) +{ +} + static void sctp_sched_rr_free(struct sctp_stream *stream) { sctp_sched_rr_unsched_all(stream); @@ -177,6 +181,7 @@ static struct sctp_sched_ops sctp_sched_rr = { .get = sctp_sched_rr_get, .init = sctp_sched_rr_init, .init_sid = sctp_sched_rr_init_sid, + .free_sid = sctp_sched_rr_free_sid, .free = sctp_sched_rr_free, .enqueue = sctp_sched_rr_enqueue, .dequeue = sctp_sched_rr_dequeue, diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c index 3ccbf3c201cd27851037cd302d39b5b0124ca765..e12d4fa5aece6ad96db3f781a4c5fe1787ddfb40 100644 --- a/net/smc/af_smc.c +++ b/net/smc/af_smc.c @@ -3380,14 +3380,14 @@ static int __init smc_init(void) rc = register_pernet_subsys(&smc_net_stat_ops); if (rc) - return rc; + goto out_pernet_subsys; smc_ism_init(); smc_clc_init(); rc = smc_nl_init(); if (rc) - goto out_pernet_subsys; + goto out_pernet_subsys_stat; rc = smc_pnet_init(); if (rc) @@ -3480,6 +3480,8 @@ static int __init smc_init(void) smc_pnet_exit(); out_nl: smc_nl_exit(); +out_pernet_subsys_stat: + unregister_pernet_subsys(&smc_net_stat_ops); out_pernet_subsys: unregister_pernet_subsys(&smc_net_ops); diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c index a31a27816cc0f8bdcbefe751a0eb1e8dc60bbf5e..7bb247c51e2f66e7b8968c4cf054ed238aacf2b8 100644 --- a/net/sunrpc/auth_gss/auth_gss.c +++ b/net/sunrpc/auth_gss/auth_gss.c @@ -1989,7 +1989,7 @@ gss_unwrap_resp_integ(struct rpc_task *task, struct rpc_cred *cred, goto unwrap_failed; mic.len = len; mic.data = kmalloc(len, GFP_KERNEL); - if (!mic.data) + if (ZERO_OR_NULL_PTR(mic.data)) goto unwrap_failed; if (read_bytes_from_xdr_buf(rcv_buf, offset, mic.data, mic.len)) goto unwrap_failed; diff --git a/net/sunrpc/sysfs.c b/net/sunrpc/sysfs.c index c65c90ad626ad046bb1b23ef6d640fd31b0f0349..c1f559892ae8a28cf2de96fe79593125c401a9fd 100644 --- a/net/sunrpc/sysfs.c +++ b/net/sunrpc/sysfs.c @@ -518,13 +518,16 @@ void rpc_sysfs_client_setup(struct rpc_clnt *clnt, struct net *net) { struct rpc_sysfs_client *rpc_client; + struct rpc_sysfs_xprt_switch *xswitch = + (struct rpc_sysfs_xprt_switch *)xprt_switch->xps_sysfs; + + if (!xswitch) + return; rpc_client = rpc_sysfs_client_alloc(rpc_sunrpc_client_kobj, net, clnt->cl_clid); if (rpc_client) { char name[] = "switch"; - struct rpc_sysfs_xprt_switch *xswitch = - (struct rpc_sysfs_xprt_switch *)xprt_switch->xps_sysfs; int ret; clnt->cl_sysfs = rpc_client; @@ -558,6 +561,8 @@ void rpc_sysfs_xprt_switch_setup(struct rpc_xprt_switch *xprt_switch, rpc_xprt_switch->xprt_switch = xprt_switch; rpc_xprt_switch->xprt = xprt; kobject_uevent(&rpc_xprt_switch->kobject, KOBJ_ADD); + } else { + xprt_switch->xps_sysfs = NULL; } } @@ -569,6 +574,9 @@ void rpc_sysfs_xprt_setup(struct rpc_xprt_switch *xprt_switch, struct rpc_sysfs_xprt_switch *switch_obj = (struct rpc_sysfs_xprt_switch *)xprt_switch->xps_sysfs; + if (!switch_obj) + return; + rpc_xprt = rpc_sysfs_xprt_alloc(&switch_obj->kobject, xprt, gfp_flags); if (rpc_xprt) { xprt->xprt_sysfs = rpc_xprt; diff --git a/net/tipc/crypto.c b/net/tipc/crypto.c index f09316a9035f413dd76cc9b03d51ff560d0d6674..d67440de011e7349c8ea81168fece88f7fd838d3 100644 --- a/net/tipc/crypto.c +++ b/net/tipc/crypto.c @@ -1971,6 +1971,9 @@ static void tipc_crypto_rcv_complete(struct net *net, struct tipc_aead *aead, /* Ok, everything's fine, try to synch own keys according to peers' */ tipc_crypto_key_synch(rx, *skb); + /* Re-fetch skb cb as skb might be changed in tipc_msg_validate */ + skb_cb = TIPC_SKB_CB(*skb); + /* Mark skb decrypted */ skb_cb->decrypted = 1; diff --git a/net/tipc/discover.c b/net/tipc/discover.c index e8630707901e379b83068df89137e2d7330bed2f..e8dcdf267c0c3f79f43800bcceb4d1767e7704ce 100644 --- a/net/tipc/discover.c +++ b/net/tipc/discover.c @@ -211,7 +211,10 @@ void tipc_disc_rcv(struct net *net, struct sk_buff *skb, u32 self; int err; - skb_linearize(skb); + if (skb_linearize(skb)) { + kfree_skb(skb); + return; + } hdr = buf_msg(skb); if (caps & TIPC_NODE_ID128) diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c index fc68733673ba6ddca574f67253ede5e340235104..dfea27a906f2f22b7027a0f182b92d5143f2f721 100644 --- a/net/tipc/netlink_compat.c +++ b/net/tipc/netlink_compat.c @@ -880,7 +880,7 @@ static int tipc_nl_compat_name_table_dump_header(struct tipc_nl_compat_msg *msg) }; ntq = (struct tipc_name_table_query *)TLV_DATA(msg->req); - if (TLV_GET_DATA_LEN(msg->req) < sizeof(struct tipc_name_table_query)) + if (TLV_GET_DATA_LEN(msg->req) < (int)sizeof(struct tipc_name_table_query)) return -EINVAL; depth = ntohl(ntq->depth); diff --git a/net/tipc/topsrv.c b/net/tipc/topsrv.c index d92ec92f0b71d94bf1f8f9c791879b0df5ce0dd4..e3b427a703980dc7e1967939e0f8ebd51a9f9648 100644 --- a/net/tipc/topsrv.c +++ b/net/tipc/topsrv.c @@ -176,7 +176,7 @@ static void tipc_conn_close(struct tipc_conn *con) conn_put(con); } -static struct tipc_conn *tipc_conn_alloc(struct tipc_topsrv *s) +static struct tipc_conn *tipc_conn_alloc(struct tipc_topsrv *s, struct socket *sock) { struct tipc_conn *con; int ret; @@ -202,10 +202,12 @@ static struct tipc_conn *tipc_conn_alloc(struct tipc_topsrv *s) } con->conid = ret; s->idr_in_use++; - spin_unlock_bh(&s->idr_lock); set_bit(CF_CONNECTED, &con->flags); con->server = s; + con->sock = sock; + conn_get(con); + spin_unlock_bh(&s->idr_lock); return con; } @@ -467,7 +469,7 @@ static void tipc_topsrv_accept(struct work_struct *work) ret = kernel_accept(lsock, &newsock, O_NONBLOCK); if (ret < 0) return; - con = tipc_conn_alloc(srv); + con = tipc_conn_alloc(srv, newsock); if (IS_ERR(con)) { ret = PTR_ERR(con); sock_release(newsock); @@ -479,11 +481,11 @@ static void tipc_topsrv_accept(struct work_struct *work) newsk->sk_data_ready = tipc_conn_data_ready; newsk->sk_write_space = tipc_conn_write_space; newsk->sk_user_data = con; - con->sock = newsock; write_unlock_bh(&newsk->sk_callback_lock); /* Wake up receive process in case of 'SYN+' message */ newsk->sk_data_ready(newsk); + conn_put(con); } } @@ -577,17 +579,17 @@ bool tipc_topsrv_kern_subscr(struct net *net, u32 port, u32 type, u32 lower, sub.filter = filter; *(u64 *)&sub.usr_handle = (u64)port; - con = tipc_conn_alloc(tipc_topsrv(net)); + con = tipc_conn_alloc(tipc_topsrv(net), NULL); if (IS_ERR(con)) return false; *conid = con->conid; - con->sock = NULL; rc = tipc_conn_rcv_sub(tipc_topsrv(net), con, &sub); - if (rc >= 0) - return true; + if (rc) + conn_put(con); + conn_put(con); - return false; + return !rc; } void tipc_topsrv_kern_unsubscr(struct net *net, int conid) diff --git a/net/tls/tls_device_fallback.c b/net/tls/tls_device_fallback.c index cdb391a8754b5b65d1ef1b7e6716bc7180f793db..7fbb1d0b69b34f0a3881d37ae0ea984a182062ea 100644 --- a/net/tls/tls_device_fallback.c +++ b/net/tls/tls_device_fallback.c @@ -346,7 +346,7 @@ static struct sk_buff *tls_enc_skb(struct tls_context *tls_ctx, salt = tls_ctx->crypto_send.aes_gcm_256.salt; break; default: - return NULL; + goto free_req; } cipher_sz = &tls_cipher_size_desc[tls_ctx->crypto_send.info.cipher_type]; buf_len = cipher_sz->salt + cipher_sz->iv + TLS_AAD_SPACE_SIZE + @@ -492,7 +492,8 @@ int tls_sw_fallback_init(struct sock *sk, key = ((struct tls12_crypto_info_aes_gcm_256 *)crypto_info)->key; break; default: - return -EINVAL; + rc = -EINVAL; + goto free_aead; } cipher_sz = &tls_cipher_size_desc[crypto_info->cipher_type]; diff --git a/net/unix/unix_bpf.c b/net/unix/unix_bpf.c index 7cf14c6b172549a09f23e5eb41c145d0fb0cb931..e9bf155139612d84b0f52de487210ff916ea9b22 100644 --- a/net/unix/unix_bpf.c +++ b/net/unix/unix_bpf.c @@ -145,12 +145,12 @@ int unix_dgram_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool re if (restore) { sk->sk_write_space = psock->saved_write_space; - WRITE_ONCE(sk->sk_prot, psock->sk_proto); + sock_replace_proto(sk, psock->sk_proto); return 0; } unix_dgram_bpf_check_needs_rebuild(psock->sk_proto); - WRITE_ONCE(sk->sk_prot, &unix_dgram_bpf_prot); + sock_replace_proto(sk, &unix_dgram_bpf_prot); return 0; } @@ -158,12 +158,12 @@ int unix_stream_bpf_update_proto(struct sock *sk, struct sk_psock *psock, bool r { if (restore) { sk->sk_write_space = psock->saved_write_space; - WRITE_ONCE(sk->sk_prot, psock->sk_proto); + sock_replace_proto(sk, psock->sk_proto); return 0; } unix_stream_bpf_check_needs_rebuild(psock->sk_proto); - WRITE_ONCE(sk->sk_prot, &unix_stream_bpf_prot); + sock_replace_proto(sk, &unix_stream_bpf_prot); return 0; } diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index ee418701cdee902ee7fea08767f51be055b87ad6..884eca7f6743ae16b6d32cdcf845ac8abf743665 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -1905,8 +1905,11 @@ static int vsock_connectible_wait_data(struct sock *sk, err = 0; transport = vsk->transport; - while ((data = vsock_connectible_has_data(vsk)) == 0) { + while (1) { prepare_to_wait(sk_sleep(sk), wait, TASK_INTERRUPTIBLE); + data = vsock_connectible_has_data(vsk); + if (data != 0) + break; if (sk->sk_err != 0 || (sk->sk_shutdown & RCV_SHUTDOWN) || @@ -2092,8 +2095,6 @@ vsock_connectible_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, const struct vsock_transport *transport; int err; - DEFINE_WAIT(wait); - sk = sock->sk; vsk = vsock_sk(sk); err = 0; diff --git a/net/wireless/reg.c b/net/wireless/reg.c index d5c7a5aa68532365984ac3b30ef0e79b0a090702..c3d950d294329b56b77f1fd6f1dee157a5075dc9 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c @@ -1084,6 +1084,8 @@ MODULE_FIRMWARE("regulatory.db"); static int query_regdb_file(const char *alpha2) { + int err; + ASSERT_RTNL(); if (regdb) @@ -1093,9 +1095,13 @@ static int query_regdb_file(const char *alpha2) if (!alpha2) return -ENOMEM; - return request_firmware_nowait(THIS_MODULE, true, "regulatory.db", - ®_pdev->dev, GFP_KERNEL, - (void *)alpha2, regdb_fw_cb); + err = request_firmware_nowait(THIS_MODULE, true, "regulatory.db", + ®_pdev->dev, GFP_KERNEL, + (void *)alpha2, regdb_fw_cb); + if (err) + kfree(alpha2); + + return err; } int reg_reload_regdb(void) diff --git a/net/wireless/scan.c b/net/wireless/scan.c index 806a5f1330ff566a29c375cfc17218e78e252a09..3d86482e83f51e9d0bbacd8ef5d34481508f477f 100644 --- a/net/wireless/scan.c +++ b/net/wireless/scan.c @@ -330,7 +330,8 @@ static size_t cfg80211_gen_new_ie(const u8 *ie, size_t ielen, * determine if they are the same ie. */ if (tmp_old[0] == WLAN_EID_VENDOR_SPECIFIC) { - if (!memcmp(tmp_old + 2, tmp + 2, 5)) { + if (tmp_old[1] >= 5 && tmp[1] >= 5 && + !memcmp(tmp_old + 2, tmp + 2, 5)) { /* same vendor ie, copy from * subelement */ @@ -1674,7 +1675,9 @@ cfg80211_update_known_bss(struct cfg80211_registered_device *rdev, if (old == rcu_access_pointer(known->pub.ies)) rcu_assign_pointer(known->pub.ies, new->pub.beacon_ies); - cfg80211_update_hidden_bsses(known, new->pub.beacon_ies, old); + cfg80211_update_hidden_bsses(known, + rcu_access_pointer(new->pub.beacon_ies), + old); if (old) kfree_rcu((struct cfg80211_bss_ies *)old, rcu_head); @@ -2524,10 +2527,15 @@ cfg80211_inform_bss_frame_data(struct wiphy *wiphy, const struct cfg80211_bss_ies *ies1, *ies2; size_t ielen = len - offsetof(struct ieee80211_mgmt, u.probe_resp.variable); - struct cfg80211_non_tx_bss non_tx_data; + struct cfg80211_non_tx_bss non_tx_data = {}; res = cfg80211_inform_single_bss_frame_data(wiphy, data, mgmt, len, gfp); + + /* don't do any further MBSSID handling for S1G */ + if (ieee80211_is_s1g_beacon(mgmt->frame_control)) + return res; + if (!res || !wiphy->support_mbssid || !cfg80211_find_elem(WLAN_EID_MULTIPLE_BSSID, ie, ielen)) return res; diff --git a/net/wireless/util.c b/net/wireless/util.c index 1f285b51502866439da976109764fbe4362bee60..39680e7bad45aedebf5e1eef1c62cb2f79c474df 100644 --- a/net/wireless/util.c +++ b/net/wireless/util.c @@ -1557,10 +1557,12 @@ static u32 cfg80211_calculate_bitrate_eht(struct rate_info *rate) tmp = result; tmp *= SCALE; do_div(tmp, mcs_divisors[rate->mcs]); - result = tmp; /* and take NSS */ - result = (result * rate->nss) / 8; + tmp *= rate->nss; + do_div(tmp, 8); + + result = tmp; return result / 10000; } diff --git a/net/x25/x25_dev.c b/net/x25/x25_dev.c index 5259ef8f5242f347ab0c2464db1c8f527c840691..748d8630ab58b9ed7937ccbf5e59483aecae1fa2 100644 --- a/net/x25/x25_dev.c +++ b/net/x25/x25_dev.c @@ -117,7 +117,7 @@ int x25_lapb_receive_frame(struct sk_buff *skb, struct net_device *dev, if (!pskb_may_pull(skb, 1)) { x25_neigh_put(nb); - return 0; + goto drop; } switch (skb->data[0]) { diff --git a/net/xfrm/xfrm_device.c b/net/xfrm/xfrm_device.c index 5f5aafd418af0e2537792dc642813f0dbed64c88..21269e8f2db4b6e6d47840d6d8e5c0cd5f75f41d 100644 --- a/net/xfrm/xfrm_device.c +++ b/net/xfrm/xfrm_device.c @@ -97,6 +97,18 @@ static void xfrm_outer_mode_prep(struct xfrm_state *x, struct sk_buff *skb) } } +static inline bool xmit_xfrm_check_overflow(struct sk_buff *skb) +{ + struct xfrm_offload *xo = xfrm_offload(skb); + __u32 seq = xo->seq.low; + + seq += skb_shinfo(skb)->gso_segs; + if (unlikely(seq < xo->seq.low)) + return true; + + return false; +} + struct sk_buff *validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t features, bool *again) { int err; @@ -134,7 +146,8 @@ struct sk_buff *validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t featur return skb; } - if (skb_is_gso(skb) && unlikely(x->xso.dev != dev)) { + if (skb_is_gso(skb) && (unlikely(x->xso.dev != dev) || + unlikely(xmit_xfrm_check_overflow(skb)))) { struct sk_buff *segs; /* Packet got rerouted, fixup features and segment it. */ diff --git a/net/xfrm/xfrm_replay.c b/net/xfrm/xfrm_replay.c index 9f4d42eb090f154457902e86f85ac1b269c76625..ce56d659c55a692ed6ecf2d1fd4c31e6eff03449 100644 --- a/net/xfrm/xfrm_replay.c +++ b/net/xfrm/xfrm_replay.c @@ -714,7 +714,7 @@ static int xfrm_replay_overflow_offload_esn(struct xfrm_state *x, struct sk_buff oseq += skb_shinfo(skb)->gso_segs; } - if (unlikely(oseq < replay_esn->oseq)) { + if (unlikely(xo->seq.low < replay_esn->oseq)) { XFRM_SKB_CB(skb)->seq.output.hi = ++oseq_hi; xo->seq.hi = oseq_hi; replay_esn->oseq_hi = oseq_hi; diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index 8489a3402eb8cb6fd56b5e2faa926cc0d9fa5b51..e41dee64d429c42bb3fe3767a24dcdd4157de878 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost @@ -122,7 +122,7 @@ quiet_cmd_modpost = MODPOST $@ sed 's/ko$$/o/' $(or $(modorder-if-needed), /dev/null) | $(MODPOST) $(modpost-args) -T - $(vmlinux.o-if-present) targets += $(output-symdump) -$(output-symdump): $(modorder-if-needed) $(vmlinux.o-if-present) $(moudle.symvers-if-present) $(MODPOST) FORCE +$(output-symdump): $(modorder-if-needed) $(vmlinux.o-if-present) $(module.symvers-if-present) $(MODPOST) FORCE $(call if_changed,modpost) __modpost: $(output-symdump) diff --git a/scripts/Makefile.package b/scripts/Makefile.package index 8bbcced67c221e1e14e34a34005e5b2e993e678d..2a90139ecbe1ad4d727c29c71e9f245586e4df11 100644 --- a/scripts/Makefile.package +++ b/scripts/Makefile.package @@ -30,8 +30,8 @@ KBUILD_PKG_ROOTCMD ?="fakeroot -u" export KDEB_SOURCENAME # Include only those top-level files that are needed by make, plus the GPL copy TAR_CONTENT := Documentation LICENSES arch block certs crypto drivers fs \ - include init io_uring ipc kernel lib mm net samples scripts \ - security sound tools usr virt \ + include init io_uring ipc kernel lib mm net rust \ + samples scripts security sound tools usr virt \ .config .scmversion Makefile \ Kbuild Kconfig COPYING $(wildcard localversion*) MKSPEC := $(srctree)/scripts/package/mkspec diff --git a/scripts/faddr2line b/scripts/faddr2line index 5514c23f45c24fdbe0968c95275103ef2e545f09..0e73aca4f9089a2b33ba80185548683018160552 100755 --- a/scripts/faddr2line +++ b/scripts/faddr2line @@ -74,7 +74,8 @@ command -v ${ADDR2LINE} >/dev/null 2>&1 || die "${ADDR2LINE} isn't installed" find_dir_prefix() { local objfile=$1 - local start_kernel_addr=$(${READELF} --symbols --wide $objfile | ${AWK} '$8 == "start_kernel" {printf "0x%s", $2}') + local start_kernel_addr=$(${READELF} --symbols --wide $objfile | sed 's/\[.*\]//' | + ${AWK} '$8 == "start_kernel" {printf "0x%s", $2}') [[ -z $start_kernel_addr ]] && return local file_line=$(${ADDR2LINE} -e $objfile $start_kernel_addr) @@ -178,7 +179,7 @@ __faddr2line() { found=2 break fi - done < <(${READELF} --symbols --wide $objfile | ${AWK} -v sec=$sym_sec '$7 == sec' | sort --key=2) + done < <(${READELF} --symbols --wide $objfile | sed 's/\[.*\]//' | ${AWK} -v sec=$sym_sec '$7 == sec' | sort --key=2) if [[ $found = 0 ]]; then warn "can't find symbol: sym_name: $sym_name sym_sec: $sym_sec sym_addr: $sym_addr sym_elf_size: $sym_elf_size" @@ -259,7 +260,7 @@ __faddr2line() { DONE=1 - done < <(${READELF} --symbols --wide $objfile | ${AWK} -v fn=$sym_name '$4 == "FUNC" && $8 == fn') + done < <(${READELF} --symbols --wide $objfile | sed 's/\[.*\]//' | ${AWK} -v fn=$sym_name '$4 == "FUNC" && $8 == fn') } [[ $# -lt 2 ]] && usage diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c index 62b6313f51c8ba88d9def3cefa8b712fd5b6b3e1..109325f31bef35de236aa0b80fc168948e2f9cc4 100644 --- a/scripts/kconfig/menu.c +++ b/scripts/kconfig/menu.c @@ -722,8 +722,8 @@ static void get_prompt_str(struct gstr *r, struct property *prop, if (!expr_eq(prop->menu->dep, prop->visible.expr)) get_dep_str(r, prop->visible.expr, " Visible if: "); - menu = prop->menu->parent; - for (i = 0; menu && i < 8; menu = menu->parent) { + menu = prop->menu; + for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) { bool accessible = menu_is_visible(menu); submenu[i++] = menu; @@ -733,16 +733,7 @@ static void get_prompt_str(struct gstr *r, struct property *prop, if (head && location) { jump = xmalloc(sizeof(struct jump_key)); - if (menu_is_visible(prop->menu)) { - /* - * There is not enough room to put the hint at the - * beginning of the "Prompt" line. Put the hint on the - * last "Location" line even when it would belong on - * the former. - */ - jump->target = prop->menu; - } else - jump->target = location; + jump->target = location; if (list_empty(head)) jump->index = 0; @@ -758,13 +749,7 @@ static void get_prompt_str(struct gstr *r, struct property *prop, menu = submenu[i]; if (jump && menu == location) jump->offset = strlen(r->s); - - if (menu == &rootmenu) - /* The real rootmenu prompt is ugly */ - str_printf(r, "%*cMain menu", j, ' '); - else - str_printf(r, "%*c-> %s", j, ' ', menu_get_prompt(menu)); - + str_printf(r, "%*c-> %s", j, ' ', menu_get_prompt(menu)); if (menu->sym) { str_printf(r, " (%s [=%s])", menu->sym->name ? menu->sym->name : "", diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh index b6593eac5003cfae2ddfce5ac50ab6155058377e..201bccfbc67883fdb9e6e872e56a58af5ca0c850 100755 --- a/scripts/min-tool-version.sh +++ b/scripts/min-tool-version.sh @@ -25,7 +25,7 @@ icc) ;; llvm) if [ "$SRCARCH" = s390 ]; then - echo 14.0.0 + echo 15.0.0 else echo 11.0.0 fi diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian index 60a2a63a5e900c30691462b970cfcf924df85c52..a3ac5a716e9fc18aeb4e936743db2743c5271bd1 100755 --- a/scripts/package/mkdebian +++ b/scripts/package/mkdebian @@ -90,7 +90,7 @@ if [ -n "$KDEB_PKGVERSION" ]; then packageversion=$KDEB_PKGVERSION revision=${packageversion##*-} else - revision=$(cat .version 2>/dev/null||echo 1) + revision=$($srctree/init/build-version) packageversion=$version-$revision fi sourcename=$KDEB_SOURCENAME diff --git a/security/commoncap.c b/security/commoncap.c index 5fc8986c3c77cd1dccfada0b8b35597de5f666aa..bc751fa5adad73cb6a9065829505dba35ea441ca 100644 --- a/security/commoncap.c +++ b/security/commoncap.c @@ -401,8 +401,10 @@ int cap_inode_getsecurity(struct user_namespace *mnt_userns, &tmpbuf, size, GFP_NOFS); dput(dentry); - if (ret < 0 || !tmpbuf) - return ret; + if (ret < 0 || !tmpbuf) { + size = ret; + goto out_free; + } fs_ns = inode->i_sb->s_user_ns; cap = (struct vfs_cap_data *) tmpbuf; diff --git a/sound/arm/pxa2xx-ac97-lib.c b/sound/arm/pxa2xx-ac97-lib.c index e55c0421718b3abe9441229f4b2d1fb49b450332..2ca33fd5a57576226526f9ac662f994cbbf51d47 100644 --- a/sound/arm/pxa2xx-ac97-lib.c +++ b/sound/arm/pxa2xx-ac97-lib.c @@ -402,8 +402,10 @@ int pxa2xx_ac97_hw_probe(struct platform_device *dev) goto err_clk2; irq = platform_get_irq(dev, 0); - if (!irq) + if (irq < 0) { + ret = irq; goto err_irq; + } ret = request_irq(irq, pxa2xx_ac97_irq, 0, "AC97", NULL); if (ret < 0) diff --git a/sound/core/memalloc.c b/sound/core/memalloc.c index 03cffe7713667783f08039d474766313e36181b1..ba095558b6d165bcd2f1526233fdeef84ff115b7 100644 --- a/sound/core/memalloc.c +++ b/sound/core/memalloc.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -543,17 +544,17 @@ static void *snd_dma_noncontig_alloc(struct snd_dma_buffer *dmab, size_t size) sgt = dma_alloc_noncontiguous(dmab->dev.dev, size, dmab->dev.dir, DEFAULT_GFP, 0); - if (!sgt) { #ifdef CONFIG_SND_DMA_SGBUF + if (!sgt && !get_dma_ops(dmab->dev.dev)) { if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_WC_SG) dmab->dev.type = SNDRV_DMA_TYPE_DEV_WC_SG_FALLBACK; else dmab->dev.type = SNDRV_DMA_TYPE_DEV_SG_FALLBACK; return snd_dma_sg_fallback_alloc(dmab, size); -#else - return NULL; -#endif } +#endif + if (!sgt) + return NULL; dmab->dev.need_sync = dma_need_sync(dmab->dev.dev, sg_dma_address(sgt->sgl)); @@ -857,7 +858,7 @@ static const struct snd_malloc_ops snd_dma_noncoherent_ops = { /* * Entry points */ -static const struct snd_malloc_ops *dma_ops[] = { +static const struct snd_malloc_ops *snd_dma_ops[] = { [SNDRV_DMA_TYPE_CONTINUOUS] = &snd_dma_continuous_ops, [SNDRV_DMA_TYPE_VMALLOC] = &snd_dma_vmalloc_ops, #ifdef CONFIG_HAS_DMA @@ -883,7 +884,7 @@ static const struct snd_malloc_ops *snd_dma_get_ops(struct snd_dma_buffer *dmab) if (WARN_ON_ONCE(!dmab)) return NULL; if (WARN_ON_ONCE(dmab->dev.type <= SNDRV_DMA_TYPE_UNKNOWN || - dmab->dev.type >= ARRAY_SIZE(dma_ops))) + dmab->dev.type >= ARRAY_SIZE(snd_dma_ops))) return NULL; - return dma_ops[dmab->dev.type]; + return snd_dma_ops[dmab->dev.type]; } diff --git a/sound/core/seq/seq_memory.c b/sound/core/seq/seq_memory.c index b7aee23fc3876543f76e2b3aa6d43eeb78a77c76..47ef6bc30c0ee2eafaf2b807e4e99e1692ec6dba 100644 --- a/sound/core/seq/seq_memory.c +++ b/sound/core/seq/seq_memory.c @@ -113,15 +113,19 @@ EXPORT_SYMBOL(snd_seq_dump_var_event); * expand the variable length event to linear buffer space. */ -static int seq_copy_in_kernel(char **bufptr, const void *src, int size) +static int seq_copy_in_kernel(void *ptr, void *src, int size) { + char **bufptr = ptr; + memcpy(*bufptr, src, size); *bufptr += size; return 0; } -static int seq_copy_in_user(char __user **bufptr, const void *src, int size) +static int seq_copy_in_user(void *ptr, void *src, int size) { + char __user **bufptr = ptr; + if (copy_to_user(*bufptr, src, size)) return -EFAULT; *bufptr += size; @@ -151,8 +155,7 @@ int snd_seq_expand_var_event(const struct snd_seq_event *event, int count, char return newlen; } err = snd_seq_dump_var_event(event, - in_kernel ? (snd_seq_dump_func_t)seq_copy_in_kernel : - (snd_seq_dump_func_t)seq_copy_in_user, + in_kernel ? seq_copy_in_kernel : seq_copy_in_user, &buf); return err < 0 ? err : newlen; } diff --git a/sound/firewire/dice/dice-stream.c b/sound/firewire/dice/dice-stream.c index f99e00083141ec551cfce818dcf6196ed8b94b11..4c677c8546c71a8bebc867abb423239d49906108 100644 --- a/sound/firewire/dice/dice-stream.c +++ b/sound/firewire/dice/dice-stream.c @@ -59,7 +59,7 @@ int snd_dice_stream_get_rate_mode(struct snd_dice *dice, unsigned int rate, static int select_clock(struct snd_dice *dice, unsigned int rate) { - __be32 reg; + __be32 reg, new; u32 data; int i; int err; @@ -83,15 +83,17 @@ static int select_clock(struct snd_dice *dice, unsigned int rate) if (completion_done(&dice->clock_accepted)) reinit_completion(&dice->clock_accepted); - reg = cpu_to_be32(data); + new = cpu_to_be32(data); err = snd_dice_transaction_write_global(dice, GLOBAL_CLOCK_SELECT, - ®, sizeof(reg)); + &new, sizeof(new)); if (err < 0) return err; if (wait_for_completion_timeout(&dice->clock_accepted, - msecs_to_jiffies(NOTIFICATION_TIMEOUT_MS)) == 0) - return -ETIMEDOUT; + msecs_to_jiffies(NOTIFICATION_TIMEOUT_MS)) == 0) { + if (reg != new) + return -ETIMEDOUT; + } return 0; } diff --git a/sound/hda/hdac_sysfs.c b/sound/hda/hdac_sysfs.c index e47de49a32e3e4e93982f18ce5c6c29185014bc2..62a9615dcf529a241cef26c8319c156b49207757 100644 --- a/sound/hda/hdac_sysfs.c +++ b/sound/hda/hdac_sysfs.c @@ -346,8 +346,10 @@ static int add_widget_node(struct kobject *parent, hda_nid_t nid, return -ENOMEM; kobject_init(kobj, &widget_ktype); err = kobject_add(kobj, parent, "%02x", nid); - if (err < 0) + if (err < 0) { + kobject_put(kobj); return err; + } err = sysfs_create_group(kobj, group); if (err < 0) { kobject_put(kobj); diff --git a/sound/hda/intel-dsp-config.c b/sound/hda/intel-dsp-config.c index b9eb3208f2888001b478c756efc66f56d12db253..ae31bb1275940453efb026410e5673d1e53a9d1e 100644 --- a/sound/hda/intel-dsp-config.c +++ b/sound/hda/intel-dsp-config.c @@ -320,6 +320,11 @@ static const struct config_entry config_table[] = { {} } }, + { + .flags = FLAG_SOF, + .device = 0x34c8, + .codec_hid = &essx_83x6, + }, { .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, .device = 0x34c8, diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 6ff19dd0d10c261703ad21f9d612403f5f48de59..87002670c0c925e94e55a764b8d54daf61ca9647 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -485,8 +485,8 @@ static int intel_ml_lctl_set_power(struct azx *chip, int state) int timeout; /* - * the codecs are sharing the first link setting by default - * If other links are enabled for stream, they need similar fix + * Changes to LCTL.SCF are only needed for the first multi-link dealing + * with external codecs */ val = readl(bus->mlcap + AZX_ML_BASE + AZX_REG_ML_LCTL); val &= ~AZX_ML_LCTL_SPA; @@ -513,7 +513,7 @@ static void intel_init_lctl(struct azx *chip) /* 0. check lctl register value is correct or not */ val = readl(bus->mlcap + AZX_ML_BASE + AZX_REG_ML_LCTL); - /* if SCF is already set, let's use it */ + /* only perform additional configurations if the SCF is initially based on 6MHz */ if ((val & AZX_ML_LCTL_SCF) != 0) return; @@ -531,7 +531,7 @@ static void intel_init_lctl(struct azx *chip) if (ret) goto set_spa; - /* 2. update SCF to select a properly audio clock*/ + /* 2. update SCF to select an audio clock different from 6MHz */ val &= ~AZX_ML_LCTL_SCF; val |= intel_get_lctl_scf(chip); writel(val, bus->mlcap + AZX_ML_BASE + AZX_REG_ML_LCTL); @@ -2711,6 +2711,9 @@ static const struct pci_device_id azx_ids[] = { { PCI_DEVICE(0x1002, 0xab28), .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | AZX_DCAPS_PM_RUNTIME }, + { PCI_DEVICE(0x1002, 0xab30), + .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | + AZX_DCAPS_PM_RUNTIME }, { PCI_DEVICE(0x1002, 0xab38), .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS | AZX_DCAPS_PM_RUNTIME }, diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c index 9580fe00cbd92c3ff5eb7308559bef33b3829d9e..0a292bf271f2e59a66124acf4c97c5d19ab86d22 100644 --- a/sound/pci/hda/patch_ca0132.c +++ b/sound/pci/hda/patch_ca0132.c @@ -1306,6 +1306,7 @@ static const struct snd_pci_quirk ca0132_quirks[] = { SND_PCI_QUIRK(0x1458, 0xA026, "Gigabyte G1.Sniper Z97", QUIRK_R3DI), SND_PCI_QUIRK(0x1458, 0xA036, "Gigabyte GA-Z170X-Gaming 7", QUIRK_R3DI), SND_PCI_QUIRK(0x3842, 0x1038, "EVGA X99 Classified", QUIRK_R3DI), + SND_PCI_QUIRK(0x3842, 0x1055, "EVGA Z390 DARK", QUIRK_R3DI), SND_PCI_QUIRK(0x1102, 0x0013, "Recon3D", QUIRK_R3D), SND_PCI_QUIRK(0x1102, 0x0018, "Recon3D", QUIRK_R3D), SND_PCI_QUIRK(0x1102, 0x0051, "Sound Blaster AE-5", QUIRK_AE5), diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 701a72ec5629acc81c95ba3f021b3015e0291f52..e5c03638566643038673ed8751235a1da015a293 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -9404,6 +9404,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { SND_PCI_QUIRK(0x1043, 0x1e8e, "ASUS Zephyrus G15", ALC289_FIXUP_ASUS_GA401), SND_PCI_QUIRK(0x1043, 0x1c52, "ASUS Zephyrus G15 2022", ALC289_FIXUP_ASUS_GA401), SND_PCI_QUIRK(0x1043, 0x1f11, "ASUS Zephyrus G14", ALC289_FIXUP_ASUS_GA401), + SND_PCI_QUIRK(0x1043, 0x1f12, "ASUS UM5302", ALC287_FIXUP_CS35L41_I2C_2), SND_PCI_QUIRK(0x1043, 0x1f92, "ASUS ROG Flow X16", ALC289_FIXUP_ASUS_GA401), SND_PCI_QUIRK(0x1043, 0x3030, "ASUS ZN270IE", ALC256_FIXUP_ASUS_AIO_GPIO2), SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC), @@ -9435,6 +9436,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { SND_PCI_QUIRK(0x144d, 0xc176, "Samsung Notebook 9 Pro (NP930MBE-K04US)", ALC298_FIXUP_SAMSUNG_AMP), SND_PCI_QUIRK(0x144d, 0xc189, "Samsung Galaxy Flex Book (NT950QCG-X716)", ALC298_FIXUP_SAMSUNG_AMP), SND_PCI_QUIRK(0x144d, 0xc18a, "Samsung Galaxy Book Ion (NP930XCJ-K01US)", ALC298_FIXUP_SAMSUNG_AMP), + SND_PCI_QUIRK(0x144d, 0xc1a3, "Samsung Galaxy Book Pro (NP935XDB-KC1SE)", ALC298_FIXUP_SAMSUNG_AMP), + SND_PCI_QUIRK(0x144d, 0xc1a6, "Samsung Galaxy Book Pro 360 (NP930QBD)", ALC298_FIXUP_SAMSUNG_AMP), SND_PCI_QUIRK(0x144d, 0xc740, "Samsung Ativ book 8 (NP870Z5G)", ALC269_FIXUP_ATIV_BOOK_8), SND_PCI_QUIRK(0x144d, 0xc812, "Samsung Notebook Pen S (NT950SBE-X58)", ALC298_FIXUP_SAMSUNG_AMP), SND_PCI_QUIRK(0x144d, 0xc830, "Samsung Galaxy Book Ion (NT950XCJ-X716A)", ALC298_FIXUP_SAMSUNG_AMP), @@ -9608,6 +9611,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { SND_PCI_QUIRK(0x17aa, 0x511f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK), SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD), SND_PCI_QUIRK(0x1849, 0x1233, "ASRock NUC Box 1100", ALC233_FIXUP_NO_AUDIO_JACK), + SND_PCI_QUIRK(0x1849, 0xa233, "Positivo Master C6300", ALC269_FIXUP_HEADSET_MIC), SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MACH-WX9", ALC256_FIXUP_HUAWEI_MACH_WX9_PINS), SND_PCI_QUIRK(0x19e5, 0x320f, "Huawei WRT-WX9 ", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE), SND_PCI_QUIRK(0x1b35, 0x1235, "CZC B20", ALC269_FIXUP_CZC_B20), diff --git a/sound/soc/amd/yc/acp6x-mach.c b/sound/soc/amd/yc/acp6x-mach.c index 6c0f1de10429a1125b9af65fdd3a71e7035948e2..d9715bea965e1ce24ad3e9c24c0907fc1d2c65ad 100644 --- a/sound/soc/amd/yc/acp6x-mach.c +++ b/sound/soc/amd/yc/acp6x-mach.c @@ -206,6 +206,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "UM5302TA"), } }, + { + .driver_data = &acp6x_card, + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), + } + }, {} }; diff --git a/sound/soc/codecs/cs42l51.c b/sound/soc/codecs/cs42l51.c index 51721edd8f53c756ca92dd05702931219660e2be..e88d9ff95cdfc495bbe2c687bc897a809468697f 100644 --- a/sound/soc/codecs/cs42l51.c +++ b/sound/soc/codecs/cs42l51.c @@ -143,7 +143,7 @@ static const struct snd_kcontrol_new cs42l51_snd_controls[] = { 0, 0xA0, 96, adc_att_tlv), SOC_DOUBLE_R_SX_TLV("PGA Volume", CS42L51_ALC_PGA_CTL, CS42L51_ALC_PGB_CTL, - 0, 0x19, 30, pga_tlv), + 0, 0x1A, 30, pga_tlv), SOC_SINGLE("Playback Deemphasis Switch", CS42L51_DAC_CTL, 3, 1, 0), SOC_SINGLE("Auto-Mute Switch", CS42L51_DAC_CTL, 2, 1, 0), SOC_SINGLE("Soft Ramp Switch", CS42L51_DAC_CTL, 1, 1, 0), diff --git a/sound/soc/codecs/hdac_hda.h b/sound/soc/codecs/hdac_hda.h index fc19c34ca00e5c55f1eb21a064f4fe841fef806b..b65560981abb2399f975424b592a2365d0167b5f 100644 --- a/sound/soc/codecs/hdac_hda.h +++ b/sound/soc/codecs/hdac_hda.h @@ -14,7 +14,7 @@ enum { HDAC_HDMI_1_DAI_ID, HDAC_HDMI_2_DAI_ID, HDAC_HDMI_3_DAI_ID, - HDAC_LAST_DAI_ID = HDAC_HDMI_3_DAI_ID, + HDAC_DAI_ID_NUM }; struct hdac_hda_pcm { @@ -24,7 +24,7 @@ struct hdac_hda_pcm { struct hdac_hda_priv { struct hda_codec *codec; - struct hdac_hda_pcm pcm[HDAC_LAST_DAI_ID]; + struct hdac_hda_pcm pcm[HDAC_DAI_ID_NUM]; bool need_display_power; }; diff --git a/sound/soc/codecs/max98373-i2c.c b/sound/soc/codecs/max98373-i2c.c index 3e04c7f0cce43bff93d981e7d38acd7ef88ee99a..ec0905df65d1847a7f366fd88fbb36d35fc3a4d4 100644 --- a/sound/soc/codecs/max98373-i2c.c +++ b/sound/soc/codecs/max98373-i2c.c @@ -549,6 +549,10 @@ static int max98373_i2c_probe(struct i2c_client *i2c) max98373->cache = devm_kcalloc(&i2c->dev, max98373->cache_num, sizeof(*max98373->cache), GFP_KERNEL); + if (!max98373->cache) { + ret = -ENOMEM; + return ret; + } for (i = 0; i < max98373->cache_num; i++) max98373->cache[i].reg = max98373_i2c_cache_reg[i]; diff --git a/sound/soc/codecs/rt5514-spi.c b/sound/soc/codecs/rt5514-spi.c index 1a25a3787935633cd2026b922ab74cfad53f2f37..362663abcb89e4eebca7268f89c146d40498034d 100644 --- a/sound/soc/codecs/rt5514-spi.c +++ b/sound/soc/codecs/rt5514-spi.c @@ -298,13 +298,14 @@ static int rt5514_spi_pcm_new(struct snd_soc_component *component, } static const struct snd_soc_component_driver rt5514_spi_component = { - .name = DRV_NAME, - .probe = rt5514_spi_pcm_probe, - .open = rt5514_spi_pcm_open, - .hw_params = rt5514_spi_hw_params, - .hw_free = rt5514_spi_hw_free, - .pointer = rt5514_spi_pcm_pointer, - .pcm_construct = rt5514_spi_pcm_new, + .name = DRV_NAME, + .probe = rt5514_spi_pcm_probe, + .open = rt5514_spi_pcm_open, + .hw_params = rt5514_spi_hw_params, + .hw_free = rt5514_spi_hw_free, + .pointer = rt5514_spi_pcm_pointer, + .pcm_construct = rt5514_spi_pcm_new, + .legacy_dai_naming = 1, }; /** diff --git a/sound/soc/codecs/rt5677-spi.c b/sound/soc/codecs/rt5677-spi.c index 8f3993a4c1cc71102cf59813c2e8c52611df56fe..d25703dd74996950d8bd794156f546a5b124b8c2 100644 --- a/sound/soc/codecs/rt5677-spi.c +++ b/sound/soc/codecs/rt5677-spi.c @@ -396,15 +396,16 @@ static int rt5677_spi_pcm_probe(struct snd_soc_component *component) } static const struct snd_soc_component_driver rt5677_spi_dai_component = { - .name = DRV_NAME, - .probe = rt5677_spi_pcm_probe, - .open = rt5677_spi_pcm_open, - .close = rt5677_spi_pcm_close, - .hw_params = rt5677_spi_hw_params, - .hw_free = rt5677_spi_hw_free, - .prepare = rt5677_spi_prepare, - .pointer = rt5677_spi_pcm_pointer, - .pcm_construct = rt5677_spi_pcm_new, + .name = DRV_NAME, + .probe = rt5677_spi_pcm_probe, + .open = rt5677_spi_pcm_open, + .close = rt5677_spi_pcm_close, + .hw_params = rt5677_spi_hw_params, + .hw_free = rt5677_spi_hw_free, + .prepare = rt5677_spi_prepare, + .pointer = rt5677_spi_pcm_pointer, + .pcm_construct = rt5677_spi_pcm_new, + .legacy_dai_naming = 1, }; /* Select a suitable transfer command for the next transfer to ensure diff --git a/sound/soc/codecs/rt711-sdca-sdw.c b/sound/soc/codecs/rt711-sdca-sdw.c index 4120842fe699022440b6f39b57ce8b7ebab5482a..88a8392a58edb5b33cf08f8bf72315ba17f3f81e 100644 --- a/sound/soc/codecs/rt711-sdca-sdw.c +++ b/sound/soc/codecs/rt711-sdca-sdw.c @@ -230,7 +230,7 @@ static int rt711_sdca_read_prop(struct sdw_slave *slave) } /* set the timeout values */ - prop->clk_stop_timeout = 20; + prop->clk_stop_timeout = 700; /* wake-up event */ prop->wake_capable = 1; diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index 4b2135eba74d93a001f9ea2947fa6e509e776a95..a916f4619ea358d89ac27c3677cf39bb4fb94d85 100644 --- a/sound/soc/codecs/sgtl5000.c +++ b/sound/soc/codecs/sgtl5000.c @@ -1794,6 +1794,7 @@ static void sgtl5000_i2c_remove(struct i2c_client *client) { struct sgtl5000_priv *sgtl5000 = i2c_get_clientdata(client); + regmap_write(sgtl5000->regmap, SGTL5000_CHIP_CLK_CTRL, SGTL5000_CHIP_CLK_CTRL_DEFAULT); regmap_write(sgtl5000->regmap, SGTL5000_CHIP_DIG_POWER, SGTL5000_DIG_POWER_DEFAULT); regmap_write(sgtl5000->regmap, SGTL5000_CHIP_ANA_POWER, SGTL5000_ANA_POWER_DEFAULT); diff --git a/sound/soc/codecs/tas2764.c b/sound/soc/codecs/tas2764.c index 51b87a936179863ddd131bb17077d6efbaa7d02f..2e0ed3e68fa543011a0f1ca37950b4e0bce6b298 100644 --- a/sound/soc/codecs/tas2764.c +++ b/sound/soc/codecs/tas2764.c @@ -438,20 +438,13 @@ static int tas2764_set_dai_tdm_slot(struct snd_soc_dai *dai, if (tx_mask == 0 || rx_mask != 0) return -EINVAL; - if (slots == 1) { - if (tx_mask != 1) - return -EINVAL; - left_slot = 0; - right_slot = 0; + left_slot = __ffs(tx_mask); + tx_mask &= ~(1 << left_slot); + if (tx_mask == 0) { + right_slot = left_slot; } else { - left_slot = __ffs(tx_mask); - tx_mask &= ~(1 << left_slot); - if (tx_mask == 0) { - right_slot = left_slot; - } else { - right_slot = __ffs(tx_mask); - tx_mask &= ~(1 << right_slot); - } + right_slot = __ffs(tx_mask); + tx_mask &= ~(1 << right_slot); } if (tx_mask != 0 || left_slot >= slots || right_slot >= slots) diff --git a/sound/soc/codecs/tas2770.c b/sound/soc/codecs/tas2770.c index b6765235a4b3d8e000bcbeef735fdcfc26c3d99c..8557759acb1f2be341e5868c53e24e5448246a0f 100644 --- a/sound/soc/codecs/tas2770.c +++ b/sound/soc/codecs/tas2770.c @@ -395,21 +395,13 @@ static int tas2770_set_dai_tdm_slot(struct snd_soc_dai *dai, if (tx_mask == 0 || rx_mask != 0) return -EINVAL; - if (slots == 1) { - if (tx_mask != 1) - return -EINVAL; - - left_slot = 0; - right_slot = 0; + left_slot = __ffs(tx_mask); + tx_mask &= ~(1 << left_slot); + if (tx_mask == 0) { + right_slot = left_slot; } else { - left_slot = __ffs(tx_mask); - tx_mask &= ~(1 << left_slot); - if (tx_mask == 0) { - right_slot = left_slot; - } else { - right_slot = __ffs(tx_mask); - tx_mask &= ~(1 << right_slot); - } + right_slot = __ffs(tx_mask); + tx_mask &= ~(1 << right_slot); } if (tx_mask != 0 || left_slot >= slots || right_slot >= slots) diff --git a/sound/soc/codecs/tas2780.c b/sound/soc/codecs/tas2780.c index a6db6f0e5431fd8f53a33de225fac330e9d38abe..afdf0c863aa10d9dc07de991eefdc8bcd81b4a7f 100644 --- a/sound/soc/codecs/tas2780.c +++ b/sound/soc/codecs/tas2780.c @@ -380,20 +380,13 @@ static int tas2780_set_dai_tdm_slot(struct snd_soc_dai *dai, if (tx_mask == 0 || rx_mask != 0) return -EINVAL; - if (slots == 1) { - if (tx_mask != 1) - return -EINVAL; - left_slot = 0; - right_slot = 0; + left_slot = __ffs(tx_mask); + tx_mask &= ~(1 << left_slot); + if (tx_mask == 0) { + right_slot = left_slot; } else { - left_slot = __ffs(tx_mask); - tx_mask &= ~(1 << left_slot); - if (tx_mask == 0) { - right_slot = left_slot; - } else { - right_slot = __ffs(tx_mask); - tx_mask &= ~(1 << right_slot); - } + right_slot = __ffs(tx_mask); + tx_mask &= ~(1 << right_slot); } if (tx_mask != 0 || left_slot >= slots || right_slot >= slots) diff --git a/sound/soc/codecs/tlv320adc3xxx.c b/sound/soc/codecs/tlv320adc3xxx.c index a969547708d49676b876cba03f109e521965837d..52bb55724724448015f494f02f15adb73cb1995c 100644 --- a/sound/soc/codecs/tlv320adc3xxx.c +++ b/sound/soc/codecs/tlv320adc3xxx.c @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -1025,7 +1026,9 @@ static const struct gpio_chip adc3xxx_gpio_chip = { static void adc3xxx_free_gpio(struct adc3xxx *adc3xxx) { +#ifdef CONFIG_GPIOLIB gpiochip_remove(&adc3xxx->gpio_chip); +#endif } static void adc3xxx_init_gpio(struct adc3xxx *adc3xxx) diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c index b4b4355c6728b0c4977bcd3f0b24006561c432bf..b901e4c65e8a508c370f8ef5ced11a9c6639275e 100644 --- a/sound/soc/codecs/wm8962.c +++ b/sound/soc/codecs/wm8962.c @@ -2503,6 +2503,14 @@ static void wm8962_configure_bclk(struct snd_soc_component *component) snd_soc_component_update_bits(component, WM8962_CLOCKING2, WM8962_SYSCLK_ENA_MASK, WM8962_SYSCLK_ENA); + /* DSPCLK_DIV field in WM8962_CLOCKING1 register is used to generate + * correct frequency of LRCLK and BCLK. Sometimes the read-only value + * can't be updated timely after enabling SYSCLK. This results in wrong + * calculation values. Delay is introduced here to wait for newest + * value from register. The time of the delay should be at least + * 500~1000us according to test. + */ + usleep_range(500, 1000); dspclk = snd_soc_component_read(component, WM8962_CLOCKING1); if (snd_soc_component_get_bias_level(component) != SND_SOC_BIAS_ON) diff --git a/sound/soc/fsl/fsl_asrc.c b/sound/soc/fsl/fsl_asrc.c index 936aef5d2767c5a1d47a8b66758995b9da38c914..e16e7b3fa96cce78688772f89571b1e3f1ef6498 100644 --- a/sound/soc/fsl/fsl_asrc.c +++ b/sound/soc/fsl/fsl_asrc.c @@ -1232,7 +1232,7 @@ static int fsl_asrc_probe(struct platform_device *pdev) } ret = pm_runtime_put_sync(&pdev->dev); - if (ret < 0) + if (ret < 0 && ret != -ENOSYS) goto err_pm_get_sync; ret = devm_snd_soc_register_component(&pdev->dev, &fsl_asrc_component, diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c index 5c21fc490fce1ac1161ac1ce6b1ddaf799a00036..17fefd27ec90afeac6def55d320510d329a3db57 100644 --- a/sound/soc/fsl/fsl_esai.c +++ b/sound/soc/fsl/fsl_esai.c @@ -1069,7 +1069,7 @@ static int fsl_esai_probe(struct platform_device *pdev) regmap_write(esai_priv->regmap, REG_ESAI_RSMB, 0); ret = pm_runtime_put_sync(&pdev->dev); - if (ret < 0) + if (ret < 0 && ret != -ENOSYS) goto err_pm_get_sync; /* diff --git a/sound/soc/fsl/fsl_micfil.c b/sound/soc/fsl/fsl_micfil.c index 79ef4e269bc95a3ef248f9da4af8503b9ef70dd6..4b86ef82fd930ae8f2a2d30d5f1a1e941fee8ed0 100644 --- a/sound/soc/fsl/fsl_micfil.c +++ b/sound/soc/fsl/fsl_micfil.c @@ -194,6 +194,25 @@ static int fsl_micfil_reset(struct device *dev) if (ret) return ret; + /* + * SRES is self-cleared bit, but REG_MICFIL_CTRL1 is defined + * as non-volatile register, so SRES still remain in regmap + * cache after set, that every update of REG_MICFIL_CTRL1, + * software reset happens. so clear it explicitly. + */ + ret = regmap_clear_bits(micfil->regmap, REG_MICFIL_CTRL1, + MICFIL_CTRL1_SRES); + if (ret) + return ret; + + /* + * Set SRES should clear CHnF flags, But even add delay here + * the CHnF may not be cleared sometimes, so clear CHnF explicitly. + */ + ret = regmap_write_bits(micfil->regmap, REG_MICFIL_STAT, 0xFF, 0xFF); + if (ret) + return ret; + return 0; } diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c index 81f89f6767a2dd105fd0bd0aca724eed0ae49d2e..e60c7b3445623b625ff013297d249652e86018bd 100644 --- a/sound/soc/fsl/fsl_sai.c +++ b/sound/soc/fsl/fsl_sai.c @@ -1446,7 +1446,7 @@ static int fsl_sai_probe(struct platform_device *pdev) } ret = pm_runtime_put_sync(dev); - if (ret < 0) + if (ret < 0 && ret != -ENOSYS) goto err_pm_get_sync; /* diff --git a/sound/soc/intel/boards/bytcht_es8316.c b/sound/soc/intel/boards/bytcht_es8316.c index 6432b83f616f38e6edc9daed67e9d1c274a47b99..a935c5fd9edbc0131c561f3ea4db0dc775998900 100644 --- a/sound/soc/intel/boards/bytcht_es8316.c +++ b/sound/soc/intel/boards/bytcht_es8316.c @@ -443,6 +443,13 @@ static const struct dmi_system_id byt_cht_es8316_quirk_table[] = { | BYT_CHT_ES8316_INTMIC_IN2_MAP | BYT_CHT_ES8316_JD_INVERTED), }, + { /* Nanote UMPC-01 */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "RWC CO.,LTD"), + DMI_MATCH(DMI_PRODUCT_NAME, "UMPC-01"), + }, + .driver_data = (void *)BYT_CHT_ES8316_INTMIC_IN1_MAP, + }, { /* Teclast X98 Plus II */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "TECLAST"), diff --git a/sound/soc/intel/boards/sof_es8336.c b/sound/soc/intel/boards/sof_es8336.c index fbb42e54947a8c9547c034cf2ccdfe998d50b8d5..70713e4b07dc108572ec53a721adbf8ffe1d20bb 100644 --- a/sound/soc/intel/boards/sof_es8336.c +++ b/sound/soc/intel/boards/sof_es8336.c @@ -63,6 +63,7 @@ struct sof_es8336_private { struct snd_soc_jack jack; struct list_head hdmi_pcm_list; bool speaker_en; + struct delayed_work pcm_pop_work; }; struct sof_hdmi_pcm { @@ -111,6 +112,46 @@ static void log_quirks(struct device *dev) dev_info(dev, "quirk headset at mic1 port enabled\n"); } +static void pcm_pop_work_events(struct work_struct *work) +{ + struct sof_es8336_private *priv = + container_of(work, struct sof_es8336_private, pcm_pop_work.work); + + gpiod_set_value_cansleep(priv->gpio_speakers, priv->speaker_en); + + if (quirk & SOF_ES8336_HEADPHONE_GPIO) + gpiod_set_value_cansleep(priv->gpio_headphone, priv->speaker_en); + +} + +static int sof_8336_trigger(struct snd_pcm_substream *substream, int cmd) +{ + struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); + struct snd_soc_card *card = rtd->card; + struct sof_es8336_private *priv = snd_soc_card_get_drvdata(card); + + switch (cmd) { + case SNDRV_PCM_TRIGGER_START: + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: + case SNDRV_PCM_TRIGGER_RESUME: + break; + + case SNDRV_PCM_TRIGGER_PAUSE_PUSH: + case SNDRV_PCM_TRIGGER_SUSPEND: + case SNDRV_PCM_TRIGGER_STOP: + if (priv->speaker_en == false) + if (substream->stream == 0) { + cancel_delayed_work(&priv->pcm_pop_work); + gpiod_set_value_cansleep(priv->gpio_speakers, true); + } + break; + default: + return -EINVAL; + } + + return 0; +} + static int sof_es8316_speaker_power_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { @@ -122,19 +163,7 @@ static int sof_es8316_speaker_power_event(struct snd_soc_dapm_widget *w, priv->speaker_en = !SND_SOC_DAPM_EVENT_ON(event); - if (SND_SOC_DAPM_EVENT_ON(event)) - msleep(70); - - gpiod_set_value_cansleep(priv->gpio_speakers, priv->speaker_en); - - if (!(quirk & SOF_ES8336_HEADPHONE_GPIO)) - return 0; - - if (SND_SOC_DAPM_EVENT_ON(event)) - msleep(70); - - gpiod_set_value_cansleep(priv->gpio_headphone, priv->speaker_en); - + queue_delayed_work(system_wq, &priv->pcm_pop_work, msecs_to_jiffies(70)); return 0; } @@ -344,6 +373,7 @@ static int sof_es8336_hw_params(struct snd_pcm_substream *substream, /* machine stream operations */ static struct snd_soc_ops sof_es8336_ops = { .hw_params = sof_es8336_hw_params, + .trigger = sof_8336_trigger, }; static struct snd_soc_dai_link_component platform_component[] = { @@ -723,7 +753,8 @@ static int sof_es8336_probe(struct platform_device *pdev) } INIT_LIST_HEAD(&priv->hdmi_pcm_list); - + INIT_DELAYED_WORK(&priv->pcm_pop_work, + pcm_pop_work_events); snd_soc_card_set_drvdata(card, priv); if (mach->mach_params.dmic_num > 0) { @@ -752,6 +783,7 @@ static int sof_es8336_remove(struct platform_device *pdev) struct snd_soc_card *card = platform_get_drvdata(pdev); struct sof_es8336_private *priv = snd_soc_card_get_drvdata(card); + cancel_delayed_work(&priv->pcm_pop_work); gpiod_put(priv->gpio_speakers); device_remove_software_node(priv->codec_dev); put_device(priv->codec_dev); diff --git a/sound/soc/intel/common/soc-acpi-intel-icl-match.c b/sound/soc/intel/common/soc-acpi-intel-icl-match.c index b032bc07de8bf520c8638c58b30bd2e1e7396428..d0062f2cd256690a71cab259fd29b69f727f631b 100644 --- a/sound/soc/intel/common/soc-acpi-intel-icl-match.c +++ b/sound/soc/intel/common/soc-acpi-intel-icl-match.c @@ -10,6 +10,11 @@ #include #include "../skylake/skl.h" +static const struct snd_soc_acpi_codecs essx_83x6 = { + .num_codecs = 3, + .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"}, +}; + static struct skl_machine_pdata icl_pdata = { .use_tplg_pcm = true, }; @@ -27,6 +32,14 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_icl_machines[] = { .drv_name = "sof_rt5682", .sof_tplg_filename = "sof-icl-rt5682.tplg", }, + { + .comp_ids = &essx_83x6, + .drv_name = "sof-essx8336", + .sof_tplg_filename = "sof-icl-es8336", /* the tplg suffix is added at run time */ + .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER | + SND_SOC_ACPI_TPLG_INTEL_SSP_MSB | + SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER, + }, {}, }; EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_icl_machines); diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 12a82f5a3ff64ae2aedddb16164fb8d6075e445e..a409fbed8f34ce2ee64b3a425fde587649233906 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -3477,10 +3477,23 @@ EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_link_cpus); static int __init snd_soc_init(void) { + int ret; + snd_soc_debugfs_init(); - snd_soc_util_init(); + ret = snd_soc_util_init(); + if (ret) + goto err_util_init; - return platform_driver_register(&soc_driver); + ret = platform_driver_register(&soc_driver); + if (ret) + goto err_register; + return 0; + +err_register: + snd_soc_util_exit(); +err_util_init: + snd_soc_debugfs_exit(); + return ret; } module_init(snd_soc_init); diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index d515e7a78ea86892b543a4dc3c46ffe0dea1bef2..879cf1be67a9f4a7d174c43f6a69abdc27d0158a 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -3645,7 +3645,7 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm, switch (w->id) { case snd_soc_dapm_regulator_supply: - w->regulator = devm_regulator_get(dapm->dev, w->name); + w->regulator = devm_regulator_get(dapm->dev, widget->name); if (IS_ERR(w->regulator)) { ret = PTR_ERR(w->regulator); goto request_failed; diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c index bd88de056358355d5ac70e86778fa2df547de84b..55b009d3c6815434c82d0250dd6dae5158d33dde 100644 --- a/sound/soc/soc-ops.c +++ b/sound/soc/soc-ops.c @@ -452,7 +452,7 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol, val = ucontrol->value.integer.value[0]; if (mc->platform_max && val > mc->platform_max) return -EINVAL; - if (val > max - min) + if (val > max) return -EINVAL; val_mask = mask << shift; val = (val + min) & mask; @@ -464,10 +464,15 @@ int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol, ret = err; if (snd_soc_volsw_is_stereo(mc)) { - unsigned int val2; + unsigned int val2 = ucontrol->value.integer.value[1]; + + if (mc->platform_max && val2 > mc->platform_max) + return -EINVAL; + if (val2 > max) + return -EINVAL; val_mask = mask << rshift; - val2 = (ucontrol->value.integer.value[1] + min) & mask; + val2 = (val2 + min) & mask; val2 = val2 << rshift; err = snd_soc_component_update_bits(component, reg2, val_mask, diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index fb87d6d2340853ecf8b1f4116a18be7f6a5cb9f8..35a16c3f9591badb85b944502dc13bc4161de5cb 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -822,11 +822,6 @@ static int __soc_pcm_open(struct snd_soc_pcm_runtime *rtd, ret = snd_soc_dai_startup(dai, substream); if (ret < 0) goto err; - - if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) - dai->tx_mask = 0; - else - dai->rx_mask = 0; } /* Dynamic PCM DAI links compat checks use dynamic capabilities */ @@ -1252,6 +1247,8 @@ static void dpcm_be_reparent(struct snd_soc_pcm_runtime *fe, return; be_substream = snd_soc_dpcm_get_substream(be, stream); + if (!be_substream) + return; for_each_dpcm_fe(be, stream, dpcm) { if (dpcm->fe == fe) diff --git a/sound/soc/soc-utils.c b/sound/soc/soc-utils.c index a3b6df2378b40476b99c186ccf1961c3015fdb72..a4dba0b751e76d9cb2fdb2345e9ca9cd56b6baa4 100644 --- a/sound/soc/soc-utils.c +++ b/sound/soc/soc-utils.c @@ -264,7 +264,7 @@ int __init snd_soc_util_init(void) return ret; } -void __exit snd_soc_util_exit(void) +void snd_soc_util_exit(void) { platform_driver_unregister(&soc_dummy_driver); platform_device_unregister(soc_dummy_dev); diff --git a/sound/soc/sof/ipc3-topology.c b/sound/soc/sof/ipc3-topology.c index c148715aa0f91c0b80709cde99ab8a8745729159..0720e1eae08439f9bf795dae18af013cca27b5bb 100644 --- a/sound/soc/sof/ipc3-topology.c +++ b/sound/soc/sof/ipc3-topology.c @@ -2275,6 +2275,7 @@ static int sof_ipc3_tear_down_all_pipelines(struct snd_sof_dev *sdev, bool verif struct sof_ipc_fw_version *v = &sdev->fw_ready.version; struct snd_sof_widget *swidget; struct snd_sof_route *sroute; + bool dyn_widgets = false; int ret; /* @@ -2284,12 +2285,14 @@ static int sof_ipc3_tear_down_all_pipelines(struct snd_sof_dev *sdev, bool verif * topology loading the sound card unavailable to open PCMs. */ list_for_each_entry(swidget, &sdev->widget_list, list) { - if (swidget->dynamic_pipeline_widget) + if (swidget->dynamic_pipeline_widget) { + dyn_widgets = true; continue; + } - /* Do not free widgets for static pipelines with FW ABI older than 3.19 */ + /* Do not free widgets for static pipelines with FW older than SOF2.2 */ if (!verify && !swidget->dynamic_pipeline_widget && - v->abi_version < SOF_ABI_VER(3, 19, 0)) { + SOF_FW_VER(v->major, v->minor, v->micro) < SOF_FW_VER(2, 2, 0)) { swidget->use_count = 0; swidget->complete = 0; continue; @@ -2303,9 +2306,11 @@ static int sof_ipc3_tear_down_all_pipelines(struct snd_sof_dev *sdev, bool verif /* * Tear down all pipelines associated with PCMs that did not get suspended * and unset the prepare flag so that they can be set up again during resume. - * Skip this step for older firmware. + * Skip this step for older firmware unless topology has any + * dynamic pipeline (in which case the step is mandatory). */ - if (!verify && v->abi_version >= SOF_ABI_VER(3, 19, 0)) { + if (!verify && (dyn_widgets || SOF_FW_VER(v->major, v->minor, v->micro) >= + SOF_FW_VER(2, 2, 0))) { ret = sof_tear_down_left_over_pipelines(sdev); if (ret < 0) { dev_err(sdev->dev, "failed to tear down paused pipelines\n"); diff --git a/sound/soc/sof/topology.c b/sound/soc/sof/topology.c index 38855dd60617d5185a0fcf36f03de3ae21d0b709..6a0e7f3b5023440e90006d8b1ca5d413445ddb95 100644 --- a/sound/soc/sof/topology.c +++ b/sound/soc/sof/topology.c @@ -1344,16 +1344,6 @@ static int sof_widget_ready(struct snd_soc_component *scomp, int index, break; } - if (sof_debug_check_flag(SOF_DBG_DISABLE_MULTICORE)) { - swidget->core = SOF_DSP_PRIMARY_CORE; - } else { - int core = sof_get_token_value(SOF_TKN_COMP_CORE_ID, swidget->tuples, - swidget->num_tuples); - - if (core >= 0) - swidget->core = core; - } - /* check token parsing reply */ if (ret < 0) { dev_err(scomp->dev, @@ -1365,6 +1355,16 @@ static int sof_widget_ready(struct snd_soc_component *scomp, int index, return ret; } + if (sof_debug_check_flag(SOF_DBG_DISABLE_MULTICORE)) { + swidget->core = SOF_DSP_PRIMARY_CORE; + } else { + int core = sof_get_token_value(SOF_TKN_COMP_CORE_ID, swidget->tuples, + swidget->num_tuples); + + if (core >= 0) + swidget->core = core; + } + /* bind widget to external event */ if (tw->event_type) { if (widget_ops[w->id].bind_event) { diff --git a/sound/soc/stm/stm32_adfsdm.c b/sound/soc/stm/stm32_adfsdm.c index 643fc8a170184445380349243ba31ede1bdcb0fb..837c1848d9bffe0e92c341cb5b13aebb25cda405 100644 --- a/sound/soc/stm/stm32_adfsdm.c +++ b/sound/soc/stm/stm32_adfsdm.c @@ -304,6 +304,11 @@ static int stm32_adfsdm_dummy_cb(const void *data, void *private) return 0; } +static void stm32_adfsdm_cleanup(void *data) +{ + iio_channel_release_all_cb(data); +} + static struct snd_soc_component_driver stm32_adfsdm_soc_platform = { .open = stm32_adfsdm_pcm_open, .close = stm32_adfsdm_pcm_close, @@ -350,6 +355,12 @@ static int stm32_adfsdm_probe(struct platform_device *pdev) if (IS_ERR(priv->iio_cb)) return PTR_ERR(priv->iio_cb); + ret = devm_add_action_or_reset(&pdev->dev, stm32_adfsdm_cleanup, priv->iio_cb); + if (ret < 0) { + dev_err(&pdev->dev, "Unable to add action\n"); + return ret; + } + component = devm_kzalloc(&pdev->dev, sizeof(*component), GFP_KERNEL); if (!component) return -ENOMEM; diff --git a/sound/soc/stm/stm32_i2s.c b/sound/soc/stm/stm32_i2s.c index ce7f6942308f9df6aa5a8313f11e3ae537b4046c..f3dd9f8e621cc851259a3b7cdbfdc59f6ce77b60 100644 --- a/sound/soc/stm/stm32_i2s.c +++ b/sound/soc/stm/stm32_i2s.c @@ -1077,7 +1077,7 @@ static int stm32_i2s_parse_dt(struct platform_device *pdev, if (irq < 0) return irq; - ret = devm_request_irq(&pdev->dev, irq, stm32_i2s_isr, IRQF_ONESHOT, + ret = devm_request_irq(&pdev->dev, irq, stm32_i2s_isr, 0, dev_name(&pdev->dev), i2s); if (ret) { dev_err(&pdev->dev, "irq request returned %d\n", ret); diff --git a/sound/usb/card.c b/sound/usb/card.c index a5ed11ea11456e9b28723d60c880c14e84f3430d..26268ffb82742116de347782d7717184e811e498 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -742,6 +742,18 @@ get_alias_quirk(struct usb_device *dev, unsigned int id) return NULL; } +/* register card if we reach to the last interface or to the specified + * one given via option + */ +static int try_to_register_card(struct snd_usb_audio *chip, int ifnum) +{ + if (check_delayed_register_option(chip) == ifnum || + chip->last_iface == ifnum || + usb_interface_claimed(usb_ifnum_to_if(chip->dev, chip->last_iface))) + return snd_card_register(chip->card); + return 0; +} + /* * probe the active usb device * @@ -880,15 +892,9 @@ static int usb_audio_probe(struct usb_interface *intf, chip->need_delayed_register = false; /* clear again */ } - /* register card if we reach to the last interface or to the specified - * one given via option - */ - if (check_delayed_register_option(chip) == ifnum || - usb_interface_claimed(usb_ifnum_to_if(dev, chip->last_iface))) { - err = snd_card_register(chip->card); - if (err < 0) - goto __error; - } + err = try_to_register_card(chip, ifnum); + if (err < 0) + goto __error_no_register; if (chip->quirk_flags & QUIRK_FLAG_SHARE_MEDIA_DEVICE) { /* don't want to fail when snd_media_device_create() fails */ @@ -907,6 +913,11 @@ static int usb_audio_probe(struct usb_interface *intf, return 0; __error: + /* in the case of error in secondary interface, still try to register */ + if (chip) + try_to_register_card(chip, ifnum); + + __error_no_register: if (chip) { /* chip->active is inside the chip->card object, * decrement before memory is possibly returned. diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c index d0b8d61d1d22b2705562637e36ec6d4205663ab4..310cd6fb0038aeb0e08ad9a6fa998eb1522562e5 100644 --- a/sound/usb/endpoint.c +++ b/sound/usb/endpoint.c @@ -931,7 +931,8 @@ void snd_usb_endpoint_close(struct snd_usb_audio *chip, usb_audio_dbg(chip, "Closing EP 0x%x (count %d)\n", ep->ep_num, ep->opened); - if (!--ep->iface_ref->opened) + if (!--ep->iface_ref->opened && + !(chip->quirk_flags & QUIRK_FLAG_IFACE_SKIP_CLOSE)) endpoint_set_interface(chip, ep, false); if (!--ep->opened) { diff --git a/sound/usb/midi.c b/sound/usb/midi.c index bbff0923d26460f6a086d26fdf3c631c3f4d8c05..2839f6b6f09b496a455ed5a4da04ff5c92bcb547 100644 --- a/sound/usb/midi.c +++ b/sound/usb/midi.c @@ -1133,10 +1133,8 @@ static int snd_usbmidi_output_open(struct snd_rawmidi_substream *substream) port = &umidi->endpoints[i].out->ports[j]; break; } - if (!port) { - snd_BUG(); + if (!port) return -ENXIO; - } substream->runtime->private_data = port; port->state = STATE_UNKNOWN; diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h index 06dfdd45cff8c83a5258ec76bf92aab8e9144ada..874fcf245747f1795be38d911a361e5135379ac3 100644 --- a/sound/usb/quirks-table.h +++ b/sound/usb/quirks-table.h @@ -2049,6 +2049,10 @@ YAMAHA_DEVICE(0x7010, "UB99"), } } }, +{ + /* M-Audio Micro */ + USB_DEVICE_VENDOR_SPEC(0x0763, 0x201a), +}, { USB_DEVICE_VENDOR_SPEC(0x0763, 0x2030), .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index eadac586bcc83783ff12a26b79256bcd62fdd05d..0f4dd3503a6a9b6cb3643b3a0e2cbd36cf399813 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -376,7 +376,8 @@ static int create_auto_midi_quirk(struct snd_usb_audio *chip, static int create_autodetect_quirk(struct snd_usb_audio *chip, struct usb_interface *iface, - struct usb_driver *driver) + struct usb_driver *driver, + const struct snd_usb_audio_quirk *quirk) { int err; @@ -386,45 +387,6 @@ static int create_autodetect_quirk(struct snd_usb_audio *chip, return err; } -static int create_autodetect_quirks(struct snd_usb_audio *chip, - struct usb_interface *iface, - struct usb_driver *driver, - const struct snd_usb_audio_quirk *quirk) -{ - int probed_ifnum = get_iface_desc(iface->altsetting)->bInterfaceNumber; - int ifcount, ifnum, err; - - err = create_autodetect_quirk(chip, iface, driver); - if (err < 0) - return err; - - /* - * ALSA PCM playback/capture devices cannot be registered in two steps, - * so we have to claim the other corresponding interface here. - */ - ifcount = chip->dev->actconfig->desc.bNumInterfaces; - for (ifnum = 0; ifnum < ifcount; ifnum++) { - if (ifnum == probed_ifnum || quirk->ifnum >= 0) - continue; - iface = usb_ifnum_to_if(chip->dev, ifnum); - if (!iface || - usb_interface_claimed(iface) || - get_iface_desc(iface->altsetting)->bInterfaceClass != - USB_CLASS_VENDOR_SPEC) - continue; - - err = create_autodetect_quirk(chip, iface, driver); - if (err >= 0) { - err = usb_driver_claim_interface(driver, iface, - USB_AUDIO_IFACE_UNUSED); - if (err < 0) - return err; - } - } - - return 0; -} - /* * Create a stream for an Edirol UA-700/UA-25/UA-4FX interface. * The only way to detect the sample rate is by looking at wMaxPacketSize. @@ -554,7 +516,7 @@ int snd_usb_create_quirk(struct snd_usb_audio *chip, static const quirk_func_t quirk_funcs[] = { [QUIRK_IGNORE_INTERFACE] = ignore_interface_quirk, [QUIRK_COMPOSITE] = create_composite_quirk, - [QUIRK_AUTODETECT] = create_autodetect_quirks, + [QUIRK_AUTODETECT] = create_autodetect_quirk, [QUIRK_MIDI_STANDARD_INTERFACE] = create_any_midi_quirk, [QUIRK_MIDI_FIXED_ENDPOINT] = create_any_midi_quirk, [QUIRK_MIDI_YAMAHA] = create_any_midi_quirk, @@ -1913,6 +1875,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip, /* XMOS based USB DACs */ switch (chip->usb_id) { case USB_ID(0x1511, 0x0037): /* AURALiC VEGA */ + case USB_ID(0x21ed, 0xd75a): /* Accuphase DAC-60 option card */ case USB_ID(0x2522, 0x0012): /* LH Labs VI DAC Infinity */ case USB_ID(0x2772, 0x0230): /* Pro-Ject Pre Box S2 Digital */ if (fp->altsetting == 2) @@ -2185,6 +2148,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = { QUIRK_FLAG_GENERIC_IMPLICIT_FB), DEVICE_FLG(0x2b53, 0x0031, /* Fiero SC-01 (firmware v1.1.0) */ QUIRK_FLAG_GENERIC_IMPLICIT_FB), + DEVICE_FLG(0x0525, 0xa4ad, /* Hamedal C20 usb camero */ + QUIRK_FLAG_IFACE_SKIP_CLOSE), /* Vendor matches */ VENDOR_FLG(0x045e, /* MS Lifecam */ diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h index 2c6575029b1cd7fde6f1125a8085d06e3be35034..e97141ef730ad9f72542f8afebf49cc3a521f578 100644 --- a/sound/usb/usbaudio.h +++ b/sound/usb/usbaudio.h @@ -170,6 +170,8 @@ extern bool snd_usb_skip_validation; * Apply the generic implicit feedback sync mode (same as implicit_fb=1 option) * QUIRK_FLAG_SKIP_IMPLICIT_FB * Don't apply implicit feedback sync mode + * QUIRK_FLAG_IFACE_SKIP_CLOSE + * Don't closed interface during setting sample rate */ #define QUIRK_FLAG_GET_SAMPLE_RATE (1U << 0) @@ -191,5 +193,6 @@ extern bool snd_usb_skip_validation; #define QUIRK_FLAG_SET_IFACE_FIRST (1U << 16) #define QUIRK_FLAG_GENERIC_IMPLICIT_FB (1U << 17) #define QUIRK_FLAG_SKIP_IMPLICIT_FB (1U << 18) +#define QUIRK_FLAG_IFACE_SKIP_CLOSE (1U << 19) #endif /* __USBAUDIO_H */ diff --git a/tools/arch/x86/include/asm/msr-index.h b/tools/arch/x86/include/asm/msr-index.h index 10ac52705892a1680415d144877574a2457f0344..f17ade084720d508e133ff115cf6c6ae7d65c008 100644 --- a/tools/arch/x86/include/asm/msr-index.h +++ b/tools/arch/x86/include/asm/msr-index.h @@ -535,6 +535,11 @@ #define MSR_AMD64_CPUID_FN_1 0xc0011004 #define MSR_AMD64_LS_CFG 0xc0011020 #define MSR_AMD64_DC_CFG 0xc0011022 + +#define MSR_AMD64_DE_CFG 0xc0011029 +#define MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT 1 +#define MSR_AMD64_DE_CFG_LFENCE_SERIALIZE BIT_ULL(MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT) + #define MSR_AMD64_BU_CFG2 0xc001102a #define MSR_AMD64_IBSFETCHCTL 0xc0011030 #define MSR_AMD64_IBSFETCHLINAD 0xc0011031 @@ -640,9 +645,6 @@ #define FAM10H_MMIO_CONF_BASE_MASK 0xfffffffULL #define FAM10H_MMIO_CONF_BASE_SHIFT 20 #define MSR_FAM10H_NODE_ID 0xc001100c -#define MSR_F10H_DECFG 0xc0011029 -#define MSR_F10H_DECFG_LFENCE_SERIALIZE_BIT 1 -#define MSR_F10H_DECFG_LFENCE_SERIALIZE BIT_ULL(MSR_F10H_DECFG_LFENCE_SERIALIZE_BIT) /* K8 MSRs */ #define MSR_K8_TOP_MEM1 0xc001001a diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c index 8727765add888390c4e85f9aa4962e9651b8334a..0cdb4f7115101219944c095563317ee4714dc6d0 100644 --- a/tools/bpf/bpftool/common.c +++ b/tools/bpf/bpftool/common.c @@ -300,6 +300,9 @@ int do_pin_any(int argc, char **argv, int (*get_fd)(int *, char ***)) int err; int fd; + if (!REQ_ARGS(3)) + return -EINVAL; + fd = get_fd(&argc, &argv); if (fd < 0) return fd; diff --git a/tools/iio/iio_generic_buffer.c b/tools/iio/iio_generic_buffer.c index 2491c54a5e4fb5b7ed275586a68a7274aa5cf6cc..f8deae4e26a15fe368a0c4027ad3fe2108c22621 100644 --- a/tools/iio/iio_generic_buffer.c +++ b/tools/iio/iio_generic_buffer.c @@ -715,12 +715,12 @@ int main(int argc, char **argv) continue; } - toread = buf_len; } else { usleep(timedelay); - toread = 64; } + toread = buf_len; + read_size = read(buf_fd, data, toread * scan_size); if (read_size < 0) { if (errno == EAGAIN) { diff --git a/tools/include/nolibc/string.h b/tools/include/nolibc/string.h index bef35bee9c44c4710b3c1cbbcdd3da929b31ec8e..ad97c0d522b8e40af7ba428e669c553d66e61d10 100644 --- a/tools/include/nolibc/string.h +++ b/tools/include/nolibc/string.h @@ -19,9 +19,9 @@ static __attribute__((unused)) int memcmp(const void *s1, const void *s2, size_t n) { size_t ofs = 0; - char c1 = 0; + int c1 = 0; - while (ofs < n && !(c1 = ((char *)s1)[ofs] - ((char *)s2)[ofs])) { + while (ofs < n && !(c1 = ((unsigned char *)s1)[ofs] - ((unsigned char *)s2)[ofs])) { ofs++; } return c1; @@ -125,14 +125,18 @@ char *strcpy(char *dst, const char *src) } /* this function is only used with arguments that are not constants or when - * it's not known because optimizations are disabled. + * it's not known because optimizations are disabled. Note that gcc 12 + * recognizes an strlen() pattern and replaces it with a jump to strlen(), + * thus itself, hence the asm() statement below that's meant to disable this + * confusing practice. */ static __attribute__((unused)) -size_t nolibc_strlen(const char *str) +size_t strlen(const char *str) { size_t len; - for (len = 0; str[len]; len++); + for (len = 0; str[len]; len++) + asm(""); return len; } @@ -140,13 +144,12 @@ size_t nolibc_strlen(const char *str) * the two branches, then will rely on an external definition of strlen(). */ #if defined(__OPTIMIZE__) +#define nolibc_strlen(x) strlen(x) #define strlen(str) ({ \ __builtin_constant_p((str)) ? \ __builtin_strlen((str)) : \ nolibc_strlen((str)); \ }) -#else -#define strlen(str) nolibc_strlen((str)) #endif static __attribute__((unused)) diff --git a/tools/include/uapi/linux/in.h b/tools/include/uapi/linux/in.h index f243ce665f74f82d51b14d27df362292844ab9e0..07a4cb149305be99b1b661887abf5e37c2affc9a 100644 --- a/tools/include/uapi/linux/in.h +++ b/tools/include/uapi/linux/in.h @@ -20,6 +20,7 @@ #define _UAPI_LINUX_IN_H #include +#include #include #include diff --git a/tools/include/uapi/linux/stddef.h b/tools/include/uapi/linux/stddef.h new file mode 100644 index 0000000000000000000000000000000000000000..bb6ea517efb51177a7983fadad9b590b12b786e5 --- /dev/null +++ b/tools/include/uapi/linux/stddef.h @@ -0,0 +1,47 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _LINUX_STDDEF_H +#define _LINUX_STDDEF_H + + + +#ifndef __always_inline +#define __always_inline __inline__ +#endif + +/** + * __struct_group() - Create a mirrored named and anonyomous struct + * + * @TAG: The tag name for the named sub-struct (usually empty) + * @NAME: The identifier name of the mirrored sub-struct + * @ATTRS: Any struct attributes (usually empty) + * @MEMBERS: The member declarations for the mirrored structs + * + * Used to create an anonymous union of two structs with identical layout + * and size: one anonymous and one named. The former's members can be used + * normally without sub-struct naming, and the latter can be used to + * reason about the start, end, and size of the group of struct members. + * The named struct can also be explicitly tagged for layer reuse, as well + * as both having struct attributes appended. + */ +#define __struct_group(TAG, NAME, ATTRS, MEMBERS...) \ + union { \ + struct { MEMBERS } ATTRS; \ + struct TAG { MEMBERS } ATTRS NAME; \ + } + +/** + * __DECLARE_FLEX_ARRAY() - Declare a flexible array usable in a union + * + * @TYPE: The type of each flexible array element + * @NAME: The name of the flexible array member + * + * In order to have a flexible array member in a union or alone in a + * struct, it needs to be wrapped in an anonymous struct with at least 1 + * named member, but that member can be empty. + */ +#define __DECLARE_FLEX_ARRAY(TYPE, NAME) \ + struct { \ + struct { } __empty_ ## NAME; \ + TYPE NAME[]; \ + } +#endif diff --git a/tools/kvm/kvm_stat/kvm_stat b/tools/kvm/kvm_stat/kvm_stat index 9c366b3a676db80794564c96286a8c8181dfab6f..6f28180ffeeab89b32819f54f42f97c8bfc9f5eb 100755 --- a/tools/kvm/kvm_stat/kvm_stat +++ b/tools/kvm/kvm_stat/kvm_stat @@ -41,11 +41,14 @@ VMX_EXIT_REASONS = { 'EXCEPTION_NMI': 0, 'EXTERNAL_INTERRUPT': 1, 'TRIPLE_FAULT': 2, - 'PENDING_INTERRUPT': 7, + 'INIT_SIGNAL': 3, + 'SIPI_SIGNAL': 4, + 'INTERRUPT_WINDOW': 7, 'NMI_WINDOW': 8, 'TASK_SWITCH': 9, 'CPUID': 10, 'HLT': 12, + 'INVD': 13, 'INVLPG': 14, 'RDPMC': 15, 'RDTSC': 16, @@ -65,26 +68,48 @@ VMX_EXIT_REASONS = { 'MSR_READ': 31, 'MSR_WRITE': 32, 'INVALID_STATE': 33, + 'MSR_LOAD_FAIL': 34, 'MWAIT_INSTRUCTION': 36, + 'MONITOR_TRAP_FLAG': 37, 'MONITOR_INSTRUCTION': 39, 'PAUSE_INSTRUCTION': 40, 'MCE_DURING_VMENTRY': 41, 'TPR_BELOW_THRESHOLD': 43, 'APIC_ACCESS': 44, + 'EOI_INDUCED': 45, + 'GDTR_IDTR': 46, + 'LDTR_TR': 47, 'EPT_VIOLATION': 48, 'EPT_MISCONFIG': 49, + 'INVEPT': 50, + 'RDTSCP': 51, + 'PREEMPTION_TIMER': 52, + 'INVVPID': 53, 'WBINVD': 54, 'XSETBV': 55, 'APIC_WRITE': 56, + 'RDRAND': 57, 'INVPCID': 58, + 'VMFUNC': 59, + 'ENCLS': 60, + 'RDSEED': 61, + 'PML_FULL': 62, + 'XSAVES': 63, + 'XRSTORS': 64, + 'UMWAIT': 67, + 'TPAUSE': 68, + 'BUS_LOCK': 74, + 'NOTIFY': 75, } SVM_EXIT_REASONS = { 'READ_CR0': 0x000, + 'READ_CR2': 0x002, 'READ_CR3': 0x003, 'READ_CR4': 0x004, 'READ_CR8': 0x008, 'WRITE_CR0': 0x010, + 'WRITE_CR2': 0x012, 'WRITE_CR3': 0x013, 'WRITE_CR4': 0x014, 'WRITE_CR8': 0x018, @@ -105,6 +130,7 @@ SVM_EXIT_REASONS = { 'WRITE_DR6': 0x036, 'WRITE_DR7': 0x037, 'EXCP_BASE': 0x040, + 'LAST_EXCP': 0x05f, 'INTR': 0x060, 'NMI': 0x061, 'SMI': 0x062, @@ -151,21 +177,45 @@ SVM_EXIT_REASONS = { 'MWAIT': 0x08b, 'MWAIT_COND': 0x08c, 'XSETBV': 0x08d, + 'RDPRU': 0x08e, + 'EFER_WRITE_TRAP': 0x08f, + 'CR0_WRITE_TRAP': 0x090, + 'CR1_WRITE_TRAP': 0x091, + 'CR2_WRITE_TRAP': 0x092, + 'CR3_WRITE_TRAP': 0x093, + 'CR4_WRITE_TRAP': 0x094, + 'CR5_WRITE_TRAP': 0x095, + 'CR6_WRITE_TRAP': 0x096, + 'CR7_WRITE_TRAP': 0x097, + 'CR8_WRITE_TRAP': 0x098, + 'CR9_WRITE_TRAP': 0x099, + 'CR10_WRITE_TRAP': 0x09a, + 'CR11_WRITE_TRAP': 0x09b, + 'CR12_WRITE_TRAP': 0x09c, + 'CR13_WRITE_TRAP': 0x09d, + 'CR14_WRITE_TRAP': 0x09e, + 'CR15_WRITE_TRAP': 0x09f, + 'INVPCID': 0x0a2, 'NPF': 0x400, + 'AVIC_INCOMPLETE_IPI': 0x401, + 'AVIC_UNACCELERATED_ACCESS': 0x402, + 'VMGEXIT': 0x403, } -# EC definition of HSR (from arch/arm64/include/asm/kvm_arm.h) +# EC definition of HSR (from arch/arm64/include/asm/esr.h) AARCH64_EXIT_REASONS = { 'UNKNOWN': 0x00, - 'WFI': 0x01, + 'WFx': 0x01, 'CP15_32': 0x03, 'CP15_64': 0x04, 'CP14_MR': 0x05, 'CP14_LS': 0x06, 'FP_ASIMD': 0x07, 'CP10_ID': 0x08, + 'PAC': 0x09, 'CP14_64': 0x0C, - 'ILL_ISS': 0x0E, + 'BTI': 0x0D, + 'ILL': 0x0E, 'SVC32': 0x11, 'HVC32': 0x12, 'SMC32': 0x13, @@ -173,21 +223,26 @@ AARCH64_EXIT_REASONS = { 'HVC64': 0x16, 'SMC64': 0x17, 'SYS64': 0x18, - 'IABT': 0x20, - 'IABT_HYP': 0x21, + 'SVE': 0x19, + 'ERET': 0x1A, + 'FPAC': 0x1C, + 'SME': 0x1D, + 'IMP_DEF': 0x1F, + 'IABT_LOW': 0x20, + 'IABT_CUR': 0x21, 'PC_ALIGN': 0x22, - 'DABT': 0x24, - 'DABT_HYP': 0x25, + 'DABT_LOW': 0x24, + 'DABT_CUR': 0x25, 'SP_ALIGN': 0x26, 'FP_EXC32': 0x28, 'FP_EXC64': 0x2C, 'SERROR': 0x2F, - 'BREAKPT': 0x30, - 'BREAKPT_HYP': 0x31, - 'SOFTSTP': 0x32, - 'SOFTSTP_HYP': 0x33, - 'WATCHPT': 0x34, - 'WATCHPT_HYP': 0x35, + 'BREAKPT_LOW': 0x30, + 'BREAKPT_CUR': 0x31, + 'SOFTSTP_LOW': 0x32, + 'SOFTSTP_CUR': 0x33, + 'WATCHPT_LOW': 0x34, + 'WATCHPT_CUR': 0x35, 'BKPT32': 0x38, 'VECTOR32': 0x3A, 'BRK64': 0x3C, @@ -220,6 +275,19 @@ USERSPACE_EXIT_REASONS = { 'S390_TSCH': 22, 'EPR': 23, 'SYSTEM_EVENT': 24, + 'S390_STSI': 25, + 'IOAPIC_EOI': 26, + 'HYPERV': 27, + 'ARM_NISV': 28, + 'X86_RDMSR': 29, + 'X86_WRMSR': 30, + 'DIRTY_RING_FULL': 31, + 'AP_RESET_HOLD': 32, + 'X86_BUS_LOCK': 33, + 'XEN': 34, + 'RISCV_SBI': 35, + 'RISCV_CSR': 36, + 'NOTIFY': 37, } IOCTL_NUMBERS = { @@ -1756,7 +1824,7 @@ def assign_globals(): debugfs = '' for line in open('/proc/mounts'): - if line.split(' ')[0] == 'debugfs': + if line.split(' ')[2] == 'debugfs': debugfs = line.split(' ')[1] break if debugfs == '': diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 184ce1684dcd4c46b0cf4525f0b80047c5446692..91b7106a4a735fda19d28f6bf52f39b98923c049 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -11169,7 +11169,7 @@ static int attach_raw_tp(const struct bpf_program *prog, long cookie, struct bpf } *link = bpf_program__attach_raw_tracepoint(prog, tp_name); - return libbpf_get_error(link); + return libbpf_get_error(*link); } /* Common logic for all BPF program types that attach to a btf_id */ diff --git a/tools/lib/bpf/libbpf_probes.c b/tools/lib/bpf/libbpf_probes.c index f3a8e8e74eb89dc2a06aa30daee37b341558836a..d504d96adc839e8011c7fed84dc1cda47e1f4017 100644 --- a/tools/lib/bpf/libbpf_probes.c +++ b/tools/lib/bpf/libbpf_probes.c @@ -234,7 +234,7 @@ static int probe_map_create(enum bpf_map_type map_type) case BPF_MAP_TYPE_USER_RINGBUF: key_size = 0; value_size = 0; - max_entries = 4096; + max_entries = sysconf(_SC_PAGE_SIZE); break; case BPF_MAP_TYPE_STRUCT_OPS: /* we'll get -ENOTSUPP for invalid BTF type ID for struct_ops */ diff --git a/tools/lib/bpf/ringbuf.c b/tools/lib/bpf/ringbuf.c index d285171d4b69ac68b006f2e051e55f6b4ca08062..6af142953a940f51113690ba2f4fdaec5f55cc49 100644 --- a/tools/lib/bpf/ringbuf.c +++ b/tools/lib/bpf/ringbuf.c @@ -77,6 +77,7 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd, __u32 len = sizeof(info); struct epoll_event *e; struct ring *r; + __u64 mmap_sz; void *tmp; int err; @@ -115,8 +116,7 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd, r->mask = info.max_entries - 1; /* Map writable consumer page */ - tmp = mmap(NULL, rb->page_size, PROT_READ | PROT_WRITE, MAP_SHARED, - map_fd, 0); + tmp = mmap(NULL, rb->page_size, PROT_READ | PROT_WRITE, MAP_SHARED, map_fd, 0); if (tmp == MAP_FAILED) { err = -errno; pr_warn("ringbuf: failed to mmap consumer page for map fd=%d: %d\n", @@ -129,8 +129,12 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd, * data size to allow simple reading of samples that wrap around the * end of a ring buffer. See kernel implementation for details. * */ - tmp = mmap(NULL, rb->page_size + 2 * info.max_entries, PROT_READ, - MAP_SHARED, map_fd, rb->page_size); + mmap_sz = rb->page_size + 2 * (__u64)info.max_entries; + if (mmap_sz != (__u64)(size_t)mmap_sz) { + pr_warn("ringbuf: ring buffer size (%u) is too big\n", info.max_entries); + return libbpf_err(-E2BIG); + } + tmp = mmap(NULL, (size_t)mmap_sz, PROT_READ, MAP_SHARED, map_fd, rb->page_size); if (tmp == MAP_FAILED) { err = -errno; ringbuf_unmap_ring(rb, r); @@ -348,6 +352,7 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd) { struct bpf_map_info info; __u32 len = sizeof(info); + __u64 mmap_sz; void *tmp; struct epoll_event *rb_epoll; int err; @@ -384,8 +389,13 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd) * simple reading and writing of samples that wrap around the end of * the buffer. See the kernel implementation for details. */ - tmp = mmap(NULL, rb->page_size + 2 * info.max_entries, - PROT_READ | PROT_WRITE, MAP_SHARED, map_fd, rb->page_size); + mmap_sz = rb->page_size + 2 * (__u64)info.max_entries; + if (mmap_sz != (__u64)(size_t)mmap_sz) { + pr_warn("user ringbuf: ring buf size (%u) is too big\n", info.max_entries); + return -E2BIG; + } + tmp = mmap(NULL, (size_t)mmap_sz, PROT_READ | PROT_WRITE, MAP_SHARED, + map_fd, rb->page_size); if (tmp == MAP_FAILED) { err = -errno; pr_warn("user ringbuf: failed to mmap data pages for map fd=%d: %d\n", @@ -476,6 +486,10 @@ void *user_ring_buffer__reserve(struct user_ring_buffer *rb, __u32 size) __u64 cons_pos, prod_pos; struct ringbuf_hdr *hdr; + /* The top two bits are used as special flags */ + if (size & (BPF_RINGBUF_BUSY_BIT | BPF_RINGBUF_DISCARD_BIT)) + return errno = E2BIG, NULL; + /* Synchronizes with smp_store_release() in __bpf_user_ringbuf_peek() in * the kernel. */ diff --git a/tools/perf/.gitignore b/tools/perf/.gitignore index a653311d96938954dca67d723f96e71d998d4729..fd7a6ff9e7aae048561456f2d2f4d6871afb9012 100644 --- a/tools/perf/.gitignore +++ b/tools/perf/.gitignore @@ -4,6 +4,7 @@ PERF-GUI-VARS PERF-VERSION-FILE FEATURE-DUMP perf +!include/perf/ perf-read-vdso32 perf-read-vdsox32 perf-help diff --git a/tools/perf/tests/shell/test_brstack.sh b/tools/perf/tests/shell/test_brstack.sh index ec801cffae6bcd359c26aebb54ced13d74ba7586..d7ff5c4b4da4c2cfff1d52771b91cb590a2953a9 100755 --- a/tools/perf/tests/shell/test_brstack.sh +++ b/tools/perf/tests/shell/test_brstack.sh @@ -13,7 +13,10 @@ fi # skip the test if the hardware doesn't support branch stack sampling # and if the architecture doesn't support filter types: any,save_type,u -perf record -b -o- -B --branch-filter any,save_type,u true > /dev/null 2>&1 || exit 2 +if ! perf record -o- --no-buildid --branch-filter any,save_type,u -- true > /dev/null 2>&1 ; then + echo "skip: system doesn't support filter types: any,save_type,u" + exit 2 +fi TMPDIR=$(mktemp -d /tmp/__perf_test.program.XXXXX) diff --git a/tools/perf/util/parse-branch-options.c b/tools/perf/util/parse-branch-options.c index 00588b9db474e81e77bff1d380c9405040eeae1d..31faf2bb49ff11c0e34d72252909de905bbff03d 100644 --- a/tools/perf/util/parse-branch-options.c +++ b/tools/perf/util/parse-branch-options.c @@ -102,8 +102,10 @@ parse_branch_stack(const struct option *opt, const char *str, int unset) /* * cannot set it twice, -b + --branch-filter for instance */ - if (*mode) + if (*mode) { + pr_err("Error: Can't use --branch-any (-b) with --branch-filter (-j).\n"); return -1; + } return parse_branch_str(str, mode); } diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c index 5c47ee9963a7c04ca4419d5e240531eac8778d22..ba66bb7fc1ca77668c91fadf5dfe3cf5eba4633a 100644 --- a/tools/perf/util/stat-display.c +++ b/tools/perf/util/stat-display.c @@ -273,7 +273,7 @@ static void new_line_csv(struct perf_stat_config *config, void *ctx) fputc('\n', os->fh); if (os->prefix) - fprintf(os->fh, "%s%s", os->prefix, config->csv_sep); + fprintf(os->fh, "%s", os->prefix); aggr_printout(config, os->evsel, os->id, os->nr); for (i = 0; i < os->nfields; i++) fputs(config->csv_sep, os->fh); @@ -559,7 +559,7 @@ static void printout(struct perf_stat_config *config, struct aggr_cpu_id id, int [AGGR_CORE] = 2, [AGGR_THREAD] = 1, [AGGR_UNSET] = 0, - [AGGR_NODE] = 0, + [AGGR_NODE] = 1, }; pm = config->metric_only ? print_metric_only_csv : print_metric_csv; @@ -1124,6 +1124,7 @@ static int aggr_header_lens[] = { [AGGR_SOCKET] = 12, [AGGR_NONE] = 6, [AGGR_THREAD] = 24, + [AGGR_NODE] = 6, [AGGR_GLOBAL] = 0, }; @@ -1133,6 +1134,7 @@ static const char *aggr_header_csv[] = { [AGGR_SOCKET] = "socket,cpus", [AGGR_NONE] = "cpu,", [AGGR_THREAD] = "comm-pid,", + [AGGR_NODE] = "node,", [AGGR_GLOBAL] = "" }; diff --git a/tools/testing/cxl/test/cxl.c b/tools/testing/cxl/test/cxl.c index a072b2d3e726aa958efc8a6519384beb4e238ca2..7edce12fd2ce58515b3214b5143d35bad9d4d92c 100644 --- a/tools/testing/cxl/test/cxl.c +++ b/tools/testing/cxl/test/cxl.c @@ -12,30 +12,62 @@ #include "mock.h" #define NR_CXL_HOST_BRIDGES 2 +#define NR_CXL_SINGLE_HOST 1 #define NR_CXL_ROOT_PORTS 2 #define NR_CXL_SWITCH_PORTS 2 #define NR_CXL_PORT_DECODERS 8 static struct platform_device *cxl_acpi; static struct platform_device *cxl_host_bridge[NR_CXL_HOST_BRIDGES]; -static struct platform_device - *cxl_root_port[NR_CXL_HOST_BRIDGES * NR_CXL_ROOT_PORTS]; -static struct platform_device - *cxl_switch_uport[NR_CXL_HOST_BRIDGES * NR_CXL_ROOT_PORTS]; -static struct platform_device - *cxl_switch_dport[NR_CXL_HOST_BRIDGES * NR_CXL_ROOT_PORTS * - NR_CXL_SWITCH_PORTS]; -struct platform_device - *cxl_mem[NR_CXL_HOST_BRIDGES * NR_CXL_ROOT_PORTS * NR_CXL_SWITCH_PORTS]; +#define NR_MULTI_ROOT (NR_CXL_HOST_BRIDGES * NR_CXL_ROOT_PORTS) +static struct platform_device *cxl_root_port[NR_MULTI_ROOT]; +static struct platform_device *cxl_switch_uport[NR_MULTI_ROOT]; +#define NR_MEM_MULTI \ + (NR_CXL_HOST_BRIDGES * NR_CXL_ROOT_PORTS * NR_CXL_SWITCH_PORTS) +static struct platform_device *cxl_switch_dport[NR_MEM_MULTI]; + +static struct platform_device *cxl_hb_single[NR_CXL_SINGLE_HOST]; +static struct platform_device *cxl_root_single[NR_CXL_SINGLE_HOST]; +static struct platform_device *cxl_swu_single[NR_CXL_SINGLE_HOST]; +#define NR_MEM_SINGLE (NR_CXL_SINGLE_HOST * NR_CXL_SWITCH_PORTS) +static struct platform_device *cxl_swd_single[NR_MEM_SINGLE]; + +struct platform_device *cxl_mem[NR_MEM_MULTI]; +struct platform_device *cxl_mem_single[NR_MEM_SINGLE]; + + +static inline bool is_multi_bridge(struct device *dev) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(cxl_host_bridge); i++) + if (&cxl_host_bridge[i]->dev == dev) + return true; + return false; +} + +static inline bool is_single_bridge(struct device *dev) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(cxl_hb_single); i++) + if (&cxl_hb_single[i]->dev == dev) + return true; + return false; +} static struct acpi_device acpi0017_mock; -static struct acpi_device host_bridge[NR_CXL_HOST_BRIDGES] = { +static struct acpi_device host_bridge[NR_CXL_HOST_BRIDGES + NR_CXL_SINGLE_HOST] = { [0] = { .handle = &host_bridge[0], }, [1] = { .handle = &host_bridge[1], }, + [2] = { + .handle = &host_bridge[2], + }, + }; static bool is_mock_dev(struct device *dev) @@ -45,6 +77,9 @@ static bool is_mock_dev(struct device *dev) for (i = 0; i < ARRAY_SIZE(cxl_mem); i++) if (dev == &cxl_mem[i]->dev) return true; + for (i = 0; i < ARRAY_SIZE(cxl_mem_single); i++) + if (dev == &cxl_mem_single[i]->dev) + return true; if (dev == &cxl_acpi->dev) return true; return false; @@ -66,7 +101,7 @@ static bool is_mock_adev(struct acpi_device *adev) static struct { struct acpi_table_cedt cedt; - struct acpi_cedt_chbs chbs[NR_CXL_HOST_BRIDGES]; + struct acpi_cedt_chbs chbs[NR_CXL_HOST_BRIDGES + NR_CXL_SINGLE_HOST]; struct { struct acpi_cedt_cfmws cfmws; u32 target[1]; @@ -83,6 +118,10 @@ static struct { struct acpi_cedt_cfmws cfmws; u32 target[2]; } cfmws3; + struct { + struct acpi_cedt_cfmws cfmws; + u32 target[1]; + } cfmws4; } __packed mock_cedt = { .cedt = { .header = { @@ -107,6 +146,14 @@ static struct { .uid = 1, .cxl_version = ACPI_CEDT_CHBS_VERSION_CXL20, }, + .chbs[2] = { + .header = { + .type = ACPI_CEDT_TYPE_CHBS, + .length = sizeof(mock_cedt.chbs[0]), + }, + .uid = 2, + .cxl_version = ACPI_CEDT_CHBS_VERSION_CXL20, + }, .cfmws0 = { .cfmws = { .header = { @@ -167,13 +214,29 @@ static struct { }, .target = { 0, 1, }, }, + .cfmws4 = { + .cfmws = { + .header = { + .type = ACPI_CEDT_TYPE_CFMWS, + .length = sizeof(mock_cedt.cfmws4), + }, + .interleave_ways = 0, + .granularity = 4, + .restrictions = ACPI_CEDT_CFMWS_RESTRICT_TYPE3 | + ACPI_CEDT_CFMWS_RESTRICT_PMEM, + .qtg_id = 4, + .window_size = SZ_256M * 4UL, + }, + .target = { 2 }, + }, }; -struct acpi_cedt_cfmws *mock_cfmws[4] = { +struct acpi_cedt_cfmws *mock_cfmws[] = { [0] = &mock_cedt.cfmws0.cfmws, [1] = &mock_cedt.cfmws1.cfmws, [2] = &mock_cedt.cfmws2.cfmws, [3] = &mock_cedt.cfmws3.cfmws, + [4] = &mock_cedt.cfmws4.cfmws, }; struct cxl_mock_res { @@ -304,6 +367,9 @@ static bool is_mock_bridge(struct device *dev) for (i = 0; i < ARRAY_SIZE(cxl_host_bridge); i++) if (dev == &cxl_host_bridge[i]->dev) return true; + for (i = 0; i < ARRAY_SIZE(cxl_hb_single); i++) + if (dev == &cxl_hb_single[i]->dev) + return true; return false; } @@ -326,6 +392,18 @@ static bool is_mock_port(struct device *dev) if (dev == &cxl_switch_dport[i]->dev) return true; + for (i = 0; i < ARRAY_SIZE(cxl_root_single); i++) + if (dev == &cxl_root_single[i]->dev) + return true; + + for (i = 0; i < ARRAY_SIZE(cxl_swu_single); i++) + if (dev == &cxl_swu_single[i]->dev) + return true; + + for (i = 0; i < ARRAY_SIZE(cxl_swd_single); i++) + if (dev == &cxl_swd_single[i]->dev) + return true; + if (is_cxl_memdev(dev)) return is_mock_dev(dev->parent); @@ -561,11 +639,31 @@ static int mock_cxl_port_enumerate_dports(struct cxl_port *port) int i, array_size; if (port->depth == 1) { - array_size = ARRAY_SIZE(cxl_root_port); - array = cxl_root_port; + if (is_multi_bridge(port->uport)) { + array_size = ARRAY_SIZE(cxl_root_port); + array = cxl_root_port; + } else if (is_single_bridge(port->uport)) { + array_size = ARRAY_SIZE(cxl_root_single); + array = cxl_root_single; + } else { + dev_dbg(&port->dev, "%s: unknown bridge type\n", + dev_name(port->uport)); + return -ENXIO; + } } else if (port->depth == 2) { - array_size = ARRAY_SIZE(cxl_switch_dport); - array = cxl_switch_dport; + struct cxl_port *parent = to_cxl_port(port->dev.parent); + + if (is_multi_bridge(parent->uport)) { + array_size = ARRAY_SIZE(cxl_switch_dport); + array = cxl_switch_dport; + } else if (is_single_bridge(parent->uport)) { + array_size = ARRAY_SIZE(cxl_swd_single); + array = cxl_swd_single; + } else { + dev_dbg(&port->dev, "%s: unknown bridge type\n", + dev_name(port->uport)); + return -ENXIO; + } } else { dev_WARN_ONCE(&port->dev, 1, "unexpected depth %d\n", port->depth); @@ -576,8 +674,12 @@ static int mock_cxl_port_enumerate_dports(struct cxl_port *port) struct platform_device *pdev = array[i]; struct cxl_dport *dport; - if (pdev->dev.parent != port->uport) + if (pdev->dev.parent != port->uport) { + dev_dbg(&port->dev, "%s: mismatch parent %s\n", + dev_name(port->uport), + dev_name(pdev->dev.parent)); continue; + } dport = devm_cxl_add_dport(port, &pdev->dev, pdev->id, CXL_RESOURCE_NONE); @@ -627,6 +729,157 @@ static void mock_companion(struct acpi_device *adev, struct device *dev) #define SZ_512G (SZ_64G * 8) #endif +static __init int cxl_single_init(void) +{ + int i, rc; + + for (i = 0; i < ARRAY_SIZE(cxl_hb_single); i++) { + struct acpi_device *adev = + &host_bridge[NR_CXL_HOST_BRIDGES + i]; + struct platform_device *pdev; + + pdev = platform_device_alloc("cxl_host_bridge", + NR_CXL_HOST_BRIDGES + i); + if (!pdev) + goto err_bridge; + + mock_companion(adev, &pdev->dev); + rc = platform_device_add(pdev); + if (rc) { + platform_device_put(pdev); + goto err_bridge; + } + + cxl_hb_single[i] = pdev; + rc = sysfs_create_link(&pdev->dev.kobj, &pdev->dev.kobj, + "physical_node"); + if (rc) + goto err_bridge; + } + + for (i = 0; i < ARRAY_SIZE(cxl_root_single); i++) { + struct platform_device *bridge = + cxl_hb_single[i % ARRAY_SIZE(cxl_hb_single)]; + struct platform_device *pdev; + + pdev = platform_device_alloc("cxl_root_port", + NR_MULTI_ROOT + i); + if (!pdev) + goto err_port; + pdev->dev.parent = &bridge->dev; + + rc = platform_device_add(pdev); + if (rc) { + platform_device_put(pdev); + goto err_port; + } + cxl_root_single[i] = pdev; + } + + for (i = 0; i < ARRAY_SIZE(cxl_swu_single); i++) { + struct platform_device *root_port = cxl_root_single[i]; + struct platform_device *pdev; + + pdev = platform_device_alloc("cxl_switch_uport", + NR_MULTI_ROOT + i); + if (!pdev) + goto err_uport; + pdev->dev.parent = &root_port->dev; + + rc = platform_device_add(pdev); + if (rc) { + platform_device_put(pdev); + goto err_uport; + } + cxl_swu_single[i] = pdev; + } + + for (i = 0; i < ARRAY_SIZE(cxl_swd_single); i++) { + struct platform_device *uport = + cxl_swu_single[i % ARRAY_SIZE(cxl_swu_single)]; + struct platform_device *pdev; + + pdev = platform_device_alloc("cxl_switch_dport", + i + NR_MEM_MULTI); + if (!pdev) + goto err_dport; + pdev->dev.parent = &uport->dev; + + rc = platform_device_add(pdev); + if (rc) { + platform_device_put(pdev); + goto err_dport; + } + cxl_swd_single[i] = pdev; + } + + for (i = 0; i < ARRAY_SIZE(cxl_mem_single); i++) { + struct platform_device *dport = cxl_swd_single[i]; + struct platform_device *pdev; + + pdev = platform_device_alloc("cxl_mem", NR_MEM_MULTI + i); + if (!pdev) + goto err_mem; + pdev->dev.parent = &dport->dev; + set_dev_node(&pdev->dev, i % 2); + + rc = platform_device_add(pdev); + if (rc) { + platform_device_put(pdev); + goto err_mem; + } + cxl_mem_single[i] = pdev; + } + + return 0; + +err_mem: + for (i = ARRAY_SIZE(cxl_mem_single) - 1; i >= 0; i--) + platform_device_unregister(cxl_mem_single[i]); +err_dport: + for (i = ARRAY_SIZE(cxl_swd_single) - 1; i >= 0; i--) + platform_device_unregister(cxl_swd_single[i]); +err_uport: + for (i = ARRAY_SIZE(cxl_swu_single) - 1; i >= 0; i--) + platform_device_unregister(cxl_swu_single[i]); +err_port: + for (i = ARRAY_SIZE(cxl_root_single) - 1; i >= 0; i--) + platform_device_unregister(cxl_root_single[i]); +err_bridge: + for (i = ARRAY_SIZE(cxl_hb_single) - 1; i >= 0; i--) { + struct platform_device *pdev = cxl_hb_single[i]; + + if (!pdev) + continue; + sysfs_remove_link(&pdev->dev.kobj, "physical_node"); + platform_device_unregister(cxl_hb_single[i]); + } + + return rc; +} + +static void cxl_single_exit(void) +{ + int i; + + for (i = ARRAY_SIZE(cxl_mem_single) - 1; i >= 0; i--) + platform_device_unregister(cxl_mem_single[i]); + for (i = ARRAY_SIZE(cxl_swd_single) - 1; i >= 0; i--) + platform_device_unregister(cxl_swd_single[i]); + for (i = ARRAY_SIZE(cxl_swu_single) - 1; i >= 0; i--) + platform_device_unregister(cxl_swu_single[i]); + for (i = ARRAY_SIZE(cxl_root_single) - 1; i >= 0; i--) + platform_device_unregister(cxl_root_single[i]); + for (i = ARRAY_SIZE(cxl_hb_single) - 1; i >= 0; i--) { + struct platform_device *pdev = cxl_hb_single[i]; + + if (!pdev) + continue; + sysfs_remove_link(&pdev->dev.kobj, "physical_node"); + platform_device_unregister(cxl_hb_single[i]); + } +} + static __init int cxl_test_init(void) { int rc, i; @@ -695,7 +948,7 @@ static __init int cxl_test_init(void) pdev = platform_device_alloc("cxl_switch_uport", i); if (!pdev) - goto err_port; + goto err_uport; pdev->dev.parent = &root_port->dev; rc = platform_device_add(pdev); @@ -713,7 +966,7 @@ static __init int cxl_test_init(void) pdev = platform_device_alloc("cxl_switch_dport", i); if (!pdev) - goto err_port; + goto err_dport; pdev->dev.parent = &uport->dev; rc = platform_device_add(pdev); @@ -724,7 +977,6 @@ static __init int cxl_test_init(void) cxl_switch_dport[i] = pdev; } - BUILD_BUG_ON(ARRAY_SIZE(cxl_mem) != ARRAY_SIZE(cxl_switch_dport)); for (i = 0; i < ARRAY_SIZE(cxl_mem); i++) { struct platform_device *dport = cxl_switch_dport[i]; struct platform_device *pdev; @@ -743,9 +995,13 @@ static __init int cxl_test_init(void) cxl_mem[i] = pdev; } + rc = cxl_single_init(); + if (rc) + goto err_mem; + cxl_acpi = platform_device_alloc("cxl_acpi", 0); if (!cxl_acpi) - goto err_mem; + goto err_single; mock_companion(&acpi0017_mock, &cxl_acpi->dev); acpi0017_mock.dev.bus = &platform_bus_type; @@ -758,6 +1014,8 @@ static __init int cxl_test_init(void) err_add: platform_device_put(cxl_acpi); +err_single: + cxl_single_exit(); err_mem: for (i = ARRAY_SIZE(cxl_mem) - 1; i >= 0; i--) platform_device_unregister(cxl_mem[i]); @@ -793,6 +1051,7 @@ static __exit void cxl_test_exit(void) int i; platform_device_unregister(cxl_acpi); + cxl_single_exit(); for (i = ARRAY_SIZE(cxl_mem) - 1; i >= 0; i--) platform_device_unregister(cxl_mem[i]); for (i = ARRAY_SIZE(cxl_switch_dport) - 1; i >= 0; i--) diff --git a/tools/testing/radix-tree/.gitignore b/tools/testing/radix-tree/.gitignore index c901d96dd013eff47553a8bcf257dbe61b2635a3..49bccb90c35ba00d05353624b70393e1fd0c5243 100644 --- a/tools/testing/radix-tree/.gitignore +++ b/tools/testing/radix-tree/.gitignore @@ -1,4 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-only +generated/bit-length.h generated/map-shift.h idr.c idr-test diff --git a/tools/testing/radix-tree/Makefile b/tools/testing/radix-tree/Makefile index 89d613e0505b306e8228615a92b37c01fa92038d..caf32a9b96089dd0aa6b4bbde59e387e5d781ac3 100644 --- a/tools/testing/radix-tree/Makefile +++ b/tools/testing/radix-tree/Makefile @@ -18,9 +18,14 @@ endif ifeq ($(BUILD), 32) CFLAGS += -m32 LDFLAGS += -m32 +LONG_BIT := 32 endif -targets: generated/map-shift.h $(TARGETS) +ifndef LONG_BIT +LONG_BIT := $(shell getconf LONG_BIT) +endif + +targets: generated/map-shift.h generated/bit-length.h $(TARGETS) main: $(OFILES) @@ -34,11 +39,11 @@ maple: $(CORE_OFILES) multiorder: multiorder.o $(CORE_OFILES) clean: - $(RM) $(TARGETS) *.o radix-tree.c idr.c generated/map-shift.h + $(RM) $(TARGETS) *.o radix-tree.c idr.c generated/map-shift.h generated/bit-length.h vpath %.c ../../lib -$(OFILES): Makefile *.h */*.h generated/map-shift.h \ +$(OFILES): Makefile *.h */*.h generated/map-shift.h generated/bit-length.h \ ../../include/linux/*.h \ ../../include/asm/*.h \ ../../../include/linux/xarray.h \ @@ -61,3 +66,11 @@ generated/map-shift.h: echo "#define XA_CHUNK_SHIFT $(SHIFT)" > \ generated/map-shift.h; \ fi + +generated/bit-length.h: FORCE + @if ! grep -qws CONFIG_$(LONG_BIT)BIT generated/bit-length.h; then \ + echo "Generating $@"; \ + echo "#define CONFIG_$(LONG_BIT)BIT 1" > $@; \ + fi + +FORCE: ; diff --git a/tools/testing/radix-tree/generated/autoconf.h b/tools/testing/radix-tree/generated/autoconf.h index e7da803502362baaa87ca7e77ba53c7b71d16e95..92dc474c349b602e7ca8fe050c665c940bbce4bf 100644 --- a/tools/testing/radix-tree/generated/autoconf.h +++ b/tools/testing/radix-tree/generated/autoconf.h @@ -1,2 +1,2 @@ +#include "bit-length.h" #define CONFIG_XARRAY_MULTI 1 -#define CONFIG_64BIT 1 diff --git a/tools/testing/radix-tree/linux.c b/tools/testing/radix-tree/linux.c index 2048d12c31df36da570fe323e7fadf4b8676768b..d587a558997f8c3ac3da162dbd81b7bb186ef353 100644 --- a/tools/testing/radix-tree/linux.c +++ b/tools/testing/radix-tree/linux.c @@ -129,6 +129,10 @@ void kmem_cache_free_bulk(struct kmem_cache *cachep, size_t size, void **list) pthread_mutex_unlock(&cachep->lock); } +void kmem_cache_shrink(struct kmem_cache *cachep) +{ +} + int kmem_cache_alloc_bulk(struct kmem_cache *cachep, gfp_t gfp, size_t size, void **p) { diff --git a/tools/testing/radix-tree/maple.c b/tools/testing/radix-tree/maple.c index 35082671928ad5305efd743d5955f4556f3bba45..2e91973fbaa668f6e7ea0b375c2a3c61bd34afe7 100644 --- a/tools/testing/radix-tree/maple.c +++ b/tools/testing/radix-tree/maple.c @@ -2,11 +2,17 @@ /* * maple_tree.c: Userspace shim for maple tree test-suite * Copyright (c) 2018 Liam R. Howlett + * + * Any tests that require internal knowledge of the tree or threads and other + * difficult to handle in kernel tests. */ #define CONFIG_DEBUG_MAPLE_TREE #define CONFIG_MAPLE_SEARCH +#define MAPLE_32BIT (MAPLE_NODE_SLOTS > 31) #include "test.h" +#include +#include #define module_init(x) #define module_exit(x) @@ -18,6 +24,35717 @@ #undef CONFIG_DEBUG_MAPLE_TREE #include "../../../lib/test_maple_tree.c" +#define RCU_RANGE_COUNT 1000 +#define RCU_MT_BUG_ON(test, y) {if (y) { test->stop = true; } MT_BUG_ON(test->mt, y); } + +struct rcu_test_struct2 { + struct maple_tree *mt; + + bool start; + bool stop; + unsigned int thread_count; + + unsigned int seen_toggle; + unsigned int seen_added; + unsigned int seen_modified; + unsigned int seen_deleted; + int pause; + + unsigned long index[RCU_RANGE_COUNT]; + unsigned long last[RCU_RANGE_COUNT]; +}; + +struct rcu_reader_struct { + unsigned int id; + int mod; + int del; + int flip; + int add; + int next; + struct rcu_test_struct2 *test; +}; + +/* + * check_new_node() - Check the creation of new nodes and error path + * verification. + */ +static noinline void check_new_node(struct maple_tree *mt) +{ + + struct maple_node *mn, *mn2, *mn3; + struct maple_alloc *smn; + struct maple_node *nodes[100]; + int i, j, total; + + MA_STATE(mas, mt, 0, 0); + + /* Try allocating 3 nodes */ + mtree_lock(mt); + mt_set_non_kernel(0); + /* request 3 nodes to be allocated. */ + mas_node_count(&mas, 3); + /* Allocation request of 3. */ + MT_BUG_ON(mt, mas_alloc_req(&mas) != 3); + /* Allocate failed. */ + MT_BUG_ON(mt, mas.node != MA_ERROR(-ENOMEM)); + MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); + + MT_BUG_ON(mt, mas_allocated(&mas) != 3); + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, not_empty(mn)); + MT_BUG_ON(mt, mn == NULL); + MT_BUG_ON(mt, mas.alloc == NULL); + MT_BUG_ON(mt, mas.alloc->slot[0] == NULL); + mas_push_node(&mas, mn); + mas_nomem(&mas, GFP_KERNEL); /* free */ + mtree_unlock(mt); + + + /* Try allocating 1 node, then 2 more */ + mtree_lock(mt); + /* Set allocation request to 1. */ + mas_set_alloc_req(&mas, 1); + /* Check Allocation request of 1. */ + MT_BUG_ON(mt, mas_alloc_req(&mas) != 1); + mas_set_err(&mas, -ENOMEM); + /* Validate allocation request. */ + MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); + /* Eat the requested node. */ + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, not_empty(mn)); + MT_BUG_ON(mt, mn == NULL); + MT_BUG_ON(mt, mn->slot[0] != NULL); + MT_BUG_ON(mt, mn->slot[1] != NULL); + MT_BUG_ON(mt, mas_allocated(&mas) != 0); + + ma_free_rcu(mn); + mas.node = MAS_START; + mas_nomem(&mas, GFP_KERNEL); + /* Allocate 3 nodes, will fail. */ + mas_node_count(&mas, 3); + /* Drop the lock and allocate 3 nodes. */ + mas_nomem(&mas, GFP_KERNEL); + /* Ensure 3 are allocated. */ + MT_BUG_ON(mt, mas_allocated(&mas) != 3); + /* Allocation request of 0. */ + MT_BUG_ON(mt, mas_alloc_req(&mas) != 0); + + MT_BUG_ON(mt, mas.alloc == NULL); + MT_BUG_ON(mt, mas.alloc->slot[0] == NULL); + MT_BUG_ON(mt, mas.alloc->slot[1] == NULL); + /* Ensure we counted 3. */ + MT_BUG_ON(mt, mas_allocated(&mas) != 3); + /* Free. */ + mas_nomem(&mas, GFP_KERNEL); + + /* Set allocation request to 1. */ + mas_set_alloc_req(&mas, 1); + MT_BUG_ON(mt, mas_alloc_req(&mas) != 1); + mas_set_err(&mas, -ENOMEM); + /* Validate allocation request. */ + MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); + MT_BUG_ON(mt, mas_allocated(&mas) != 1); + /* Check the node is only one node. */ + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, not_empty(mn)); + MT_BUG_ON(mt, mas_allocated(&mas) != 0); + MT_BUG_ON(mt, mn == NULL); + MT_BUG_ON(mt, mn->slot[0] != NULL); + MT_BUG_ON(mt, mn->slot[1] != NULL); + MT_BUG_ON(mt, mas_allocated(&mas) != 0); + mas_push_node(&mas, mn); + MT_BUG_ON(mt, mas_allocated(&mas) != 1); + MT_BUG_ON(mt, mas.alloc->node_count); + + mas_set_alloc_req(&mas, 2); /* request 2 more. */ + MT_BUG_ON(mt, mas_alloc_req(&mas) != 2); + mas_set_err(&mas, -ENOMEM); + MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); + MT_BUG_ON(mt, mas_allocated(&mas) != 3); + MT_BUG_ON(mt, mas.alloc == NULL); + MT_BUG_ON(mt, mas.alloc->slot[0] == NULL); + MT_BUG_ON(mt, mas.alloc->slot[1] == NULL); + for (i = 2; i >= 0; i--) { + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, mas_allocated(&mas) != i); + MT_BUG_ON(mt, !mn); + MT_BUG_ON(mt, not_empty(mn)); + ma_free_rcu(mn); + } + + total = 64; + mas_set_alloc_req(&mas, total); /* request 2 more. */ + MT_BUG_ON(mt, mas_alloc_req(&mas) != total); + mas_set_err(&mas, -ENOMEM); + MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); + for (i = total; i > 0; i--) { + unsigned int e = 0; /* expected node_count */ + + if (!MAPLE_32BIT) { + if (i >= 35) + e = i - 35; + else if (i >= 5) + e = i - 5; + else if (i >= 2) + e = i - 2; + } else { + if (i >= 4) + e = i - 4; + else if (i == 3) + e = i - 2; + else + e = 0; + } + + MT_BUG_ON(mt, mas.alloc->node_count != e); + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, not_empty(mn)); + MT_BUG_ON(mt, mas_allocated(&mas) != i - 1); + MT_BUG_ON(mt, !mn); + ma_free_rcu(mn); + } + + total = 100; + for (i = 1; i < total; i++) { + mas_set_alloc_req(&mas, i); + mas_set_err(&mas, -ENOMEM); + MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); + for (j = i; j > 0; j--) { + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, mas_allocated(&mas) != j - 1); + MT_BUG_ON(mt, !mn); + MT_BUG_ON(mt, not_empty(mn)); + mas_push_node(&mas, mn); + MT_BUG_ON(mt, mas_allocated(&mas) != j); + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, not_empty(mn)); + MT_BUG_ON(mt, mas_allocated(&mas) != j - 1); + ma_free_rcu(mn); + } + MT_BUG_ON(mt, mas_allocated(&mas) != 0); + + mas_set_alloc_req(&mas, i); + mas_set_err(&mas, -ENOMEM); + MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); + for (j = 0; j <= i/2; j++) { + MT_BUG_ON(mt, mas_allocated(&mas) != i - j); + nodes[j] = mas_pop_node(&mas); + MT_BUG_ON(mt, mas_allocated(&mas) != i - j - 1); + } + + while (j) { + j--; + mas_push_node(&mas, nodes[j]); + MT_BUG_ON(mt, mas_allocated(&mas) != i - j); + } + MT_BUG_ON(mt, mas_allocated(&mas) != i); + for (j = 0; j <= i/2; j++) { + MT_BUG_ON(mt, mas_allocated(&mas) != i - j); + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, not_empty(mn)); + ma_free_rcu(mn); + MT_BUG_ON(mt, mas_allocated(&mas) != i - j - 1); + } + MT_BUG_ON(mt, mas_nomem(&mas, GFP_KERNEL)); + + } + + /* Set allocation request. */ + total = 500; + mas_node_count(&mas, total); + /* Drop the lock and allocate the nodes. */ + mas_nomem(&mas, GFP_KERNEL); + MT_BUG_ON(mt, !mas.alloc); + i = 1; + smn = mas.alloc; + while (i < total) { + for (j = 0; j < MAPLE_ALLOC_SLOTS; j++) { + i++; + MT_BUG_ON(mt, !smn->slot[j]); + if (i == total) + break; + } + smn = smn->slot[0]; /* next. */ + } + MT_BUG_ON(mt, mas_allocated(&mas) != total); + mas_nomem(&mas, GFP_KERNEL); /* Free. */ + + MT_BUG_ON(mt, mas_allocated(&mas) != 0); + for (i = 1; i < 128; i++) { + mas_node_count(&mas, i); /* Request */ + mas_nomem(&mas, GFP_KERNEL); /* Fill request */ + MT_BUG_ON(mt, mas_allocated(&mas) != i); /* check request filled */ + for (j = i; j > 0; j--) { /*Free the requests */ + mn = mas_pop_node(&mas); /* get the next node. */ + MT_BUG_ON(mt, mn == NULL); + MT_BUG_ON(mt, not_empty(mn)); + ma_free_rcu(mn); + } + MT_BUG_ON(mt, mas_allocated(&mas) != 0); + } + + for (i = 1; i < MAPLE_NODE_MASK + 1; i++) { + MA_STATE(mas2, mt, 0, 0); + mas_node_count(&mas, i); /* Request */ + mas_nomem(&mas, GFP_KERNEL); /* Fill request */ + MT_BUG_ON(mt, mas_allocated(&mas) != i); /* check request filled */ + for (j = 1; j <= i; j++) { /* Move the allocations to mas2 */ + mn = mas_pop_node(&mas); /* get the next node. */ + MT_BUG_ON(mt, mn == NULL); + MT_BUG_ON(mt, not_empty(mn)); + mas_push_node(&mas2, mn); + MT_BUG_ON(mt, mas_allocated(&mas2) != j); + } + MT_BUG_ON(mt, mas_allocated(&mas) != 0); + MT_BUG_ON(mt, mas_allocated(&mas2) != i); + + for (j = i; j > 0; j--) { /*Free the requests */ + MT_BUG_ON(mt, mas_allocated(&mas2) != j); + mn = mas_pop_node(&mas2); /* get the next node. */ + MT_BUG_ON(mt, mn == NULL); + MT_BUG_ON(mt, not_empty(mn)); + ma_free_rcu(mn); + } + MT_BUG_ON(mt, mas_allocated(&mas2) != 0); + } + + + MT_BUG_ON(mt, mas_allocated(&mas) != 0); + mas_node_count(&mas, MAPLE_ALLOC_SLOTS + 1); /* Request */ + MT_BUG_ON(mt, mas.node != MA_ERROR(-ENOMEM)); + MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); + MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 1); + MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS - 1); + + mn = mas_pop_node(&mas); /* get the next node. */ + MT_BUG_ON(mt, mn == NULL); + MT_BUG_ON(mt, not_empty(mn)); + MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS); + MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS - 2); + + mas_push_node(&mas, mn); + MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 1); + MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS - 1); + + /* Check the limit of pop/push/pop */ + mas_node_count(&mas, MAPLE_ALLOC_SLOTS + 2); /* Request */ + MT_BUG_ON(mt, mas_alloc_req(&mas) != 1); + MT_BUG_ON(mt, mas.node != MA_ERROR(-ENOMEM)); + MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL)); + MT_BUG_ON(mt, mas_alloc_req(&mas)); + MT_BUG_ON(mt, mas.alloc->node_count); + MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 2); + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, not_empty(mn)); + MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 1); + MT_BUG_ON(mt, mas.alloc->node_count != MAPLE_ALLOC_SLOTS - 1); + mas_push_node(&mas, mn); + MT_BUG_ON(mt, mas.alloc->node_count); + MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS + 2); + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, not_empty(mn)); + ma_free_rcu(mn); + for (i = 1; i <= MAPLE_ALLOC_SLOTS + 1; i++) { + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, not_empty(mn)); + ma_free_rcu(mn); + } + MT_BUG_ON(mt, mas_allocated(&mas) != 0); + + + for (i = 3; i < MAPLE_NODE_MASK * 3; i++) { + mas.node = MA_ERROR(-ENOMEM); + mas_node_count(&mas, i); /* Request */ + mas_nomem(&mas, GFP_KERNEL); /* Fill request */ + mn = mas_pop_node(&mas); /* get the next node. */ + mas_push_node(&mas, mn); /* put it back */ + mas_destroy(&mas); + + mas.node = MA_ERROR(-ENOMEM); + mas_node_count(&mas, i); /* Request */ + mas_nomem(&mas, GFP_KERNEL); /* Fill request */ + mn = mas_pop_node(&mas); /* get the next node. */ + mn2 = mas_pop_node(&mas); /* get the next node. */ + mas_push_node(&mas, mn); /* put them back */ + mas_push_node(&mas, mn2); + mas_destroy(&mas); + + mas.node = MA_ERROR(-ENOMEM); + mas_node_count(&mas, i); /* Request */ + mas_nomem(&mas, GFP_KERNEL); /* Fill request */ + mn = mas_pop_node(&mas); /* get the next node. */ + mn2 = mas_pop_node(&mas); /* get the next node. */ + mn3 = mas_pop_node(&mas); /* get the next node. */ + mas_push_node(&mas, mn); /* put them back */ + mas_push_node(&mas, mn2); + mas_push_node(&mas, mn3); + mas_destroy(&mas); + + mas.node = MA_ERROR(-ENOMEM); + mas_node_count(&mas, i); /* Request */ + mas_nomem(&mas, GFP_KERNEL); /* Fill request */ + mn = mas_pop_node(&mas); /* get the next node. */ + ma_free_rcu(mn); + mas_destroy(&mas); + + mas.node = MA_ERROR(-ENOMEM); + mas_node_count(&mas, i); /* Request */ + mas_nomem(&mas, GFP_KERNEL); /* Fill request */ + mn = mas_pop_node(&mas); /* get the next node. */ + ma_free_rcu(mn); + mn = mas_pop_node(&mas); /* get the next node. */ + ma_free_rcu(mn); + mn = mas_pop_node(&mas); /* get the next node. */ + ma_free_rcu(mn); + mas_destroy(&mas); + } + + mas.node = MA_ERROR(-ENOMEM); + mas_node_count(&mas, 5); /* Request */ + mas_nomem(&mas, GFP_KERNEL); /* Fill request */ + MT_BUG_ON(mt, mas_allocated(&mas) != 5); + mas.node = MA_ERROR(-ENOMEM); + mas_node_count(&mas, 10); /* Request */ + mas_nomem(&mas, GFP_KERNEL); /* Fill request */ + mas.node = MAS_START; + MT_BUG_ON(mt, mas_allocated(&mas) != 10); + mas_destroy(&mas); + + mas.node = MA_ERROR(-ENOMEM); + mas_node_count(&mas, MAPLE_ALLOC_SLOTS - 1); /* Request */ + mas_nomem(&mas, GFP_KERNEL); /* Fill request */ + MT_BUG_ON(mt, mas_allocated(&mas) != MAPLE_ALLOC_SLOTS - 1); + mas.node = MA_ERROR(-ENOMEM); + mas_node_count(&mas, 10 + MAPLE_ALLOC_SLOTS - 1); /* Request */ + mas_nomem(&mas, GFP_KERNEL); /* Fill request */ + mas.node = MAS_START; + MT_BUG_ON(mt, mas_allocated(&mas) != 10 + MAPLE_ALLOC_SLOTS - 1); + mas_destroy(&mas); + + mtree_unlock(mt); +} + +/* + * Check erasing including RCU. + */ +static noinline void check_erase(struct maple_tree *mt, unsigned long index, + void *ptr) +{ + MT_BUG_ON(mt, mtree_test_erase(mt, index) != ptr); +} + +#define erase_check_load(mt, i) check_load(mt, set[i], entry[i%2]) +#define erase_check_insert(mt, i) check_insert(mt, set[i], entry[i%2]) +#define erase_check_erase(mt, i) check_erase(mt, set[i], entry[i%2]) + +static noinline void check_erase_testset(struct maple_tree *mt) +{ + unsigned long set[] = { 5015, 5014, 5017, 25, 1000, + 1001, 1002, 1003, 1005, 0, + 6003, 6002, 6008, 6012, 6015, + 7003, 7002, 7008, 7012, 7015, + 8003, 8002, 8008, 8012, 8015, + 9003, 9002, 9008, 9012, 9015, + 10003, 10002, 10008, 10012, 10015, + 11003, 11002, 11008, 11012, 11015, + 12003, 12002, 12008, 12012, 12015, + 13003, 13002, 13008, 13012, 13015, + 14003, 14002, 14008, 14012, 14015, + 15003, 15002, 15008, 15012, 15015, + }; + + + void *ptr = &set; + void *entry[2] = { ptr, mt }; + void *root_node; + + + rcu_register_thread(); + mt_set_in_rcu(mt); + for (int i = 0; i < 4; i++) + erase_check_insert(mt, i); + for (int i = 0; i < 4; i++) + erase_check_load(mt, i); + + mt_set_non_kernel(2); + erase_check_erase(mt, 1); + erase_check_load(mt, 0); + check_load(mt, set[1], NULL); + for (int i = 2; i < 4; i++) + erase_check_load(mt, i); + + + erase_check_erase(mt, 2); + erase_check_load(mt, 0); + check_load(mt, set[1], NULL); + check_load(mt, set[2], NULL); + + erase_check_insert(mt, 1); + erase_check_insert(mt, 2); + + for (int i = 0; i < 4; i++) + erase_check_load(mt, i); + + /* Check erase and load without an allocation. */ + erase_check_load(mt, 3); + erase_check_erase(mt, 1); + erase_check_load(mt, 0); + check_load(mt, set[1], NULL); + for (int i = 2; i < 4; i++) + erase_check_load(mt, i); + + /* + * Set the newly erased node. This will produce a different allocated + * node to avoid busy slots. + */ + root_node = mt->ma_root; + erase_check_insert(mt, 1); + + erase_check_load(mt, 0); + check_load(mt, 5016, NULL); + erase_check_load(mt, 1); + check_load(mt, 5013, NULL); + erase_check_load(mt, 2); + check_load(mt, 5018, NULL); + erase_check_load(mt, 3); + + erase_check_erase(mt, 2); /* erase 5017 to check append */ + erase_check_load(mt, 0); + check_load(mt, 5016, NULL); + erase_check_load(mt, 1); + check_load(mt, 5013, NULL); + check_load(mt, set[2], NULL); + check_load(mt, 5018, NULL); + + erase_check_load(mt, 3); + + root_node = mt->ma_root; + erase_check_insert(mt, 2); + + erase_check_load(mt, 0); + check_load(mt, 5016, NULL); + erase_check_load(mt, 1); + check_load(mt, 5013, NULL); + erase_check_load(mt, 2); + check_load(mt, 5018, NULL); + erase_check_load(mt, 3); + + mt_set_non_kernel(1); + erase_check_erase(mt, 2); /* erase 5017 to check append */ + erase_check_load(mt, 0); + check_load(mt, 5016, NULL); + check_load(mt, set[2], NULL); + erase_check_erase(mt, 0); /* erase 5015 to check append */ + check_load(mt, set[0], NULL); + check_load(mt, 5016, NULL); + erase_check_insert(mt, 4); /* 1000 < Should not split. */ + check_load(mt, set[0], NULL); + check_load(mt, 5016, NULL); + erase_check_load(mt, 1); + check_load(mt, 5013, NULL); + check_load(mt, set[2], NULL); + check_load(mt, 5018, NULL); + erase_check_load(mt, 4); + check_load(mt, 999, NULL); + check_load(mt, 1001, NULL); + erase_check_load(mt, 4); + if (mt_in_rcu(mt)) + MT_BUG_ON(mt, root_node == mt->ma_root); + else + MT_BUG_ON(mt, root_node != mt->ma_root); + + /* Should not have split. */ + MT_BUG_ON(mt, !mte_is_leaf(mt->ma_root)); + + + /* Coalesce testing */ + erase_check_insert(mt, 0); + erase_check_insert(mt, 2); + + for (int i = 5; i < 25; i++) { + erase_check_insert(mt, i); + for (int j = i; j >= 0; j--) + erase_check_load(mt, j); + } + + erase_check_erase(mt, 14); /*6015 */ + for (int i = 0; i < 25; i++) { + if (i == 14) + check_load(mt, set[i], NULL); + else + erase_check_load(mt, i); + } + erase_check_erase(mt, 16); /*7002 */ + for (int i = 0; i < 25; i++) { + if (i == 16 || i == 14) + check_load(mt, set[i], NULL); + else + erase_check_load(mt, i); + } + + + mt_set_non_kernel(1); + erase_check_erase(mt, 13); /*6012 */ + for (int i = 0; i < 25; i++) { + if (i == 16 || i == 14 || i == 13) + check_load(mt, set[i], NULL); + else + erase_check_load(mt, i); + } + + erase_check_erase(mt, 15); /*7003 */ + for (int i = 0; i < 25; i++) { + if (i <= 16 && i >= 13) + check_load(mt, set[i], NULL); + else + erase_check_load(mt, i); + } + + mt_set_non_kernel(2); + erase_check_erase(mt, 17); /*7008 *should* cause coalesce. */ + for (int i = 0; i < 25; i++) { + if (i <= 17 && i >= 13) + check_load(mt, set[i], NULL); + else + erase_check_load(mt, i); + } + + erase_check_erase(mt, 18); /*7012 */ + for (int i = 0; i < 25; i++) { + if (i <= 18 && i >= 13) + check_load(mt, set[i], NULL); + else + erase_check_load(mt, i); + } + + mt_set_non_kernel(2); + erase_check_erase(mt, 19); /*7015 */ + for (int i = 0; i < 25; i++) { + if (i <= 19 && i >= 13) + check_load(mt, set[i], NULL); + else + erase_check_load(mt, i); + } + + erase_check_erase(mt, 20); /*8003 */ + for (int i = 0; i < 25; i++) { + if (i <= 20 && i >= 13) + check_load(mt, set[i], NULL); + else + erase_check_load(mt, i); + } + + erase_check_erase(mt, 21); /*8002 */ + for (int i = 0; i < 25; i++) { + if (i <= 21 && i >= 13) + check_load(mt, set[i], NULL); + else + erase_check_load(mt, i); + } + + mt_set_non_kernel(2); + erase_check_erase(mt, 22); /*8008 */ + for (int i = 0; i < 25; i++) { + if (i <= 22 && i >= 13) + check_load(mt, set[i], NULL); + else + erase_check_load(mt, i); + } + for (int i = 23; i < 25; i++) + erase_check_erase(mt, i); + + for (int i = 0; i < 25; i++) { + if (i <= 25 && i >= 13) + check_load(mt, set[i], NULL); + else + erase_check_load(mt, i); + } + + /* Shrinking tree test. */ + + for (int i = 13; i < ARRAY_SIZE(set); i++) + erase_check_insert(mt, i); + + mt_set_non_kernel(99); + for (int i = 18; i < ARRAY_SIZE(set); i++) { + erase_check_erase(mt, i); + for (int j = 0; j < ARRAY_SIZE(set); j++) { + if (j < 18 || j > i) + erase_check_load(mt, j); + else + check_load(mt, set[j], NULL); + } + } + mt_set_non_kernel(35); + for (int i = 0; i < 18; i++) { + erase_check_erase(mt, i); + for (int j = 0; j < ARRAY_SIZE(set); j++) { + if (j < 18 && j > i) + erase_check_load(mt, j); + else + check_load(mt, set[j], NULL); + } + } + erase_check_insert(mt, 8); + erase_check_insert(mt, 9); + erase_check_erase(mt, 8); + rcu_unregister_thread(); +} + +/* End of erase testing */ + +/* VM Generated Crashes - uses its own tree walk for verification */ +#define erase_check_store_range(mt, a, i, ptr) mtree_test_store_range(mt, \ + a[(i)], a[(i + 1)], ptr) +#define STORE 1 +#define SNULL 2 +#define ERASE 3 +#define ec_type_str(x) \ + (((x) == STORE) ? \ + "STORE" : \ + (((x) == SNULL) ? \ + "SNULL" : "ERASE") \ + ) +#define check_erase2_debug 0 + +/* Calculate the overwritten entries. */ +int mas_ce2_over_count(struct ma_state *mas_start, struct ma_state *mas_end, + void *s_entry, unsigned long s_min, + void *e_entry, unsigned long e_max, + unsigned long *set, int i, bool null_entry) +{ + int count = 0, span = 0; + unsigned long retry = 0; + void *entry; + struct ma_state tmp; + + + /* count slots */ + memcpy(&tmp, mas_start, sizeof(tmp)); + entry = mas_next(&tmp, mas_end->last); + while (entry) { + BUG_ON(retry > 50); /* stop infinite retry on testing. */ + if (xa_is_zero(s_entry)) { + retry++; + continue; + } + count++; + span++; + entry = mas_next(&tmp, mas_end->last); + } + + if (null_entry) { + /* Check splitting end. */ + if (e_entry && (e_max > mas_end->last)) + count--; + + /* check overwrite of entire start */ + if (s_entry && (s_min == mas_start->index)) + count++; + } else { /* !null_entry (store) */ + bool esplit = e_max > mas_end->last; + bool ssplit = s_min != mas_start->index; + + if (s_entry && e_entry) { + if (esplit && ssplit) + count--; + else if (ssplit) + count--; + else if (esplit) { + if (span) + count--; + } + } else if (s_entry && !e_entry) { + if (ssplit) + count--; + } else if (!s_entry && e_entry) { + if (esplit) + count--; + count--; + } else { + count--; + } + } + return count; +} + +/* + * mas_node_walk() - Walk a maple node to offset of the index. + * @mas: The maple state + * @type: The maple node type + * @*range_min: Pointer to store the minimum range of the offset + * @*range_max: Pointer to store the maximum range of the offset + * + * The offset will be stored in the maple state. + * + */ +static inline void mas_node_walk(struct ma_state *mas, struct maple_node *node, + enum maple_type type, unsigned long *range_min, + unsigned long *range_max) + +{ + unsigned long *pivots; + unsigned char count; + unsigned long prev, max; + unsigned char offset; + unsigned long index; + + if (unlikely(ma_is_dense(type))) { + (*range_max) = (*range_min) = mas->index; + if (unlikely(ma_dead_node(node))) + return; + + mas->offset = mas->index = mas->min; + return; + } + + pivots = ma_pivots(node, type); + max = pivots[0]; + if (unlikely(ma_dead_node(node))) + return; + + offset = 0; + prev = mas->min; + index = mas->index; + if (unlikely(index <= max)) + goto offset_zero; + + count = mt_pivots[type]; + while (++offset < count) { + prev = max; + max = pivots[offset]; + if (unlikely(ma_dead_node(node))) + return; + + if (index <= max) + goto offset_found; + else if (unlikely(!max)) + goto mas_max; + } + + prev = max; +mas_max: + max = mas->max; +offset_found: + prev++; +offset_zero: + mas->offset = offset; + if (ma_is_leaf(type)) { + *range_max = max; + *range_min = prev; + } else { + mas->max = max; + mas->min = prev; + } +} + +/* + * mas_descend_walk(): Locates a value and sets the mas->node and slot + * accordingly. range_min and range_max are set to the range which the entry is + * valid. + * @mas: The maple state + * @*range_min: A pointer to store the minimum of the range + * @*range_max: A pointer to store the maximum of the range + * + * Check mas->node is still valid on return of any value. + * + * Return: true if pointing to a valid node and offset. False otherwise. + */ +static inline bool mas_descend_walk(struct ma_state *mas, + unsigned long *range_min, unsigned long *range_max) +{ + struct maple_enode *next; + struct maple_node *node; + enum maple_type type; + + next = mas->node; + while (true) { + node = mte_to_node(next); + type = mte_node_type(next); + mas_node_walk(mas, node, type, range_min, range_max); + next = mas_slot(mas, ma_slots(node, type), mas->offset); + if (unlikely(ma_dead_node(node))) + return false; + + if (unlikely(ma_is_leaf(type))) + return true; + + /* Descend. */ + mas->node = next; + } + return false; +} + +/* + * mas_tree_walk() - Walk to @mas->index and set the range values. + * @mas: The maple state. + * @*range_min: The minimum range to be set. + * @*range_max: The maximum range to be set. + * + * Ranges are only valid if there is a valid entry at @mas->index. + * + * Return: True if a value exists, false otherwise. + */ +static inline bool mas_tree_walk(struct ma_state *mas, unsigned long *range_min, + unsigned long *range_max) +{ + bool ret; + +retry: + ret = false; + mas_start(mas); + if (mas_is_none(mas)) + goto not_found; + + if (mas_is_ptr(mas)) { + *range_min = *range_max = 0; + if (!mas->index) + return true; + + goto not_found; + } + + ret = mas_descend_walk(mas, range_min, range_max); + if (unlikely(mte_dead_node(mas->node))) { + mas->node = MAS_START; + goto retry; + } + + return ret; + +not_found: + mas->offset = MAPLE_NODE_SLOTS; + return false; +} + +static inline void *mas_range_load(struct ma_state *mas, + unsigned long *range_min, unsigned long *range_max) + +{ + void *entry = NULL; + unsigned long index = mas->index; + + if (mas_is_none(mas) || mas_is_paused(mas)) + mas->node = MAS_START; +retry: + if (mas_tree_walk(mas, range_min, range_max)) + if (unlikely(mas->node == MAS_ROOT)) + return mas_root(mas); + + if (likely(mas->offset != MAPLE_NODE_SLOTS)) + entry = mas_get_slot(mas, mas->offset); + + if (mas_dead_node(mas, index)) + goto retry; + + return entry; +} + +#if defined(CONFIG_64BIT) +static noinline void check_erase2_testset(struct maple_tree *mt, + unsigned long *set, unsigned long size) +{ + int entry_count = 0; + int check = 0; + void *foo; + unsigned long addr = 0; + void *s_entry = NULL, *e_entry = NULL; + + MA_STATE(mas, mt, 0, 0); + + for (int i = 0; i < size; i += 3) { + unsigned long s_min, s_max; + unsigned long e_min, e_max; + void *value = NULL; + + MA_STATE(mas_start, mt, set[i+1], set[i+1]); + MA_STATE(mas_end, mt, set[i+2], set[i+2]); + mt_set_non_kernel(127); +#if check_erase2_debug + pr_err("%s: %d %s %lu - %lu\n", __func__, i, + ec_type_str(set[i]), + set[i+1], set[i+2]); +#endif + s_entry = mas_range_load(&mas_start, &s_min, &s_max); + e_entry = mas_range_load(&mas_end, &e_min, &e_max); + + switch (set[i]) { + case SNULL: + if ((s_min == set[i+1]) && (s_max == set[i+2])) { + if (s_entry) + entry_count--; + } else if ((s_min != set[i+1]) && (s_max != set[i+2])) { + entry_count++; + } else if ((mas_start.node != mas_end.node) || + (mas_start.offset != mas_end.offset)) { + entry_count -= + mas_ce2_over_count(&mas_start, &mas_end, + s_entry, s_min, + e_entry, e_max, set, i, + true); + } + + + erase_check_store_range(mt, set, i + 1, value); + break; + case STORE: + value = xa_mk_value(set[i + 1]); + if (mas_start.offset > mt_slot_count(mas_start.node)) { + entry_count++; /* appending an entry. */ + } else if ((s_min == e_min) && (s_max == e_max)) { + if (!entry_count) + entry_count++; + + else if (s_entry) { + if (e_max > mas_end.last) + entry_count++; + + if (s_min < mas_start.index) + entry_count++; + + } else { + entry_count++; + } + } else { + entry_count -= + mas_ce2_over_count(&mas_start, &mas_end, + s_entry, s_min, + e_entry, e_max, set, i, + false); + } + + erase_check_store_range(mt, set, i + 1, value); + break; + case ERASE: + if (!s_entry) + break; + check_erase(mt, set[i+1], xa_mk_value(set[i+1])); + entry_count--; + break; + } + mt_validate(mt); + if (entry_count) + MT_BUG_ON(mt, !mt_height(mt)); +#if check_erase2_debug > 1 + mt_dump(mt); +#endif +#if check_erase2_debug + pr_err("Done\n"); +#endif + + check = 0; + addr = 0; + mt_for_each(mt, foo, addr, ULONG_MAX) { + check++; +#if check_erase2_debug > 2 + pr_err("mt: %lu -> %p (%d)\n", addr+1, foo, check); +#endif + if (check > entry_count) + break; + } + +#if check_erase2_debug > 2 + pr_err("mt_for_each %d and count %d\n", check, entry_count); +#endif + + MT_BUG_ON(mt, check != entry_count); + + check = 0; + addr = 0; + mas_reset(&mas); + mas.index = 0; + rcu_read_lock(); + mas_for_each(&mas, foo, ULONG_MAX) { + if (xa_is_zero(foo)) { + if (addr == mas.index) { + mt_dump(mas.tree); + pr_err("retry failed %lu - %lu\n", + mas.index, mas.last); + MT_BUG_ON(mt, 1); + } + addr = mas.index; + continue; + } +#if check_erase2_debug > 2 + pr_err("mas: %lu -> %p\n", mas.index, foo); +#endif + check++; + if (check > entry_count) + break; + } + rcu_read_unlock(); +#if check_erase2_debug > 2 + pr_err("mas_for_each %d and count %d\n", check, entry_count); + mt_validate(mt); +#endif + + MT_BUG_ON(mt, check != entry_count); + + MT_BUG_ON(mt, mtree_load(mas.tree, 0) != NULL); + } +} + + +/* These tests were pulled from KVM tree modifications which failed. */ +static noinline void check_erase2_sets(struct maple_tree *mt) +{ + void *entry; + unsigned long start = 0; + unsigned long set[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140721266458624, 140737488351231, +ERASE, 140721266458624, 140737488351231, +STORE, 140721266458624, 140721266462719, +STORE, 94735788949504, 94735789121535, +ERASE, 94735788949504, 94735789121535, +STORE, 94735788949504, 94735788965887, +STORE, 94735788965888, 94735789121535, +ERASE, 94735788965888, 94735789121535, +STORE, 94735788965888, 94735789068287, +STORE, 94735789068288, 94735789109247, +STORE, 94735789109248, 94735789121535, +STORE, 140253902692352, 140253902864383, +ERASE, 140253902692352, 140253902864383, +STORE, 140253902692352, 140253902696447, +STORE, 140253902696448, 140253902864383, + }; + unsigned long set2[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140735933583360, 140737488351231, +ERASE, 140735933583360, 140737488351231, +STORE, 140735933583360, 140735933587455, +STORE, 94811003260928, 94811003432959, +ERASE, 94811003260928, 94811003432959, +STORE, 94811003260928, 94811003277311, +STORE, 94811003277312, 94811003432959, +ERASE, 94811003277312, 94811003432959, +STORE, 94811003277312, 94811003379711, +STORE, 94811003379712, 94811003420671, +STORE, 94811003420672, 94811003432959, +STORE, 140277094653952, 140277094825983, +ERASE, 140277094653952, 140277094825983, +STORE, 140277094653952, 140277094658047, +STORE, 140277094658048, 140277094825983, +ERASE, 140277094658048, 140277094825983, +STORE, 140277094658048, 140277094780927, +STORE, 140277094780928, 140277094813695, +STORE, 140277094813696, 140277094821887, +STORE, 140277094821888, 140277094825983, +STORE, 140735933906944, 140735933911039, + }; + unsigned long set3[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140735790264320, 140737488351231, +ERASE, 140735790264320, 140737488351231, +STORE, 140735790264320, 140735790268415, +STORE, 94016597282816, 94016597454847, +ERASE, 94016597282816, 94016597454847, +STORE, 94016597282816, 94016597299199, +STORE, 94016597299200, 94016597454847, +ERASE, 94016597299200, 94016597454847, +STORE, 94016597299200, 94016597401599, +STORE, 94016597401600, 94016597442559, +STORE, 94016597442560, 94016597454847, +STORE, 140496959283200, 140496959455231, +ERASE, 140496959283200, 140496959455231, +STORE, 140496959283200, 140496959287295, +STORE, 140496959287296, 140496959455231, +ERASE, 140496959287296, 140496959455231, +STORE, 140496959287296, 140496959410175, +STORE, 140496959410176, 140496959442943, +STORE, 140496959442944, 140496959451135, +STORE, 140496959451136, 140496959455231, +STORE, 140735791718400, 140735791722495, +STORE, 140735791706112, 140735791718399, +STORE, 47135835713536, 47135835721727, +STORE, 47135835721728, 47135835729919, +STORE, 47135835729920, 47135835893759, +ERASE, 47135835729920, 47135835893759, +STORE, 47135835729920, 47135835742207, +STORE, 47135835742208, 47135835893759, +STORE, 47135835840512, 47135835893759, +STORE, 47135835742208, 47135835840511, +ERASE, 47135835742208, 47135835840511, +STORE, 47135835742208, 47135835840511, +STORE, 47135835885568, 47135835893759, +STORE, 47135835840512, 47135835885567, +ERASE, 47135835840512, 47135835885567, +STORE, 47135835840512, 47135835893759, +ERASE, 47135835840512, 47135835893759, +STORE, 47135835840512, 47135835885567, +STORE, 47135835885568, 47135835893759, + }; + + unsigned long set4[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140728251703296, 140737488351231, +ERASE, 140728251703296, 140737488351231, +STORE, 140728251703296, 140728251707391, +STORE, 94668429205504, 94668429377535, +ERASE, 94668429205504, 94668429377535, +STORE, 94668429205504, 94668429221887, +STORE, 94668429221888, 94668429377535, +ERASE, 94668429221888, 94668429377535, +STORE, 94668429221888, 94668429324287, +STORE, 94668429324288, 94668429365247, +STORE, 94668429365248, 94668429377535, +STORE, 47646523273216, 47646523445247, +ERASE, 47646523273216, 47646523445247, +STORE, 47646523273216, 47646523277311, +STORE, 47646523277312, 47646523445247, +ERASE, 47646523277312, 47646523445247, +STORE, 47646523277312, 47646523400191, + }; + + unsigned long set5[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140726874062848, 140737488351231, +ERASE, 140726874062848, 140737488351231, +STORE, 140726874062848, 140726874066943, +STORE, 94248892870656, 94248893042687, +ERASE, 94248892870656, 94248893042687, +STORE, 94248892870656, 94248892887039, +STORE, 94248892887040, 94248893042687, +ERASE, 94248892887040, 94248893042687, +STORE, 94248892887040, 94248892989439, +STORE, 94248892989440, 94248893030399, +STORE, 94248893030400, 94248893042687, +STORE, 47884786266112, 47884786438143, +ERASE, 47884786266112, 47884786438143, +STORE, 47884786266112, 47884786270207, +STORE, 47884786270208, 47884786438143, +ERASE, 47884786270208, 47884786438143, +STORE, 47884786270208, 47884786393087, +STORE, 47884786393088, 47884786425855, +STORE, 47884786425856, 47884786434047, +STORE, 47884786434048, 47884786438143, +STORE, 140726874513408, 140726874517503, +STORE, 140726874501120, 140726874513407, +STORE, 47884786438144, 47884786446335, +STORE, 47884786446336, 47884786454527, +STORE, 47884786454528, 47884786618367, +ERASE, 47884786454528, 47884786618367, +STORE, 47884786454528, 47884786466815, +STORE, 47884786466816, 47884786618367, +STORE, 47884786565120, 47884786618367, +STORE, 47884786466816, 47884786565119, +ERASE, 47884786466816, 47884786565119, +STORE, 47884786466816, 47884786565119, +STORE, 47884786610176, 47884786618367, +STORE, 47884786565120, 47884786610175, +ERASE, 47884786565120, 47884786610175, +STORE, 47884786565120, 47884786618367, +ERASE, 47884786565120, 47884786618367, +STORE, 47884786565120, 47884786610175, +STORE, 47884786610176, 47884786618367, +ERASE, 47884786610176, 47884786618367, +STORE, 47884786610176, 47884786618367, +STORE, 47884786618368, 47884789669887, +STORE, 47884787163136, 47884789669887, +STORE, 47884786618368, 47884787163135, +ERASE, 47884787163136, 47884789669887, +STORE, 47884787163136, 47884789448703, +STORE, 47884789448704, 47884789669887, +STORE, 47884788858880, 47884789448703, +STORE, 47884787163136, 47884788858879, +ERASE, 47884787163136, 47884788858879, +STORE, 47884787163136, 47884788858879, +STORE, 47884789444608, 47884789448703, +STORE, 47884788858880, 47884789444607, +ERASE, 47884788858880, 47884789444607, +STORE, 47884788858880, 47884789444607, +STORE, 47884789653504, 47884789669887, +STORE, 47884789448704, 47884789653503, +ERASE, 47884789448704, 47884789653503, +STORE, 47884789448704, 47884789653503, +ERASE, 47884789653504, 47884789669887, +STORE, 47884789653504, 47884789669887, +STORE, 47884789669888, 47884791508991, +STORE, 47884789809152, 47884791508991, +STORE, 47884789669888, 47884789809151, +ERASE, 47884789809152, 47884791508991, +STORE, 47884789809152, 47884791468031, +STORE, 47884791468032, 47884791508991, +STORE, 47884791152640, 47884791468031, +STORE, 47884789809152, 47884791152639, +ERASE, 47884789809152, 47884791152639, +STORE, 47884789809152, 47884791152639, +STORE, 47884791463936, 47884791468031, +STORE, 47884791152640, 47884791463935, +ERASE, 47884791152640, 47884791463935, +STORE, 47884791152640, 47884791463935, +STORE, 47884791492608, 47884791508991, +STORE, 47884791468032, 47884791492607, +ERASE, 47884791468032, 47884791492607, +STORE, 47884791468032, 47884791492607, +ERASE, 47884791492608, 47884791508991, +STORE, 47884791492608, 47884791508991, +STORE, 47884791508992, 47884791644159, +ERASE, 47884791508992, 47884791644159, +STORE, 47884791508992, 47884791533567, +STORE, 47884791533568, 47884791644159, +STORE, 47884791595008, 47884791644159, +STORE, 47884791533568, 47884791595007, +ERASE, 47884791533568, 47884791595007, +STORE, 47884791533568, 47884791595007, +STORE, 47884791619584, 47884791644159, +STORE, 47884791595008, 47884791619583, +ERASE, 47884791595008, 47884791619583, +STORE, 47884791595008, 47884791644159, +ERASE, 47884791595008, 47884791644159, +STORE, 47884791595008, 47884791619583, +STORE, 47884791619584, 47884791644159, +STORE, 47884791627776, 47884791644159, +STORE, 47884791619584, 47884791627775, +ERASE, 47884791619584, 47884791627775, +STORE, 47884791619584, 47884791627775, +ERASE, 47884791627776, 47884791644159, +STORE, 47884791627776, 47884791644159, +STORE, 47884791644160, 47884791664639, +ERASE, 47884791644160, 47884791664639, +STORE, 47884791644160, 47884791648255, +STORE, 47884791648256, 47884791664639, +STORE, 47884791652352, 47884791664639, +STORE, 47884791648256, 47884791652351, +ERASE, 47884791648256, 47884791652351, +STORE, 47884791648256, 47884791652351, +STORE, 47884791656448, 47884791664639, +STORE, 47884791652352, 47884791656447, +ERASE, 47884791652352, 47884791656447, +STORE, 47884791652352, 47884791664639, +ERASE, 47884791652352, 47884791664639, +STORE, 47884791652352, 47884791656447, +STORE, 47884791656448, 47884791664639, +ERASE, 47884791656448, 47884791664639, +STORE, 47884791656448, 47884791664639, +STORE, 47884791664640, 47884791672831, +ERASE, 47884791468032, 47884791492607, +STORE, 47884791468032, 47884791484415, +STORE, 47884791484416, 47884791492607, +ERASE, 47884791656448, 47884791664639, +STORE, 47884791656448, 47884791660543, +STORE, 47884791660544, 47884791664639, +ERASE, 47884791619584, 47884791627775, +STORE, 47884791619584, 47884791623679, +STORE, 47884791623680, 47884791627775, + }; + + unsigned long set6[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140722999021568, 140737488351231, +ERASE, 140722999021568, 140737488351231, +STORE, 140722999021568, 140722999025663, +STORE, 94901500268544, 94901500440575, +ERASE, 94901500268544, 94901500440575, +STORE, 94901500268544, 94901500284927, +STORE, 94901500284928, 94901500440575, +ERASE, 94901500284928, 94901500440575, +STORE, 94901500284928, 94901500387327, +STORE, 94901500387328, 94901500428287, +STORE, 94901500428288, 94901500440575, +STORE, 47430426660864, 47430426832895, +ERASE, 47430426660864, 47430426832895, +STORE, 47430426660864, 47430426664959, +STORE, 47430426664960, 47430426832895, +ERASE, 47430426664960, 47430426832895, +STORE, 47430426664960, 47430426787839, +STORE, 47430426787840, 47430426820607, +STORE, 47430426820608, 47430426828799, +STORE, 47430426828800, 47430426832895, +STORE, 140722999115776, 140722999119871, +STORE, 140722999103488, 140722999115775, +STORE, 47430426832896, 47430426841087, +STORE, 47430426841088, 47430426849279, +STORE, 47430426849280, 47430427013119, +ERASE, 47430426849280, 47430427013119, +STORE, 47430426849280, 47430426861567, +STORE, 47430426861568, 47430427013119, +STORE, 47430426959872, 47430427013119, +STORE, 47430426861568, 47430426959871, +ERASE, 47430426861568, 47430426959871, +STORE, 47430426861568, 47430426959871, +STORE, 47430427004928, 47430427013119, +STORE, 47430426959872, 47430427004927, +ERASE, 47430426959872, 47430427004927, +STORE, 47430426959872, 47430427013119, +ERASE, 47430426959872, 47430427013119, +STORE, 47430426959872, 47430427004927, +STORE, 47430427004928, 47430427013119, +ERASE, 47430427004928, 47430427013119, +STORE, 47430427004928, 47430427013119, +STORE, 47430427013120, 47430430064639, +STORE, 47430427557888, 47430430064639, +STORE, 47430427013120, 47430427557887, +ERASE, 47430427557888, 47430430064639, +STORE, 47430427557888, 47430429843455, +STORE, 47430429843456, 47430430064639, +STORE, 47430429253632, 47430429843455, +STORE, 47430427557888, 47430429253631, +ERASE, 47430427557888, 47430429253631, +STORE, 47430427557888, 47430429253631, +STORE, 47430429839360, 47430429843455, +STORE, 47430429253632, 47430429839359, +ERASE, 47430429253632, 47430429839359, +STORE, 47430429253632, 47430429839359, +STORE, 47430430048256, 47430430064639, +STORE, 47430429843456, 47430430048255, +ERASE, 47430429843456, 47430430048255, +STORE, 47430429843456, 47430430048255, +ERASE, 47430430048256, 47430430064639, +STORE, 47430430048256, 47430430064639, +STORE, 47430430064640, 47430431903743, +STORE, 47430430203904, 47430431903743, +STORE, 47430430064640, 47430430203903, +ERASE, 47430430203904, 47430431903743, +STORE, 47430430203904, 47430431862783, +STORE, 47430431862784, 47430431903743, +STORE, 47430431547392, 47430431862783, +STORE, 47430430203904, 47430431547391, +ERASE, 47430430203904, 47430431547391, +STORE, 47430430203904, 47430431547391, +STORE, 47430431858688, 47430431862783, +STORE, 47430431547392, 47430431858687, +ERASE, 47430431547392, 47430431858687, +STORE, 47430431547392, 47430431858687, +STORE, 47430431887360, 47430431903743, +STORE, 47430431862784, 47430431887359, +ERASE, 47430431862784, 47430431887359, +STORE, 47430431862784, 47430431887359, +ERASE, 47430431887360, 47430431903743, +STORE, 47430431887360, 47430431903743, +STORE, 47430431903744, 47430432038911, +ERASE, 47430431903744, 47430432038911, +STORE, 47430431903744, 47430431928319, +STORE, 47430431928320, 47430432038911, +STORE, 47430431989760, 47430432038911, +STORE, 47430431928320, 47430431989759, +ERASE, 47430431928320, 47430431989759, +STORE, 47430431928320, 47430431989759, +STORE, 47430432014336, 47430432038911, +STORE, 47430431989760, 47430432014335, +ERASE, 47430431989760, 47430432014335, +STORE, 47430431989760, 47430432038911, +ERASE, 47430431989760, 47430432038911, +STORE, 47430431989760, 47430432014335, +STORE, 47430432014336, 47430432038911, +STORE, 47430432022528, 47430432038911, +STORE, 47430432014336, 47430432022527, +ERASE, 47430432014336, 47430432022527, +STORE, 47430432014336, 47430432022527, +ERASE, 47430432022528, 47430432038911, +STORE, 47430432022528, 47430432038911, +STORE, 47430432038912, 47430432059391, +ERASE, 47430432038912, 47430432059391, +STORE, 47430432038912, 47430432043007, +STORE, 47430432043008, 47430432059391, +STORE, 47430432047104, 47430432059391, +STORE, 47430432043008, 47430432047103, +ERASE, 47430432043008, 47430432047103, +STORE, 47430432043008, 47430432047103, +STORE, 47430432051200, 47430432059391, +STORE, 47430432047104, 47430432051199, +ERASE, 47430432047104, 47430432051199, +STORE, 47430432047104, 47430432059391, +ERASE, 47430432047104, 47430432059391, +STORE, 47430432047104, 47430432051199, +STORE, 47430432051200, 47430432059391, +ERASE, 47430432051200, 47430432059391, +STORE, 47430432051200, 47430432059391, +STORE, 47430432059392, 47430432067583, +ERASE, 47430431862784, 47430431887359, +STORE, 47430431862784, 47430431879167, +STORE, 47430431879168, 47430431887359, +ERASE, 47430432051200, 47430432059391, +STORE, 47430432051200, 47430432055295, +STORE, 47430432055296, 47430432059391, +ERASE, 47430432014336, 47430432022527, +STORE, 47430432014336, 47430432018431, +STORE, 47430432018432, 47430432022527, + }; + unsigned long set7[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140729808330752, 140737488351231, +ERASE, 140729808330752, 140737488351231, +STORE, 140729808330752, 140729808334847, +STORE, 94629632020480, 94629632192511, +ERASE, 94629632020480, 94629632192511, +STORE, 94629632020480, 94629632036863, +STORE, 94629632036864, 94629632192511, +ERASE, 94629632036864, 94629632192511, +STORE, 94629632036864, 94629632139263, +STORE, 94629632139264, 94629632180223, +STORE, 94629632180224, 94629632192511, +STORE, 47439981776896, 47439981948927, +ERASE, 47439981776896, 47439981948927, +STORE, 47439981776896, 47439981780991, +STORE, 47439981780992, 47439981948927, +ERASE, 47439981780992, 47439981948927, +STORE, 47439981780992, 47439981903871, +STORE, 47439981903872, 47439981936639, +STORE, 47439981936640, 47439981944831, +STORE, 47439981944832, 47439981948927, +STORE, 140729808474112, 140729808478207, +STORE, 140729808461824, 140729808474111, +STORE, 47439981948928, 47439981957119, +STORE, 47439981957120, 47439981965311, +STORE, 47439981965312, 47439982129151, +ERASE, 47439981965312, 47439982129151, +STORE, 47439981965312, 47439981977599, +STORE, 47439981977600, 47439982129151, +STORE, 47439982075904, 47439982129151, +STORE, 47439981977600, 47439982075903, +ERASE, 47439981977600, 47439982075903, +STORE, 47439981977600, 47439982075903, +STORE, 47439982120960, 47439982129151, +STORE, 47439982075904, 47439982120959, +ERASE, 47439982075904, 47439982120959, +STORE, 47439982075904, 47439982129151, +ERASE, 47439982075904, 47439982129151, +STORE, 47439982075904, 47439982120959, +STORE, 47439982120960, 47439982129151, +ERASE, 47439982120960, 47439982129151, +STORE, 47439982120960, 47439982129151, +STORE, 47439982129152, 47439985180671, +STORE, 47439982673920, 47439985180671, +STORE, 47439982129152, 47439982673919, +ERASE, 47439982673920, 47439985180671, +STORE, 47439982673920, 47439984959487, +STORE, 47439984959488, 47439985180671, +STORE, 47439984369664, 47439984959487, +STORE, 47439982673920, 47439984369663, +ERASE, 47439982673920, 47439984369663, +STORE, 47439982673920, 47439984369663, +STORE, 47439984955392, 47439984959487, +STORE, 47439984369664, 47439984955391, +ERASE, 47439984369664, 47439984955391, +STORE, 47439984369664, 47439984955391, +STORE, 47439985164288, 47439985180671, +STORE, 47439984959488, 47439985164287, +ERASE, 47439984959488, 47439985164287, +STORE, 47439984959488, 47439985164287, +ERASE, 47439985164288, 47439985180671, +STORE, 47439985164288, 47439985180671, +STORE, 47439985180672, 47439987019775, +STORE, 47439985319936, 47439987019775, +STORE, 47439985180672, 47439985319935, +ERASE, 47439985319936, 47439987019775, +STORE, 47439985319936, 47439986978815, +STORE, 47439986978816, 47439987019775, +STORE, 47439986663424, 47439986978815, +STORE, 47439985319936, 47439986663423, +ERASE, 47439985319936, 47439986663423, +STORE, 47439985319936, 47439986663423, +STORE, 47439986974720, 47439986978815, +STORE, 47439986663424, 47439986974719, +ERASE, 47439986663424, 47439986974719, +STORE, 47439986663424, 47439986974719, +STORE, 47439987003392, 47439987019775, +STORE, 47439986978816, 47439987003391, +ERASE, 47439986978816, 47439987003391, +STORE, 47439986978816, 47439987003391, +ERASE, 47439987003392, 47439987019775, +STORE, 47439987003392, 47439987019775, +STORE, 47439987019776, 47439987154943, +ERASE, 47439987019776, 47439987154943, +STORE, 47439987019776, 47439987044351, +STORE, 47439987044352, 47439987154943, +STORE, 47439987105792, 47439987154943, +STORE, 47439987044352, 47439987105791, +ERASE, 47439987044352, 47439987105791, +STORE, 47439987044352, 47439987105791, +STORE, 47439987130368, 47439987154943, +STORE, 47439987105792, 47439987130367, +ERASE, 47439987105792, 47439987130367, +STORE, 47439987105792, 47439987154943, +ERASE, 47439987105792, 47439987154943, +STORE, 47439987105792, 47439987130367, +STORE, 47439987130368, 47439987154943, +STORE, 47439987138560, 47439987154943, +STORE, 47439987130368, 47439987138559, +ERASE, 47439987130368, 47439987138559, +STORE, 47439987130368, 47439987138559, +ERASE, 47439987138560, 47439987154943, +STORE, 47439987138560, 47439987154943, +STORE, 47439987154944, 47439987175423, +ERASE, 47439987154944, 47439987175423, +STORE, 47439987154944, 47439987159039, +STORE, 47439987159040, 47439987175423, +STORE, 47439987163136, 47439987175423, +STORE, 47439987159040, 47439987163135, +ERASE, 47439987159040, 47439987163135, +STORE, 47439987159040, 47439987163135, +STORE, 47439987167232, 47439987175423, +STORE, 47439987163136, 47439987167231, +ERASE, 47439987163136, 47439987167231, +STORE, 47439987163136, 47439987175423, +ERASE, 47439987163136, 47439987175423, +STORE, 47439987163136, 47439987167231, +STORE, 47439987167232, 47439987175423, +ERASE, 47439987167232, 47439987175423, +STORE, 47439987167232, 47439987175423, +STORE, 47439987175424, 47439987183615, +ERASE, 47439986978816, 47439987003391, +STORE, 47439986978816, 47439986995199, +STORE, 47439986995200, 47439987003391, +ERASE, 47439987167232, 47439987175423, +STORE, 47439987167232, 47439987171327, +STORE, 47439987171328, 47439987175423, +ERASE, 47439987130368, 47439987138559, +STORE, 47439987130368, 47439987134463, +STORE, 47439987134464, 47439987138559, + }; + unsigned long set8[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140722482974720, 140737488351231, +ERASE, 140722482974720, 140737488351231, +STORE, 140722482974720, 140722482978815, +STORE, 94121505034240, 94121505206271, +ERASE, 94121505034240, 94121505206271, +STORE, 94121505034240, 94121505050623, +STORE, 94121505050624, 94121505206271, +ERASE, 94121505050624, 94121505206271, +STORE, 94121505050624, 94121505153023, +STORE, 94121505153024, 94121505193983, +STORE, 94121505193984, 94121505206271, +STORE, 47708483284992, 47708483457023, +ERASE, 47708483284992, 47708483457023, +STORE, 47708483284992, 47708483289087, +STORE, 47708483289088, 47708483457023, +ERASE, 47708483289088, 47708483457023, +STORE, 47708483289088, 47708483411967, +STORE, 47708483411968, 47708483444735, +STORE, 47708483444736, 47708483452927, +STORE, 47708483452928, 47708483457023, +STORE, 140722483142656, 140722483146751, +STORE, 140722483130368, 140722483142655, +STORE, 47708483457024, 47708483465215, +STORE, 47708483465216, 47708483473407, +STORE, 47708483473408, 47708483637247, +ERASE, 47708483473408, 47708483637247, +STORE, 47708483473408, 47708483485695, +STORE, 47708483485696, 47708483637247, +STORE, 47708483584000, 47708483637247, +STORE, 47708483485696, 47708483583999, +ERASE, 47708483485696, 47708483583999, +STORE, 47708483485696, 47708483583999, +STORE, 47708483629056, 47708483637247, +STORE, 47708483584000, 47708483629055, +ERASE, 47708483584000, 47708483629055, +STORE, 47708483584000, 47708483637247, +ERASE, 47708483584000, 47708483637247, +STORE, 47708483584000, 47708483629055, +STORE, 47708483629056, 47708483637247, +ERASE, 47708483629056, 47708483637247, +STORE, 47708483629056, 47708483637247, +STORE, 47708483637248, 47708486688767, +STORE, 47708484182016, 47708486688767, +STORE, 47708483637248, 47708484182015, +ERASE, 47708484182016, 47708486688767, +STORE, 47708484182016, 47708486467583, +STORE, 47708486467584, 47708486688767, +STORE, 47708485877760, 47708486467583, +STORE, 47708484182016, 47708485877759, +ERASE, 47708484182016, 47708485877759, +STORE, 47708484182016, 47708485877759, +STORE, 47708486463488, 47708486467583, +STORE, 47708485877760, 47708486463487, +ERASE, 47708485877760, 47708486463487, +STORE, 47708485877760, 47708486463487, +STORE, 47708486672384, 47708486688767, +STORE, 47708486467584, 47708486672383, +ERASE, 47708486467584, 47708486672383, +STORE, 47708486467584, 47708486672383, +ERASE, 47708486672384, 47708486688767, +STORE, 47708486672384, 47708486688767, +STORE, 47708486688768, 47708488527871, +STORE, 47708486828032, 47708488527871, +STORE, 47708486688768, 47708486828031, +ERASE, 47708486828032, 47708488527871, +STORE, 47708486828032, 47708488486911, +STORE, 47708488486912, 47708488527871, +STORE, 47708488171520, 47708488486911, +STORE, 47708486828032, 47708488171519, +ERASE, 47708486828032, 47708488171519, +STORE, 47708486828032, 47708488171519, +STORE, 47708488482816, 47708488486911, +STORE, 47708488171520, 47708488482815, +ERASE, 47708488171520, 47708488482815, +STORE, 47708488171520, 47708488482815, +STORE, 47708488511488, 47708488527871, +STORE, 47708488486912, 47708488511487, +ERASE, 47708488486912, 47708488511487, +STORE, 47708488486912, 47708488511487, +ERASE, 47708488511488, 47708488527871, +STORE, 47708488511488, 47708488527871, +STORE, 47708488527872, 47708488663039, +ERASE, 47708488527872, 47708488663039, +STORE, 47708488527872, 47708488552447, +STORE, 47708488552448, 47708488663039, +STORE, 47708488613888, 47708488663039, +STORE, 47708488552448, 47708488613887, +ERASE, 47708488552448, 47708488613887, +STORE, 47708488552448, 47708488613887, +STORE, 47708488638464, 47708488663039, +STORE, 47708488613888, 47708488638463, +ERASE, 47708488613888, 47708488638463, +STORE, 47708488613888, 47708488663039, +ERASE, 47708488613888, 47708488663039, +STORE, 47708488613888, 47708488638463, +STORE, 47708488638464, 47708488663039, +STORE, 47708488646656, 47708488663039, +STORE, 47708488638464, 47708488646655, +ERASE, 47708488638464, 47708488646655, +STORE, 47708488638464, 47708488646655, +ERASE, 47708488646656, 47708488663039, +STORE, 47708488646656, 47708488663039, +STORE, 47708488663040, 47708488683519, +ERASE, 47708488663040, 47708488683519, +STORE, 47708488663040, 47708488667135, +STORE, 47708488667136, 47708488683519, +STORE, 47708488671232, 47708488683519, +STORE, 47708488667136, 47708488671231, +ERASE, 47708488667136, 47708488671231, +STORE, 47708488667136, 47708488671231, +STORE, 47708488675328, 47708488683519, +STORE, 47708488671232, 47708488675327, +ERASE, 47708488671232, 47708488675327, +STORE, 47708488671232, 47708488683519, +ERASE, 47708488671232, 47708488683519, +STORE, 47708488671232, 47708488675327, +STORE, 47708488675328, 47708488683519, +ERASE, 47708488675328, 47708488683519, +STORE, 47708488675328, 47708488683519, +STORE, 47708488683520, 47708488691711, +ERASE, 47708488486912, 47708488511487, +STORE, 47708488486912, 47708488503295, +STORE, 47708488503296, 47708488511487, +ERASE, 47708488675328, 47708488683519, +STORE, 47708488675328, 47708488679423, +STORE, 47708488679424, 47708488683519, +ERASE, 47708488638464, 47708488646655, +STORE, 47708488638464, 47708488642559, +STORE, 47708488642560, 47708488646655, + }; + + unsigned long set9[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140736427839488, 140737488351231, +ERASE, 140736427839488, 140736427839488, +STORE, 140736427839488, 140736427843583, +STORE, 94071213395968, 94071213567999, +ERASE, 94071213395968, 94071213395968, +STORE, 94071213395968, 94071213412351, +STORE, 94071213412352, 94071213567999, +ERASE, 94071213412352, 94071213412352, +STORE, 94071213412352, 94071213514751, +STORE, 94071213514752, 94071213555711, +STORE, 94071213555712, 94071213567999, +STORE, 139968410644480, 139968410816511, +ERASE, 139968410644480, 139968410644480, +STORE, 139968410644480, 139968410648575, +STORE, 139968410648576, 139968410816511, +ERASE, 139968410648576, 139968410648576, +STORE, 139968410648576, 139968410771455, +STORE, 139968410771456, 139968410804223, +STORE, 139968410804224, 139968410812415, +STORE, 139968410812416, 139968410816511, +STORE, 140736429277184, 140736429281279, +STORE, 140736429264896, 140736429277183, +STORE, 47664384352256, 47664384360447, +STORE, 47664384360448, 47664384368639, +STORE, 47664384368640, 47664384532479, +ERASE, 47664384368640, 47664384368640, +STORE, 47664384368640, 47664384380927, +STORE, 47664384380928, 47664384532479, +STORE, 47664384479232, 47664384532479, +STORE, 47664384380928, 47664384479231, +ERASE, 47664384380928, 47664384380928, +STORE, 47664384380928, 47664384479231, +STORE, 47664384524288, 47664384532479, +STORE, 47664384479232, 47664384524287, +ERASE, 47664384479232, 47664384479232, +STORE, 47664384479232, 47664384532479, +ERASE, 47664384479232, 47664384479232, +STORE, 47664384479232, 47664384524287, +STORE, 47664384524288, 47664384532479, +ERASE, 47664384524288, 47664384524288, +STORE, 47664384524288, 47664384532479, +STORE, 47664384532480, 47664387583999, +STORE, 47664385077248, 47664387583999, +STORE, 47664384532480, 47664385077247, +ERASE, 47664385077248, 47664385077248, +STORE, 47664385077248, 47664387362815, +STORE, 47664387362816, 47664387583999, +STORE, 47664386772992, 47664387362815, +STORE, 47664385077248, 47664386772991, +ERASE, 47664385077248, 47664385077248, +STORE, 47664385077248, 47664386772991, +STORE, 47664387358720, 47664387362815, +STORE, 47664386772992, 47664387358719, +ERASE, 47664386772992, 47664386772992, +STORE, 47664386772992, 47664387358719, +STORE, 47664387567616, 47664387583999, +STORE, 47664387362816, 47664387567615, +ERASE, 47664387362816, 47664387362816, +STORE, 47664387362816, 47664387567615, +ERASE, 47664387567616, 47664387567616, +STORE, 47664387567616, 47664387583999, +STORE, 47664387584000, 47664389423103, +STORE, 47664387723264, 47664389423103, +STORE, 47664387584000, 47664387723263, +ERASE, 47664387723264, 47664387723264, +STORE, 47664387723264, 47664389382143, +STORE, 47664389382144, 47664389423103, +STORE, 47664389066752, 47664389382143, +STORE, 47664387723264, 47664389066751, +ERASE, 47664387723264, 47664387723264, +STORE, 47664387723264, 47664389066751, +STORE, 47664389378048, 47664389382143, +STORE, 47664389066752, 47664389378047, +ERASE, 47664389066752, 47664389066752, +STORE, 47664389066752, 47664389378047, +STORE, 47664389406720, 47664389423103, +STORE, 47664389382144, 47664389406719, +ERASE, 47664389382144, 47664389382144, +STORE, 47664389382144, 47664389406719, +ERASE, 47664389406720, 47664389406720, +STORE, 47664389406720, 47664389423103, +STORE, 47664389423104, 47664389558271, +ERASE, 47664389423104, 47664389423104, +STORE, 47664389423104, 47664389447679, +STORE, 47664389447680, 47664389558271, +STORE, 47664389509120, 47664389558271, +STORE, 47664389447680, 47664389509119, +ERASE, 47664389447680, 47664389447680, +STORE, 47664389447680, 47664389509119, +STORE, 47664389533696, 47664389558271, +STORE, 47664389509120, 47664389533695, +ERASE, 47664389509120, 47664389509120, +STORE, 47664389509120, 47664389558271, +ERASE, 47664389509120, 47664389509120, +STORE, 47664389509120, 47664389533695, +STORE, 47664389533696, 47664389558271, +STORE, 47664389541888, 47664389558271, +STORE, 47664389533696, 47664389541887, +ERASE, 47664389533696, 47664389533696, +STORE, 47664389533696, 47664389541887, +ERASE, 47664389541888, 47664389541888, +STORE, 47664389541888, 47664389558271, +STORE, 47664389558272, 47664389578751, +ERASE, 47664389558272, 47664389558272, +STORE, 47664389558272, 47664389562367, +STORE, 47664389562368, 47664389578751, +STORE, 47664389566464, 47664389578751, +STORE, 47664389562368, 47664389566463, +ERASE, 47664389562368, 47664389562368, +STORE, 47664389562368, 47664389566463, +STORE, 47664389570560, 47664389578751, +STORE, 47664389566464, 47664389570559, +ERASE, 47664389566464, 47664389566464, +STORE, 47664389566464, 47664389578751, +ERASE, 47664389566464, 47664389566464, +STORE, 47664389566464, 47664389570559, +STORE, 47664389570560, 47664389578751, +ERASE, 47664389570560, 47664389570560, +STORE, 47664389570560, 47664389578751, +STORE, 47664389578752, 47664389586943, +ERASE, 47664389382144, 47664389382144, +STORE, 47664389382144, 47664389398527, +STORE, 47664389398528, 47664389406719, +ERASE, 47664389570560, 47664389570560, +STORE, 47664389570560, 47664389574655, +STORE, 47664389574656, 47664389578751, +ERASE, 47664389533696, 47664389533696, +STORE, 47664389533696, 47664389537791, +STORE, 47664389537792, 47664389541887, +ERASE, 47664387362816, 47664387362816, +STORE, 47664387362816, 47664387559423, +STORE, 47664387559424, 47664387567615, +ERASE, 47664384524288, 47664384524288, +STORE, 47664384524288, 47664384528383, +STORE, 47664384528384, 47664384532479, +ERASE, 94071213555712, 94071213555712, +STORE, 94071213555712, 94071213563903, +STORE, 94071213563904, 94071213567999, +ERASE, 139968410804224, 139968410804224, +STORE, 139968410804224, 139968410808319, +STORE, 139968410808320, 139968410812415, +ERASE, 47664384352256, 47664384352256, +STORE, 94071244402688, 94071244537855, +STORE, 140737488347136, 140737488351231, +STORE, 140728271503360, 140737488351231, +ERASE, 140728271503360, 140728271503360, +STORE, 140728271503360, 140728271507455, +STORE, 94410361982976, 94410362155007, +ERASE, 94410361982976, 94410361982976, +STORE, 94410361982976, 94410361999359, +STORE, 94410361999360, 94410362155007, +ERASE, 94410361999360, 94410361999360, +STORE, 94410361999360, 94410362101759, +STORE, 94410362101760, 94410362142719, +STORE, 94410362142720, 94410362155007, +STORE, 140351953997824, 140351954169855, +ERASE, 140351953997824, 140351953997824, +STORE, 140351953997824, 140351954001919, +STORE, 140351954001920, 140351954169855, +ERASE, 140351954001920, 140351954001920, +STORE, 140351954001920, 140351954124799, +STORE, 140351954124800, 140351954157567, +STORE, 140351954157568, 140351954165759, +STORE, 140351954165760, 140351954169855, +STORE, 140728272429056, 140728272433151, +STORE, 140728272416768, 140728272429055, +STORE, 47280840998912, 47280841007103, +STORE, 47280841007104, 47280841015295, +STORE, 47280841015296, 47280841179135, +ERASE, 47280841015296, 47280841015296, +STORE, 47280841015296, 47280841027583, +STORE, 47280841027584, 47280841179135, +STORE, 47280841125888, 47280841179135, +STORE, 47280841027584, 47280841125887, +ERASE, 47280841027584, 47280841027584, +STORE, 47280841027584, 47280841125887, +STORE, 47280841170944, 47280841179135, +STORE, 47280841125888, 47280841170943, +ERASE, 47280841125888, 47280841125888, +STORE, 47280841125888, 47280841179135, +ERASE, 47280841125888, 47280841125888, +STORE, 47280841125888, 47280841170943, +STORE, 47280841170944, 47280841179135, +ERASE, 47280841170944, 47280841170944, +STORE, 47280841170944, 47280841179135, +STORE, 47280841179136, 47280844230655, +STORE, 47280841723904, 47280844230655, +STORE, 47280841179136, 47280841723903, +ERASE, 47280841723904, 47280841723904, +STORE, 47280841723904, 47280844009471, +STORE, 47280844009472, 47280844230655, +STORE, 47280843419648, 47280844009471, +STORE, 47280841723904, 47280843419647, +ERASE, 47280841723904, 47280841723904, +STORE, 47280841723904, 47280843419647, +STORE, 47280844005376, 47280844009471, +STORE, 47280843419648, 47280844005375, +ERASE, 47280843419648, 47280843419648, +STORE, 47280843419648, 47280844005375, +STORE, 47280844214272, 47280844230655, +STORE, 47280844009472, 47280844214271, +ERASE, 47280844009472, 47280844009472, +STORE, 47280844009472, 47280844214271, +ERASE, 47280844214272, 47280844214272, +STORE, 47280844214272, 47280844230655, +STORE, 47280844230656, 47280846069759, +STORE, 47280844369920, 47280846069759, +STORE, 47280844230656, 47280844369919, +ERASE, 47280844369920, 47280844369920, +STORE, 47280844369920, 47280846028799, +STORE, 47280846028800, 47280846069759, +STORE, 47280845713408, 47280846028799, +STORE, 47280844369920, 47280845713407, +ERASE, 47280844369920, 47280844369920, +STORE, 47280844369920, 47280845713407, +STORE, 47280846024704, 47280846028799, +STORE, 47280845713408, 47280846024703, +ERASE, 47280845713408, 47280845713408, +STORE, 47280845713408, 47280846024703, +STORE, 47280846053376, 47280846069759, +STORE, 47280846028800, 47280846053375, +ERASE, 47280846028800, 47280846028800, +STORE, 47280846028800, 47280846053375, +ERASE, 47280846053376, 47280846053376, +STORE, 47280846053376, 47280846069759, +STORE, 47280846069760, 47280846204927, +ERASE, 47280846069760, 47280846069760, +STORE, 47280846069760, 47280846094335, +STORE, 47280846094336, 47280846204927, +STORE, 47280846155776, 47280846204927, +STORE, 47280846094336, 47280846155775, +ERASE, 47280846094336, 47280846094336, +STORE, 47280846094336, 47280846155775, +STORE, 47280846180352, 47280846204927, +STORE, 47280846155776, 47280846180351, +ERASE, 47280846155776, 47280846155776, +STORE, 47280846155776, 47280846204927, +ERASE, 47280846155776, 47280846155776, +STORE, 47280846155776, 47280846180351, +STORE, 47280846180352, 47280846204927, +STORE, 47280846188544, 47280846204927, +STORE, 47280846180352, 47280846188543, +ERASE, 47280846180352, 47280846180352, +STORE, 47280846180352, 47280846188543, +ERASE, 47280846188544, 47280846188544, +STORE, 47280846188544, 47280846204927, +STORE, 47280846204928, 47280846225407, +ERASE, 47280846204928, 47280846204928, +STORE, 47280846204928, 47280846209023, +STORE, 47280846209024, 47280846225407, +STORE, 47280846213120, 47280846225407, +STORE, 47280846209024, 47280846213119, +ERASE, 47280846209024, 47280846209024, +STORE, 47280846209024, 47280846213119, +STORE, 47280846217216, 47280846225407, +STORE, 47280846213120, 47280846217215, +ERASE, 47280846213120, 47280846213120, +STORE, 47280846213120, 47280846225407, +ERASE, 47280846213120, 47280846213120, +STORE, 47280846213120, 47280846217215, +STORE, 47280846217216, 47280846225407, +ERASE, 47280846217216, 47280846217216, +STORE, 47280846217216, 47280846225407, +STORE, 47280846225408, 47280846233599, +ERASE, 47280846028800, 47280846028800, +STORE, 47280846028800, 47280846045183, +STORE, 47280846045184, 47280846053375, +ERASE, 47280846217216, 47280846217216, +STORE, 47280846217216, 47280846221311, +STORE, 47280846221312, 47280846225407, +ERASE, 47280846180352, 47280846180352, +STORE, 47280846180352, 47280846184447, +STORE, 47280846184448, 47280846188543, +ERASE, 47280844009472, 47280844009472, +STORE, 47280844009472, 47280844206079, +STORE, 47280844206080, 47280844214271, +ERASE, 47280841170944, 47280841170944, +STORE, 47280841170944, 47280841175039, +STORE, 47280841175040, 47280841179135, +ERASE, 94410362142720, 94410362142720, +STORE, 94410362142720, 94410362150911, +STORE, 94410362150912, 94410362155007, +ERASE, 140351954157568, 140351954157568, +STORE, 140351954157568, 140351954161663, +STORE, 140351954161664, 140351954165759, +ERASE, 47280840998912, 47280840998912, +STORE, 94410379456512, 94410379591679, +STORE, 140737488347136, 140737488351231, +STORE, 140732946362368, 140737488351231, +ERASE, 140732946362368, 140732946362368, +STORE, 140732946362368, 140732946366463, +STORE, 94352937934848, 94352938106879, +ERASE, 94352937934848, 94352937934848, +STORE, 94352937934848, 94352937951231, +STORE, 94352937951232, 94352938106879, +ERASE, 94352937951232, 94352937951232, +STORE, 94352937951232, 94352938053631, +STORE, 94352938053632, 94352938094591, +STORE, 94352938094592, 94352938106879, +STORE, 140595518742528, 140595518914559, +ERASE, 140595518742528, 140595518742528, +STORE, 140595518742528, 140595518746623, +STORE, 140595518746624, 140595518914559, +ERASE, 140595518746624, 140595518746624, +STORE, 140595518746624, 140595518869503, +STORE, 140595518869504, 140595518902271, +STORE, 140595518902272, 140595518910463, +STORE, 140595518910464, 140595518914559, +STORE, 140732947468288, 140732947472383, +STORE, 140732947456000, 140732947468287, +STORE, 47037276254208, 47037276262399, +STORE, 47037276262400, 47037276270591, +STORE, 47037276270592, 47037276434431, +ERASE, 47037276270592, 47037276270592, +STORE, 47037276270592, 47037276282879, +STORE, 47037276282880, 47037276434431, +STORE, 47037276381184, 47037276434431, +STORE, 47037276282880, 47037276381183, +ERASE, 47037276282880, 47037276282880, +STORE, 47037276282880, 47037276381183, +STORE, 47037276426240, 47037276434431, +STORE, 47037276381184, 47037276426239, +ERASE, 47037276381184, 47037276381184, +STORE, 47037276381184, 47037276434431, +ERASE, 47037276381184, 47037276381184, +STORE, 47037276381184, 47037276426239, +STORE, 47037276426240, 47037276434431, +ERASE, 47037276426240, 47037276426240, +STORE, 47037276426240, 47037276434431, +STORE, 47037276434432, 47037279485951, +STORE, 47037276979200, 47037279485951, +STORE, 47037276434432, 47037276979199, +ERASE, 47037276979200, 47037276979200, +STORE, 47037276979200, 47037279264767, +STORE, 47037279264768, 47037279485951, +STORE, 47037278674944, 47037279264767, +STORE, 47037276979200, 47037278674943, +ERASE, 47037276979200, 47037276979200, +STORE, 47037276979200, 47037278674943, +STORE, 47037279260672, 47037279264767, +STORE, 47037278674944, 47037279260671, +ERASE, 47037278674944, 47037278674944, +STORE, 47037278674944, 47037279260671, +STORE, 47037279469568, 47037279485951, +STORE, 47037279264768, 47037279469567, +ERASE, 47037279264768, 47037279264768, +STORE, 47037279264768, 47037279469567, +ERASE, 47037279469568, 47037279469568, +STORE, 47037279469568, 47037279485951, +STORE, 47037279485952, 47037281325055, +STORE, 47037279625216, 47037281325055, +STORE, 47037279485952, 47037279625215, +ERASE, 47037279625216, 47037279625216, +STORE, 47037279625216, 47037281284095, +STORE, 47037281284096, 47037281325055, +STORE, 47037280968704, 47037281284095, +STORE, 47037279625216, 47037280968703, +ERASE, 47037279625216, 47037279625216, +STORE, 47037279625216, 47037280968703, +STORE, 47037281280000, 47037281284095, +STORE, 47037280968704, 47037281279999, +ERASE, 47037280968704, 47037280968704, +STORE, 47037280968704, 47037281279999, +STORE, 47037281308672, 47037281325055, +STORE, 47037281284096, 47037281308671, +ERASE, 47037281284096, 47037281284096, +STORE, 47037281284096, 47037281308671, +ERASE, 47037281308672, 47037281308672, +STORE, 47037281308672, 47037281325055, +STORE, 47037281325056, 47037281460223, +ERASE, 47037281325056, 47037281325056, +STORE, 47037281325056, 47037281349631, +STORE, 47037281349632, 47037281460223, +STORE, 47037281411072, 47037281460223, +STORE, 47037281349632, 47037281411071, +ERASE, 47037281349632, 47037281349632, +STORE, 47037281349632, 47037281411071, +STORE, 47037281435648, 47037281460223, +STORE, 47037281411072, 47037281435647, +ERASE, 47037281411072, 47037281411072, +STORE, 47037281411072, 47037281460223, +ERASE, 47037281411072, 47037281411072, +STORE, 47037281411072, 47037281435647, +STORE, 47037281435648, 47037281460223, +STORE, 47037281443840, 47037281460223, +STORE, 47037281435648, 47037281443839, +ERASE, 47037281435648, 47037281435648, +STORE, 47037281435648, 47037281443839, +ERASE, 47037281443840, 47037281443840, +STORE, 47037281443840, 47037281460223, +STORE, 47037281460224, 47037281480703, +ERASE, 47037281460224, 47037281460224, +STORE, 47037281460224, 47037281464319, +STORE, 47037281464320, 47037281480703, +STORE, 47037281468416, 47037281480703, +STORE, 47037281464320, 47037281468415, +ERASE, 47037281464320, 47037281464320, +STORE, 47037281464320, 47037281468415, +STORE, 47037281472512, 47037281480703, +STORE, 47037281468416, 47037281472511, +ERASE, 47037281468416, 47037281468416, +STORE, 47037281468416, 47037281480703, +ERASE, 47037281468416, 47037281468416, +STORE, 47037281468416, 47037281472511, +STORE, 47037281472512, 47037281480703, +ERASE, 47037281472512, 47037281472512, +STORE, 47037281472512, 47037281480703, +STORE, 47037281480704, 47037281488895, +ERASE, 47037281284096, 47037281284096, +STORE, 47037281284096, 47037281300479, +STORE, 47037281300480, 47037281308671, +ERASE, 47037281472512, 47037281472512, +STORE, 47037281472512, 47037281476607, +STORE, 47037281476608, 47037281480703, +ERASE, 47037281435648, 47037281435648, +STORE, 47037281435648, 47037281439743, +STORE, 47037281439744, 47037281443839, +ERASE, 47037279264768, 47037279264768, +STORE, 47037279264768, 47037279461375, +STORE, 47037279461376, 47037279469567, +ERASE, 47037276426240, 47037276426240, +STORE, 47037276426240, 47037276430335, +STORE, 47037276430336, 47037276434431, +ERASE, 94352938094592, 94352938094592, +STORE, 94352938094592, 94352938102783, +STORE, 94352938102784, 94352938106879, +ERASE, 140595518902272, 140595518902272, +STORE, 140595518902272, 140595518906367, +STORE, 140595518906368, 140595518910463, +ERASE, 47037276254208, 47037276254208, +STORE, 94352938438656, 94352938573823, +STORE, 140737488347136, 140737488351231, +STORE, 140733506027520, 140737488351231, +ERASE, 140733506027520, 140733506027520, +STORE, 140733506027520, 140733506031615, +STORE, 94150123073536, 94150123245567, +ERASE, 94150123073536, 94150123073536, +STORE, 94150123073536, 94150123089919, +STORE, 94150123089920, 94150123245567, +ERASE, 94150123089920, 94150123089920, +STORE, 94150123089920, 94150123192319, +STORE, 94150123192320, 94150123233279, +STORE, 94150123233280, 94150123245567, +STORE, 140081290375168, 140081290547199, +ERASE, 140081290375168, 140081290375168, +STORE, 140081290375168, 140081290379263, +STORE, 140081290379264, 140081290547199, +ERASE, 140081290379264, 140081290379264, +STORE, 140081290379264, 140081290502143, +STORE, 140081290502144, 140081290534911, +STORE, 140081290534912, 140081290543103, +STORE, 140081290543104, 140081290547199, +STORE, 140733506707456, 140733506711551, +STORE, 140733506695168, 140733506707455, +STORE, 47551504621568, 47551504629759, +STORE, 47551504629760, 47551504637951, +STORE, 47551504637952, 47551504801791, +ERASE, 47551504637952, 47551504637952, +STORE, 47551504637952, 47551504650239, +STORE, 47551504650240, 47551504801791, +STORE, 47551504748544, 47551504801791, +STORE, 47551504650240, 47551504748543, +ERASE, 47551504650240, 47551504650240, +STORE, 47551504650240, 47551504748543, +STORE, 47551504793600, 47551504801791, +STORE, 47551504748544, 47551504793599, +ERASE, 47551504748544, 47551504748544, +STORE, 47551504748544, 47551504801791, +ERASE, 47551504748544, 47551504748544, +STORE, 47551504748544, 47551504793599, +STORE, 47551504793600, 47551504801791, +ERASE, 47551504793600, 47551504793600, +STORE, 47551504793600, 47551504801791, +STORE, 47551504801792, 47551507853311, +STORE, 47551505346560, 47551507853311, +STORE, 47551504801792, 47551505346559, +ERASE, 47551505346560, 47551505346560, +STORE, 47551505346560, 47551507632127, +STORE, 47551507632128, 47551507853311, +STORE, 47551507042304, 47551507632127, +STORE, 47551505346560, 47551507042303, +ERASE, 47551505346560, 47551505346560, +STORE, 47551505346560, 47551507042303, +STORE, 47551507628032, 47551507632127, +STORE, 47551507042304, 47551507628031, +ERASE, 47551507042304, 47551507042304, +STORE, 47551507042304, 47551507628031, +STORE, 47551507836928, 47551507853311, +STORE, 47551507632128, 47551507836927, +ERASE, 47551507632128, 47551507632128, +STORE, 47551507632128, 47551507836927, +ERASE, 47551507836928, 47551507836928, +STORE, 47551507836928, 47551507853311, +STORE, 47551507853312, 47551509692415, +STORE, 47551507992576, 47551509692415, +STORE, 47551507853312, 47551507992575, +ERASE, 47551507992576, 47551507992576, +STORE, 47551507992576, 47551509651455, +STORE, 47551509651456, 47551509692415, +STORE, 47551509336064, 47551509651455, +STORE, 47551507992576, 47551509336063, +ERASE, 47551507992576, 47551507992576, +STORE, 47551507992576, 47551509336063, +STORE, 47551509647360, 47551509651455, +STORE, 47551509336064, 47551509647359, +ERASE, 47551509336064, 47551509336064, +STORE, 47551509336064, 47551509647359, +STORE, 47551509676032, 47551509692415, +STORE, 47551509651456, 47551509676031, +ERASE, 47551509651456, 47551509651456, +STORE, 47551509651456, 47551509676031, +ERASE, 47551509676032, 47551509676032, +STORE, 47551509676032, 47551509692415, +STORE, 47551509692416, 47551509827583, +ERASE, 47551509692416, 47551509692416, +STORE, 47551509692416, 47551509716991, +STORE, 47551509716992, 47551509827583, +STORE, 47551509778432, 47551509827583, +STORE, 47551509716992, 47551509778431, +ERASE, 47551509716992, 47551509716992, +STORE, 47551509716992, 47551509778431, +STORE, 47551509803008, 47551509827583, +STORE, 47551509778432, 47551509803007, +ERASE, 47551509778432, 47551509778432, +STORE, 47551509778432, 47551509827583, +ERASE, 47551509778432, 47551509778432, +STORE, 47551509778432, 47551509803007, +STORE, 47551509803008, 47551509827583, +STORE, 47551509811200, 47551509827583, +STORE, 47551509803008, 47551509811199, +ERASE, 47551509803008, 47551509803008, +STORE, 47551509803008, 47551509811199, +ERASE, 47551509811200, 47551509811200, +STORE, 47551509811200, 47551509827583, +STORE, 47551509827584, 47551509848063, +ERASE, 47551509827584, 47551509827584, +STORE, 47551509827584, 47551509831679, +STORE, 47551509831680, 47551509848063, +STORE, 47551509835776, 47551509848063, +STORE, 47551509831680, 47551509835775, +ERASE, 47551509831680, 47551509831680, +STORE, 47551509831680, 47551509835775, +STORE, 47551509839872, 47551509848063, +STORE, 47551509835776, 47551509839871, +ERASE, 47551509835776, 47551509835776, +STORE, 47551509835776, 47551509848063, +ERASE, 47551509835776, 47551509835776, +STORE, 47551509835776, 47551509839871, +STORE, 47551509839872, 47551509848063, +ERASE, 47551509839872, 47551509839872, +STORE, 47551509839872, 47551509848063, +STORE, 47551509848064, 47551509856255, +ERASE, 47551509651456, 47551509651456, +STORE, 47551509651456, 47551509667839, +STORE, 47551509667840, 47551509676031, +ERASE, 47551509839872, 47551509839872, +STORE, 47551509839872, 47551509843967, +STORE, 47551509843968, 47551509848063, +ERASE, 47551509803008, 47551509803008, +STORE, 47551509803008, 47551509807103, +STORE, 47551509807104, 47551509811199, +ERASE, 47551507632128, 47551507632128, +STORE, 47551507632128, 47551507828735, +STORE, 47551507828736, 47551507836927, +ERASE, 47551504793600, 47551504793600, +STORE, 47551504793600, 47551504797695, +STORE, 47551504797696, 47551504801791, +ERASE, 94150123233280, 94150123233280, +STORE, 94150123233280, 94150123241471, +STORE, 94150123241472, 94150123245567, +ERASE, 140081290534912, 140081290534912, +STORE, 140081290534912, 140081290539007, +STORE, 140081290539008, 140081290543103, +ERASE, 47551504621568, 47551504621568, +STORE, 94150148112384, 94150148247551, +STORE, 140737488347136, 140737488351231, +STORE, 140734389334016, 140737488351231, +ERASE, 140734389334016, 140734389334016, +STORE, 140734389334016, 140734389338111, +STORE, 94844636606464, 94844636778495, +ERASE, 94844636606464, 94844636606464, +STORE, 94844636606464, 94844636622847, +STORE, 94844636622848, 94844636778495, +ERASE, 94844636622848, 94844636622848, +STORE, 94844636622848, 94844636725247, +STORE, 94844636725248, 94844636766207, +STORE, 94844636766208, 94844636778495, +STORE, 139922765217792, 139922765389823, +ERASE, 139922765217792, 139922765217792, +STORE, 139922765217792, 139922765221887, +STORE, 139922765221888, 139922765389823, +ERASE, 139922765221888, 139922765221888, +STORE, 139922765221888, 139922765344767, +STORE, 139922765344768, 139922765377535, +STORE, 139922765377536, 139922765385727, +STORE, 139922765385728, 139922765389823, +STORE, 140734389678080, 140734389682175, +STORE, 140734389665792, 140734389678079, +STORE, 47710029778944, 47710029787135, +STORE, 47710029787136, 47710029795327, +STORE, 47710029795328, 47710029959167, +ERASE, 47710029795328, 47710029795328, +STORE, 47710029795328, 47710029807615, +STORE, 47710029807616, 47710029959167, +STORE, 47710029905920, 47710029959167, +STORE, 47710029807616, 47710029905919, +ERASE, 47710029807616, 47710029807616, +STORE, 47710029807616, 47710029905919, +STORE, 47710029950976, 47710029959167, +STORE, 47710029905920, 47710029950975, +ERASE, 47710029905920, 47710029905920, +STORE, 47710029905920, 47710029959167, +ERASE, 47710029905920, 47710029905920, +STORE, 47710029905920, 47710029950975, +STORE, 47710029950976, 47710029959167, +ERASE, 47710029950976, 47710029950976, +STORE, 47710029950976, 47710029959167, +STORE, 47710029959168, 47710033010687, +STORE, 47710030503936, 47710033010687, +STORE, 47710029959168, 47710030503935, +ERASE, 47710030503936, 47710030503936, +STORE, 47710030503936, 47710032789503, +STORE, 47710032789504, 47710033010687, +STORE, 47710032199680, 47710032789503, +STORE, 47710030503936, 47710032199679, +ERASE, 47710030503936, 47710030503936, +STORE, 47710030503936, 47710032199679, +STORE, 47710032785408, 47710032789503, +STORE, 47710032199680, 47710032785407, +ERASE, 47710032199680, 47710032199680, +STORE, 47710032199680, 47710032785407, +STORE, 47710032994304, 47710033010687, +STORE, 47710032789504, 47710032994303, +ERASE, 47710032789504, 47710032789504, +STORE, 47710032789504, 47710032994303, +ERASE, 47710032994304, 47710032994304, +STORE, 47710032994304, 47710033010687, +STORE, 47710033010688, 47710034849791, +STORE, 47710033149952, 47710034849791, +STORE, 47710033010688, 47710033149951, +ERASE, 47710033149952, 47710033149952, +STORE, 47710033149952, 47710034808831, +STORE, 47710034808832, 47710034849791, +STORE, 47710034493440, 47710034808831, +STORE, 47710033149952, 47710034493439, +ERASE, 47710033149952, 47710033149952, +STORE, 47710033149952, 47710034493439, +STORE, 47710034804736, 47710034808831, +STORE, 47710034493440, 47710034804735, +ERASE, 47710034493440, 47710034493440, +STORE, 47710034493440, 47710034804735, +STORE, 47710034833408, 47710034849791, +STORE, 47710034808832, 47710034833407, +ERASE, 47710034808832, 47710034808832, +STORE, 47710034808832, 47710034833407, +ERASE, 47710034833408, 47710034833408, +STORE, 47710034833408, 47710034849791, +STORE, 47710034849792, 47710034984959, +ERASE, 47710034849792, 47710034849792, +STORE, 47710034849792, 47710034874367, +STORE, 47710034874368, 47710034984959, +STORE, 47710034935808, 47710034984959, +STORE, 47710034874368, 47710034935807, +ERASE, 47710034874368, 47710034874368, +STORE, 47710034874368, 47710034935807, +STORE, 47710034960384, 47710034984959, +STORE, 47710034935808, 47710034960383, +ERASE, 47710034935808, 47710034935808, +STORE, 47710034935808, 47710034984959, +ERASE, 47710034935808, 47710034935808, +STORE, 47710034935808, 47710034960383, +STORE, 47710034960384, 47710034984959, +STORE, 47710034968576, 47710034984959, +STORE, 47710034960384, 47710034968575, +ERASE, 47710034960384, 47710034960384, +STORE, 47710034960384, 47710034968575, +ERASE, 47710034968576, 47710034968576, +STORE, 47710034968576, 47710034984959, +STORE, 47710034984960, 47710035005439, +ERASE, 47710034984960, 47710034984960, +STORE, 47710034984960, 47710034989055, +STORE, 47710034989056, 47710035005439, +STORE, 47710034993152, 47710035005439, +STORE, 47710034989056, 47710034993151, +ERASE, 47710034989056, 47710034989056, +STORE, 47710034989056, 47710034993151, +STORE, 47710034997248, 47710035005439, +STORE, 47710034993152, 47710034997247, +ERASE, 47710034993152, 47710034993152, +STORE, 47710034993152, 47710035005439, +ERASE, 47710034993152, 47710034993152, +STORE, 47710034993152, 47710034997247, +STORE, 47710034997248, 47710035005439, +ERASE, 47710034997248, 47710034997248, +STORE, 47710034997248, 47710035005439, +STORE, 47710035005440, 47710035013631, +ERASE, 47710034808832, 47710034808832, +STORE, 47710034808832, 47710034825215, +STORE, 47710034825216, 47710034833407, +ERASE, 47710034997248, 47710034997248, +STORE, 47710034997248, 47710035001343, +STORE, 47710035001344, 47710035005439, +ERASE, 47710034960384, 47710034960384, +STORE, 47710034960384, 47710034964479, +STORE, 47710034964480, 47710034968575, +ERASE, 47710032789504, 47710032789504, +STORE, 47710032789504, 47710032986111, +STORE, 47710032986112, 47710032994303, +ERASE, 47710029950976, 47710029950976, +STORE, 47710029950976, 47710029955071, +STORE, 47710029955072, 47710029959167, +ERASE, 94844636766208, 94844636766208, +STORE, 94844636766208, 94844636774399, +STORE, 94844636774400, 94844636778495, +ERASE, 139922765377536, 139922765377536, +STORE, 139922765377536, 139922765381631, +STORE, 139922765381632, 139922765385727, +ERASE, 47710029778944, 47710029778944, +STORE, 94844641775616, 94844641910783, +STORE, 140737488347136, 140737488351231, +STORE, 140732213886976, 140737488351231, +ERASE, 140732213886976, 140732213886976, +STORE, 140732213886976, 140732213891071, +STORE, 94240508887040, 94240509059071, +ERASE, 94240508887040, 94240508887040, +STORE, 94240508887040, 94240508903423, +STORE, 94240508903424, 94240509059071, +ERASE, 94240508903424, 94240508903424, +STORE, 94240508903424, 94240509005823, +STORE, 94240509005824, 94240509046783, +STORE, 94240509046784, 94240509059071, +STORE, 140275106516992, 140275106689023, +ERASE, 140275106516992, 140275106516992, +STORE, 140275106516992, 140275106521087, +STORE, 140275106521088, 140275106689023, +ERASE, 140275106521088, 140275106521088, +STORE, 140275106521088, 140275106643967, +STORE, 140275106643968, 140275106676735, +STORE, 140275106676736, 140275106684927, +STORE, 140275106684928, 140275106689023, +STORE, 140732213977088, 140732213981183, +STORE, 140732213964800, 140732213977087, +STORE, 47357688479744, 47357688487935, +STORE, 47357688487936, 47357688496127, +STORE, 47357688496128, 47357688659967, +ERASE, 47357688496128, 47357688496128, +STORE, 47357688496128, 47357688508415, +STORE, 47357688508416, 47357688659967, +STORE, 47357688606720, 47357688659967, +STORE, 47357688508416, 47357688606719, +ERASE, 47357688508416, 47357688508416, +STORE, 47357688508416, 47357688606719, +STORE, 47357688651776, 47357688659967, +STORE, 47357688606720, 47357688651775, +ERASE, 47357688606720, 47357688606720, +STORE, 47357688606720, 47357688659967, +ERASE, 47357688606720, 47357688606720, +STORE, 47357688606720, 47357688651775, +STORE, 47357688651776, 47357688659967, +ERASE, 47357688651776, 47357688651776, +STORE, 47357688651776, 47357688659967, +STORE, 47357688659968, 47357691711487, +STORE, 47357689204736, 47357691711487, +STORE, 47357688659968, 47357689204735, +ERASE, 47357689204736, 47357689204736, +STORE, 47357689204736, 47357691490303, +STORE, 47357691490304, 47357691711487, +STORE, 47357690900480, 47357691490303, +STORE, 47357689204736, 47357690900479, +ERASE, 47357689204736, 47357689204736, +STORE, 47357689204736, 47357690900479, +STORE, 47357691486208, 47357691490303, +STORE, 47357690900480, 47357691486207, +ERASE, 47357690900480, 47357690900480, +STORE, 47357690900480, 47357691486207, +STORE, 47357691695104, 47357691711487, +STORE, 47357691490304, 47357691695103, +ERASE, 47357691490304, 47357691490304, +STORE, 47357691490304, 47357691695103, +ERASE, 47357691695104, 47357691695104, +STORE, 47357691695104, 47357691711487, +STORE, 47357691711488, 47357693550591, +STORE, 47357691850752, 47357693550591, +STORE, 47357691711488, 47357691850751, +ERASE, 47357691850752, 47357691850752, +STORE, 47357691850752, 47357693509631, +STORE, 47357693509632, 47357693550591, +STORE, 47357693194240, 47357693509631, +STORE, 47357691850752, 47357693194239, +ERASE, 47357691850752, 47357691850752, +STORE, 47357691850752, 47357693194239, +STORE, 47357693505536, 47357693509631, +STORE, 47357693194240, 47357693505535, +ERASE, 47357693194240, 47357693194240, +STORE, 47357693194240, 47357693505535, +STORE, 47357693534208, 47357693550591, +STORE, 47357693509632, 47357693534207, +ERASE, 47357693509632, 47357693509632, +STORE, 47357693509632, 47357693534207, +ERASE, 47357693534208, 47357693534208, +STORE, 47357693534208, 47357693550591, +STORE, 47357693550592, 47357693685759, +ERASE, 47357693550592, 47357693550592, +STORE, 47357693550592, 47357693575167, +STORE, 47357693575168, 47357693685759, +STORE, 47357693636608, 47357693685759, +STORE, 47357693575168, 47357693636607, +ERASE, 47357693575168, 47357693575168, +STORE, 47357693575168, 47357693636607, +STORE, 47357693661184, 47357693685759, +STORE, 47357693636608, 47357693661183, +ERASE, 47357693636608, 47357693636608, +STORE, 47357693636608, 47357693685759, +ERASE, 47357693636608, 47357693636608, +STORE, 47357693636608, 47357693661183, +STORE, 47357693661184, 47357693685759, +STORE, 47357693669376, 47357693685759, +STORE, 47357693661184, 47357693669375, +ERASE, 47357693661184, 47357693661184, +STORE, 47357693661184, 47357693669375, +ERASE, 47357693669376, 47357693669376, +STORE, 47357693669376, 47357693685759, +STORE, 47357693685760, 47357693706239, +ERASE, 47357693685760, 47357693685760, +STORE, 47357693685760, 47357693689855, +STORE, 47357693689856, 47357693706239, +STORE, 47357693693952, 47357693706239, +STORE, 47357693689856, 47357693693951, +ERASE, 47357693689856, 47357693689856, +STORE, 47357693689856, 47357693693951, +STORE, 47357693698048, 47357693706239, +STORE, 47357693693952, 47357693698047, +ERASE, 47357693693952, 47357693693952, +STORE, 47357693693952, 47357693706239, +ERASE, 47357693693952, 47357693693952, +STORE, 47357693693952, 47357693698047, +STORE, 47357693698048, 47357693706239, +ERASE, 47357693698048, 47357693698048, +STORE, 47357693698048, 47357693706239, +STORE, 47357693706240, 47357693714431, +ERASE, 47357693509632, 47357693509632, +STORE, 47357693509632, 47357693526015, +STORE, 47357693526016, 47357693534207, +ERASE, 47357693698048, 47357693698048, +STORE, 47357693698048, 47357693702143, +STORE, 47357693702144, 47357693706239, +ERASE, 47357693661184, 47357693661184, +STORE, 47357693661184, 47357693665279, +STORE, 47357693665280, 47357693669375, +ERASE, 47357691490304, 47357691490304, +STORE, 47357691490304, 47357691686911, +STORE, 47357691686912, 47357691695103, +ERASE, 47357688651776, 47357688651776, +STORE, 47357688651776, 47357688655871, +STORE, 47357688655872, 47357688659967, +ERASE, 94240509046784, 94240509046784, +STORE, 94240509046784, 94240509054975, +STORE, 94240509054976, 94240509059071, +ERASE, 140275106676736, 140275106676736, +STORE, 140275106676736, 140275106680831, +STORE, 140275106680832, 140275106684927, +ERASE, 47357688479744, 47357688479744, +STORE, 94240518361088, 94240518496255, +STORE, 140737488347136, 140737488351231, +STORE, 140732688277504, 140737488351231, +ERASE, 140732688277504, 140732688277504, +STORE, 140732688277504, 140732688281599, +STORE, 94629171351552, 94629172064255, +ERASE, 94629171351552, 94629171351552, +STORE, 94629171351552, 94629171400703, +STORE, 94629171400704, 94629172064255, +ERASE, 94629171400704, 94629171400704, +STORE, 94629171400704, 94629171945471, +STORE, 94629171945472, 94629172043775, +STORE, 94629172043776, 94629172064255, +STORE, 139770707644416, 139770707816447, +ERASE, 139770707644416, 139770707644416, +STORE, 139770707644416, 139770707648511, +STORE, 139770707648512, 139770707816447, +ERASE, 139770707648512, 139770707648512, +STORE, 139770707648512, 139770707771391, +STORE, 139770707771392, 139770707804159, +STORE, 139770707804160, 139770707812351, +STORE, 139770707812352, 139770707816447, +STORE, 140732689121280, 140732689125375, +STORE, 140732689108992, 140732689121279, +STORE, 47862087352320, 47862087360511, +STORE, 47862087360512, 47862087368703, +STORE, 47862087368704, 47862087475199, +STORE, 47862087385088, 47862087475199, +STORE, 47862087368704, 47862087385087, +ERASE, 47862087385088, 47862087385088, +STORE, 47862087385088, 47862087458815, +STORE, 47862087458816, 47862087475199, +STORE, 47862087438336, 47862087458815, +STORE, 47862087385088, 47862087438335, +ERASE, 47862087385088, 47862087385088, +STORE, 47862087385088, 47862087438335, +STORE, 47862087454720, 47862087458815, +STORE, 47862087438336, 47862087454719, +ERASE, 47862087438336, 47862087438336, +STORE, 47862087438336, 47862087454719, +STORE, 47862087467008, 47862087475199, +STORE, 47862087458816, 47862087467007, +ERASE, 47862087458816, 47862087458816, +STORE, 47862087458816, 47862087467007, +ERASE, 47862087467008, 47862087467008, +STORE, 47862087467008, 47862087475199, +STORE, 47862087475200, 47862089314303, +STORE, 47862087614464, 47862089314303, +STORE, 47862087475200, 47862087614463, +ERASE, 47862087614464, 47862087614464, +STORE, 47862087614464, 47862089273343, +STORE, 47862089273344, 47862089314303, +STORE, 47862088957952, 47862089273343, +STORE, 47862087614464, 47862088957951, +ERASE, 47862087614464, 47862087614464, +STORE, 47862087614464, 47862088957951, +STORE, 47862089269248, 47862089273343, +STORE, 47862088957952, 47862089269247, +ERASE, 47862088957952, 47862088957952, +STORE, 47862088957952, 47862089269247, +STORE, 47862089297920, 47862089314303, +STORE, 47862089273344, 47862089297919, +ERASE, 47862089273344, 47862089273344, +STORE, 47862089273344, 47862089297919, +ERASE, 47862089297920, 47862089297920, +STORE, 47862089297920, 47862089314303, +STORE, 47862089297920, 47862089326591, +ERASE, 47862089273344, 47862089273344, +STORE, 47862089273344, 47862089289727, +STORE, 47862089289728, 47862089297919, +ERASE, 47862087458816, 47862087458816, +STORE, 47862087458816, 47862087462911, +STORE, 47862087462912, 47862087467007, +ERASE, 94629172043776, 94629172043776, +STORE, 94629172043776, 94629172060159, +STORE, 94629172060160, 94629172064255, +ERASE, 139770707804160, 139770707804160, +STORE, 139770707804160, 139770707808255, +STORE, 139770707808256, 139770707812351, +ERASE, 47862087352320, 47862087352320, +STORE, 94629197533184, 94629197668351, +STORE, 140737488347136, 140737488351231, +STORE, 140727540711424, 140737488351231, +ERASE, 140727540711424, 140727540711424, +STORE, 140727540711424, 140727540715519, +STORE, 94299865313280, 94299866025983, +ERASE, 94299865313280, 94299865313280, +STORE, 94299865313280, 94299865362431, +STORE, 94299865362432, 94299866025983, +ERASE, 94299865362432, 94299865362432, +STORE, 94299865362432, 94299865907199, +STORE, 94299865907200, 94299866005503, +STORE, 94299866005504, 94299866025983, +STORE, 140680268763136, 140680268935167, +ERASE, 140680268763136, 140680268763136, +STORE, 140680268763136, 140680268767231, +STORE, 140680268767232, 140680268935167, +ERASE, 140680268767232, 140680268767232, +STORE, 140680268767232, 140680268890111, +STORE, 140680268890112, 140680268922879, +STORE, 140680268922880, 140680268931071, +STORE, 140680268931072, 140680268935167, +STORE, 140727541424128, 140727541428223, +STORE, 140727541411840, 140727541424127, +STORE, 46952526233600, 46952526241791, +STORE, 46952526241792, 46952526249983, +STORE, 46952526249984, 46952526356479, +STORE, 46952526266368, 46952526356479, +STORE, 46952526249984, 46952526266367, +ERASE, 46952526266368, 46952526266368, +STORE, 46952526266368, 46952526340095, +STORE, 46952526340096, 46952526356479, +STORE, 46952526319616, 46952526340095, +STORE, 46952526266368, 46952526319615, +ERASE, 46952526266368, 46952526266368, +STORE, 46952526266368, 46952526319615, +STORE, 46952526336000, 46952526340095, +STORE, 46952526319616, 46952526335999, +ERASE, 46952526319616, 46952526319616, +STORE, 46952526319616, 46952526335999, +STORE, 46952526348288, 46952526356479, +STORE, 46952526340096, 46952526348287, +ERASE, 46952526340096, 46952526340096, +STORE, 46952526340096, 46952526348287, +ERASE, 46952526348288, 46952526348288, +STORE, 46952526348288, 46952526356479, +STORE, 46952526356480, 46952528195583, +STORE, 46952526495744, 46952528195583, +STORE, 46952526356480, 46952526495743, +ERASE, 46952526495744, 46952526495744, +STORE, 46952526495744, 46952528154623, +STORE, 46952528154624, 46952528195583, +STORE, 46952527839232, 46952528154623, +STORE, 46952526495744, 46952527839231, +ERASE, 46952526495744, 46952526495744, +STORE, 46952526495744, 46952527839231, +STORE, 46952528150528, 46952528154623, +STORE, 46952527839232, 46952528150527, +ERASE, 46952527839232, 46952527839232, +STORE, 46952527839232, 46952528150527, +STORE, 46952528179200, 46952528195583, +STORE, 46952528154624, 46952528179199, +ERASE, 46952528154624, 46952528154624, +STORE, 46952528154624, 46952528179199, +ERASE, 46952528179200, 46952528179200, +STORE, 46952528179200, 46952528195583, +STORE, 46952528179200, 46952528207871, +ERASE, 46952528154624, 46952528154624, +STORE, 46952528154624, 46952528171007, +STORE, 46952528171008, 46952528179199, +ERASE, 46952526340096, 46952526340096, +STORE, 46952526340096, 46952526344191, +STORE, 46952526344192, 46952526348287, +ERASE, 94299866005504, 94299866005504, +STORE, 94299866005504, 94299866021887, +STORE, 94299866021888, 94299866025983, +ERASE, 140680268922880, 140680268922880, +STORE, 140680268922880, 140680268926975, +STORE, 140680268926976, 140680268931071, +ERASE, 46952526233600, 46952526233600, +STORE, 140737488347136, 140737488351231, +STORE, 140722874793984, 140737488351231, +ERASE, 140722874793984, 140722874793984, +STORE, 140722874793984, 140722874798079, +STORE, 94448916213760, 94448916926463, +ERASE, 94448916213760, 94448916213760, +STORE, 94448916213760, 94448916262911, +STORE, 94448916262912, 94448916926463, +ERASE, 94448916262912, 94448916262912, +STORE, 94448916262912, 94448916807679, +STORE, 94448916807680, 94448916905983, +STORE, 94448916905984, 94448916926463, +STORE, 140389117046784, 140389117218815, +ERASE, 140389117046784, 140389117046784, +STORE, 140389117046784, 140389117050879, +STORE, 140389117050880, 140389117218815, +ERASE, 140389117050880, 140389117050880, +STORE, 140389117050880, 140389117173759, +STORE, 140389117173760, 140389117206527, +STORE, 140389117206528, 140389117214719, +STORE, 140389117214720, 140389117218815, +STORE, 140722875297792, 140722875301887, +STORE, 140722875285504, 140722875297791, +STORE, 47243677949952, 47243677958143, +STORE, 47243677958144, 47243677966335, +STORE, 47243677966336, 47243678072831, +STORE, 47243677982720, 47243678072831, +STORE, 47243677966336, 47243677982719, +ERASE, 47243677982720, 47243677982720, +STORE, 47243677982720, 47243678056447, +STORE, 47243678056448, 47243678072831, +STORE, 47243678035968, 47243678056447, +STORE, 47243677982720, 47243678035967, +ERASE, 47243677982720, 47243677982720, +STORE, 47243677982720, 47243678035967, +STORE, 47243678052352, 47243678056447, +STORE, 47243678035968, 47243678052351, +ERASE, 47243678035968, 47243678035968, +STORE, 47243678035968, 47243678052351, +STORE, 47243678064640, 47243678072831, +STORE, 47243678056448, 47243678064639, +ERASE, 47243678056448, 47243678056448, +STORE, 47243678056448, 47243678064639, +ERASE, 47243678064640, 47243678064640, +STORE, 47243678064640, 47243678072831, +STORE, 47243678072832, 47243679911935, +STORE, 47243678212096, 47243679911935, +STORE, 47243678072832, 47243678212095, +ERASE, 47243678212096, 47243678212096, +STORE, 47243678212096, 47243679870975, +STORE, 47243679870976, 47243679911935, +STORE, 47243679555584, 47243679870975, +STORE, 47243678212096, 47243679555583, +ERASE, 47243678212096, 47243678212096, +STORE, 47243678212096, 47243679555583, +STORE, 47243679866880, 47243679870975, +STORE, 47243679555584, 47243679866879, +ERASE, 47243679555584, 47243679555584, +STORE, 47243679555584, 47243679866879, +STORE, 47243679895552, 47243679911935, +STORE, 47243679870976, 47243679895551, +ERASE, 47243679870976, 47243679870976, +STORE, 47243679870976, 47243679895551, +ERASE, 47243679895552, 47243679895552, +STORE, 47243679895552, 47243679911935, +STORE, 47243679895552, 47243679924223, +ERASE, 47243679870976, 47243679870976, +STORE, 47243679870976, 47243679887359, +STORE, 47243679887360, 47243679895551, +ERASE, 47243678056448, 47243678056448, +STORE, 47243678056448, 47243678060543, +STORE, 47243678060544, 47243678064639, +ERASE, 94448916905984, 94448916905984, +STORE, 94448916905984, 94448916922367, +STORE, 94448916922368, 94448916926463, +ERASE, 140389117206528, 140389117206528, +STORE, 140389117206528, 140389117210623, +STORE, 140389117210624, 140389117214719, +ERASE, 47243677949952, 47243677949952, +STORE, 140737488347136, 140737488351231, +STORE, 140733068505088, 140737488351231, +ERASE, 140733068505088, 140733068505088, +STORE, 140733068505088, 140733068509183, +STORE, 94207145750528, 94207146463231, +ERASE, 94207145750528, 94207145750528, +STORE, 94207145750528, 94207145799679, +STORE, 94207145799680, 94207146463231, +ERASE, 94207145799680, 94207145799680, +STORE, 94207145799680, 94207146344447, +STORE, 94207146344448, 94207146442751, +STORE, 94207146442752, 94207146463231, +STORE, 140684504911872, 140684505083903, +ERASE, 140684504911872, 140684504911872, +STORE, 140684504911872, 140684504915967, +STORE, 140684504915968, 140684505083903, +ERASE, 140684504915968, 140684504915968, +STORE, 140684504915968, 140684505038847, +STORE, 140684505038848, 140684505071615, +STORE, 140684505071616, 140684505079807, +STORE, 140684505079808, 140684505083903, +STORE, 140733068607488, 140733068611583, +STORE, 140733068595200, 140733068607487, +STORE, 46948290084864, 46948290093055, +STORE, 46948290093056, 46948290101247, +STORE, 46948290101248, 46948290207743, +STORE, 46948290117632, 46948290207743, +STORE, 46948290101248, 46948290117631, +ERASE, 46948290117632, 46948290117632, +STORE, 46948290117632, 46948290191359, +STORE, 46948290191360, 46948290207743, +STORE, 46948290170880, 46948290191359, +STORE, 46948290117632, 46948290170879, +ERASE, 46948290117632, 46948290117632, +STORE, 46948290117632, 46948290170879, +STORE, 46948290187264, 46948290191359, +STORE, 46948290170880, 46948290187263, +ERASE, 46948290170880, 46948290170880, +STORE, 46948290170880, 46948290187263, +STORE, 46948290199552, 46948290207743, +STORE, 46948290191360, 46948290199551, +ERASE, 46948290191360, 46948290191360, +STORE, 46948290191360, 46948290199551, +ERASE, 46948290199552, 46948290199552, +STORE, 46948290199552, 46948290207743, +STORE, 46948290207744, 46948292046847, +STORE, 46948290347008, 46948292046847, +STORE, 46948290207744, 46948290347007, +ERASE, 46948290347008, 46948290347008, +STORE, 46948290347008, 46948292005887, +STORE, 46948292005888, 46948292046847, +STORE, 46948291690496, 46948292005887, +STORE, 46948290347008, 46948291690495, +ERASE, 46948290347008, 46948290347008, +STORE, 46948290347008, 46948291690495, +STORE, 46948292001792, 46948292005887, +STORE, 46948291690496, 46948292001791, +ERASE, 46948291690496, 46948291690496, +STORE, 46948291690496, 46948292001791, +STORE, 46948292030464, 46948292046847, +STORE, 46948292005888, 46948292030463, +ERASE, 46948292005888, 46948292005888, +STORE, 46948292005888, 46948292030463, +ERASE, 46948292030464, 46948292030464, +STORE, 46948292030464, 46948292046847, +STORE, 46948292030464, 46948292059135, +ERASE, 46948292005888, 46948292005888, +STORE, 46948292005888, 46948292022271, +STORE, 46948292022272, 46948292030463, +ERASE, 46948290191360, 46948290191360, +STORE, 46948290191360, 46948290195455, +STORE, 46948290195456, 46948290199551, +ERASE, 94207146442752, 94207146442752, +STORE, 94207146442752, 94207146459135, +STORE, 94207146459136, 94207146463231, +ERASE, 140684505071616, 140684505071616, +STORE, 140684505071616, 140684505075711, +STORE, 140684505075712, 140684505079807, +ERASE, 46948290084864, 46948290084864, +STORE, 140737488347136, 140737488351231, +STORE, 140726367158272, 140737488351231, +ERASE, 140726367158272, 140726367158272, +STORE, 140726367158272, 140726367162367, +STORE, 94436124106752, 94436124819455, +ERASE, 94436124106752, 94436124106752, +STORE, 94436124106752, 94436124155903, +STORE, 94436124155904, 94436124819455, +ERASE, 94436124155904, 94436124155904, +STORE, 94436124155904, 94436124700671, +STORE, 94436124700672, 94436124798975, +STORE, 94436124798976, 94436124819455, +STORE, 140049025044480, 140049025216511, +ERASE, 140049025044480, 140049025044480, +STORE, 140049025044480, 140049025048575, +STORE, 140049025048576, 140049025216511, +ERASE, 140049025048576, 140049025048576, +STORE, 140049025048576, 140049025171455, +STORE, 140049025171456, 140049025204223, +STORE, 140049025204224, 140049025212415, +STORE, 140049025212416, 140049025216511, +STORE, 140726367256576, 140726367260671, +STORE, 140726367244288, 140726367256575, +STORE, 47583769952256, 47583769960447, +STORE, 47583769960448, 47583769968639, +STORE, 47583769968640, 47583770075135, +STORE, 47583769985024, 47583770075135, +STORE, 47583769968640, 47583769985023, +ERASE, 47583769985024, 47583769985024, +STORE, 47583769985024, 47583770058751, +STORE, 47583770058752, 47583770075135, +STORE, 47583770038272, 47583770058751, +STORE, 47583769985024, 47583770038271, +ERASE, 47583769985024, 47583769985024, +STORE, 47583769985024, 47583770038271, +STORE, 47583770054656, 47583770058751, +STORE, 47583770038272, 47583770054655, +ERASE, 47583770038272, 47583770038272, +STORE, 47583770038272, 47583770054655, +STORE, 47583770066944, 47583770075135, +STORE, 47583770058752, 47583770066943, +ERASE, 47583770058752, 47583770058752, +STORE, 47583770058752, 47583770066943, +ERASE, 47583770066944, 47583770066944, +STORE, 47583770066944, 47583770075135, +STORE, 47583770075136, 47583771914239, +STORE, 47583770214400, 47583771914239, +STORE, 47583770075136, 47583770214399, +ERASE, 47583770214400, 47583770214400, +STORE, 47583770214400, 47583771873279, +STORE, 47583771873280, 47583771914239, +STORE, 47583771557888, 47583771873279, +STORE, 47583770214400, 47583771557887, +ERASE, 47583770214400, 47583770214400, +STORE, 47583770214400, 47583771557887, +STORE, 47583771869184, 47583771873279, +STORE, 47583771557888, 47583771869183, +ERASE, 47583771557888, 47583771557888, +STORE, 47583771557888, 47583771869183, +STORE, 47583771897856, 47583771914239, +STORE, 47583771873280, 47583771897855, +ERASE, 47583771873280, 47583771873280, +STORE, 47583771873280, 47583771897855, +ERASE, 47583771897856, 47583771897856, +STORE, 47583771897856, 47583771914239, +STORE, 47583771897856, 47583771926527, +ERASE, 47583771873280, 47583771873280, +STORE, 47583771873280, 47583771889663, +STORE, 47583771889664, 47583771897855, +ERASE, 47583770058752, 47583770058752, +STORE, 47583770058752, 47583770062847, +STORE, 47583770062848, 47583770066943, +ERASE, 94436124798976, 94436124798976, +STORE, 94436124798976, 94436124815359, +STORE, 94436124815360, 94436124819455, +ERASE, 140049025204224, 140049025204224, +STORE, 140049025204224, 140049025208319, +STORE, 140049025208320, 140049025212415, +ERASE, 47583769952256, 47583769952256, +STORE, 140737488347136, 140737488351231, +STORE, 140727116099584, 140737488351231, +ERASE, 140727116099584, 140727116099584, +STORE, 140727116099584, 140727116103679, +STORE, 94166319734784, 94166320447487, +ERASE, 94166319734784, 94166319734784, +STORE, 94166319734784, 94166319783935, +STORE, 94166319783936, 94166320447487, +ERASE, 94166319783936, 94166319783936, +STORE, 94166319783936, 94166320328703, +STORE, 94166320328704, 94166320427007, +STORE, 94166320427008, 94166320447487, +STORE, 139976559542272, 139976559714303, +ERASE, 139976559542272, 139976559542272, +STORE, 139976559542272, 139976559546367, +STORE, 139976559546368, 139976559714303, +ERASE, 139976559546368, 139976559546368, +STORE, 139976559546368, 139976559669247, +STORE, 139976559669248, 139976559702015, +STORE, 139976559702016, 139976559710207, +STORE, 139976559710208, 139976559714303, +STORE, 140727116222464, 140727116226559, +STORE, 140727116210176, 140727116222463, +STORE, 47656235454464, 47656235462655, +STORE, 47656235462656, 47656235470847, +STORE, 47656235470848, 47656235577343, +STORE, 47656235487232, 47656235577343, +STORE, 47656235470848, 47656235487231, +ERASE, 47656235487232, 47656235487232, +STORE, 47656235487232, 47656235560959, +STORE, 47656235560960, 47656235577343, +STORE, 47656235540480, 47656235560959, +STORE, 47656235487232, 47656235540479, +ERASE, 47656235487232, 47656235487232, +STORE, 47656235487232, 47656235540479, +STORE, 47656235556864, 47656235560959, +STORE, 47656235540480, 47656235556863, +ERASE, 47656235540480, 47656235540480, +STORE, 47656235540480, 47656235556863, +STORE, 47656235569152, 47656235577343, +STORE, 47656235560960, 47656235569151, +ERASE, 47656235560960, 47656235560960, +STORE, 47656235560960, 47656235569151, +ERASE, 47656235569152, 47656235569152, +STORE, 47656235569152, 47656235577343, +STORE, 47656235577344, 47656237416447, +STORE, 47656235716608, 47656237416447, +STORE, 47656235577344, 47656235716607, +ERASE, 47656235716608, 47656235716608, +STORE, 47656235716608, 47656237375487, +STORE, 47656237375488, 47656237416447, +STORE, 47656237060096, 47656237375487, +STORE, 47656235716608, 47656237060095, +ERASE, 47656235716608, 47656235716608, +STORE, 47656235716608, 47656237060095, +STORE, 47656237371392, 47656237375487, +STORE, 47656237060096, 47656237371391, +ERASE, 47656237060096, 47656237060096, +STORE, 47656237060096, 47656237371391, +STORE, 47656237400064, 47656237416447, +STORE, 47656237375488, 47656237400063, +ERASE, 47656237375488, 47656237375488, +STORE, 47656237375488, 47656237400063, +ERASE, 47656237400064, 47656237400064, +STORE, 47656237400064, 47656237416447, +STORE, 47656237400064, 47656237428735, +ERASE, 47656237375488, 47656237375488, +STORE, 47656237375488, 47656237391871, +STORE, 47656237391872, 47656237400063, +ERASE, 47656235560960, 47656235560960, +STORE, 47656235560960, 47656235565055, +STORE, 47656235565056, 47656235569151, +ERASE, 94166320427008, 94166320427008, +STORE, 94166320427008, 94166320443391, +STORE, 94166320443392, 94166320447487, +ERASE, 139976559702016, 139976559702016, +STORE, 139976559702016, 139976559706111, +STORE, 139976559706112, 139976559710207, +ERASE, 47656235454464, 47656235454464, +STORE, 94166332153856, 94166332289023, +STORE, 140737488347136, 140737488351231, +STORE, 140726412816384, 140737488351231, +ERASE, 140726412816384, 140726412816384, +STORE, 140726412816384, 140726412820479, +STORE, 94094884507648, 94094885220351, +ERASE, 94094884507648, 94094884507648, +STORE, 94094884507648, 94094884556799, +STORE, 94094884556800, 94094885220351, +ERASE, 94094884556800, 94094884556800, +STORE, 94094884556800, 94094885101567, +STORE, 94094885101568, 94094885199871, +STORE, 94094885199872, 94094885220351, +STORE, 139773773938688, 139773774110719, +ERASE, 139773773938688, 139773773938688, +STORE, 139773773938688, 139773773942783, +STORE, 139773773942784, 139773774110719, +ERASE, 139773773942784, 139773773942784, +STORE, 139773773942784, 139773774065663, +STORE, 139773774065664, 139773774098431, +STORE, 139773774098432, 139773774106623, +STORE, 139773774106624, 139773774110719, +STORE, 140726412963840, 140726412967935, +STORE, 140726412951552, 140726412963839, +STORE, 47859021058048, 47859021066239, +STORE, 47859021066240, 47859021074431, +STORE, 47859021074432, 47859021180927, +STORE, 47859021090816, 47859021180927, +STORE, 47859021074432, 47859021090815, +ERASE, 47859021090816, 47859021090816, +STORE, 47859021090816, 47859021164543, +STORE, 47859021164544, 47859021180927, +STORE, 47859021144064, 47859021164543, +STORE, 47859021090816, 47859021144063, +ERASE, 47859021090816, 47859021090816, +STORE, 47859021090816, 47859021144063, +STORE, 47859021160448, 47859021164543, +STORE, 47859021144064, 47859021160447, +ERASE, 47859021144064, 47859021144064, +STORE, 47859021144064, 47859021160447, +STORE, 47859021172736, 47859021180927, +STORE, 47859021164544, 47859021172735, +ERASE, 47859021164544, 47859021164544, +STORE, 47859021164544, 47859021172735, +ERASE, 47859021172736, 47859021172736, +STORE, 47859021172736, 47859021180927, +STORE, 47859021180928, 47859023020031, +STORE, 47859021320192, 47859023020031, +STORE, 47859021180928, 47859021320191, +ERASE, 47859021320192, 47859021320192, +STORE, 47859021320192, 47859022979071, +STORE, 47859022979072, 47859023020031, +STORE, 47859022663680, 47859022979071, +STORE, 47859021320192, 47859022663679, +ERASE, 47859021320192, 47859021320192, +STORE, 47859021320192, 47859022663679, +STORE, 47859022974976, 47859022979071, +STORE, 47859022663680, 47859022974975, +ERASE, 47859022663680, 47859022663680, +STORE, 47859022663680, 47859022974975, +STORE, 47859023003648, 47859023020031, +STORE, 47859022979072, 47859023003647, +ERASE, 47859022979072, 47859022979072, +STORE, 47859022979072, 47859023003647, +ERASE, 47859023003648, 47859023003648, +STORE, 47859023003648, 47859023020031, +STORE, 47859023003648, 47859023032319, +ERASE, 47859022979072, 47859022979072, +STORE, 47859022979072, 47859022995455, +STORE, 47859022995456, 47859023003647, +ERASE, 47859021164544, 47859021164544, +STORE, 47859021164544, 47859021168639, +STORE, 47859021168640, 47859021172735, +ERASE, 94094885199872, 94094885199872, +STORE, 94094885199872, 94094885216255, +STORE, 94094885216256, 94094885220351, +ERASE, 139773774098432, 139773774098432, +STORE, 139773774098432, 139773774102527, +STORE, 139773774102528, 139773774106623, +ERASE, 47859021058048, 47859021058048, +STORE, 94094901108736, 94094901243903, +STORE, 140737488347136, 140737488351231, +STORE, 140736567963648, 140737488351231, +ERASE, 140736567963648, 140736567963648, +STORE, 140736567963648, 140736567967743, +STORE, 94924425748480, 94924426461183, +ERASE, 94924425748480, 94924425748480, +STORE, 94924425748480, 94924425797631, +STORE, 94924425797632, 94924426461183, +ERASE, 94924425797632, 94924425797632, +STORE, 94924425797632, 94924426342399, +STORE, 94924426342400, 94924426440703, +STORE, 94924426440704, 94924426461183, +STORE, 140042126319616, 140042126491647, +ERASE, 140042126319616, 140042126319616, +STORE, 140042126319616, 140042126323711, +STORE, 140042126323712, 140042126491647, +ERASE, 140042126323712, 140042126323712, +STORE, 140042126323712, 140042126446591, +STORE, 140042126446592, 140042126479359, +STORE, 140042126479360, 140042126487551, +STORE, 140042126487552, 140042126491647, +STORE, 140736568672256, 140736568676351, +STORE, 140736568659968, 140736568672255, +STORE, 47590668677120, 47590668685311, +STORE, 47590668685312, 47590668693503, +STORE, 47590668693504, 47590668799999, +STORE, 47590668709888, 47590668799999, +STORE, 47590668693504, 47590668709887, +ERASE, 47590668709888, 47590668709888, +STORE, 47590668709888, 47590668783615, +STORE, 47590668783616, 47590668799999, +STORE, 47590668763136, 47590668783615, +STORE, 47590668709888, 47590668763135, +ERASE, 47590668709888, 47590668709888, +STORE, 47590668709888, 47590668763135, +STORE, 47590668779520, 47590668783615, +STORE, 47590668763136, 47590668779519, +ERASE, 47590668763136, 47590668763136, +STORE, 47590668763136, 47590668779519, +STORE, 47590668791808, 47590668799999, +STORE, 47590668783616, 47590668791807, +ERASE, 47590668783616, 47590668783616, +STORE, 47590668783616, 47590668791807, +ERASE, 47590668791808, 47590668791808, +STORE, 47590668791808, 47590668799999, +STORE, 47590668800000, 47590670639103, +STORE, 47590668939264, 47590670639103, +STORE, 47590668800000, 47590668939263, +ERASE, 47590668939264, 47590668939264, +STORE, 47590668939264, 47590670598143, +STORE, 47590670598144, 47590670639103, +STORE, 47590670282752, 47590670598143, +STORE, 47590668939264, 47590670282751, +ERASE, 47590668939264, 47590668939264, +STORE, 47590668939264, 47590670282751, +STORE, 47590670594048, 47590670598143, +STORE, 47590670282752, 47590670594047, +ERASE, 47590670282752, 47590670282752, +STORE, 47590670282752, 47590670594047, +STORE, 47590670622720, 47590670639103, +STORE, 47590670598144, 47590670622719, +ERASE, 47590670598144, 47590670598144, +STORE, 47590670598144, 47590670622719, +ERASE, 47590670622720, 47590670622720, +STORE, 47590670622720, 47590670639103, +STORE, 47590670622720, 47590670651391, +ERASE, 47590670598144, 47590670598144, +STORE, 47590670598144, 47590670614527, +STORE, 47590670614528, 47590670622719, +ERASE, 47590668783616, 47590668783616, +STORE, 47590668783616, 47590668787711, +STORE, 47590668787712, 47590668791807, +ERASE, 94924426440704, 94924426440704, +STORE, 94924426440704, 94924426457087, +STORE, 94924426457088, 94924426461183, +ERASE, 140042126479360, 140042126479360, +STORE, 140042126479360, 140042126483455, +STORE, 140042126483456, 140042126487551, +ERASE, 47590668677120, 47590668677120, +STORE, 140737488347136, 140737488351231, +STORE, 140733281439744, 140737488351231, +ERASE, 140733281439744, 140733281439744, +STORE, 140733281439744, 140733281443839, +STORE, 94490667069440, 94490667782143, +ERASE, 94490667069440, 94490667069440, +STORE, 94490667069440, 94490667118591, +STORE, 94490667118592, 94490667782143, +ERASE, 94490667118592, 94490667118592, +STORE, 94490667118592, 94490667663359, +STORE, 94490667663360, 94490667761663, +STORE, 94490667761664, 94490667782143, +STORE, 139878215118848, 139878215290879, +ERASE, 139878215118848, 139878215118848, +STORE, 139878215118848, 139878215122943, +STORE, 139878215122944, 139878215290879, +ERASE, 139878215122944, 139878215122944, +STORE, 139878215122944, 139878215245823, +STORE, 139878215245824, 139878215278591, +STORE, 139878215278592, 139878215286783, +STORE, 139878215286784, 139878215290879, +STORE, 140733281464320, 140733281468415, +STORE, 140733281452032, 140733281464319, +STORE, 47754579877888, 47754579886079, +STORE, 47754579886080, 47754579894271, +STORE, 47754579894272, 47754580000767, +STORE, 47754579910656, 47754580000767, +STORE, 47754579894272, 47754579910655, +ERASE, 47754579910656, 47754579910656, +STORE, 47754579910656, 47754579984383, +STORE, 47754579984384, 47754580000767, +STORE, 47754579963904, 47754579984383, +STORE, 47754579910656, 47754579963903, +ERASE, 47754579910656, 47754579910656, +STORE, 47754579910656, 47754579963903, +STORE, 47754579980288, 47754579984383, +STORE, 47754579963904, 47754579980287, +ERASE, 47754579963904, 47754579963904, +STORE, 47754579963904, 47754579980287, +STORE, 47754579992576, 47754580000767, +STORE, 47754579984384, 47754579992575, +ERASE, 47754579984384, 47754579984384, +STORE, 47754579984384, 47754579992575, +ERASE, 47754579992576, 47754579992576, +STORE, 47754579992576, 47754580000767, +STORE, 47754580000768, 47754581839871, +STORE, 47754580140032, 47754581839871, +STORE, 47754580000768, 47754580140031, +ERASE, 47754580140032, 47754580140032, +STORE, 47754580140032, 47754581798911, +STORE, 47754581798912, 47754581839871, +STORE, 47754581483520, 47754581798911, +STORE, 47754580140032, 47754581483519, +ERASE, 47754580140032, 47754580140032, +STORE, 47754580140032, 47754581483519, +STORE, 47754581794816, 47754581798911, +STORE, 47754581483520, 47754581794815, +ERASE, 47754581483520, 47754581483520, +STORE, 47754581483520, 47754581794815, +STORE, 47754581823488, 47754581839871, +STORE, 47754581798912, 47754581823487, +ERASE, 47754581798912, 47754581798912, +STORE, 47754581798912, 47754581823487, +ERASE, 47754581823488, 47754581823488, +STORE, 47754581823488, 47754581839871, +STORE, 47754581823488, 47754581852159, +ERASE, 47754581798912, 47754581798912, +STORE, 47754581798912, 47754581815295, +STORE, 47754581815296, 47754581823487, +ERASE, 47754579984384, 47754579984384, +STORE, 47754579984384, 47754579988479, +STORE, 47754579988480, 47754579992575, +ERASE, 94490667761664, 94490667761664, +STORE, 94490667761664, 94490667778047, +STORE, 94490667778048, 94490667782143, +ERASE, 139878215278592, 139878215278592, +STORE, 139878215278592, 139878215282687, +STORE, 139878215282688, 139878215286783, +ERASE, 47754579877888, 47754579877888, +STORE, 94490669649920, 94490669785087, +STORE, 140737488347136, 140737488351231, +STORE, 140735382188032, 140737488351231, +ERASE, 140735382188032, 140735382188032, +STORE, 140735382188032, 140735382192127, +STORE, 94150181302272, 94150182014975, +ERASE, 94150181302272, 94150181302272, +STORE, 94150181302272, 94150181351423, +STORE, 94150181351424, 94150182014975, +ERASE, 94150181351424, 94150181351424, +STORE, 94150181351424, 94150181896191, +STORE, 94150181896192, 94150181994495, +STORE, 94150181994496, 94150182014975, +STORE, 139679752458240, 139679752630271, +ERASE, 139679752458240, 139679752458240, +STORE, 139679752458240, 139679752462335, +STORE, 139679752462336, 139679752630271, +ERASE, 139679752462336, 139679752462336, +STORE, 139679752462336, 139679752585215, +STORE, 139679752585216, 139679752617983, +STORE, 139679752617984, 139679752626175, +STORE, 139679752626176, 139679752630271, +STORE, 140735382536192, 140735382540287, +STORE, 140735382523904, 140735382536191, +STORE, 47953042538496, 47953042546687, +STORE, 47953042546688, 47953042554879, +STORE, 47953042554880, 47953042661375, +STORE, 47953042571264, 47953042661375, +STORE, 47953042554880, 47953042571263, +ERASE, 47953042571264, 47953042571264, +STORE, 47953042571264, 47953042644991, +STORE, 47953042644992, 47953042661375, +STORE, 47953042624512, 47953042644991, +STORE, 47953042571264, 47953042624511, +ERASE, 47953042571264, 47953042571264, +STORE, 47953042571264, 47953042624511, +STORE, 47953042640896, 47953042644991, +STORE, 47953042624512, 47953042640895, +ERASE, 47953042624512, 47953042624512, +STORE, 47953042624512, 47953042640895, +STORE, 47953042653184, 47953042661375, +STORE, 47953042644992, 47953042653183, +ERASE, 47953042644992, 47953042644992, +STORE, 47953042644992, 47953042653183, +ERASE, 47953042653184, 47953042653184, +STORE, 47953042653184, 47953042661375, +STORE, 47953042661376, 47953044500479, +STORE, 47953042800640, 47953044500479, +STORE, 47953042661376, 47953042800639, +ERASE, 47953042800640, 47953042800640, +STORE, 47953042800640, 47953044459519, +STORE, 47953044459520, 47953044500479, +STORE, 47953044144128, 47953044459519, +STORE, 47953042800640, 47953044144127, +ERASE, 47953042800640, 47953042800640, +STORE, 47953042800640, 47953044144127, +STORE, 47953044455424, 47953044459519, +STORE, 47953044144128, 47953044455423, +ERASE, 47953044144128, 47953044144128, +STORE, 47953044144128, 47953044455423, +STORE, 47953044484096, 47953044500479, +STORE, 47953044459520, 47953044484095, +ERASE, 47953044459520, 47953044459520, +STORE, 47953044459520, 47953044484095, +ERASE, 47953044484096, 47953044484096, +STORE, 47953044484096, 47953044500479, +STORE, 47953044484096, 47953044512767, +ERASE, 47953044459520, 47953044459520, +STORE, 47953044459520, 47953044475903, +STORE, 47953044475904, 47953044484095, +ERASE, 47953042644992, 47953042644992, +STORE, 47953042644992, 47953042649087, +STORE, 47953042649088, 47953042653183, +ERASE, 94150181994496, 94150181994496, +STORE, 94150181994496, 94150182010879, +STORE, 94150182010880, 94150182014975, +ERASE, 139679752617984, 139679752617984, +STORE, 139679752617984, 139679752622079, +STORE, 139679752622080, 139679752626175, +ERASE, 47953042538496, 47953042538496, +STORE, 140737488347136, 140737488351231, +STORE, 140737044123648, 140737488351231, +ERASE, 140737044123648, 140737044123648, +STORE, 140737044123648, 140737044127743, +STORE, 94425324294144, 94425325006847, +ERASE, 94425324294144, 94425324294144, +STORE, 94425324294144, 94425324343295, +STORE, 94425324343296, 94425325006847, +ERASE, 94425324343296, 94425324343296, +STORE, 94425324343296, 94425324888063, +STORE, 94425324888064, 94425324986367, +STORE, 94425324986368, 94425325006847, +STORE, 140382015016960, 140382015188991, +ERASE, 140382015016960, 140382015016960, +STORE, 140382015016960, 140382015021055, +STORE, 140382015021056, 140382015188991, +ERASE, 140382015021056, 140382015021056, +STORE, 140382015021056, 140382015143935, +STORE, 140382015143936, 140382015176703, +STORE, 140382015176704, 140382015184895, +STORE, 140382015184896, 140382015188991, +STORE, 140737045585920, 140737045590015, +STORE, 140737045573632, 140737045585919, +STORE, 47250779979776, 47250779987967, +STORE, 47250779987968, 47250779996159, +STORE, 47250779996160, 47250780102655, +STORE, 47250780012544, 47250780102655, +STORE, 47250779996160, 47250780012543, +ERASE, 47250780012544, 47250780012544, +STORE, 47250780012544, 47250780086271, +STORE, 47250780086272, 47250780102655, +STORE, 47250780065792, 47250780086271, +STORE, 47250780012544, 47250780065791, +ERASE, 47250780012544, 47250780012544, +STORE, 47250780012544, 47250780065791, +STORE, 47250780082176, 47250780086271, +STORE, 47250780065792, 47250780082175, +ERASE, 47250780065792, 47250780065792, +STORE, 47250780065792, 47250780082175, +STORE, 47250780094464, 47250780102655, +STORE, 47250780086272, 47250780094463, +ERASE, 47250780086272, 47250780086272, +STORE, 47250780086272, 47250780094463, +ERASE, 47250780094464, 47250780094464, +STORE, 47250780094464, 47250780102655, +STORE, 47250780102656, 47250781941759, +STORE, 47250780241920, 47250781941759, +STORE, 47250780102656, 47250780241919, +ERASE, 47250780241920, 47250780241920, +STORE, 47250780241920, 47250781900799, +STORE, 47250781900800, 47250781941759, +STORE, 47250781585408, 47250781900799, +STORE, 47250780241920, 47250781585407, +ERASE, 47250780241920, 47250780241920, +STORE, 47250780241920, 47250781585407, +STORE, 47250781896704, 47250781900799, +STORE, 47250781585408, 47250781896703, +ERASE, 47250781585408, 47250781585408, +STORE, 47250781585408, 47250781896703, +STORE, 47250781925376, 47250781941759, +STORE, 47250781900800, 47250781925375, +ERASE, 47250781900800, 47250781900800, +STORE, 47250781900800, 47250781925375, +ERASE, 47250781925376, 47250781925376, +STORE, 47250781925376, 47250781941759, +STORE, 47250781925376, 47250781954047, +ERASE, 47250781900800, 47250781900800, +STORE, 47250781900800, 47250781917183, +STORE, 47250781917184, 47250781925375, +ERASE, 47250780086272, 47250780086272, +STORE, 47250780086272, 47250780090367, +STORE, 47250780090368, 47250780094463, +ERASE, 94425324986368, 94425324986368, +STORE, 94425324986368, 94425325002751, +STORE, 94425325002752, 94425325006847, +ERASE, 140382015176704, 140382015176704, +STORE, 140382015176704, 140382015180799, +STORE, 140382015180800, 140382015184895, +ERASE, 47250779979776, 47250779979776, +STORE, 94425351438336, 94425351573503, +STORE, 140737488347136, 140737488351231, +STORE, 140736801144832, 140737488351231, +ERASE, 140736801144832, 140736801144832, +STORE, 140736801144832, 140736801148927, +STORE, 94629429358592, 94629430071295, +ERASE, 94629429358592, 94629429358592, +STORE, 94629429358592, 94629429407743, +STORE, 94629429407744, 94629430071295, +ERASE, 94629429407744, 94629429407744, +STORE, 94629429407744, 94629429952511, +STORE, 94629429952512, 94629430050815, +STORE, 94629430050816, 94629430071295, +STORE, 139801685483520, 139801685655551, +ERASE, 139801685483520, 139801685483520, +STORE, 139801685483520, 139801685487615, +STORE, 139801685487616, 139801685655551, +ERASE, 139801685487616, 139801685487616, +STORE, 139801685487616, 139801685610495, +STORE, 139801685610496, 139801685643263, +STORE, 139801685643264, 139801685651455, +STORE, 139801685651456, 139801685655551, +STORE, 140736801198080, 140736801202175, +STORE, 140736801185792, 140736801198079, +STORE, 47831109513216, 47831109521407, +STORE, 47831109521408, 47831109529599, +STORE, 47831109529600, 47831109636095, +STORE, 47831109545984, 47831109636095, +STORE, 47831109529600, 47831109545983, +ERASE, 47831109545984, 47831109545984, +STORE, 47831109545984, 47831109619711, +STORE, 47831109619712, 47831109636095, +STORE, 47831109599232, 47831109619711, +STORE, 47831109545984, 47831109599231, +ERASE, 47831109545984, 47831109545984, +STORE, 47831109545984, 47831109599231, +STORE, 47831109615616, 47831109619711, +STORE, 47831109599232, 47831109615615, +ERASE, 47831109599232, 47831109599232, +STORE, 47831109599232, 47831109615615, +STORE, 47831109627904, 47831109636095, +STORE, 47831109619712, 47831109627903, +ERASE, 47831109619712, 47831109619712, +STORE, 47831109619712, 47831109627903, +ERASE, 47831109627904, 47831109627904, +STORE, 47831109627904, 47831109636095, +STORE, 47831109636096, 47831111475199, +STORE, 47831109775360, 47831111475199, +STORE, 47831109636096, 47831109775359, +ERASE, 47831109775360, 47831109775360, +STORE, 47831109775360, 47831111434239, +STORE, 47831111434240, 47831111475199, +STORE, 47831111118848, 47831111434239, +STORE, 47831109775360, 47831111118847, +ERASE, 47831109775360, 47831109775360, +STORE, 47831109775360, 47831111118847, +STORE, 47831111430144, 47831111434239, +STORE, 47831111118848, 47831111430143, +ERASE, 47831111118848, 47831111118848, +STORE, 47831111118848, 47831111430143, +STORE, 47831111458816, 47831111475199, +STORE, 47831111434240, 47831111458815, +ERASE, 47831111434240, 47831111434240, +STORE, 47831111434240, 47831111458815, +ERASE, 47831111458816, 47831111458816, +STORE, 47831111458816, 47831111475199, +STORE, 47831111458816, 47831111487487, +ERASE, 47831111434240, 47831111434240, +STORE, 47831111434240, 47831111450623, +STORE, 47831111450624, 47831111458815, +ERASE, 47831109619712, 47831109619712, +STORE, 47831109619712, 47831109623807, +STORE, 47831109623808, 47831109627903, +ERASE, 94629430050816, 94629430050816, +STORE, 94629430050816, 94629430067199, +STORE, 94629430067200, 94629430071295, +ERASE, 139801685643264, 139801685643264, +STORE, 139801685643264, 139801685647359, +STORE, 139801685647360, 139801685651455, +ERASE, 47831109513216, 47831109513216, +STORE, 140737488347136, 140737488351231, +STORE, 140729419612160, 140737488351231, +ERASE, 140729419612160, 140729419612160, +STORE, 140729419612160, 140729419616255, +STORE, 94443354148864, 94443354861567, +ERASE, 94443354148864, 94443354148864, +STORE, 94443354148864, 94443354198015, +STORE, 94443354198016, 94443354861567, +ERASE, 94443354198016, 94443354198016, +STORE, 94443354198016, 94443354742783, +STORE, 94443354742784, 94443354841087, +STORE, 94443354841088, 94443354861567, +STORE, 139741700038656, 139741700210687, +ERASE, 139741700038656, 139741700038656, +STORE, 139741700038656, 139741700042751, +STORE, 139741700042752, 139741700210687, +ERASE, 139741700042752, 139741700042752, +STORE, 139741700042752, 139741700165631, +STORE, 139741700165632, 139741700198399, +STORE, 139741700198400, 139741700206591, +STORE, 139741700206592, 139741700210687, +STORE, 140729420574720, 140729420578815, +STORE, 140729420562432, 140729420574719, +STORE, 47891094958080, 47891094966271, +STORE, 47891094966272, 47891094974463, +STORE, 47891094974464, 47891095080959, +STORE, 47891094990848, 47891095080959, +STORE, 47891094974464, 47891094990847, +ERASE, 47891094990848, 47891094990848, +STORE, 47891094990848, 47891095064575, +STORE, 47891095064576, 47891095080959, +STORE, 47891095044096, 47891095064575, +STORE, 47891094990848, 47891095044095, +ERASE, 47891094990848, 47891094990848, +STORE, 47891094990848, 47891095044095, +STORE, 47891095060480, 47891095064575, +STORE, 47891095044096, 47891095060479, +ERASE, 47891095044096, 47891095044096, +STORE, 47891095044096, 47891095060479, +STORE, 47891095072768, 47891095080959, +STORE, 47891095064576, 47891095072767, +ERASE, 47891095064576, 47891095064576, +STORE, 47891095064576, 47891095072767, +ERASE, 47891095072768, 47891095072768, +STORE, 47891095072768, 47891095080959, +STORE, 47891095080960, 47891096920063, +STORE, 47891095220224, 47891096920063, +STORE, 47891095080960, 47891095220223, +ERASE, 47891095220224, 47891095220224, +STORE, 47891095220224, 47891096879103, +STORE, 47891096879104, 47891096920063, +STORE, 47891096563712, 47891096879103, +STORE, 47891095220224, 47891096563711, +ERASE, 47891095220224, 47891095220224, +STORE, 47891095220224, 47891096563711, +STORE, 47891096875008, 47891096879103, +STORE, 47891096563712, 47891096875007, +ERASE, 47891096563712, 47891096563712, +STORE, 47891096563712, 47891096875007, +STORE, 47891096903680, 47891096920063, +STORE, 47891096879104, 47891096903679, +ERASE, 47891096879104, 47891096879104, +STORE, 47891096879104, 47891096903679, +ERASE, 47891096903680, 47891096903680, +STORE, 47891096903680, 47891096920063, +STORE, 47891096903680, 47891096932351, +ERASE, 47891096879104, 47891096879104, +STORE, 47891096879104, 47891096895487, +STORE, 47891096895488, 47891096903679, +ERASE, 47891095064576, 47891095064576, +STORE, 47891095064576, 47891095068671, +STORE, 47891095068672, 47891095072767, +ERASE, 94443354841088, 94443354841088, +STORE, 94443354841088, 94443354857471, +STORE, 94443354857472, 94443354861567, +ERASE, 139741700198400, 139741700198400, +STORE, 139741700198400, 139741700202495, +STORE, 139741700202496, 139741700206591, +ERASE, 47891094958080, 47891094958080, +STORE, 94443360825344, 94443360960511, +STORE, 140737488347136, 140737488351231, +STORE, 140722961661952, 140737488351231, +ERASE, 140722961661952, 140722961661952, +STORE, 140722961661952, 140722961666047, +STORE, 94878388944896, 94878389657599, +ERASE, 94878388944896, 94878388944896, +STORE, 94878388944896, 94878388994047, +STORE, 94878388994048, 94878389657599, +ERASE, 94878388994048, 94878388994048, +STORE, 94878388994048, 94878389538815, +STORE, 94878389538816, 94878389637119, +STORE, 94878389637120, 94878389657599, +STORE, 140210690056192, 140210690228223, +ERASE, 140210690056192, 140210690056192, +STORE, 140210690056192, 140210690060287, +STORE, 140210690060288, 140210690228223, +ERASE, 140210690060288, 140210690060288, +STORE, 140210690060288, 140210690183167, +STORE, 140210690183168, 140210690215935, +STORE, 140210690215936, 140210690224127, +STORE, 140210690224128, 140210690228223, +STORE, 140722963148800, 140722963152895, +STORE, 140722963136512, 140722963148799, +STORE, 47422104940544, 47422104948735, +STORE, 47422104948736, 47422104956927, +STORE, 47422104956928, 47422105063423, +STORE, 47422104973312, 47422105063423, +STORE, 47422104956928, 47422104973311, +ERASE, 47422104973312, 47422104973312, +STORE, 47422104973312, 47422105047039, +STORE, 47422105047040, 47422105063423, +STORE, 47422105026560, 47422105047039, +STORE, 47422104973312, 47422105026559, +ERASE, 47422104973312, 47422104973312, +STORE, 47422104973312, 47422105026559, +STORE, 47422105042944, 47422105047039, +STORE, 47422105026560, 47422105042943, +ERASE, 47422105026560, 47422105026560, +STORE, 47422105026560, 47422105042943, +STORE, 47422105055232, 47422105063423, +STORE, 47422105047040, 47422105055231, +ERASE, 47422105047040, 47422105047040, +STORE, 47422105047040, 47422105055231, +ERASE, 47422105055232, 47422105055232, +STORE, 47422105055232, 47422105063423, +STORE, 47422105063424, 47422106902527, +STORE, 47422105202688, 47422106902527, +STORE, 47422105063424, 47422105202687, +ERASE, 47422105202688, 47422105202688, +STORE, 47422105202688, 47422106861567, +STORE, 47422106861568, 47422106902527, +STORE, 47422106546176, 47422106861567, +STORE, 47422105202688, 47422106546175, +ERASE, 47422105202688, 47422105202688, +STORE, 47422105202688, 47422106546175, +STORE, 47422106857472, 47422106861567, +STORE, 47422106546176, 47422106857471, +ERASE, 47422106546176, 47422106546176, +STORE, 47422106546176, 47422106857471, +STORE, 47422106886144, 47422106902527, +STORE, 47422106861568, 47422106886143, +ERASE, 47422106861568, 47422106861568, +STORE, 47422106861568, 47422106886143, +ERASE, 47422106886144, 47422106886144, +STORE, 47422106886144, 47422106902527, +STORE, 47422106886144, 47422106914815, +ERASE, 47422106861568, 47422106861568, +STORE, 47422106861568, 47422106877951, +STORE, 47422106877952, 47422106886143, +ERASE, 47422105047040, 47422105047040, +STORE, 47422105047040, 47422105051135, +STORE, 47422105051136, 47422105055231, +ERASE, 94878389637120, 94878389637120, +STORE, 94878389637120, 94878389653503, +STORE, 94878389653504, 94878389657599, +ERASE, 140210690215936, 140210690215936, +STORE, 140210690215936, 140210690220031, +STORE, 140210690220032, 140210690224127, +ERASE, 47422104940544, 47422104940544, +STORE, 140737488347136, 140737488351231, +STORE, 140727690309632, 140737488351231, +ERASE, 140727690309632, 140727690309632, +STORE, 140727690309632, 140727690313727, +STORE, 94121892208640, 94121892921343, +ERASE, 94121892208640, 94121892208640, +STORE, 94121892208640, 94121892257791, +STORE, 94121892257792, 94121892921343, +ERASE, 94121892257792, 94121892257792, +STORE, 94121892257792, 94121892802559, +STORE, 94121892802560, 94121892900863, +STORE, 94121892900864, 94121892921343, +STORE, 140662438326272, 140662438498303, +ERASE, 140662438326272, 140662438326272, +STORE, 140662438326272, 140662438330367, +STORE, 140662438330368, 140662438498303, +ERASE, 140662438330368, 140662438330368, +STORE, 140662438330368, 140662438453247, +STORE, 140662438453248, 140662438486015, +STORE, 140662438486016, 140662438494207, +STORE, 140662438494208, 140662438498303, +STORE, 140727690379264, 140727690383359, +STORE, 140727690366976, 140727690379263, +STORE, 46970356670464, 46970356678655, +STORE, 46970356678656, 46970356686847, +STORE, 46970356686848, 46970356793343, +STORE, 46970356703232, 46970356793343, +STORE, 46970356686848, 46970356703231, +ERASE, 46970356703232, 46970356703232, +STORE, 46970356703232, 46970356776959, +STORE, 46970356776960, 46970356793343, +STORE, 46970356756480, 46970356776959, +STORE, 46970356703232, 46970356756479, +ERASE, 46970356703232, 46970356703232, +STORE, 46970356703232, 46970356756479, +STORE, 46970356772864, 46970356776959, +STORE, 46970356756480, 46970356772863, +ERASE, 46970356756480, 46970356756480, +STORE, 46970356756480, 46970356772863, +STORE, 46970356785152, 46970356793343, +STORE, 46970356776960, 46970356785151, +ERASE, 46970356776960, 46970356776960, +STORE, 46970356776960, 46970356785151, +ERASE, 46970356785152, 46970356785152, +STORE, 46970356785152, 46970356793343, +STORE, 46970356793344, 46970358632447, +STORE, 46970356932608, 46970358632447, +STORE, 46970356793344, 46970356932607, +ERASE, 46970356932608, 46970356932608, +STORE, 46970356932608, 46970358591487, +STORE, 46970358591488, 46970358632447, +STORE, 46970358276096, 46970358591487, +STORE, 46970356932608, 46970358276095, +ERASE, 46970356932608, 46970356932608, +STORE, 46970356932608, 46970358276095, +STORE, 46970358587392, 46970358591487, +STORE, 46970358276096, 46970358587391, +ERASE, 46970358276096, 46970358276096, +STORE, 46970358276096, 46970358587391, +STORE, 46970358616064, 46970358632447, +STORE, 46970358591488, 46970358616063, +ERASE, 46970358591488, 46970358591488, +STORE, 46970358591488, 46970358616063, +ERASE, 46970358616064, 46970358616064, +STORE, 46970358616064, 46970358632447, +STORE, 46970358616064, 46970358644735, +ERASE, 46970358591488, 46970358591488, +STORE, 46970358591488, 46970358607871, +STORE, 46970358607872, 46970358616063, +ERASE, 46970356776960, 46970356776960, +STORE, 46970356776960, 46970356781055, +STORE, 46970356781056, 46970356785151, +ERASE, 94121892900864, 94121892900864, +STORE, 94121892900864, 94121892917247, +STORE, 94121892917248, 94121892921343, +ERASE, 140662438486016, 140662438486016, +STORE, 140662438486016, 140662438490111, +STORE, 140662438490112, 140662438494207, +ERASE, 46970356670464, 46970356670464, +STORE, 94121898610688, 94121898745855, +STORE, 140737488347136, 140737488351231, +STORE, 140737189351424, 140737488351231, +ERASE, 140737189351424, 140737189351424, +STORE, 140737189351424, 140737189355519, +STORE, 93847948832768, 93847949545471, +ERASE, 93847948832768, 93847948832768, +STORE, 93847948832768, 93847948881919, +STORE, 93847948881920, 93847949545471, +ERASE, 93847948881920, 93847948881920, +STORE, 93847948881920, 93847949426687, +STORE, 93847949426688, 93847949524991, +STORE, 93847949524992, 93847949545471, +STORE, 139698989985792, 139698990157823, +ERASE, 139698989985792, 139698989985792, +STORE, 139698989985792, 139698989989887, +STORE, 139698989989888, 139698990157823, +ERASE, 139698989989888, 139698989989888, +STORE, 139698989989888, 139698990112767, +STORE, 139698990112768, 139698990145535, +STORE, 139698990145536, 139698990153727, +STORE, 139698990153728, 139698990157823, +STORE, 140737189744640, 140737189748735, +STORE, 140737189732352, 140737189744639, +STORE, 47933805010944, 47933805019135, +STORE, 47933805019136, 47933805027327, +STORE, 47933805027328, 47933805133823, +STORE, 47933805043712, 47933805133823, +STORE, 47933805027328, 47933805043711, +ERASE, 47933805043712, 47933805043712, +STORE, 47933805043712, 47933805117439, +STORE, 47933805117440, 47933805133823, +STORE, 47933805096960, 47933805117439, +STORE, 47933805043712, 47933805096959, +ERASE, 47933805043712, 47933805043712, +STORE, 47933805043712, 47933805096959, +STORE, 47933805113344, 47933805117439, +STORE, 47933805096960, 47933805113343, +ERASE, 47933805096960, 47933805096960, +STORE, 47933805096960, 47933805113343, +STORE, 47933805125632, 47933805133823, +STORE, 47933805117440, 47933805125631, +ERASE, 47933805117440, 47933805117440, +STORE, 47933805117440, 47933805125631, +ERASE, 47933805125632, 47933805125632, +STORE, 47933805125632, 47933805133823, +STORE, 47933805133824, 47933806972927, +STORE, 47933805273088, 47933806972927, +STORE, 47933805133824, 47933805273087, +ERASE, 47933805273088, 47933805273088, +STORE, 47933805273088, 47933806931967, +STORE, 47933806931968, 47933806972927, +STORE, 47933806616576, 47933806931967, +STORE, 47933805273088, 47933806616575, +ERASE, 47933805273088, 47933805273088, +STORE, 47933805273088, 47933806616575, +STORE, 47933806927872, 47933806931967, +STORE, 47933806616576, 47933806927871, +ERASE, 47933806616576, 47933806616576, +STORE, 47933806616576, 47933806927871, +STORE, 47933806956544, 47933806972927, +STORE, 47933806931968, 47933806956543, +ERASE, 47933806931968, 47933806931968, +STORE, 47933806931968, 47933806956543, +ERASE, 47933806956544, 47933806956544, +STORE, 47933806956544, 47933806972927, +STORE, 47933806956544, 47933806985215, +ERASE, 47933806931968, 47933806931968, +STORE, 47933806931968, 47933806948351, +STORE, 47933806948352, 47933806956543, +ERASE, 47933805117440, 47933805117440, +STORE, 47933805117440, 47933805121535, +STORE, 47933805121536, 47933805125631, +ERASE, 93847949524992, 93847949524992, +STORE, 93847949524992, 93847949541375, +STORE, 93847949541376, 93847949545471, +ERASE, 139698990145536, 139698990145536, +STORE, 139698990145536, 139698990149631, +STORE, 139698990149632, 139698990153727, +ERASE, 47933805010944, 47933805010944, +STORE, 140737488347136, 140737488351231, +STORE, 140725553991680, 140737488351231, +ERASE, 140725553991680, 140725553991680, +STORE, 140725553991680, 140725553995775, +STORE, 93980056248320, 93980056961023, +ERASE, 93980056248320, 93980056248320, +STORE, 93980056248320, 93980056297471, +STORE, 93980056297472, 93980056961023, +ERASE, 93980056297472, 93980056297472, +STORE, 93980056297472, 93980056842239, +STORE, 93980056842240, 93980056940543, +STORE, 93980056940544, 93980056961023, +STORE, 140146588971008, 140146589143039, +ERASE, 140146588971008, 140146588971008, +STORE, 140146588971008, 140146588975103, +STORE, 140146588975104, 140146589143039, +ERASE, 140146588975104, 140146588975104, +STORE, 140146588975104, 140146589097983, +STORE, 140146589097984, 140146589130751, +STORE, 140146589130752, 140146589138943, +STORE, 140146589138944, 140146589143039, +STORE, 140725554860032, 140725554864127, +STORE, 140725554847744, 140725554860031, +STORE, 47486206025728, 47486206033919, +STORE, 47486206033920, 47486206042111, +STORE, 47486206042112, 47486206148607, +STORE, 47486206058496, 47486206148607, +STORE, 47486206042112, 47486206058495, +ERASE, 47486206058496, 47486206058496, +STORE, 47486206058496, 47486206132223, +STORE, 47486206132224, 47486206148607, +STORE, 47486206111744, 47486206132223, +STORE, 47486206058496, 47486206111743, +ERASE, 47486206058496, 47486206058496, +STORE, 47486206058496, 47486206111743, +STORE, 47486206128128, 47486206132223, +STORE, 47486206111744, 47486206128127, +ERASE, 47486206111744, 47486206111744, +STORE, 47486206111744, 47486206128127, +STORE, 47486206140416, 47486206148607, +STORE, 47486206132224, 47486206140415, +ERASE, 47486206132224, 47486206132224, +STORE, 47486206132224, 47486206140415, +ERASE, 47486206140416, 47486206140416, +STORE, 47486206140416, 47486206148607, +STORE, 47486206148608, 47486207987711, +STORE, 47486206287872, 47486207987711, +STORE, 47486206148608, 47486206287871, +ERASE, 47486206287872, 47486206287872, +STORE, 47486206287872, 47486207946751, +STORE, 47486207946752, 47486207987711, +STORE, 47486207631360, 47486207946751, +STORE, 47486206287872, 47486207631359, +ERASE, 47486206287872, 47486206287872, +STORE, 47486206287872, 47486207631359, +STORE, 47486207942656, 47486207946751, +STORE, 47486207631360, 47486207942655, +ERASE, 47486207631360, 47486207631360, +STORE, 47486207631360, 47486207942655, +STORE, 47486207971328, 47486207987711, +STORE, 47486207946752, 47486207971327, +ERASE, 47486207946752, 47486207946752, +STORE, 47486207946752, 47486207971327, +ERASE, 47486207971328, 47486207971328, +STORE, 47486207971328, 47486207987711, +STORE, 47486207971328, 47486207999999, +ERASE, 47486207946752, 47486207946752, +STORE, 47486207946752, 47486207963135, +STORE, 47486207963136, 47486207971327, +ERASE, 47486206132224, 47486206132224, +STORE, 47486206132224, 47486206136319, +STORE, 47486206136320, 47486206140415, +ERASE, 93980056940544, 93980056940544, +STORE, 93980056940544, 93980056956927, +STORE, 93980056956928, 93980056961023, +ERASE, 140146589130752, 140146589130752, +STORE, 140146589130752, 140146589134847, +STORE, 140146589134848, 140146589138943, +ERASE, 47486206025728, 47486206025728, +STORE, 93980070006784, 93980070141951, +STORE, 140737488347136, 140737488351231, +STORE, 140727334776832, 140737488351231, +ERASE, 140727334776832, 140727334776832, +STORE, 140727334776832, 140727334780927, +STORE, 94049747247104, 94049747959807, +ERASE, 94049747247104, 94049747247104, +STORE, 94049747247104, 94049747296255, +STORE, 94049747296256, 94049747959807, +ERASE, 94049747296256, 94049747296256, +STORE, 94049747296256, 94049747841023, +STORE, 94049747841024, 94049747939327, +STORE, 94049747939328, 94049747959807, +STORE, 140227307216896, 140227307388927, +ERASE, 140227307216896, 140227307216896, +STORE, 140227307216896, 140227307220991, +STORE, 140227307220992, 140227307388927, +ERASE, 140227307220992, 140227307220992, +STORE, 140227307220992, 140227307343871, +STORE, 140227307343872, 140227307376639, +STORE, 140227307376640, 140227307384831, +STORE, 140227307384832, 140227307388927, +STORE, 140727335337984, 140727335342079, +STORE, 140727335325696, 140727335337983, +STORE, 47405487779840, 47405487788031, +STORE, 47405487788032, 47405487796223, +STORE, 47405487796224, 47405487902719, +STORE, 47405487812608, 47405487902719, +STORE, 47405487796224, 47405487812607, +ERASE, 47405487812608, 47405487812608, +STORE, 47405487812608, 47405487886335, +STORE, 47405487886336, 47405487902719, +STORE, 47405487865856, 47405487886335, +STORE, 47405487812608, 47405487865855, +ERASE, 47405487812608, 47405487812608, +STORE, 47405487812608, 47405487865855, +STORE, 47405487882240, 47405487886335, +STORE, 47405487865856, 47405487882239, +ERASE, 47405487865856, 47405487865856, +STORE, 47405487865856, 47405487882239, +STORE, 47405487894528, 47405487902719, +STORE, 47405487886336, 47405487894527, +ERASE, 47405487886336, 47405487886336, +STORE, 47405487886336, 47405487894527, +ERASE, 47405487894528, 47405487894528, +STORE, 47405487894528, 47405487902719, +STORE, 47405487902720, 47405489741823, +STORE, 47405488041984, 47405489741823, +STORE, 47405487902720, 47405488041983, +ERASE, 47405488041984, 47405488041984, +STORE, 47405488041984, 47405489700863, +STORE, 47405489700864, 47405489741823, +STORE, 47405489385472, 47405489700863, +STORE, 47405488041984, 47405489385471, +ERASE, 47405488041984, 47405488041984, +STORE, 47405488041984, 47405489385471, +STORE, 47405489696768, 47405489700863, +STORE, 47405489385472, 47405489696767, +ERASE, 47405489385472, 47405489385472, +STORE, 47405489385472, 47405489696767, +STORE, 47405489725440, 47405489741823, +STORE, 47405489700864, 47405489725439, +ERASE, 47405489700864, 47405489700864, +STORE, 47405489700864, 47405489725439, +ERASE, 47405489725440, 47405489725440, +STORE, 47405489725440, 47405489741823, +STORE, 47405489725440, 47405489754111, +ERASE, 47405489700864, 47405489700864, +STORE, 47405489700864, 47405489717247, +STORE, 47405489717248, 47405489725439, +ERASE, 47405487886336, 47405487886336, +STORE, 47405487886336, 47405487890431, +STORE, 47405487890432, 47405487894527, +ERASE, 94049747939328, 94049747939328, +STORE, 94049747939328, 94049747955711, +STORE, 94049747955712, 94049747959807, +ERASE, 140227307376640, 140227307376640, +STORE, 140227307376640, 140227307380735, +STORE, 140227307380736, 140227307384831, +ERASE, 47405487779840, 47405487779840, +STORE, 94049758810112, 94049758945279, +STORE, 140737488347136, 140737488351231, +STORE, 140727079718912, 140737488351231, +ERASE, 140727079718912, 140727079718912, +STORE, 140727079718912, 140727079723007, +STORE, 94250996527104, 94250997239807, +ERASE, 94250996527104, 94250996527104, +STORE, 94250996527104, 94250996576255, +STORE, 94250996576256, 94250997239807, +ERASE, 94250996576256, 94250996576256, +STORE, 94250996576256, 94250997121023, +STORE, 94250997121024, 94250997219327, +STORE, 94250997219328, 94250997239807, +STORE, 140060022587392, 140060022759423, +ERASE, 140060022587392, 140060022587392, +STORE, 140060022587392, 140060022591487, +STORE, 140060022591488, 140060022759423, +ERASE, 140060022591488, 140060022591488, +STORE, 140060022591488, 140060022714367, +STORE, 140060022714368, 140060022747135, +STORE, 140060022747136, 140060022755327, +STORE, 140060022755328, 140060022759423, +STORE, 140727079788544, 140727079792639, +STORE, 140727079776256, 140727079788543, +/* this next one caused issues when lowering the efficiency */ +STORE, 47572772409344, 47572772417535, +STORE, 47572772417536, 47572772425727, +STORE, 47572772425728, 47572772532223, +STORE, 47572772442112, 47572772532223, +STORE, 47572772425728, 47572772442111, +ERASE, 47572772442112, 47572772442112, +STORE, 47572772442112, 47572772515839, +STORE, 47572772515840, 47572772532223, +STORE, 47572772495360, 47572772515839, +STORE, 47572772442112, 47572772495359, +ERASE, 47572772442112, 47572772442112, +STORE, 47572772442112, 47572772495359, +STORE, 47572772511744, 47572772515839, +STORE, 47572772495360, 47572772511743, +ERASE, 47572772495360, 47572772495360, +STORE, 47572772495360, 47572772511743, +STORE, 47572772524032, 47572772532223, +STORE, 47572772515840, 47572772524031, +ERASE, 47572772515840, 47572772515840, +STORE, 47572772515840, 47572772524031, +ERASE, 47572772524032, 47572772524032, +STORE, 47572772524032, 47572772532223, +STORE, 47572772532224, 47572774371327, +STORE, 47572772671488, 47572774371327, +STORE, 47572772532224, 47572772671487, +ERASE, 47572772671488, 47572772671488, +STORE, 47572772671488, 47572774330367, +STORE, 47572774330368, 47572774371327, +STORE, 47572774014976, 47572774330367, +STORE, 47572772671488, 47572774014975, +ERASE, 47572772671488, 47572772671488, +STORE, 47572772671488, 47572774014975, +STORE, 47572774326272, 47572774330367, +STORE, 47572774014976, 47572774326271, +ERASE, 47572774014976, 47572774014976, +STORE, 47572774014976, 47572774326271, +STORE, 47572774354944, 47572774371327, +STORE, 47572774330368, 47572774354943, +ERASE, 47572774330368, 47572774330368, +STORE, 47572774330368, 47572774354943, +ERASE, 47572774354944, 47572774354944, +STORE, 47572774354944, 47572774371327, +STORE, 47572774354944, 47572774383615, +ERASE, 47572774330368, 47572774330368, +STORE, 47572774330368, 47572774346751, +STORE, 47572774346752, 47572774354943, +ERASE, 47572772515840, 47572772515840, +STORE, 47572772515840, 47572772519935, +STORE, 47572772519936, 47572772524031, +ERASE, 94250997219328, 94250997219328, +STORE, 94250997219328, 94250997235711, +STORE, 94250997235712, 94250997239807, +ERASE, 140060022747136, 140060022747136, +STORE, 140060022747136, 140060022751231, +STORE, 140060022751232, 140060022755327, +ERASE, 47572772409344, 47572772409344, +STORE, 94251018305536, 94251018440703, +STORE, 140737488347136, 140737488351231, +STORE, 140730012389376, 140737488351231, +ERASE, 140730012389376, 140730012389376, +STORE, 140730012389376, 140730012393471, +STORE, 94382607675392, 94382607695871, +ERASE, 94382607675392, 94382607675392, +STORE, 94382607675392, 94382607679487, +STORE, 94382607679488, 94382607695871, +ERASE, 94382607679488, 94382607679488, +STORE, 94382607679488, 94382607683583, +STORE, 94382607683584, 94382607687679, +STORE, 94382607687680, 94382607695871, +STORE, 140252451454976, 140252451627007, +ERASE, 140252451454976, 140252451454976, +STORE, 140252451454976, 140252451459071, +STORE, 140252451459072, 140252451627007, +ERASE, 140252451459072, 140252451459072, +STORE, 140252451459072, 140252451581951, +STORE, 140252451581952, 140252451614719, +STORE, 140252451614720, 140252451622911, +STORE, 140252451622912, 140252451627007, +STORE, 140730013548544, 140730013552639, +STORE, 140730013536256, 140730013548543, +STORE, 47380343541760, 47380343549951, +STORE, 47380343549952, 47380343558143, +STORE, 47380343558144, 47380345397247, +STORE, 47380343697408, 47380345397247, +STORE, 47380343558144, 47380343697407, +ERASE, 47380343697408, 47380343697408, +STORE, 47380343697408, 47380345356287, +STORE, 47380345356288, 47380345397247, +STORE, 47380345040896, 47380345356287, +STORE, 47380343697408, 47380345040895, +ERASE, 47380343697408, 47380343697408, +STORE, 47380343697408, 47380345040895, +STORE, 47380345352192, 47380345356287, +STORE, 47380345040896, 47380345352191, +ERASE, 47380345040896, 47380345040896, +STORE, 47380345040896, 47380345352191, +STORE, 47380345380864, 47380345397247, +STORE, 47380345356288, 47380345380863, +ERASE, 47380345356288, 47380345356288, +STORE, 47380345356288, 47380345380863, +ERASE, 47380345380864, 47380345380864, +STORE, 47380345380864, 47380345397247, +ERASE, 47380345356288, 47380345356288, +STORE, 47380345356288, 47380345372671, +STORE, 47380345372672, 47380345380863, +ERASE, 94382607687680, 94382607687680, +STORE, 94382607687680, 94382607691775, +STORE, 94382607691776, 94382607695871, +ERASE, 140252451614720, 140252451614720, +STORE, 140252451614720, 140252451618815, +STORE, 140252451618816, 140252451622911, +ERASE, 47380343541760, 47380343541760, +STORE, 94382626803712, 94382626938879, +STORE, 140737488347136, 140737488351231, +STORE, 140730900271104, 140737488351231, +ERASE, 140730900271104, 140730900271104, +STORE, 140730900271104, 140730900275199, +STORE, 93855478120448, 93855478337535, +ERASE, 93855478120448, 93855478120448, +STORE, 93855478120448, 93855478198271, +STORE, 93855478198272, 93855478337535, +ERASE, 93855478198272, 93855478198272, +STORE, 93855478198272, 93855478243327, +STORE, 93855478243328, 93855478288383, +STORE, 93855478288384, 93855478337535, +STORE, 140092686573568, 140092686745599, +ERASE, 140092686573568, 140092686573568, +STORE, 140092686573568, 140092686577663, +STORE, 140092686577664, 140092686745599, +ERASE, 140092686577664, 140092686577664, +STORE, 140092686577664, 140092686700543, +STORE, 140092686700544, 140092686733311, +STORE, 140092686733312, 140092686741503, +STORE, 140092686741504, 140092686745599, +STORE, 140730900537344, 140730900541439, +STORE, 140730900525056, 140730900537343, +STORE, 47540108423168, 47540108431359, +STORE, 47540108431360, 47540108439551, +STORE, 47540108439552, 47540110278655, +STORE, 47540108578816, 47540110278655, +STORE, 47540108439552, 47540108578815, +ERASE, 47540108578816, 47540108578816, +STORE, 47540108578816, 47540110237695, +STORE, 47540110237696, 47540110278655, +STORE, 47540109922304, 47540110237695, +STORE, 47540108578816, 47540109922303, +ERASE, 47540108578816, 47540108578816, +STORE, 47540108578816, 47540109922303, +STORE, 47540110233600, 47540110237695, +STORE, 47540109922304, 47540110233599, +ERASE, 47540109922304, 47540109922304, +STORE, 47540109922304, 47540110233599, +STORE, 47540110262272, 47540110278655, +STORE, 47540110237696, 47540110262271, +ERASE, 47540110237696, 47540110237696, +STORE, 47540110237696, 47540110262271, +ERASE, 47540110262272, 47540110262272, +STORE, 47540110262272, 47540110278655, +ERASE, 47540110237696, 47540110237696, +STORE, 47540110237696, 47540110254079, +STORE, 47540110254080, 47540110262271, +ERASE, 93855478288384, 93855478288384, +STORE, 93855478288384, 93855478333439, +STORE, 93855478333440, 93855478337535, +ERASE, 140092686733312, 140092686733312, +STORE, 140092686733312, 140092686737407, +STORE, 140092686737408, 140092686741503, +ERASE, 47540108423168, 47540108423168, +STORE, 93855492222976, 93855492358143, +STORE, 93855492222976, 93855492493311, +STORE, 140737488347136, 140737488351231, +STORE, 140733498146816, 140737488351231, +ERASE, 140733498146816, 140733498146816, +STORE, 140733498146816, 140733498150911, +STORE, 94170739654656, 94170740367359, +ERASE, 94170739654656, 94170739654656, +STORE, 94170739654656, 94170739703807, +STORE, 94170739703808, 94170740367359, +ERASE, 94170739703808, 94170739703808, +STORE, 94170739703808, 94170740248575, +STORE, 94170740248576, 94170740346879, +STORE, 94170740346880, 94170740367359, +STORE, 140024788877312, 140024789049343, +ERASE, 140024788877312, 140024788877312, +STORE, 140024788877312, 140024788881407, +STORE, 140024788881408, 140024789049343, +ERASE, 140024788881408, 140024788881408, +STORE, 140024788881408, 140024789004287, +STORE, 140024789004288, 140024789037055, +STORE, 140024789037056, 140024789045247, +STORE, 140024789045248, 140024789049343, +STORE, 140733499023360, 140733499027455, +STORE, 140733499011072, 140733499023359, +STORE, 47608006119424, 47608006127615, +STORE, 47608006127616, 47608006135807, +STORE, 47608006135808, 47608006242303, +STORE, 47608006152192, 47608006242303, +STORE, 47608006135808, 47608006152191, +ERASE, 47608006152192, 47608006152192, +STORE, 47608006152192, 47608006225919, +STORE, 47608006225920, 47608006242303, +STORE, 47608006205440, 47608006225919, +STORE, 47608006152192, 47608006205439, +ERASE, 47608006152192, 47608006152192, +STORE, 47608006152192, 47608006205439, +STORE, 47608006221824, 47608006225919, +STORE, 47608006205440, 47608006221823, +ERASE, 47608006205440, 47608006205440, +STORE, 47608006205440, 47608006221823, +STORE, 47608006234112, 47608006242303, +STORE, 47608006225920, 47608006234111, +ERASE, 47608006225920, 47608006225920, +STORE, 47608006225920, 47608006234111, +ERASE, 47608006234112, 47608006234112, +STORE, 47608006234112, 47608006242303, +STORE, 47608006242304, 47608008081407, +STORE, 47608006381568, 47608008081407, +STORE, 47608006242304, 47608006381567, +ERASE, 47608006381568, 47608006381568, +STORE, 47608006381568, 47608008040447, +STORE, 47608008040448, 47608008081407, +STORE, 47608007725056, 47608008040447, +STORE, 47608006381568, 47608007725055, +ERASE, 47608006381568, 47608006381568, +STORE, 47608006381568, 47608007725055, +STORE, 47608008036352, 47608008040447, +STORE, 47608007725056, 47608008036351, +ERASE, 47608007725056, 47608007725056, +STORE, 47608007725056, 47608008036351, +STORE, 47608008065024, 47608008081407, +STORE, 47608008040448, 47608008065023, +ERASE, 47608008040448, 47608008040448, +STORE, 47608008040448, 47608008065023, +ERASE, 47608008065024, 47608008065024, +STORE, 47608008065024, 47608008081407, +STORE, 47608008065024, 47608008093695, +ERASE, 47608008040448, 47608008040448, +STORE, 47608008040448, 47608008056831, +STORE, 47608008056832, 47608008065023, +ERASE, 47608006225920, 47608006225920, +STORE, 47608006225920, 47608006230015, +STORE, 47608006230016, 47608006234111, +ERASE, 94170740346880, 94170740346880, +STORE, 94170740346880, 94170740363263, +STORE, 94170740363264, 94170740367359, +ERASE, 140024789037056, 140024789037056, +STORE, 140024789037056, 140024789041151, +STORE, 140024789041152, 140024789045247, +ERASE, 47608006119424, 47608006119424, +STORE, 140737488347136, 140737488351231, +STORE, 140730264326144, 140737488351231, +ERASE, 140730264326144, 140730264326144, +STORE, 140730264326144, 140730264330239, +STORE, 94653216407552, 94653217120255, +ERASE, 94653216407552, 94653216407552, +STORE, 94653216407552, 94653216456703, +STORE, 94653216456704, 94653217120255, +ERASE, 94653216456704, 94653216456704, +STORE, 94653216456704, 94653217001471, +STORE, 94653217001472, 94653217099775, +STORE, 94653217099776, 94653217120255, +STORE, 140103617011712, 140103617183743, +ERASE, 140103617011712, 140103617011712, +STORE, 140103617011712, 140103617015807, +STORE, 140103617015808, 140103617183743, +ERASE, 140103617015808, 140103617015808, +STORE, 140103617015808, 140103617138687, +STORE, 140103617138688, 140103617171455, +STORE, 140103617171456, 140103617179647, +STORE, 140103617179648, 140103617183743, +STORE, 140730265427968, 140730265432063, +STORE, 140730265415680, 140730265427967, +STORE, 47529177985024, 47529177993215, +STORE, 47529177993216, 47529178001407, +STORE, 47529178001408, 47529178107903, +STORE, 47529178017792, 47529178107903, +STORE, 47529178001408, 47529178017791, +ERASE, 47529178017792, 47529178017792, +STORE, 47529178017792, 47529178091519, +STORE, 47529178091520, 47529178107903, +STORE, 47529178071040, 47529178091519, +STORE, 47529178017792, 47529178071039, +ERASE, 47529178017792, 47529178017792, +STORE, 47529178017792, 47529178071039, +STORE, 47529178087424, 47529178091519, +STORE, 47529178071040, 47529178087423, +ERASE, 47529178071040, 47529178071040, +STORE, 47529178071040, 47529178087423, +STORE, 47529178099712, 47529178107903, +STORE, 47529178091520, 47529178099711, +ERASE, 47529178091520, 47529178091520, +STORE, 47529178091520, 47529178099711, +ERASE, 47529178099712, 47529178099712, +STORE, 47529178099712, 47529178107903, +STORE, 47529178107904, 47529179947007, +STORE, 47529178247168, 47529179947007, +STORE, 47529178107904, 47529178247167, +ERASE, 47529178247168, 47529178247168, +STORE, 47529178247168, 47529179906047, +STORE, 47529179906048, 47529179947007, +STORE, 47529179590656, 47529179906047, +STORE, 47529178247168, 47529179590655, +ERASE, 47529178247168, 47529178247168, +STORE, 47529178247168, 47529179590655, +STORE, 47529179901952, 47529179906047, +STORE, 47529179590656, 47529179901951, +ERASE, 47529179590656, 47529179590656, +STORE, 47529179590656, 47529179901951, +STORE, 47529179930624, 47529179947007, +STORE, 47529179906048, 47529179930623, +ERASE, 47529179906048, 47529179906048, +STORE, 47529179906048, 47529179930623, +ERASE, 47529179930624, 47529179930624, +STORE, 47529179930624, 47529179947007, +STORE, 47529179930624, 47529179959295, +ERASE, 47529179906048, 47529179906048, +STORE, 47529179906048, 47529179922431, +STORE, 47529179922432, 47529179930623, +ERASE, 47529178091520, 47529178091520, +STORE, 47529178091520, 47529178095615, +STORE, 47529178095616, 47529178099711, +ERASE, 94653217099776, 94653217099776, +STORE, 94653217099776, 94653217116159, +STORE, 94653217116160, 94653217120255, +ERASE, 140103617171456, 140103617171456, +STORE, 140103617171456, 140103617175551, +STORE, 140103617175552, 140103617179647, +ERASE, 47529177985024, 47529177985024, +STORE, 94653241135104, 94653241270271, +STORE, 140737488347136, 140737488351231, +STORE, 140736284549120, 140737488351231, +ERASE, 140736284549120, 140736284549120, +STORE, 140736284549120, 140736284553215, +STORE, 93963663822848, 93963664506879, +ERASE, 93963663822848, 93963663822848, +STORE, 93963663822848, 93963663884287, +STORE, 93963663884288, 93963664506879, +ERASE, 93963663884288, 93963663884288, +STORE, 93963663884288, 93963664240639, +STORE, 93963664240640, 93963664379903, +STORE, 93963664379904, 93963664506879, +STORE, 140450188439552, 140450188611583, +ERASE, 140450188439552, 140450188439552, +STORE, 140450188439552, 140450188443647, +STORE, 140450188443648, 140450188611583, +ERASE, 140450188443648, 140450188443648, +STORE, 140450188443648, 140450188566527, +STORE, 140450188566528, 140450188599295, +STORE, 140450188599296, 140450188607487, +STORE, 140450188607488, 140450188611583, +STORE, 140736284577792, 140736284581887, +STORE, 140736284565504, 140736284577791, +STORE, 47182606557184, 47182606565375, +STORE, 47182606565376, 47182606573567, +STORE, 47182606573568, 47182608412671, +STORE, 47182606712832, 47182608412671, +STORE, 47182606573568, 47182606712831, +ERASE, 47182606712832, 47182606712832, +STORE, 47182606712832, 47182608371711, +STORE, 47182608371712, 47182608412671, +STORE, 47182608056320, 47182608371711, +STORE, 47182606712832, 47182608056319, +ERASE, 47182606712832, 47182606712832, +STORE, 47182606712832, 47182608056319, +STORE, 47182608367616, 47182608371711, +STORE, 47182608056320, 47182608367615, +ERASE, 47182608056320, 47182608056320, +STORE, 47182608056320, 47182608367615, +STORE, 47182608396288, 47182608412671, +STORE, 47182608371712, 47182608396287, +ERASE, 47182608371712, 47182608371712, +STORE, 47182608371712, 47182608396287, +ERASE, 47182608396288, 47182608396288, +STORE, 47182608396288, 47182608412671, +STORE, 47182608412672, 47182608523263, +STORE, 47182608429056, 47182608523263, +STORE, 47182608412672, 47182608429055, +ERASE, 47182608429056, 47182608429056, +STORE, 47182608429056, 47182608515071, +STORE, 47182608515072, 47182608523263, +STORE, 47182608490496, 47182608515071, +STORE, 47182608429056, 47182608490495, +ERASE, 47182608429056, 47182608429056, +STORE, 47182608429056, 47182608490495, +STORE, 47182608510976, 47182608515071, +STORE, 47182608490496, 47182608510975, +ERASE, 47182608490496, 47182608490496, +STORE, 47182608490496, 47182608510975, +ERASE, 47182608515072, 47182608515072, +STORE, 47182608515072, 47182608523263, +STORE, 47182608523264, 47182608568319, +ERASE, 47182608523264, 47182608523264, +STORE, 47182608523264, 47182608531455, +STORE, 47182608531456, 47182608568319, +STORE, 47182608551936, 47182608568319, +STORE, 47182608531456, 47182608551935, +ERASE, 47182608531456, 47182608531456, +STORE, 47182608531456, 47182608551935, +STORE, 47182608560128, 47182608568319, +STORE, 47182608551936, 47182608560127, +ERASE, 47182608551936, 47182608551936, +STORE, 47182608551936, 47182608568319, +ERASE, 47182608551936, 47182608551936, +STORE, 47182608551936, 47182608560127, +STORE, 47182608560128, 47182608568319, +ERASE, 47182608560128, 47182608560128, +STORE, 47182608560128, 47182608568319, +STORE, 47182608568320, 47182608916479, +STORE, 47182608609280, 47182608916479, +STORE, 47182608568320, 47182608609279, +ERASE, 47182608609280, 47182608609280, +STORE, 47182608609280, 47182608891903, +STORE, 47182608891904, 47182608916479, +STORE, 47182608822272, 47182608891903, +STORE, 47182608609280, 47182608822271, +ERASE, 47182608609280, 47182608609280, +STORE, 47182608609280, 47182608822271, +STORE, 47182608887808, 47182608891903, +STORE, 47182608822272, 47182608887807, +ERASE, 47182608822272, 47182608822272, +STORE, 47182608822272, 47182608887807, +ERASE, 47182608891904, 47182608891904, +STORE, 47182608891904, 47182608916479, +STORE, 47182608916480, 47182611177471, +STORE, 47182609068032, 47182611177471, +STORE, 47182608916480, 47182609068031, +ERASE, 47182609068032, 47182609068032, +STORE, 47182609068032, 47182611161087, +STORE, 47182611161088, 47182611177471, +STORE, 47182611169280, 47182611177471, +STORE, 47182611161088, 47182611169279, +ERASE, 47182611161088, 47182611161088, +STORE, 47182611161088, 47182611169279, +ERASE, 47182611169280, 47182611169280, +STORE, 47182611169280, 47182611177471, +STORE, 47182611177472, 47182611312639, +ERASE, 47182611177472, 47182611177472, +STORE, 47182611177472, 47182611202047, +STORE, 47182611202048, 47182611312639, +STORE, 47182611263488, 47182611312639, +STORE, 47182611202048, 47182611263487, +ERASE, 47182611202048, 47182611202048, +STORE, 47182611202048, 47182611263487, +STORE, 47182611288064, 47182611312639, +STORE, 47182611263488, 47182611288063, +ERASE, 47182611263488, 47182611263488, +STORE, 47182611263488, 47182611312639, +ERASE, 47182611263488, 47182611263488, +STORE, 47182611263488, 47182611288063, +STORE, 47182611288064, 47182611312639, +STORE, 47182611296256, 47182611312639, +STORE, 47182611288064, 47182611296255, +ERASE, 47182611288064, 47182611288064, +STORE, 47182611288064, 47182611296255, +ERASE, 47182611296256, 47182611296256, +STORE, 47182611296256, 47182611312639, +STORE, 47182611296256, 47182611320831, +STORE, 47182611320832, 47182611484671, +ERASE, 47182611320832, 47182611320832, +STORE, 47182611320832, 47182611333119, +STORE, 47182611333120, 47182611484671, +STORE, 47182611431424, 47182611484671, +STORE, 47182611333120, 47182611431423, +ERASE, 47182611333120, 47182611333120, +STORE, 47182611333120, 47182611431423, +STORE, 47182611476480, 47182611484671, +STORE, 47182611431424, 47182611476479, +ERASE, 47182611431424, 47182611431424, +STORE, 47182611431424, 47182611484671, +ERASE, 47182611431424, 47182611431424, +STORE, 47182611431424, 47182611476479, +STORE, 47182611476480, 47182611484671, +ERASE, 47182611476480, 47182611476480, +STORE, 47182611476480, 47182611484671, +STORE, 47182611484672, 47182612082687, +STORE, 47182611603456, 47182612082687, +STORE, 47182611484672, 47182611603455, +ERASE, 47182611603456, 47182611603456, +STORE, 47182611603456, 47182612029439, +STORE, 47182612029440, 47182612082687, +STORE, 47182611918848, 47182612029439, +STORE, 47182611603456, 47182611918847, +ERASE, 47182611603456, 47182611603456, +STORE, 47182611603456, 47182611918847, +STORE, 47182612025344, 47182612029439, +STORE, 47182611918848, 47182612025343, +ERASE, 47182611918848, 47182611918848, +STORE, 47182611918848, 47182612025343, +ERASE, 47182612029440, 47182612029440, +STORE, 47182612029440, 47182612082687, +STORE, 47182612082688, 47182615134207, +STORE, 47182612627456, 47182615134207, +STORE, 47182612082688, 47182612627455, +ERASE, 47182612627456, 47182612627456, +STORE, 47182612627456, 47182614913023, +STORE, 47182614913024, 47182615134207, +STORE, 47182614323200, 47182614913023, +STORE, 47182612627456, 47182614323199, +ERASE, 47182612627456, 47182612627456, +STORE, 47182612627456, 47182614323199, +STORE, 47182614908928, 47182614913023, +STORE, 47182614323200, 47182614908927, +ERASE, 47182614323200, 47182614323200, +STORE, 47182614323200, 47182614908927, +STORE, 47182615117824, 47182615134207, +STORE, 47182614913024, 47182615117823, +ERASE, 47182614913024, 47182614913024, +STORE, 47182614913024, 47182615117823, +ERASE, 47182615117824, 47182615117824, +STORE, 47182615117824, 47182615134207, +STORE, 47182615134208, 47182615166975, +ERASE, 47182615134208, 47182615134208, +STORE, 47182615134208, 47182615142399, +STORE, 47182615142400, 47182615166975, +STORE, 47182615154688, 47182615166975, +STORE, 47182615142400, 47182615154687, +ERASE, 47182615142400, 47182615142400, +STORE, 47182615142400, 47182615154687, +STORE, 47182615158784, 47182615166975, +STORE, 47182615154688, 47182615158783, +ERASE, 47182615154688, 47182615154688, +STORE, 47182615154688, 47182615166975, +ERASE, 47182615154688, 47182615154688, +STORE, 47182615154688, 47182615158783, +STORE, 47182615158784, 47182615166975, +ERASE, 47182615158784, 47182615158784, +STORE, 47182615158784, 47182615166975, +STORE, 47182615166976, 47182615203839, +ERASE, 47182615166976, 47182615166976, +STORE, 47182615166976, 47182615175167, +STORE, 47182615175168, 47182615203839, +STORE, 47182615191552, 47182615203839, +STORE, 47182615175168, 47182615191551, +ERASE, 47182615175168, 47182615175168, +STORE, 47182615175168, 47182615191551, +STORE, 47182615195648, 47182615203839, +STORE, 47182615191552, 47182615195647, +ERASE, 47182615191552, 47182615191552, +STORE, 47182615191552, 47182615203839, +ERASE, 47182615191552, 47182615191552, +STORE, 47182615191552, 47182615195647, +STORE, 47182615195648, 47182615203839, +ERASE, 47182615195648, 47182615195648, +STORE, 47182615195648, 47182615203839, +STORE, 47182615203840, 47182615678975, +ERASE, 47182615203840, 47182615203840, +STORE, 47182615203840, 47182615212031, +STORE, 47182615212032, 47182615678975, +STORE, 47182615547904, 47182615678975, +STORE, 47182615212032, 47182615547903, +ERASE, 47182615212032, 47182615212032, +STORE, 47182615212032, 47182615547903, +STORE, 47182615670784, 47182615678975, +STORE, 47182615547904, 47182615670783, +ERASE, 47182615547904, 47182615547904, +STORE, 47182615547904, 47182615678975, +ERASE, 47182615547904, 47182615547904, +STORE, 47182615547904, 47182615670783, +STORE, 47182615670784, 47182615678975, +ERASE, 47182615670784, 47182615670784, +STORE, 47182615670784, 47182615678975, +STORE, 47182615678976, 47182615687167, +STORE, 47182615687168, 47182615707647, +ERASE, 47182615687168, 47182615687168, +STORE, 47182615687168, 47182615691263, +STORE, 47182615691264, 47182615707647, +STORE, 47182615695360, 47182615707647, +STORE, 47182615691264, 47182615695359, +ERASE, 47182615691264, 47182615691264, +STORE, 47182615691264, 47182615695359, +STORE, 47182615699456, 47182615707647, +STORE, 47182615695360, 47182615699455, +ERASE, 47182615695360, 47182615695360, +STORE, 47182615695360, 47182615707647, +ERASE, 47182615695360, 47182615695360, +STORE, 47182615695360, 47182615699455, +STORE, 47182615699456, 47182615707647, +ERASE, 47182615699456, 47182615699456, +STORE, 47182615699456, 47182615707647, +STORE, 47182615707648, 47182615715839, +ERASE, 47182608371712, 47182608371712, +STORE, 47182608371712, 47182608388095, +STORE, 47182608388096, 47182608396287, +ERASE, 47182615699456, 47182615699456, +STORE, 47182615699456, 47182615703551, +STORE, 47182615703552, 47182615707647, +ERASE, 47182611288064, 47182611288064, +STORE, 47182611288064, 47182611292159, +STORE, 47182611292160, 47182611296255, +ERASE, 47182615670784, 47182615670784, +STORE, 47182615670784, 47182615674879, +STORE, 47182615674880, 47182615678975, +ERASE, 47182615195648, 47182615195648, +STORE, 47182615195648, 47182615199743, +STORE, 47182615199744, 47182615203839, +ERASE, 47182615158784, 47182615158784, +STORE, 47182615158784, 47182615162879, +STORE, 47182615162880, 47182615166975, +ERASE, 47182614913024, 47182614913024, +STORE, 47182614913024, 47182615109631, +STORE, 47182615109632, 47182615117823, +ERASE, 47182612029440, 47182612029440, +STORE, 47182612029440, 47182612066303, +STORE, 47182612066304, 47182612082687, +ERASE, 47182611476480, 47182611476480, +STORE, 47182611476480, 47182611480575, +STORE, 47182611480576, 47182611484671, +ERASE, 47182611161088, 47182611161088, +STORE, 47182611161088, 47182611165183, +STORE, 47182611165184, 47182611169279, +ERASE, 47182608891904, 47182608891904, +STORE, 47182608891904, 47182608912383, +STORE, 47182608912384, 47182608916479, +ERASE, 47182608560128, 47182608560128, +STORE, 47182608560128, 47182608564223, +STORE, 47182608564224, 47182608568319, +ERASE, 47182608515072, 47182608515072, +STORE, 47182608515072, 47182608519167, +STORE, 47182608519168, 47182608523263, +ERASE, 93963664379904, 93963664379904, +STORE, 93963664379904, 93963664502783, +STORE, 93963664502784, 93963664506879, +ERASE, 140450188599296, 140450188599296, +STORE, 140450188599296, 140450188603391, +STORE, 140450188603392, 140450188607487, +ERASE, 47182606557184, 47182606557184, +STORE, 93963694723072, 93963694858239, +STORE, 140737488347136, 140737488351231, +STORE, 140730313261056, 140737488351231, +ERASE, 140730313261056, 140730313261056, +STORE, 140730313261056, 140730313265151, +STORE, 94386579017728, 94386579697663, +ERASE, 94386579017728, 94386579017728, +STORE, 94386579017728, 94386579083263, +STORE, 94386579083264, 94386579697663, +ERASE, 94386579083264, 94386579083264, +STORE, 94386579083264, 94386579431423, +STORE, 94386579431424, 94386579570687, +STORE, 94386579570688, 94386579697663, +STORE, 140124810838016, 140124811010047, +ERASE, 140124810838016, 140124810838016, +STORE, 140124810838016, 140124810842111, +STORE, 140124810842112, 140124811010047, +ERASE, 140124810842112, 140124810842112, +STORE, 140124810842112, 140124810964991, +STORE, 140124810964992, 140124810997759, +STORE, 140124810997760, 140124811005951, +STORE, 140124811005952, 140124811010047, +STORE, 140730313601024, 140730313605119, +STORE, 140730313588736, 140730313601023, +STORE, 47507984158720, 47507984166911, +STORE, 47507984166912, 47507984175103, +STORE, 47507984175104, 47507986014207, +STORE, 47507984314368, 47507986014207, +STORE, 47507984175104, 47507984314367, +ERASE, 47507984314368, 47507984314368, +STORE, 47507984314368, 47507985973247, +STORE, 47507985973248, 47507986014207, +STORE, 47507985657856, 47507985973247, +STORE, 47507984314368, 47507985657855, +ERASE, 47507984314368, 47507984314368, +STORE, 47507984314368, 47507985657855, +STORE, 47507985969152, 47507985973247, +STORE, 47507985657856, 47507985969151, +ERASE, 47507985657856, 47507985657856, +STORE, 47507985657856, 47507985969151, +STORE, 47507985997824, 47507986014207, +STORE, 47507985973248, 47507985997823, +ERASE, 47507985973248, 47507985973248, +STORE, 47507985973248, 47507985997823, +ERASE, 47507985997824, 47507985997824, +STORE, 47507985997824, 47507986014207, +STORE, 47507986014208, 47507986124799, +STORE, 47507986030592, 47507986124799, +STORE, 47507986014208, 47507986030591, +ERASE, 47507986030592, 47507986030592, +STORE, 47507986030592, 47507986116607, +STORE, 47507986116608, 47507986124799, +STORE, 47507986092032, 47507986116607, +STORE, 47507986030592, 47507986092031, +ERASE, 47507986030592, 47507986030592, +STORE, 47507986030592, 47507986092031, +STORE, 47507986112512, 47507986116607, +STORE, 47507986092032, 47507986112511, +ERASE, 47507986092032, 47507986092032, +STORE, 47507986092032, 47507986112511, +ERASE, 47507986116608, 47507986116608, +STORE, 47507986116608, 47507986124799, +STORE, 47507986124800, 47507986169855, +ERASE, 47507986124800, 47507986124800, +STORE, 47507986124800, 47507986132991, +STORE, 47507986132992, 47507986169855, +STORE, 47507986153472, 47507986169855, +STORE, 47507986132992, 47507986153471, +ERASE, 47507986132992, 47507986132992, +STORE, 47507986132992, 47507986153471, +STORE, 47507986161664, 47507986169855, +STORE, 47507986153472, 47507986161663, +ERASE, 47507986153472, 47507986153472, +STORE, 47507986153472, 47507986169855, +ERASE, 47507986153472, 47507986153472, +STORE, 47507986153472, 47507986161663, +STORE, 47507986161664, 47507986169855, +ERASE, 47507986161664, 47507986161664, +STORE, 47507986161664, 47507986169855, +STORE, 47507986169856, 47507986518015, +STORE, 47507986210816, 47507986518015, +STORE, 47507986169856, 47507986210815, +ERASE, 47507986210816, 47507986210816, +STORE, 47507986210816, 47507986493439, +STORE, 47507986493440, 47507986518015, +STORE, 47507986423808, 47507986493439, +STORE, 47507986210816, 47507986423807, +ERASE, 47507986210816, 47507986210816, +STORE, 47507986210816, 47507986423807, +STORE, 47507986489344, 47507986493439, +STORE, 47507986423808, 47507986489343, +ERASE, 47507986423808, 47507986423808, +STORE, 47507986423808, 47507986489343, +ERASE, 47507986493440, 47507986493440, +STORE, 47507986493440, 47507986518015, +STORE, 47507986518016, 47507988779007, +STORE, 47507986669568, 47507988779007, +STORE, 47507986518016, 47507986669567, +ERASE, 47507986669568, 47507986669568, +STORE, 47507986669568, 47507988762623, +STORE, 47507988762624, 47507988779007, +STORE, 47507988770816, 47507988779007, +STORE, 47507988762624, 47507988770815, +ERASE, 47507988762624, 47507988762624, +STORE, 47507988762624, 47507988770815, +ERASE, 47507988770816, 47507988770816, +STORE, 47507988770816, 47507988779007, +STORE, 47507988779008, 47507988914175, +ERASE, 47507988779008, 47507988779008, +STORE, 47507988779008, 47507988803583, +STORE, 47507988803584, 47507988914175, +STORE, 47507988865024, 47507988914175, +STORE, 47507988803584, 47507988865023, +ERASE, 47507988803584, 47507988803584, +STORE, 47507988803584, 47507988865023, +STORE, 47507988889600, 47507988914175, +STORE, 47507988865024, 47507988889599, +ERASE, 47507988865024, 47507988865024, +STORE, 47507988865024, 47507988914175, +ERASE, 47507988865024, 47507988865024, +STORE, 47507988865024, 47507988889599, +STORE, 47507988889600, 47507988914175, +STORE, 47507988897792, 47507988914175, +STORE, 47507988889600, 47507988897791, +ERASE, 47507988889600, 47507988889600, +STORE, 47507988889600, 47507988897791, +ERASE, 47507988897792, 47507988897792, +STORE, 47507988897792, 47507988914175, +STORE, 47507988897792, 47507988922367, +STORE, 47507988922368, 47507989086207, +ERASE, 47507988922368, 47507988922368, +STORE, 47507988922368, 47507988934655, +STORE, 47507988934656, 47507989086207, +STORE, 47507989032960, 47507989086207, +STORE, 47507988934656, 47507989032959, +ERASE, 47507988934656, 47507988934656, +STORE, 47507988934656, 47507989032959, +STORE, 47507989078016, 47507989086207, +STORE, 47507989032960, 47507989078015, +ERASE, 47507989032960, 47507989032960, +STORE, 47507989032960, 47507989086207, +ERASE, 47507989032960, 47507989032960, +STORE, 47507989032960, 47507989078015, +STORE, 47507989078016, 47507989086207, +ERASE, 47507989078016, 47507989078016, +STORE, 47507989078016, 47507989086207, +STORE, 47507989086208, 47507989684223, +STORE, 47507989204992, 47507989684223, +STORE, 47507989086208, 47507989204991, +ERASE, 47507989204992, 47507989204992, +STORE, 47507989204992, 47507989630975, +STORE, 47507989630976, 47507989684223, +STORE, 47507989520384, 47507989630975, +STORE, 47507989204992, 47507989520383, +ERASE, 47507989204992, 47507989204992, +STORE, 47507989204992, 47507989520383, +STORE, 47507989626880, 47507989630975, +STORE, 47507989520384, 47507989626879, +ERASE, 47507989520384, 47507989520384, +STORE, 47507989520384, 47507989626879, +ERASE, 47507989630976, 47507989630976, +STORE, 47507989630976, 47507989684223, +STORE, 47507989684224, 47507992735743, +STORE, 47507990228992, 47507992735743, +STORE, 47507989684224, 47507990228991, +ERASE, 47507990228992, 47507990228992, +STORE, 47507990228992, 47507992514559, +STORE, 47507992514560, 47507992735743, +STORE, 47507991924736, 47507992514559, +STORE, 47507990228992, 47507991924735, +ERASE, 47507990228992, 47507990228992, +STORE, 47507990228992, 47507991924735, +STORE, 47507992510464, 47507992514559, +STORE, 47507991924736, 47507992510463, +ERASE, 47507991924736, 47507991924736, +STORE, 47507991924736, 47507992510463, +STORE, 47507992719360, 47507992735743, +STORE, 47507992514560, 47507992719359, +ERASE, 47507992514560, 47507992514560, +STORE, 47507992514560, 47507992719359, +ERASE, 47507992719360, 47507992719360, +STORE, 47507992719360, 47507992735743, +STORE, 47507992735744, 47507992768511, +ERASE, 47507992735744, 47507992735744, +STORE, 47507992735744, 47507992743935, +STORE, 47507992743936, 47507992768511, +STORE, 47507992756224, 47507992768511, +STORE, 47507992743936, 47507992756223, +ERASE, 47507992743936, 47507992743936, +STORE, 47507992743936, 47507992756223, +STORE, 47507992760320, 47507992768511, +STORE, 47507992756224, 47507992760319, +ERASE, 47507992756224, 47507992756224, +STORE, 47507992756224, 47507992768511, +ERASE, 47507992756224, 47507992756224, +STORE, 47507992756224, 47507992760319, +STORE, 47507992760320, 47507992768511, +ERASE, 47507992760320, 47507992760320, +STORE, 47507992760320, 47507992768511, +STORE, 47507992768512, 47507992805375, +ERASE, 47507992768512, 47507992768512, +STORE, 47507992768512, 47507992776703, +STORE, 47507992776704, 47507992805375, +STORE, 47507992793088, 47507992805375, +STORE, 47507992776704, 47507992793087, +ERASE, 47507992776704, 47507992776704, +STORE, 47507992776704, 47507992793087, +STORE, 47507992797184, 47507992805375, +STORE, 47507992793088, 47507992797183, +ERASE, 47507992793088, 47507992793088, +STORE, 47507992793088, 47507992805375, +ERASE, 47507992793088, 47507992793088, +STORE, 47507992793088, 47507992797183, +STORE, 47507992797184, 47507992805375, +ERASE, 47507992797184, 47507992797184, +STORE, 47507992797184, 47507992805375, +STORE, 47507992805376, 47507993280511, +ERASE, 47507992805376, 47507992805376, +STORE, 47507992805376, 47507992813567, +STORE, 47507992813568, 47507993280511, +STORE, 47507993149440, 47507993280511, +STORE, 47507992813568, 47507993149439, +ERASE, 47507992813568, 47507992813568, +STORE, 47507992813568, 47507993149439, +STORE, 47507993272320, 47507993280511, +STORE, 47507993149440, 47507993272319, +ERASE, 47507993149440, 47507993149440, +STORE, 47507993149440, 47507993280511, +ERASE, 47507993149440, 47507993149440, +STORE, 47507993149440, 47507993272319, +STORE, 47507993272320, 47507993280511, +ERASE, 47507993272320, 47507993272320, +STORE, 47507993272320, 47507993280511, +STORE, 47507993280512, 47507993288703, +STORE, 47507993288704, 47507993309183, +ERASE, 47507993288704, 47507993288704, +STORE, 47507993288704, 47507993292799, +STORE, 47507993292800, 47507993309183, +STORE, 47507993296896, 47507993309183, +STORE, 47507993292800, 47507993296895, +ERASE, 47507993292800, 47507993292800, +STORE, 47507993292800, 47507993296895, +STORE, 47507993300992, 47507993309183, +STORE, 47507993296896, 47507993300991, +ERASE, 47507993296896, 47507993296896, +STORE, 47507993296896, 47507993309183, +ERASE, 47507993296896, 47507993296896, +STORE, 47507993296896, 47507993300991, +STORE, 47507993300992, 47507993309183, +ERASE, 47507993300992, 47507993300992, +STORE, 47507993300992, 47507993309183, +STORE, 47507993309184, 47507993317375, +ERASE, 47507985973248, 47507985973248, +STORE, 47507985973248, 47507985989631, +STORE, 47507985989632, 47507985997823, +ERASE, 47507993300992, 47507993300992, +STORE, 47507993300992, 47507993305087, +STORE, 47507993305088, 47507993309183, +ERASE, 47507988889600, 47507988889600, +STORE, 47507988889600, 47507988893695, +STORE, 47507988893696, 47507988897791, +ERASE, 47507993272320, 47507993272320, +STORE, 47507993272320, 47507993276415, +STORE, 47507993276416, 47507993280511, +ERASE, 47507992797184, 47507992797184, +STORE, 47507992797184, 47507992801279, +STORE, 47507992801280, 47507992805375, +ERASE, 47507992760320, 47507992760320, +STORE, 47507992760320, 47507992764415, +STORE, 47507992764416, 47507992768511, +ERASE, 47507992514560, 47507992514560, +STORE, 47507992514560, 47507992711167, +STORE, 47507992711168, 47507992719359, +ERASE, 47507989630976, 47507989630976, +STORE, 47507989630976, 47507989667839, +STORE, 47507989667840, 47507989684223, +ERASE, 47507989078016, 47507989078016, +STORE, 47507989078016, 47507989082111, +STORE, 47507989082112, 47507989086207, +ERASE, 47507988762624, 47507988762624, +STORE, 47507988762624, 47507988766719, +STORE, 47507988766720, 47507988770815, +ERASE, 47507986493440, 47507986493440, +STORE, 47507986493440, 47507986513919, +STORE, 47507986513920, 47507986518015, +ERASE, 47507986161664, 47507986161664, +STORE, 47507986161664, 47507986165759, +STORE, 47507986165760, 47507986169855, +ERASE, 47507986116608, 47507986116608, +STORE, 47507986116608, 47507986120703, +STORE, 47507986120704, 47507986124799, +ERASE, 94386579570688, 94386579570688, +STORE, 94386579570688, 94386579693567, +STORE, 94386579693568, 94386579697663, +ERASE, 140124810997760, 140124810997760, +STORE, 140124810997760, 140124811001855, +STORE, 140124811001856, 140124811005951, +ERASE, 47507984158720, 47507984158720, +STORE, 94386583982080, 94386584117247, +STORE, 94386583982080, 94386584256511, +ERASE, 94386583982080, 94386583982080, +STORE, 94386583982080, 94386584223743, +STORE, 94386584223744, 94386584256511, +ERASE, 94386584223744, 94386584223744, +STORE, 140737488347136, 140737488351231, +STORE, 140733763395584, 140737488351231, +ERASE, 140733763395584, 140733763395584, +STORE, 140733763395584, 140733763399679, +STORE, 94011546472448, 94011547152383, +ERASE, 94011546472448, 94011546472448, +STORE, 94011546472448, 94011546537983, +STORE, 94011546537984, 94011547152383, +ERASE, 94011546537984, 94011546537984, +STORE, 94011546537984, 94011546886143, +STORE, 94011546886144, 94011547025407, +STORE, 94011547025408, 94011547152383, +STORE, 139757597949952, 139757598121983, +ERASE, 139757597949952, 139757597949952, +STORE, 139757597949952, 139757597954047, +STORE, 139757597954048, 139757598121983, +ERASE, 139757597954048, 139757597954048, +STORE, 139757597954048, 139757598076927, +STORE, 139757598076928, 139757598109695, +STORE, 139757598109696, 139757598117887, +STORE, 139757598117888, 139757598121983, +STORE, 140733763596288, 140733763600383, +STORE, 140733763584000, 140733763596287, +STORE, 47875197046784, 47875197054975, +STORE, 47875197054976, 47875197063167, +STORE, 47875197063168, 47875198902271, +STORE, 47875197202432, 47875198902271, +STORE, 47875197063168, 47875197202431, +ERASE, 47875197202432, 47875197202432, +STORE, 47875197202432, 47875198861311, +STORE, 47875198861312, 47875198902271, +STORE, 47875198545920, 47875198861311, +STORE, 47875197202432, 47875198545919, +ERASE, 47875197202432, 47875197202432, +STORE, 47875197202432, 47875198545919, +STORE, 47875198857216, 47875198861311, +STORE, 47875198545920, 47875198857215, +ERASE, 47875198545920, 47875198545920, +STORE, 47875198545920, 47875198857215, +STORE, 47875198885888, 47875198902271, +STORE, 47875198861312, 47875198885887, +ERASE, 47875198861312, 47875198861312, +STORE, 47875198861312, 47875198885887, +ERASE, 47875198885888, 47875198885888, +STORE, 47875198885888, 47875198902271, +STORE, 47875198902272, 47875199012863, +STORE, 47875198918656, 47875199012863, +STORE, 47875198902272, 47875198918655, +ERASE, 47875198918656, 47875198918656, +STORE, 47875198918656, 47875199004671, +STORE, 47875199004672, 47875199012863, +STORE, 47875198980096, 47875199004671, +STORE, 47875198918656, 47875198980095, +ERASE, 47875198918656, 47875198918656, +STORE, 47875198918656, 47875198980095, +STORE, 47875199000576, 47875199004671, +STORE, 47875198980096, 47875199000575, +ERASE, 47875198980096, 47875198980096, +STORE, 47875198980096, 47875199000575, +ERASE, 47875199004672, 47875199004672, +STORE, 47875199004672, 47875199012863, +STORE, 47875199012864, 47875199057919, +ERASE, 47875199012864, 47875199012864, +STORE, 47875199012864, 47875199021055, +STORE, 47875199021056, 47875199057919, +STORE, 47875199041536, 47875199057919, +STORE, 47875199021056, 47875199041535, +ERASE, 47875199021056, 47875199021056, +STORE, 47875199021056, 47875199041535, +STORE, 47875199049728, 47875199057919, +STORE, 47875199041536, 47875199049727, +ERASE, 47875199041536, 47875199041536, +STORE, 47875199041536, 47875199057919, +ERASE, 47875199041536, 47875199041536, +STORE, 47875199041536, 47875199049727, +STORE, 47875199049728, 47875199057919, +ERASE, 47875199049728, 47875199049728, +STORE, 47875199049728, 47875199057919, +STORE, 47875199057920, 47875199406079, +STORE, 47875199098880, 47875199406079, +STORE, 47875199057920, 47875199098879, +ERASE, 47875199098880, 47875199098880, +STORE, 47875199098880, 47875199381503, +STORE, 47875199381504, 47875199406079, +STORE, 47875199311872, 47875199381503, +STORE, 47875199098880, 47875199311871, +ERASE, 47875199098880, 47875199098880, +STORE, 47875199098880, 47875199311871, +STORE, 47875199377408, 47875199381503, +STORE, 47875199311872, 47875199377407, +ERASE, 47875199311872, 47875199311872, +STORE, 47875199311872, 47875199377407, +ERASE, 47875199381504, 47875199381504, +STORE, 47875199381504, 47875199406079, +STORE, 47875199406080, 47875201667071, +STORE, 47875199557632, 47875201667071, +STORE, 47875199406080, 47875199557631, +ERASE, 47875199557632, 47875199557632, +STORE, 47875199557632, 47875201650687, +STORE, 47875201650688, 47875201667071, +STORE, 47875201658880, 47875201667071, +STORE, 47875201650688, 47875201658879, +ERASE, 47875201650688, 47875201650688, +STORE, 47875201650688, 47875201658879, +ERASE, 47875201658880, 47875201658880, +STORE, 47875201658880, 47875201667071, +STORE, 47875201667072, 47875201802239, +ERASE, 47875201667072, 47875201667072, +STORE, 47875201667072, 47875201691647, +STORE, 47875201691648, 47875201802239, +STORE, 47875201753088, 47875201802239, +STORE, 47875201691648, 47875201753087, +ERASE, 47875201691648, 47875201691648, +STORE, 47875201691648, 47875201753087, +STORE, 47875201777664, 47875201802239, +STORE, 47875201753088, 47875201777663, +ERASE, 47875201753088, 47875201753088, +STORE, 47875201753088, 47875201802239, +ERASE, 47875201753088, 47875201753088, +STORE, 47875201753088, 47875201777663, +STORE, 47875201777664, 47875201802239, +STORE, 47875201785856, 47875201802239, +STORE, 47875201777664, 47875201785855, +ERASE, 47875201777664, 47875201777664, +STORE, 47875201777664, 47875201785855, +ERASE, 47875201785856, 47875201785856, +STORE, 47875201785856, 47875201802239, +STORE, 47875201785856, 47875201810431, +STORE, 47875201810432, 47875201974271, +ERASE, 47875201810432, 47875201810432, +STORE, 47875201810432, 47875201822719, +STORE, 47875201822720, 47875201974271, +STORE, 47875201921024, 47875201974271, +STORE, 47875201822720, 47875201921023, +ERASE, 47875201822720, 47875201822720, +STORE, 47875201822720, 47875201921023, +STORE, 47875201966080, 47875201974271, +STORE, 47875201921024, 47875201966079, +ERASE, 47875201921024, 47875201921024, +STORE, 47875201921024, 47875201974271, +ERASE, 47875201921024, 47875201921024, +STORE, 47875201921024, 47875201966079, +STORE, 47875201966080, 47875201974271, +ERASE, 47875201966080, 47875201966080, +STORE, 47875201966080, 47875201974271, +STORE, 47875201974272, 47875202572287, +STORE, 47875202093056, 47875202572287, +STORE, 47875201974272, 47875202093055, +ERASE, 47875202093056, 47875202093056, +STORE, 47875202093056, 47875202519039, +STORE, 47875202519040, 47875202572287, +STORE, 47875202408448, 47875202519039, +STORE, 47875202093056, 47875202408447, +ERASE, 47875202093056, 47875202093056, +STORE, 47875202093056, 47875202408447, +STORE, 47875202514944, 47875202519039, +STORE, 47875202408448, 47875202514943, +ERASE, 47875202408448, 47875202408448, +STORE, 47875202408448, 47875202514943, +ERASE, 47875202519040, 47875202519040, +STORE, 47875202519040, 47875202572287, +STORE, 47875202572288, 47875205623807, +STORE, 47875203117056, 47875205623807, +STORE, 47875202572288, 47875203117055, +ERASE, 47875203117056, 47875203117056, +STORE, 47875203117056, 47875205402623, +STORE, 47875205402624, 47875205623807, +STORE, 47875204812800, 47875205402623, +STORE, 47875203117056, 47875204812799, +ERASE, 47875203117056, 47875203117056, +STORE, 47875203117056, 47875204812799, +STORE, 47875205398528, 47875205402623, +STORE, 47875204812800, 47875205398527, +ERASE, 47875204812800, 47875204812800, +STORE, 47875204812800, 47875205398527, +STORE, 47875205607424, 47875205623807, +STORE, 47875205402624, 47875205607423, +ERASE, 47875205402624, 47875205402624, +STORE, 47875205402624, 47875205607423, +ERASE, 47875205607424, 47875205607424, +STORE, 47875205607424, 47875205623807, +STORE, 47875205623808, 47875205656575, +ERASE, 47875205623808, 47875205623808, +STORE, 47875205623808, 47875205631999, +STORE, 47875205632000, 47875205656575, +STORE, 47875205644288, 47875205656575, +STORE, 47875205632000, 47875205644287, +ERASE, 47875205632000, 47875205632000, +STORE, 47875205632000, 47875205644287, +STORE, 47875205648384, 47875205656575, +STORE, 47875205644288, 47875205648383, +ERASE, 47875205644288, 47875205644288, +STORE, 47875205644288, 47875205656575, +ERASE, 47875205644288, 47875205644288, +STORE, 47875205644288, 47875205648383, +STORE, 47875205648384, 47875205656575, +ERASE, 47875205648384, 47875205648384, +STORE, 47875205648384, 47875205656575, +STORE, 47875205656576, 47875205693439, +ERASE, 47875205656576, 47875205656576, +STORE, 47875205656576, 47875205664767, +STORE, 47875205664768, 47875205693439, +STORE, 47875205681152, 47875205693439, +STORE, 47875205664768, 47875205681151, +ERASE, 47875205664768, 47875205664768, +STORE, 47875205664768, 47875205681151, +STORE, 47875205685248, 47875205693439, +STORE, 47875205681152, 47875205685247, +ERASE, 47875205681152, 47875205681152, +STORE, 47875205681152, 47875205693439, +ERASE, 47875205681152, 47875205681152, +STORE, 47875205681152, 47875205685247, +STORE, 47875205685248, 47875205693439, +ERASE, 47875205685248, 47875205685248, +STORE, 47875205685248, 47875205693439, +STORE, 47875205693440, 47875206168575, +ERASE, 47875205693440, 47875205693440, +STORE, 47875205693440, 47875205701631, +STORE, 47875205701632, 47875206168575, +STORE, 47875206037504, 47875206168575, +STORE, 47875205701632, 47875206037503, +ERASE, 47875205701632, 47875205701632, +STORE, 47875205701632, 47875206037503, +STORE, 47875206160384, 47875206168575, +STORE, 47875206037504, 47875206160383, +ERASE, 47875206037504, 47875206037504, +STORE, 47875206037504, 47875206168575, +ERASE, 47875206037504, 47875206037504, +STORE, 47875206037504, 47875206160383, +STORE, 47875206160384, 47875206168575, +ERASE, 47875206160384, 47875206160384, +STORE, 47875206160384, 47875206168575, +STORE, 47875206168576, 47875206176767, +STORE, 47875206176768, 47875206197247, +ERASE, 47875206176768, 47875206176768, +STORE, 47875206176768, 47875206180863, +STORE, 47875206180864, 47875206197247, +STORE, 47875206184960, 47875206197247, +STORE, 47875206180864, 47875206184959, +ERASE, 47875206180864, 47875206180864, +STORE, 47875206180864, 47875206184959, +STORE, 47875206189056, 47875206197247, +STORE, 47875206184960, 47875206189055, +ERASE, 47875206184960, 47875206184960, +STORE, 47875206184960, 47875206197247, +ERASE, 47875206184960, 47875206184960, +STORE, 47875206184960, 47875206189055, +STORE, 47875206189056, 47875206197247, +ERASE, 47875206189056, 47875206189056, +STORE, 47875206189056, 47875206197247, +STORE, 47875206197248, 47875206205439, +ERASE, 47875198861312, 47875198861312, +STORE, 47875198861312, 47875198877695, +STORE, 47875198877696, 47875198885887, +ERASE, 47875206189056, 47875206189056, +STORE, 47875206189056, 47875206193151, +STORE, 47875206193152, 47875206197247, +ERASE, 47875201777664, 47875201777664, +STORE, 47875201777664, 47875201781759, +STORE, 47875201781760, 47875201785855, +ERASE, 47875206160384, 47875206160384, +STORE, 47875206160384, 47875206164479, +STORE, 47875206164480, 47875206168575, +ERASE, 47875205685248, 47875205685248, +STORE, 47875205685248, 47875205689343, +STORE, 47875205689344, 47875205693439, +ERASE, 47875205648384, 47875205648384, +STORE, 47875205648384, 47875205652479, +STORE, 47875205652480, 47875205656575, +ERASE, 47875205402624, 47875205402624, +STORE, 47875205402624, 47875205599231, +STORE, 47875205599232, 47875205607423, +ERASE, 47875202519040, 47875202519040, +STORE, 47875202519040, 47875202555903, +STORE, 47875202555904, 47875202572287, +ERASE, 47875201966080, 47875201966080, +STORE, 47875201966080, 47875201970175, +STORE, 47875201970176, 47875201974271, +ERASE, 47875201650688, 47875201650688, +STORE, 47875201650688, 47875201654783, +STORE, 47875201654784, 47875201658879, +ERASE, 47875199381504, 47875199381504, +STORE, 47875199381504, 47875199401983, +STORE, 47875199401984, 47875199406079, +ERASE, 47875199049728, 47875199049728, +STORE, 47875199049728, 47875199053823, +STORE, 47875199053824, 47875199057919, +ERASE, 47875199004672, 47875199004672, +STORE, 47875199004672, 47875199008767, +STORE, 47875199008768, 47875199012863, +ERASE, 94011547025408, 94011547025408, +STORE, 94011547025408, 94011547148287, +STORE, 94011547148288, 94011547152383, +ERASE, 139757598109696, 139757598109696, +STORE, 139757598109696, 139757598113791, +STORE, 139757598113792, 139757598117887, +ERASE, 47875197046784, 47875197046784, +STORE, 94011557584896, 94011557720063, +STORE, 94011557584896, 94011557855231, +ERASE, 94011557584896, 94011557584896, +STORE, 94011557584896, 94011557851135, +STORE, 94011557851136, 94011557855231, +ERASE, 94011557851136, 94011557851136, +ERASE, 94011557584896, 94011557584896, +STORE, 94011557584896, 94011557847039, +STORE, 94011557847040, 94011557851135, +ERASE, 94011557847040, 94011557847040, +STORE, 94011557584896, 94011557982207, +ERASE, 94011557584896, 94011557584896, +STORE, 94011557584896, 94011557978111, +STORE, 94011557978112, 94011557982207, +ERASE, 94011557978112, 94011557978112, +ERASE, 94011557584896, 94011557584896, +STORE, 94011557584896, 94011557974015, +STORE, 94011557974016, 94011557978111, +ERASE, 94011557974016, 94011557974016, +STORE, 140737488347136, 140737488351231, +STORE, 140734130360320, 140737488351231, +ERASE, 140734130360320, 140734130360320, +STORE, 140734130360320, 140734130364415, +STORE, 94641232105472, 94641232785407, +ERASE, 94641232105472, 94641232105472, +STORE, 94641232105472, 94641232171007, +STORE, 94641232171008, 94641232785407, +ERASE, 94641232171008, 94641232171008, +STORE, 94641232171008, 94641232519167, +STORE, 94641232519168, 94641232658431, +STORE, 94641232658432, 94641232785407, +STORE, 139726599516160, 139726599688191, +ERASE, 139726599516160, 139726599516160, +STORE, 139726599516160, 139726599520255, +STORE, 139726599520256, 139726599688191, +ERASE, 139726599520256, 139726599520256, +STORE, 139726599520256, 139726599643135, +STORE, 139726599643136, 139726599675903, +STORE, 139726599675904, 139726599684095, +STORE, 139726599684096, 139726599688191, +STORE, 140734130446336, 140734130450431, +STORE, 140734130434048, 140734130446335, +STORE, 47906195480576, 47906195488767, +STORE, 47906195488768, 47906195496959, +STORE, 47906195496960, 47906197336063, +STORE, 47906195636224, 47906197336063, +STORE, 47906195496960, 47906195636223, +ERASE, 47906195636224, 47906195636224, +STORE, 47906195636224, 47906197295103, +STORE, 47906197295104, 47906197336063, +STORE, 47906196979712, 47906197295103, +STORE, 47906195636224, 47906196979711, +ERASE, 47906195636224, 47906195636224, +STORE, 47906195636224, 47906196979711, +STORE, 47906197291008, 47906197295103, +STORE, 47906196979712, 47906197291007, +ERASE, 47906196979712, 47906196979712, +STORE, 47906196979712, 47906197291007, +STORE, 47906197319680, 47906197336063, +STORE, 47906197295104, 47906197319679, +ERASE, 47906197295104, 47906197295104, +STORE, 47906197295104, 47906197319679, +ERASE, 47906197319680, 47906197319680, +STORE, 47906197319680, 47906197336063, +STORE, 47906197336064, 47906197446655, +STORE, 47906197352448, 47906197446655, +STORE, 47906197336064, 47906197352447, +ERASE, 47906197352448, 47906197352448, +STORE, 47906197352448, 47906197438463, +STORE, 47906197438464, 47906197446655, +STORE, 47906197413888, 47906197438463, +STORE, 47906197352448, 47906197413887, +ERASE, 47906197352448, 47906197352448, +STORE, 47906197352448, 47906197413887, +STORE, 47906197434368, 47906197438463, +STORE, 47906197413888, 47906197434367, +ERASE, 47906197413888, 47906197413888, +STORE, 47906197413888, 47906197434367, +ERASE, 47906197438464, 47906197438464, +STORE, 47906197438464, 47906197446655, +STORE, 47906197446656, 47906197491711, +ERASE, 47906197446656, 47906197446656, +STORE, 47906197446656, 47906197454847, +STORE, 47906197454848, 47906197491711, +STORE, 47906197475328, 47906197491711, +STORE, 47906197454848, 47906197475327, +ERASE, 47906197454848, 47906197454848, +STORE, 47906197454848, 47906197475327, +STORE, 47906197483520, 47906197491711, +STORE, 47906197475328, 47906197483519, +ERASE, 47906197475328, 47906197475328, +STORE, 47906197475328, 47906197491711, +ERASE, 47906197475328, 47906197475328, +STORE, 47906197475328, 47906197483519, +STORE, 47906197483520, 47906197491711, +ERASE, 47906197483520, 47906197483520, +STORE, 47906197483520, 47906197491711, +STORE, 47906197491712, 47906197839871, +STORE, 47906197532672, 47906197839871, +STORE, 47906197491712, 47906197532671, +ERASE, 47906197532672, 47906197532672, +STORE, 47906197532672, 47906197815295, +STORE, 47906197815296, 47906197839871, +STORE, 47906197745664, 47906197815295, +STORE, 47906197532672, 47906197745663, +ERASE, 47906197532672, 47906197532672, +STORE, 47906197532672, 47906197745663, +STORE, 47906197811200, 47906197815295, +STORE, 47906197745664, 47906197811199, +ERASE, 47906197745664, 47906197745664, +STORE, 47906197745664, 47906197811199, +ERASE, 47906197815296, 47906197815296, +STORE, 47906197815296, 47906197839871, +STORE, 47906197839872, 47906200100863, +STORE, 47906197991424, 47906200100863, +STORE, 47906197839872, 47906197991423, +ERASE, 47906197991424, 47906197991424, +STORE, 47906197991424, 47906200084479, +STORE, 47906200084480, 47906200100863, +STORE, 47906200092672, 47906200100863, +STORE, 47906200084480, 47906200092671, +ERASE, 47906200084480, 47906200084480, +STORE, 47906200084480, 47906200092671, +ERASE, 47906200092672, 47906200092672, +STORE, 47906200092672, 47906200100863, +STORE, 47906200100864, 47906200236031, +ERASE, 47906200100864, 47906200100864, +STORE, 47906200100864, 47906200125439, +STORE, 47906200125440, 47906200236031, +STORE, 47906200186880, 47906200236031, +STORE, 47906200125440, 47906200186879, +ERASE, 47906200125440, 47906200125440, +STORE, 47906200125440, 47906200186879, +STORE, 47906200211456, 47906200236031, +STORE, 47906200186880, 47906200211455, +ERASE, 47906200186880, 47906200186880, +STORE, 47906200186880, 47906200236031, +ERASE, 47906200186880, 47906200186880, +STORE, 47906200186880, 47906200211455, +STORE, 47906200211456, 47906200236031, +STORE, 47906200219648, 47906200236031, +STORE, 47906200211456, 47906200219647, +ERASE, 47906200211456, 47906200211456, +STORE, 47906200211456, 47906200219647, +ERASE, 47906200219648, 47906200219648, +STORE, 47906200219648, 47906200236031, +STORE, 47906200219648, 47906200244223, +STORE, 47906200244224, 47906200408063, +ERASE, 47906200244224, 47906200244224, +STORE, 47906200244224, 47906200256511, +STORE, 47906200256512, 47906200408063, +STORE, 47906200354816, 47906200408063, +STORE, 47906200256512, 47906200354815, +ERASE, 47906200256512, 47906200256512, +STORE, 47906200256512, 47906200354815, +STORE, 47906200399872, 47906200408063, +STORE, 47906200354816, 47906200399871, +ERASE, 47906200354816, 47906200354816, +STORE, 47906200354816, 47906200408063, +ERASE, 47906200354816, 47906200354816, +STORE, 47906200354816, 47906200399871, +STORE, 47906200399872, 47906200408063, +ERASE, 47906200399872, 47906200399872, +STORE, 47906200399872, 47906200408063, +STORE, 47906200408064, 47906201006079, +STORE, 47906200526848, 47906201006079, +STORE, 47906200408064, 47906200526847, +ERASE, 47906200526848, 47906200526848, +STORE, 47906200526848, 47906200952831, +STORE, 47906200952832, 47906201006079, +STORE, 47906200842240, 47906200952831, +STORE, 47906200526848, 47906200842239, +ERASE, 47906200526848, 47906200526848, +STORE, 47906200526848, 47906200842239, +STORE, 47906200948736, 47906200952831, +STORE, 47906200842240, 47906200948735, +ERASE, 47906200842240, 47906200842240, +STORE, 47906200842240, 47906200948735, +ERASE, 47906200952832, 47906200952832, +STORE, 47906200952832, 47906201006079, +STORE, 47906201006080, 47906204057599, +STORE, 47906201550848, 47906204057599, +STORE, 47906201006080, 47906201550847, +ERASE, 47906201550848, 47906201550848, +STORE, 47906201550848, 47906203836415, +STORE, 47906203836416, 47906204057599, +STORE, 47906203246592, 47906203836415, +STORE, 47906201550848, 47906203246591, +ERASE, 47906201550848, 47906201550848, +STORE, 47906201550848, 47906203246591, +STORE, 47906203832320, 47906203836415, +STORE, 47906203246592, 47906203832319, +ERASE, 47906203246592, 47906203246592, +STORE, 47906203246592, 47906203832319, +STORE, 47906204041216, 47906204057599, +STORE, 47906203836416, 47906204041215, +ERASE, 47906203836416, 47906203836416, +STORE, 47906203836416, 47906204041215, +ERASE, 47906204041216, 47906204041216, +STORE, 47906204041216, 47906204057599, +STORE, 47906204057600, 47906204090367, +ERASE, 47906204057600, 47906204057600, +STORE, 47906204057600, 47906204065791, +STORE, 47906204065792, 47906204090367, +STORE, 47906204078080, 47906204090367, +STORE, 47906204065792, 47906204078079, +ERASE, 47906204065792, 47906204065792, +STORE, 47906204065792, 47906204078079, +STORE, 47906204082176, 47906204090367, +STORE, 47906204078080, 47906204082175, +ERASE, 47906204078080, 47906204078080, +STORE, 47906204078080, 47906204090367, +ERASE, 47906204078080, 47906204078080, +STORE, 47906204078080, 47906204082175, +STORE, 47906204082176, 47906204090367, +ERASE, 47906204082176, 47906204082176, +STORE, 47906204082176, 47906204090367, +STORE, 47906204090368, 47906204127231, +ERASE, 47906204090368, 47906204090368, +STORE, 47906204090368, 47906204098559, +STORE, 47906204098560, 47906204127231, +STORE, 47906204114944, 47906204127231, +STORE, 47906204098560, 47906204114943, +ERASE, 47906204098560, 47906204098560, +STORE, 47906204098560, 47906204114943, +STORE, 47906204119040, 47906204127231, +STORE, 47906204114944, 47906204119039, +ERASE, 47906204114944, 47906204114944, +STORE, 47906204114944, 47906204127231, +ERASE, 47906204114944, 47906204114944, +STORE, 47906204114944, 47906204119039, +STORE, 47906204119040, 47906204127231, +ERASE, 47906204119040, 47906204119040, +STORE, 47906204119040, 47906204127231, +STORE, 47906204127232, 47906204602367, +ERASE, 47906204127232, 47906204127232, +STORE, 47906204127232, 47906204135423, +STORE, 47906204135424, 47906204602367, +STORE, 47906204471296, 47906204602367, +STORE, 47906204135424, 47906204471295, +ERASE, 47906204135424, 47906204135424, +STORE, 47906204135424, 47906204471295, +STORE, 47906204594176, 47906204602367, +STORE, 47906204471296, 47906204594175, +ERASE, 47906204471296, 47906204471296, +STORE, 47906204471296, 47906204602367, +ERASE, 47906204471296, 47906204471296, +STORE, 47906204471296, 47906204594175, +STORE, 47906204594176, 47906204602367, +ERASE, 47906204594176, 47906204594176, +STORE, 47906204594176, 47906204602367, +STORE, 47906204602368, 47906204610559, +STORE, 47906204610560, 47906204631039, +ERASE, 47906204610560, 47906204610560, +STORE, 47906204610560, 47906204614655, +STORE, 47906204614656, 47906204631039, +STORE, 47906204618752, 47906204631039, +STORE, 47906204614656, 47906204618751, +ERASE, 47906204614656, 47906204614656, +STORE, 47906204614656, 47906204618751, +STORE, 47906204622848, 47906204631039, +STORE, 47906204618752, 47906204622847, +ERASE, 47906204618752, 47906204618752, +STORE, 47906204618752, 47906204631039, +ERASE, 47906204618752, 47906204618752, +STORE, 47906204618752, 47906204622847, +STORE, 47906204622848, 47906204631039, +ERASE, 47906204622848, 47906204622848, +STORE, 47906204622848, 47906204631039, +STORE, 47906204631040, 47906204639231, +ERASE, 47906197295104, 47906197295104, +STORE, 47906197295104, 47906197311487, +STORE, 47906197311488, 47906197319679, +ERASE, 47906204622848, 47906204622848, +STORE, 47906204622848, 47906204626943, +STORE, 47906204626944, 47906204631039, +ERASE, 47906200211456, 47906200211456, +STORE, 47906200211456, 47906200215551, +STORE, 47906200215552, 47906200219647, +ERASE, 47906204594176, 47906204594176, +STORE, 47906204594176, 47906204598271, +STORE, 47906204598272, 47906204602367, +ERASE, 47906204119040, 47906204119040, +STORE, 47906204119040, 47906204123135, +STORE, 47906204123136, 47906204127231, +ERASE, 47906204082176, 47906204082176, +STORE, 47906204082176, 47906204086271, +STORE, 47906204086272, 47906204090367, +ERASE, 47906203836416, 47906203836416, +STORE, 47906203836416, 47906204033023, +STORE, 47906204033024, 47906204041215, +ERASE, 47906200952832, 47906200952832, +STORE, 47906200952832, 47906200989695, +STORE, 47906200989696, 47906201006079, +ERASE, 47906200399872, 47906200399872, +STORE, 47906200399872, 47906200403967, +STORE, 47906200403968, 47906200408063, +ERASE, 47906200084480, 47906200084480, +STORE, 47906200084480, 47906200088575, +STORE, 47906200088576, 47906200092671, +ERASE, 47906197815296, 47906197815296, +STORE, 47906197815296, 47906197835775, +STORE, 47906197835776, 47906197839871, +ERASE, 47906197483520, 47906197483520, +STORE, 47906197483520, 47906197487615, +STORE, 47906197487616, 47906197491711, +ERASE, 47906197438464, 47906197438464, +STORE, 47906197438464, 47906197442559, +STORE, 47906197442560, 47906197446655, +ERASE, 94641232658432, 94641232658432, +STORE, 94641232658432, 94641232781311, +STORE, 94641232781312, 94641232785407, +ERASE, 139726599675904, 139726599675904, +STORE, 139726599675904, 139726599679999, +STORE, 139726599680000, 139726599684095, +ERASE, 47906195480576, 47906195480576, +STORE, 94641242615808, 94641242750975, + }; + + unsigned long set10[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140736427839488, 140737488351231, +ERASE, 140736427839488, 140736427839488, +STORE, 140736427839488, 140736427843583, +STORE, 94071213395968, 94071213567999, +ERASE, 94071213395968, 94071213395968, +STORE, 94071213395968, 94071213412351, +STORE, 94071213412352, 94071213567999, +ERASE, 94071213412352, 94071213412352, +STORE, 94071213412352, 94071213514751, +STORE, 94071213514752, 94071213555711, +STORE, 94071213555712, 94071213567999, +STORE, 139968410644480, 139968410816511, +ERASE, 139968410644480, 139968410644480, +STORE, 139968410644480, 139968410648575, +STORE, 139968410648576, 139968410816511, +ERASE, 139968410648576, 139968410648576, +STORE, 139968410648576, 139968410771455, +STORE, 139968410771456, 139968410804223, +STORE, 139968410804224, 139968410812415, +STORE, 139968410812416, 139968410816511, +STORE, 140736429277184, 140736429281279, +STORE, 140736429264896, 140736429277183, +STORE, 47664384352256, 47664384360447, +STORE, 47664384360448, 47664384368639, +STORE, 47664384368640, 47664384532479, +ERASE, 47664384368640, 47664384368640, +STORE, 47664384368640, 47664384380927, +STORE, 47664384380928, 47664384532479, +STORE, 47664384479232, 47664384532479, +STORE, 47664384380928, 47664384479231, +ERASE, 47664384380928, 47664384380928, +STORE, 47664384380928, 47664384479231, +STORE, 47664384524288, 47664384532479, +STORE, 47664384479232, 47664384524287, +ERASE, 47664384479232, 47664384479232, +STORE, 47664384479232, 47664384532479, +ERASE, 47664384479232, 47664384479232, +STORE, 47664384479232, 47664384524287, +STORE, 47664384524288, 47664384532479, +ERASE, 47664384524288, 47664384524288, +STORE, 47664384524288, 47664384532479, +STORE, 47664384532480, 47664387583999, +STORE, 47664385077248, 47664387583999, +STORE, 47664384532480, 47664385077247, +ERASE, 47664385077248, 47664385077248, +STORE, 47664385077248, 47664387362815, +STORE, 47664387362816, 47664387583999, +STORE, 47664386772992, 47664387362815, +STORE, 47664385077248, 47664386772991, +ERASE, 47664385077248, 47664385077248, +STORE, 47664385077248, 47664386772991, +STORE, 47664387358720, 47664387362815, +STORE, 47664386772992, 47664387358719, +ERASE, 47664386772992, 47664386772992, +STORE, 47664386772992, 47664387358719, +STORE, 47664387567616, 47664387583999, +STORE, 47664387362816, 47664387567615, +ERASE, 47664387362816, 47664387362816, +STORE, 47664387362816, 47664387567615, +ERASE, 47664387567616, 47664387567616, +STORE, 47664387567616, 47664387583999, +STORE, 47664387584000, 47664389423103, +STORE, 47664387723264, 47664389423103, +STORE, 47664387584000, 47664387723263, +ERASE, 47664387723264, 47664387723264, +STORE, 47664387723264, 47664389382143, +STORE, 47664389382144, 47664389423103, +STORE, 47664389066752, 47664389382143, +STORE, 47664387723264, 47664389066751, +ERASE, 47664387723264, 47664387723264, +STORE, 47664387723264, 47664389066751, +STORE, 47664389378048, 47664389382143, +STORE, 47664389066752, 47664389378047, +ERASE, 47664389066752, 47664389066752, +STORE, 47664389066752, 47664389378047, +STORE, 47664389406720, 47664389423103, +STORE, 47664389382144, 47664389406719, +ERASE, 47664389382144, 47664389382144, +STORE, 47664389382144, 47664389406719, +ERASE, 47664389406720, 47664389406720, +STORE, 47664389406720, 47664389423103, +STORE, 47664389423104, 47664389558271, +ERASE, 47664389423104, 47664389423104, +STORE, 47664389423104, 47664389447679, +STORE, 47664389447680, 47664389558271, +STORE, 47664389509120, 47664389558271, +STORE, 47664389447680, 47664389509119, +ERASE, 47664389447680, 47664389447680, +STORE, 47664389447680, 47664389509119, +STORE, 47664389533696, 47664389558271, +STORE, 47664389509120, 47664389533695, +ERASE, 47664389509120, 47664389509120, +STORE, 47664389509120, 47664389558271, +ERASE, 47664389509120, 47664389509120, +STORE, 47664389509120, 47664389533695, +STORE, 47664389533696, 47664389558271, +STORE, 47664389541888, 47664389558271, +STORE, 47664389533696, 47664389541887, +ERASE, 47664389533696, 47664389533696, +STORE, 47664389533696, 47664389541887, +ERASE, 47664389541888, 47664389541888, +STORE, 47664389541888, 47664389558271, +STORE, 47664389558272, 47664389578751, +ERASE, 47664389558272, 47664389558272, +STORE, 47664389558272, 47664389562367, +STORE, 47664389562368, 47664389578751, +STORE, 47664389566464, 47664389578751, +STORE, 47664389562368, 47664389566463, +ERASE, 47664389562368, 47664389562368, +STORE, 47664389562368, 47664389566463, +STORE, 47664389570560, 47664389578751, +STORE, 47664389566464, 47664389570559, +ERASE, 47664389566464, 47664389566464, +STORE, 47664389566464, 47664389578751, +ERASE, 47664389566464, 47664389566464, +STORE, 47664389566464, 47664389570559, +STORE, 47664389570560, 47664389578751, +ERASE, 47664389570560, 47664389570560, +STORE, 47664389570560, 47664389578751, +STORE, 47664389578752, 47664389586943, +ERASE, 47664389382144, 47664389382144, +STORE, 47664389382144, 47664389398527, +STORE, 47664389398528, 47664389406719, +ERASE, 47664389570560, 47664389570560, +STORE, 47664389570560, 47664389574655, +STORE, 47664389574656, 47664389578751, +ERASE, 47664389533696, 47664389533696, +STORE, 47664389533696, 47664389537791, +STORE, 47664389537792, 47664389541887, +ERASE, 47664387362816, 47664387362816, +STORE, 47664387362816, 47664387559423, +STORE, 47664387559424, 47664387567615, +ERASE, 47664384524288, 47664384524288, +STORE, 47664384524288, 47664384528383, +STORE, 47664384528384, 47664384532479, +ERASE, 94071213555712, 94071213555712, +STORE, 94071213555712, 94071213563903, +STORE, 94071213563904, 94071213567999, +ERASE, 139968410804224, 139968410804224, +STORE, 139968410804224, 139968410808319, +STORE, 139968410808320, 139968410812415, +ERASE, 47664384352256, 47664384352256, +STORE, 94071244402688, 94071244537855, +STORE, 140737488347136, 140737488351231, +STORE, 140728271503360, 140737488351231, +ERASE, 140728271503360, 140728271503360, +STORE, 140728271503360, 140728271507455, +STORE, 94410361982976, 94410362155007, +ERASE, 94410361982976, 94410361982976, +STORE, 94410361982976, 94410361999359, +STORE, 94410361999360, 94410362155007, +ERASE, 94410361999360, 94410361999360, +STORE, 94410361999360, 94410362101759, +STORE, 94410362101760, 94410362142719, +STORE, 94410362142720, 94410362155007, +STORE, 140351953997824, 140351954169855, +ERASE, 140351953997824, 140351953997824, +STORE, 140351953997824, 140351954001919, +STORE, 140351954001920, 140351954169855, +ERASE, 140351954001920, 140351954001920, +STORE, 140351954001920, 140351954124799, +STORE, 140351954124800, 140351954157567, +STORE, 140351954157568, 140351954165759, +STORE, 140351954165760, 140351954169855, +STORE, 140728272429056, 140728272433151, +STORE, 140728272416768, 140728272429055, +STORE, 47280840998912, 47280841007103, +STORE, 47280841007104, 47280841015295, +STORE, 47280841015296, 47280841179135, +ERASE, 47280841015296, 47280841015296, +STORE, 47280841015296, 47280841027583, +STORE, 47280841027584, 47280841179135, +STORE, 47280841125888, 47280841179135, +STORE, 47280841027584, 47280841125887, +ERASE, 47280841027584, 47280841027584, +STORE, 47280841027584, 47280841125887, +STORE, 47280841170944, 47280841179135, +STORE, 47280841125888, 47280841170943, +ERASE, 47280841125888, 47280841125888, +STORE, 47280841125888, 47280841179135, +ERASE, 47280841125888, 47280841125888, +STORE, 47280841125888, 47280841170943, +STORE, 47280841170944, 47280841179135, +ERASE, 47280841170944, 47280841170944, +STORE, 47280841170944, 47280841179135, +STORE, 47280841179136, 47280844230655, +STORE, 47280841723904, 47280844230655, +STORE, 47280841179136, 47280841723903, +ERASE, 47280841723904, 47280841723904, +STORE, 47280841723904, 47280844009471, +STORE, 47280844009472, 47280844230655, +STORE, 47280843419648, 47280844009471, +STORE, 47280841723904, 47280843419647, +ERASE, 47280841723904, 47280841723904, +STORE, 47280841723904, 47280843419647, +STORE, 47280844005376, 47280844009471, +STORE, 47280843419648, 47280844005375, +ERASE, 47280843419648, 47280843419648, +STORE, 47280843419648, 47280844005375, +STORE, 47280844214272, 47280844230655, +STORE, 47280844009472, 47280844214271, +ERASE, 47280844009472, 47280844009472, +STORE, 47280844009472, 47280844214271, +ERASE, 47280844214272, 47280844214272, +STORE, 47280844214272, 47280844230655, +STORE, 47280844230656, 47280846069759, +STORE, 47280844369920, 47280846069759, +STORE, 47280844230656, 47280844369919, +ERASE, 47280844369920, 47280844369920, +STORE, 47280844369920, 47280846028799, +STORE, 47280846028800, 47280846069759, +STORE, 47280845713408, 47280846028799, +STORE, 47280844369920, 47280845713407, +ERASE, 47280844369920, 47280844369920, +STORE, 47280844369920, 47280845713407, +STORE, 47280846024704, 47280846028799, +STORE, 47280845713408, 47280846024703, +ERASE, 47280845713408, 47280845713408, +STORE, 47280845713408, 47280846024703, +STORE, 47280846053376, 47280846069759, +STORE, 47280846028800, 47280846053375, +ERASE, 47280846028800, 47280846028800, +STORE, 47280846028800, 47280846053375, +ERASE, 47280846053376, 47280846053376, +STORE, 47280846053376, 47280846069759, +STORE, 47280846069760, 47280846204927, +ERASE, 47280846069760, 47280846069760, +STORE, 47280846069760, 47280846094335, +STORE, 47280846094336, 47280846204927, +STORE, 47280846155776, 47280846204927, +STORE, 47280846094336, 47280846155775, +ERASE, 47280846094336, 47280846094336, +STORE, 47280846094336, 47280846155775, +STORE, 47280846180352, 47280846204927, +STORE, 47280846155776, 47280846180351, +ERASE, 47280846155776, 47280846155776, +STORE, 47280846155776, 47280846204927, +ERASE, 47280846155776, 47280846155776, +STORE, 47280846155776, 47280846180351, +STORE, 47280846180352, 47280846204927, +STORE, 47280846188544, 47280846204927, +STORE, 47280846180352, 47280846188543, +ERASE, 47280846180352, 47280846180352, +STORE, 47280846180352, 47280846188543, +ERASE, 47280846188544, 47280846188544, +STORE, 47280846188544, 47280846204927, +STORE, 47280846204928, 47280846225407, +ERASE, 47280846204928, 47280846204928, +STORE, 47280846204928, 47280846209023, +STORE, 47280846209024, 47280846225407, +STORE, 47280846213120, 47280846225407, +STORE, 47280846209024, 47280846213119, +ERASE, 47280846209024, 47280846209024, +STORE, 47280846209024, 47280846213119, +STORE, 47280846217216, 47280846225407, +STORE, 47280846213120, 47280846217215, +ERASE, 47280846213120, 47280846213120, +STORE, 47280846213120, 47280846225407, +ERASE, 47280846213120, 47280846213120, +STORE, 47280846213120, 47280846217215, +STORE, 47280846217216, 47280846225407, +ERASE, 47280846217216, 47280846217216, +STORE, 47280846217216, 47280846225407, +STORE, 47280846225408, 47280846233599, +ERASE, 47280846028800, 47280846028800, +STORE, 47280846028800, 47280846045183, +STORE, 47280846045184, 47280846053375, +ERASE, 47280846217216, 47280846217216, +STORE, 47280846217216, 47280846221311, +STORE, 47280846221312, 47280846225407, +ERASE, 47280846180352, 47280846180352, +STORE, 47280846180352, 47280846184447, +STORE, 47280846184448, 47280846188543, +ERASE, 47280844009472, 47280844009472, +STORE, 47280844009472, 47280844206079, +STORE, 47280844206080, 47280844214271, +ERASE, 47280841170944, 47280841170944, +STORE, 47280841170944, 47280841175039, +STORE, 47280841175040, 47280841179135, +ERASE, 94410362142720, 94410362142720, +STORE, 94410362142720, 94410362150911, +STORE, 94410362150912, 94410362155007, +ERASE, 140351954157568, 140351954157568, +STORE, 140351954157568, 140351954161663, +STORE, 140351954161664, 140351954165759, +ERASE, 47280840998912, 47280840998912, +STORE, 94410379456512, 94410379591679, +STORE, 140737488347136, 140737488351231, +STORE, 140732946362368, 140737488351231, +ERASE, 140732946362368, 140732946362368, +STORE, 140732946362368, 140732946366463, +STORE, 94352937934848, 94352938106879, +ERASE, 94352937934848, 94352937934848, +STORE, 94352937934848, 94352937951231, +STORE, 94352937951232, 94352938106879, +ERASE, 94352937951232, 94352937951232, +STORE, 94352937951232, 94352938053631, +STORE, 94352938053632, 94352938094591, +STORE, 94352938094592, 94352938106879, +STORE, 140595518742528, 140595518914559, +ERASE, 140595518742528, 140595518742528, +STORE, 140595518742528, 140595518746623, +STORE, 140595518746624, 140595518914559, +ERASE, 140595518746624, 140595518746624, +STORE, 140595518746624, 140595518869503, +STORE, 140595518869504, 140595518902271, +STORE, 140595518902272, 140595518910463, +STORE, 140595518910464, 140595518914559, +STORE, 140732947468288, 140732947472383, +STORE, 140732947456000, 140732947468287, +STORE, 47037276254208, 47037276262399, +STORE, 47037276262400, 47037276270591, +STORE, 47037276270592, 47037276434431, +ERASE, 47037276270592, 47037276270592, +STORE, 47037276270592, 47037276282879, +STORE, 47037276282880, 47037276434431, +STORE, 47037276381184, 47037276434431, +STORE, 47037276282880, 47037276381183, +ERASE, 47037276282880, 47037276282880, +STORE, 47037276282880, 47037276381183, +STORE, 47037276426240, 47037276434431, +STORE, 47037276381184, 47037276426239, +ERASE, 47037276381184, 47037276381184, +STORE, 47037276381184, 47037276434431, +ERASE, 47037276381184, 47037276381184, +STORE, 47037276381184, 47037276426239, +STORE, 47037276426240, 47037276434431, +ERASE, 47037276426240, 47037276426240, +STORE, 47037276426240, 47037276434431, +STORE, 47037276434432, 47037279485951, +STORE, 47037276979200, 47037279485951, +STORE, 47037276434432, 47037276979199, +ERASE, 47037276979200, 47037276979200, +STORE, 47037276979200, 47037279264767, +STORE, 47037279264768, 47037279485951, +STORE, 47037278674944, 47037279264767, +STORE, 47037276979200, 47037278674943, +ERASE, 47037276979200, 47037276979200, +STORE, 47037276979200, 47037278674943, +STORE, 47037279260672, 47037279264767, +STORE, 47037278674944, 47037279260671, +ERASE, 47037278674944, 47037278674944, +STORE, 47037278674944, 47037279260671, +STORE, 47037279469568, 47037279485951, +STORE, 47037279264768, 47037279469567, +ERASE, 47037279264768, 47037279264768, +STORE, 47037279264768, 47037279469567, +ERASE, 47037279469568, 47037279469568, +STORE, 47037279469568, 47037279485951, +STORE, 47037279485952, 47037281325055, +STORE, 47037279625216, 47037281325055, +STORE, 47037279485952, 47037279625215, +ERASE, 47037279625216, 47037279625216, +STORE, 47037279625216, 47037281284095, +STORE, 47037281284096, 47037281325055, +STORE, 47037280968704, 47037281284095, +STORE, 47037279625216, 47037280968703, +ERASE, 47037279625216, 47037279625216, +STORE, 47037279625216, 47037280968703, +STORE, 47037281280000, 47037281284095, +STORE, 47037280968704, 47037281279999, +ERASE, 47037280968704, 47037280968704, +STORE, 47037280968704, 47037281279999, +STORE, 47037281308672, 47037281325055, +STORE, 47037281284096, 47037281308671, +ERASE, 47037281284096, 47037281284096, +STORE, 47037281284096, 47037281308671, +ERASE, 47037281308672, 47037281308672, +STORE, 47037281308672, 47037281325055, +STORE, 47037281325056, 47037281460223, +ERASE, 47037281325056, 47037281325056, +STORE, 47037281325056, 47037281349631, +STORE, 47037281349632, 47037281460223, +STORE, 47037281411072, 47037281460223, +STORE, 47037281349632, 47037281411071, +ERASE, 47037281349632, 47037281349632, +STORE, 47037281349632, 47037281411071, +STORE, 47037281435648, 47037281460223, +STORE, 47037281411072, 47037281435647, +ERASE, 47037281411072, 47037281411072, +STORE, 47037281411072, 47037281460223, +ERASE, 47037281411072, 47037281411072, +STORE, 47037281411072, 47037281435647, +STORE, 47037281435648, 47037281460223, +STORE, 47037281443840, 47037281460223, +STORE, 47037281435648, 47037281443839, +ERASE, 47037281435648, 47037281435648, +STORE, 47037281435648, 47037281443839, +ERASE, 47037281443840, 47037281443840, +STORE, 47037281443840, 47037281460223, +STORE, 47037281460224, 47037281480703, +ERASE, 47037281460224, 47037281460224, +STORE, 47037281460224, 47037281464319, +STORE, 47037281464320, 47037281480703, +STORE, 47037281468416, 47037281480703, +STORE, 47037281464320, 47037281468415, +ERASE, 47037281464320, 47037281464320, +STORE, 47037281464320, 47037281468415, +STORE, 47037281472512, 47037281480703, +STORE, 47037281468416, 47037281472511, +ERASE, 47037281468416, 47037281468416, +STORE, 47037281468416, 47037281480703, +ERASE, 47037281468416, 47037281468416, +STORE, 47037281468416, 47037281472511, +STORE, 47037281472512, 47037281480703, +ERASE, 47037281472512, 47037281472512, +STORE, 47037281472512, 47037281480703, +STORE, 47037281480704, 47037281488895, +ERASE, 47037281284096, 47037281284096, +STORE, 47037281284096, 47037281300479, +STORE, 47037281300480, 47037281308671, +ERASE, 47037281472512, 47037281472512, +STORE, 47037281472512, 47037281476607, +STORE, 47037281476608, 47037281480703, +ERASE, 47037281435648, 47037281435648, +STORE, 47037281435648, 47037281439743, +STORE, 47037281439744, 47037281443839, +ERASE, 47037279264768, 47037279264768, +STORE, 47037279264768, 47037279461375, +STORE, 47037279461376, 47037279469567, +ERASE, 47037276426240, 47037276426240, +STORE, 47037276426240, 47037276430335, +STORE, 47037276430336, 47037276434431, +ERASE, 94352938094592, 94352938094592, +STORE, 94352938094592, 94352938102783, +STORE, 94352938102784, 94352938106879, +ERASE, 140595518902272, 140595518902272, +STORE, 140595518902272, 140595518906367, +STORE, 140595518906368, 140595518910463, +ERASE, 47037276254208, 47037276254208, +STORE, 94352938438656, 94352938573823, +STORE, 140737488347136, 140737488351231, +STORE, 140733506027520, 140737488351231, +ERASE, 140733506027520, 140733506027520, +STORE, 140733506027520, 140733506031615, +STORE, 94150123073536, 94150123245567, +ERASE, 94150123073536, 94150123073536, +STORE, 94150123073536, 94150123089919, +STORE, 94150123089920, 94150123245567, +ERASE, 94150123089920, 94150123089920, +STORE, 94150123089920, 94150123192319, +STORE, 94150123192320, 94150123233279, +STORE, 94150123233280, 94150123245567, +STORE, 140081290375168, 140081290547199, +ERASE, 140081290375168, 140081290375168, +STORE, 140081290375168, 140081290379263, +STORE, 140081290379264, 140081290547199, +ERASE, 140081290379264, 140081290379264, +STORE, 140081290379264, 140081290502143, +STORE, 140081290502144, 140081290534911, +STORE, 140081290534912, 140081290543103, +STORE, 140081290543104, 140081290547199, +STORE, 140733506707456, 140733506711551, +STORE, 140733506695168, 140733506707455, +STORE, 47551504621568, 47551504629759, +STORE, 47551504629760, 47551504637951, +STORE, 47551504637952, 47551504801791, +ERASE, 47551504637952, 47551504637952, +STORE, 47551504637952, 47551504650239, +STORE, 47551504650240, 47551504801791, +STORE, 47551504748544, 47551504801791, +STORE, 47551504650240, 47551504748543, +ERASE, 47551504650240, 47551504650240, +STORE, 47551504650240, 47551504748543, +STORE, 47551504793600, 47551504801791, +STORE, 47551504748544, 47551504793599, +ERASE, 47551504748544, 47551504748544, +STORE, 47551504748544, 47551504801791, +ERASE, 47551504748544, 47551504748544, +STORE, 47551504748544, 47551504793599, +STORE, 47551504793600, 47551504801791, +ERASE, 47551504793600, 47551504793600, +STORE, 47551504793600, 47551504801791, +STORE, 47551504801792, 47551507853311, +STORE, 47551505346560, 47551507853311, +STORE, 47551504801792, 47551505346559, +ERASE, 47551505346560, 47551505346560, +STORE, 47551505346560, 47551507632127, +STORE, 47551507632128, 47551507853311, +STORE, 47551507042304, 47551507632127, +STORE, 47551505346560, 47551507042303, +ERASE, 47551505346560, 47551505346560, +STORE, 47551505346560, 47551507042303, +STORE, 47551507628032, 47551507632127, +STORE, 47551507042304, 47551507628031, +ERASE, 47551507042304, 47551507042304, +STORE, 47551507042304, 47551507628031, +STORE, 47551507836928, 47551507853311, +STORE, 47551507632128, 47551507836927, +ERASE, 47551507632128, 47551507632128, +STORE, 47551507632128, 47551507836927, +ERASE, 47551507836928, 47551507836928, +STORE, 47551507836928, 47551507853311, +STORE, 47551507853312, 47551509692415, +STORE, 47551507992576, 47551509692415, +STORE, 47551507853312, 47551507992575, +ERASE, 47551507992576, 47551507992576, +STORE, 47551507992576, 47551509651455, +STORE, 47551509651456, 47551509692415, +STORE, 47551509336064, 47551509651455, +STORE, 47551507992576, 47551509336063, +ERASE, 47551507992576, 47551507992576, +STORE, 47551507992576, 47551509336063, +STORE, 47551509647360, 47551509651455, +STORE, 47551509336064, 47551509647359, +ERASE, 47551509336064, 47551509336064, +STORE, 47551509336064, 47551509647359, +STORE, 47551509676032, 47551509692415, +STORE, 47551509651456, 47551509676031, +ERASE, 47551509651456, 47551509651456, +STORE, 47551509651456, 47551509676031, +ERASE, 47551509676032, 47551509676032, +STORE, 47551509676032, 47551509692415, +STORE, 47551509692416, 47551509827583, +ERASE, 47551509692416, 47551509692416, +STORE, 47551509692416, 47551509716991, +STORE, 47551509716992, 47551509827583, +STORE, 47551509778432, 47551509827583, +STORE, 47551509716992, 47551509778431, +ERASE, 47551509716992, 47551509716992, +STORE, 47551509716992, 47551509778431, +STORE, 47551509803008, 47551509827583, +STORE, 47551509778432, 47551509803007, +ERASE, 47551509778432, 47551509778432, +STORE, 47551509778432, 47551509827583, +ERASE, 47551509778432, 47551509778432, +STORE, 47551509778432, 47551509803007, +STORE, 47551509803008, 47551509827583, +STORE, 47551509811200, 47551509827583, +STORE, 47551509803008, 47551509811199, +ERASE, 47551509803008, 47551509803008, +STORE, 47551509803008, 47551509811199, +ERASE, 47551509811200, 47551509811200, +STORE, 47551509811200, 47551509827583, +STORE, 47551509827584, 47551509848063, +ERASE, 47551509827584, 47551509827584, +STORE, 47551509827584, 47551509831679, +STORE, 47551509831680, 47551509848063, +STORE, 47551509835776, 47551509848063, +STORE, 47551509831680, 47551509835775, +ERASE, 47551509831680, 47551509831680, +STORE, 47551509831680, 47551509835775, +STORE, 47551509839872, 47551509848063, +STORE, 47551509835776, 47551509839871, +ERASE, 47551509835776, 47551509835776, +STORE, 47551509835776, 47551509848063, +ERASE, 47551509835776, 47551509835776, +STORE, 47551509835776, 47551509839871, +STORE, 47551509839872, 47551509848063, +ERASE, 47551509839872, 47551509839872, +STORE, 47551509839872, 47551509848063, +STORE, 47551509848064, 47551509856255, +ERASE, 47551509651456, 47551509651456, +STORE, 47551509651456, 47551509667839, +STORE, 47551509667840, 47551509676031, +ERASE, 47551509839872, 47551509839872, +STORE, 47551509839872, 47551509843967, +STORE, 47551509843968, 47551509848063, +ERASE, 47551509803008, 47551509803008, +STORE, 47551509803008, 47551509807103, +STORE, 47551509807104, 47551509811199, +ERASE, 47551507632128, 47551507632128, +STORE, 47551507632128, 47551507828735, +STORE, 47551507828736, 47551507836927, +ERASE, 47551504793600, 47551504793600, +STORE, 47551504793600, 47551504797695, +STORE, 47551504797696, 47551504801791, +ERASE, 94150123233280, 94150123233280, +STORE, 94150123233280, 94150123241471, +STORE, 94150123241472, 94150123245567, +ERASE, 140081290534912, 140081290534912, +STORE, 140081290534912, 140081290539007, +STORE, 140081290539008, 140081290543103, +ERASE, 47551504621568, 47551504621568, +STORE, 94150148112384, 94150148247551, +STORE, 140737488347136, 140737488351231, +STORE, 140734389334016, 140737488351231, +ERASE, 140734389334016, 140734389334016, +STORE, 140734389334016, 140734389338111, +STORE, 94844636606464, 94844636778495, +ERASE, 94844636606464, 94844636606464, +STORE, 94844636606464, 94844636622847, +STORE, 94844636622848, 94844636778495, +ERASE, 94844636622848, 94844636622848, +STORE, 94844636622848, 94844636725247, +STORE, 94844636725248, 94844636766207, +STORE, 94844636766208, 94844636778495, +STORE, 139922765217792, 139922765389823, +ERASE, 139922765217792, 139922765217792, +STORE, 139922765217792, 139922765221887, +STORE, 139922765221888, 139922765389823, +ERASE, 139922765221888, 139922765221888, +STORE, 139922765221888, 139922765344767, +STORE, 139922765344768, 139922765377535, +STORE, 139922765377536, 139922765385727, +STORE, 139922765385728, 139922765389823, +STORE, 140734389678080, 140734389682175, +STORE, 140734389665792, 140734389678079, +STORE, 47710029778944, 47710029787135, +STORE, 47710029787136, 47710029795327, +STORE, 47710029795328, 47710029959167, +ERASE, 47710029795328, 47710029795328, +STORE, 47710029795328, 47710029807615, +STORE, 47710029807616, 47710029959167, +STORE, 47710029905920, 47710029959167, +STORE, 47710029807616, 47710029905919, +ERASE, 47710029807616, 47710029807616, +STORE, 47710029807616, 47710029905919, +STORE, 47710029950976, 47710029959167, +STORE, 47710029905920, 47710029950975, +ERASE, 47710029905920, 47710029905920, +STORE, 47710029905920, 47710029959167, +ERASE, 47710029905920, 47710029905920, +STORE, 47710029905920, 47710029950975, +STORE, 47710029950976, 47710029959167, +ERASE, 47710029950976, 47710029950976, +STORE, 47710029950976, 47710029959167, +STORE, 47710029959168, 47710033010687, +STORE, 47710030503936, 47710033010687, +STORE, 47710029959168, 47710030503935, +ERASE, 47710030503936, 47710030503936, +STORE, 47710030503936, 47710032789503, +STORE, 47710032789504, 47710033010687, +STORE, 47710032199680, 47710032789503, +STORE, 47710030503936, 47710032199679, +ERASE, 47710030503936, 47710030503936, +STORE, 47710030503936, 47710032199679, +STORE, 47710032785408, 47710032789503, +STORE, 47710032199680, 47710032785407, +ERASE, 47710032199680, 47710032199680, +STORE, 47710032199680, 47710032785407, +STORE, 47710032994304, 47710033010687, +STORE, 47710032789504, 47710032994303, +ERASE, 47710032789504, 47710032789504, +STORE, 47710032789504, 47710032994303, +ERASE, 47710032994304, 47710032994304, +STORE, 47710032994304, 47710033010687, +STORE, 47710033010688, 47710034849791, +STORE, 47710033149952, 47710034849791, +STORE, 47710033010688, 47710033149951, +ERASE, 47710033149952, 47710033149952, +STORE, 47710033149952, 47710034808831, +STORE, 47710034808832, 47710034849791, +STORE, 47710034493440, 47710034808831, +STORE, 47710033149952, 47710034493439, +ERASE, 47710033149952, 47710033149952, +STORE, 47710033149952, 47710034493439, +STORE, 47710034804736, 47710034808831, +STORE, 47710034493440, 47710034804735, +ERASE, 47710034493440, 47710034493440, +STORE, 47710034493440, 47710034804735, +STORE, 47710034833408, 47710034849791, +STORE, 47710034808832, 47710034833407, +ERASE, 47710034808832, 47710034808832, +STORE, 47710034808832, 47710034833407, +ERASE, 47710034833408, 47710034833408, +STORE, 47710034833408, 47710034849791, +STORE, 47710034849792, 47710034984959, +ERASE, 47710034849792, 47710034849792, +STORE, 47710034849792, 47710034874367, +STORE, 47710034874368, 47710034984959, +STORE, 47710034935808, 47710034984959, +STORE, 47710034874368, 47710034935807, +ERASE, 47710034874368, 47710034874368, +STORE, 47710034874368, 47710034935807, +STORE, 47710034960384, 47710034984959, +STORE, 47710034935808, 47710034960383, +ERASE, 47710034935808, 47710034935808, +STORE, 47710034935808, 47710034984959, +ERASE, 47710034935808, 47710034935808, +STORE, 47710034935808, 47710034960383, +STORE, 47710034960384, 47710034984959, +STORE, 47710034968576, 47710034984959, +STORE, 47710034960384, 47710034968575, +ERASE, 47710034960384, 47710034960384, +STORE, 47710034960384, 47710034968575, +ERASE, 47710034968576, 47710034968576, +STORE, 47710034968576, 47710034984959, +STORE, 47710034984960, 47710035005439, +ERASE, 47710034984960, 47710034984960, +STORE, 47710034984960, 47710034989055, +STORE, 47710034989056, 47710035005439, +STORE, 47710034993152, 47710035005439, +STORE, 47710034989056, 47710034993151, +ERASE, 47710034989056, 47710034989056, +STORE, 47710034989056, 47710034993151, +STORE, 47710034997248, 47710035005439, +STORE, 47710034993152, 47710034997247, +ERASE, 47710034993152, 47710034993152, +STORE, 47710034993152, 47710035005439, +ERASE, 47710034993152, 47710034993152, +STORE, 47710034993152, 47710034997247, +STORE, 47710034997248, 47710035005439, +ERASE, 47710034997248, 47710034997248, +STORE, 47710034997248, 47710035005439, +STORE, 47710035005440, 47710035013631, +ERASE, 47710034808832, 47710034808832, +STORE, 47710034808832, 47710034825215, +STORE, 47710034825216, 47710034833407, +ERASE, 47710034997248, 47710034997248, +STORE, 47710034997248, 47710035001343, +STORE, 47710035001344, 47710035005439, +ERASE, 47710034960384, 47710034960384, +STORE, 47710034960384, 47710034964479, +STORE, 47710034964480, 47710034968575, +ERASE, 47710032789504, 47710032789504, +STORE, 47710032789504, 47710032986111, +STORE, 47710032986112, 47710032994303, +ERASE, 47710029950976, 47710029950976, +STORE, 47710029950976, 47710029955071, +STORE, 47710029955072, 47710029959167, +ERASE, 94844636766208, 94844636766208, +STORE, 94844636766208, 94844636774399, +STORE, 94844636774400, 94844636778495, +ERASE, 139922765377536, 139922765377536, +STORE, 139922765377536, 139922765381631, +STORE, 139922765381632, 139922765385727, +ERASE, 47710029778944, 47710029778944, +STORE, 94844641775616, 94844641910783, +STORE, 140737488347136, 140737488351231, +STORE, 140732213886976, 140737488351231, +ERASE, 140732213886976, 140732213886976, +STORE, 140732213886976, 140732213891071, +STORE, 94240508887040, 94240509059071, +ERASE, 94240508887040, 94240508887040, +STORE, 94240508887040, 94240508903423, +STORE, 94240508903424, 94240509059071, +ERASE, 94240508903424, 94240508903424, +STORE, 94240508903424, 94240509005823, +STORE, 94240509005824, 94240509046783, +STORE, 94240509046784, 94240509059071, +STORE, 140275106516992, 140275106689023, +ERASE, 140275106516992, 140275106516992, +STORE, 140275106516992, 140275106521087, +STORE, 140275106521088, 140275106689023, +ERASE, 140275106521088, 140275106521088, +STORE, 140275106521088, 140275106643967, +STORE, 140275106643968, 140275106676735, +STORE, 140275106676736, 140275106684927, +STORE, 140275106684928, 140275106689023, +STORE, 140732213977088, 140732213981183, +STORE, 140732213964800, 140732213977087, +STORE, 47357688479744, 47357688487935, +STORE, 47357688487936, 47357688496127, +STORE, 47357688496128, 47357688659967, +ERASE, 47357688496128, 47357688496128, +STORE, 47357688496128, 47357688508415, +STORE, 47357688508416, 47357688659967, +STORE, 47357688606720, 47357688659967, +STORE, 47357688508416, 47357688606719, +ERASE, 47357688508416, 47357688508416, +STORE, 47357688508416, 47357688606719, +STORE, 47357688651776, 47357688659967, +STORE, 47357688606720, 47357688651775, +ERASE, 47357688606720, 47357688606720, +STORE, 47357688606720, 47357688659967, +ERASE, 47357688606720, 47357688606720, +STORE, 47357688606720, 47357688651775, +STORE, 47357688651776, 47357688659967, +ERASE, 47357688651776, 47357688651776, +STORE, 47357688651776, 47357688659967, +STORE, 47357688659968, 47357691711487, +STORE, 47357689204736, 47357691711487, +STORE, 47357688659968, 47357689204735, +ERASE, 47357689204736, 47357689204736, +STORE, 47357689204736, 47357691490303, +STORE, 47357691490304, 47357691711487, +STORE, 47357690900480, 47357691490303, +STORE, 47357689204736, 47357690900479, +ERASE, 47357689204736, 47357689204736, +STORE, 47357689204736, 47357690900479, +STORE, 47357691486208, 47357691490303, +STORE, 47357690900480, 47357691486207, +ERASE, 47357690900480, 47357690900480, +STORE, 47357690900480, 47357691486207, +STORE, 47357691695104, 47357691711487, +STORE, 47357691490304, 47357691695103, +ERASE, 47357691490304, 47357691490304, +STORE, 47357691490304, 47357691695103, +ERASE, 47357691695104, 47357691695104, +STORE, 47357691695104, 47357691711487, +STORE, 47357691711488, 47357693550591, +STORE, 47357691850752, 47357693550591, +STORE, 47357691711488, 47357691850751, +ERASE, 47357691850752, 47357691850752, +STORE, 47357691850752, 47357693509631, +STORE, 47357693509632, 47357693550591, +STORE, 47357693194240, 47357693509631, +STORE, 47357691850752, 47357693194239, +ERASE, 47357691850752, 47357691850752, +STORE, 47357691850752, 47357693194239, +STORE, 47357693505536, 47357693509631, +STORE, 47357693194240, 47357693505535, +ERASE, 47357693194240, 47357693194240, +STORE, 47357693194240, 47357693505535, +STORE, 47357693534208, 47357693550591, +STORE, 47357693509632, 47357693534207, +ERASE, 47357693509632, 47357693509632, +STORE, 47357693509632, 47357693534207, +ERASE, 47357693534208, 47357693534208, +STORE, 47357693534208, 47357693550591, +STORE, 47357693550592, 47357693685759, +ERASE, 47357693550592, 47357693550592, +STORE, 47357693550592, 47357693575167, +STORE, 47357693575168, 47357693685759, +STORE, 47357693636608, 47357693685759, +STORE, 47357693575168, 47357693636607, +ERASE, 47357693575168, 47357693575168, +STORE, 47357693575168, 47357693636607, +STORE, 47357693661184, 47357693685759, +STORE, 47357693636608, 47357693661183, +ERASE, 47357693636608, 47357693636608, +STORE, 47357693636608, 47357693685759, +ERASE, 47357693636608, 47357693636608, +STORE, 47357693636608, 47357693661183, +STORE, 47357693661184, 47357693685759, +STORE, 47357693669376, 47357693685759, +STORE, 47357693661184, 47357693669375, +ERASE, 47357693661184, 47357693661184, +STORE, 47357693661184, 47357693669375, +ERASE, 47357693669376, 47357693669376, +STORE, 47357693669376, 47357693685759, +STORE, 47357693685760, 47357693706239, +ERASE, 47357693685760, 47357693685760, +STORE, 47357693685760, 47357693689855, +STORE, 47357693689856, 47357693706239, +STORE, 47357693693952, 47357693706239, +STORE, 47357693689856, 47357693693951, +ERASE, 47357693689856, 47357693689856, +STORE, 47357693689856, 47357693693951, +STORE, 47357693698048, 47357693706239, +STORE, 47357693693952, 47357693698047, +ERASE, 47357693693952, 47357693693952, +STORE, 47357693693952, 47357693706239, +ERASE, 47357693693952, 47357693693952, +STORE, 47357693693952, 47357693698047, +STORE, 47357693698048, 47357693706239, +ERASE, 47357693698048, 47357693698048, +STORE, 47357693698048, 47357693706239, +STORE, 47357693706240, 47357693714431, +ERASE, 47357693509632, 47357693509632, +STORE, 47357693509632, 47357693526015, +STORE, 47357693526016, 47357693534207, +ERASE, 47357693698048, 47357693698048, +STORE, 47357693698048, 47357693702143, +STORE, 47357693702144, 47357693706239, +ERASE, 47357693661184, 47357693661184, +STORE, 47357693661184, 47357693665279, +STORE, 47357693665280, 47357693669375, +ERASE, 47357691490304, 47357691490304, +STORE, 47357691490304, 47357691686911, +STORE, 47357691686912, 47357691695103, +ERASE, 47357688651776, 47357688651776, +STORE, 47357688651776, 47357688655871, +STORE, 47357688655872, 47357688659967, +ERASE, 94240509046784, 94240509046784, +STORE, 94240509046784, 94240509054975, +STORE, 94240509054976, 94240509059071, +ERASE, 140275106676736, 140275106676736, +STORE, 140275106676736, 140275106680831, +STORE, 140275106680832, 140275106684927, +ERASE, 47357688479744, 47357688479744, +STORE, 94240518361088, 94240518496255, +STORE, 140737488347136, 140737488351231, +STORE, 140732688277504, 140737488351231, +ERASE, 140732688277504, 140732688277504, +STORE, 140732688277504, 140732688281599, +STORE, 94629171351552, 94629172064255, +ERASE, 94629171351552, 94629171351552, +STORE, 94629171351552, 94629171400703, +STORE, 94629171400704, 94629172064255, +ERASE, 94629171400704, 94629171400704, +STORE, 94629171400704, 94629171945471, +STORE, 94629171945472, 94629172043775, +STORE, 94629172043776, 94629172064255, +STORE, 139770707644416, 139770707816447, +ERASE, 139770707644416, 139770707644416, +STORE, 139770707644416, 139770707648511, +STORE, 139770707648512, 139770707816447, +ERASE, 139770707648512, 139770707648512, +STORE, 139770707648512, 139770707771391, +STORE, 139770707771392, 139770707804159, +STORE, 139770707804160, 139770707812351, +STORE, 139770707812352, 139770707816447, +STORE, 140732689121280, 140732689125375, +STORE, 140732689108992, 140732689121279, +STORE, 47862087352320, 47862087360511, +STORE, 47862087360512, 47862087368703, +STORE, 47862087368704, 47862087475199, +STORE, 47862087385088, 47862087475199, +STORE, 47862087368704, 47862087385087, +ERASE, 47862087385088, 47862087385088, +STORE, 47862087385088, 47862087458815, +STORE, 47862087458816, 47862087475199, +STORE, 47862087438336, 47862087458815, +STORE, 47862087385088, 47862087438335, +ERASE, 47862087385088, 47862087385088, +STORE, 47862087385088, 47862087438335, +STORE, 47862087454720, 47862087458815, +STORE, 47862087438336, 47862087454719, +ERASE, 47862087438336, 47862087438336, +STORE, 47862087438336, 47862087454719, +STORE, 47862087467008, 47862087475199, +STORE, 47862087458816, 47862087467007, +ERASE, 47862087458816, 47862087458816, +STORE, 47862087458816, 47862087467007, +ERASE, 47862087467008, 47862087467008, +STORE, 47862087467008, 47862087475199, +STORE, 47862087475200, 47862089314303, +STORE, 47862087614464, 47862089314303, +STORE, 47862087475200, 47862087614463, +ERASE, 47862087614464, 47862087614464, +STORE, 47862087614464, 47862089273343, +STORE, 47862089273344, 47862089314303, +STORE, 47862088957952, 47862089273343, +STORE, 47862087614464, 47862088957951, +ERASE, 47862087614464, 47862087614464, +STORE, 47862087614464, 47862088957951, +STORE, 47862089269248, 47862089273343, +STORE, 47862088957952, 47862089269247, +ERASE, 47862088957952, 47862088957952, +STORE, 47862088957952, 47862089269247, +STORE, 47862089297920, 47862089314303, +STORE, 47862089273344, 47862089297919, +ERASE, 47862089273344, 47862089273344, +STORE, 47862089273344, 47862089297919, +ERASE, 47862089297920, 47862089297920, +STORE, 47862089297920, 47862089314303, +STORE, 47862089297920, 47862089326591, +ERASE, 47862089273344, 47862089273344, +STORE, 47862089273344, 47862089289727, +STORE, 47862089289728, 47862089297919, +ERASE, 47862087458816, 47862087458816, +STORE, 47862087458816, 47862087462911, +STORE, 47862087462912, 47862087467007, +ERASE, 94629172043776, 94629172043776, +STORE, 94629172043776, 94629172060159, +STORE, 94629172060160, 94629172064255, +ERASE, 139770707804160, 139770707804160, +STORE, 139770707804160, 139770707808255, +STORE, 139770707808256, 139770707812351, +ERASE, 47862087352320, 47862087352320, +STORE, 94629197533184, 94629197668351, +STORE, 140737488347136, 140737488351231, +STORE, 140727540711424, 140737488351231, +ERASE, 140727540711424, 140727540711424, +STORE, 140727540711424, 140727540715519, +STORE, 94299865313280, 94299866025983, +ERASE, 94299865313280, 94299865313280, +STORE, 94299865313280, 94299865362431, +STORE, 94299865362432, 94299866025983, +ERASE, 94299865362432, 94299865362432, +STORE, 94299865362432, 94299865907199, +STORE, 94299865907200, 94299866005503, +STORE, 94299866005504, 94299866025983, +STORE, 140680268763136, 140680268935167, +ERASE, 140680268763136, 140680268763136, +STORE, 140680268763136, 140680268767231, +STORE, 140680268767232, 140680268935167, +ERASE, 140680268767232, 140680268767232, +STORE, 140680268767232, 140680268890111, +STORE, 140680268890112, 140680268922879, +STORE, 140680268922880, 140680268931071, +STORE, 140680268931072, 140680268935167, +STORE, 140727541424128, 140727541428223, +STORE, 140727541411840, 140727541424127, +STORE, 46952526233600, 46952526241791, +STORE, 46952526241792, 46952526249983, +STORE, 46952526249984, 46952526356479, +STORE, 46952526266368, 46952526356479, +STORE, 46952526249984, 46952526266367, +ERASE, 46952526266368, 46952526266368, +STORE, 46952526266368, 46952526340095, +STORE, 46952526340096, 46952526356479, +STORE, 46952526319616, 46952526340095, +STORE, 46952526266368, 46952526319615, +ERASE, 46952526266368, 46952526266368, +STORE, 46952526266368, 46952526319615, +STORE, 46952526336000, 46952526340095, +STORE, 46952526319616, 46952526335999, +ERASE, 46952526319616, 46952526319616, +STORE, 46952526319616, 46952526335999, +STORE, 46952526348288, 46952526356479, +STORE, 46952526340096, 46952526348287, +ERASE, 46952526340096, 46952526340096, +STORE, 46952526340096, 46952526348287, +ERASE, 46952526348288, 46952526348288, +STORE, 46952526348288, 46952526356479, +STORE, 46952526356480, 46952528195583, +STORE, 46952526495744, 46952528195583, +STORE, 46952526356480, 46952526495743, +ERASE, 46952526495744, 46952526495744, +STORE, 46952526495744, 46952528154623, +STORE, 46952528154624, 46952528195583, +STORE, 46952527839232, 46952528154623, +STORE, 46952526495744, 46952527839231, +ERASE, 46952526495744, 46952526495744, +STORE, 46952526495744, 46952527839231, +STORE, 46952528150528, 46952528154623, +STORE, 46952527839232, 46952528150527, +ERASE, 46952527839232, 46952527839232, +STORE, 46952527839232, 46952528150527, +STORE, 46952528179200, 46952528195583, +STORE, 46952528154624, 46952528179199, +ERASE, 46952528154624, 46952528154624, +STORE, 46952528154624, 46952528179199, +ERASE, 46952528179200, 46952528179200, +STORE, 46952528179200, 46952528195583, +STORE, 46952528179200, 46952528207871, +ERASE, 46952528154624, 46952528154624, +STORE, 46952528154624, 46952528171007, +STORE, 46952528171008, 46952528179199, +ERASE, 46952526340096, 46952526340096, +STORE, 46952526340096, 46952526344191, +STORE, 46952526344192, 46952526348287, +ERASE, 94299866005504, 94299866005504, +STORE, 94299866005504, 94299866021887, +STORE, 94299866021888, 94299866025983, +ERASE, 140680268922880, 140680268922880, +STORE, 140680268922880, 140680268926975, +STORE, 140680268926976, 140680268931071, +ERASE, 46952526233600, 46952526233600, +STORE, 140737488347136, 140737488351231, +STORE, 140722874793984, 140737488351231, +ERASE, 140722874793984, 140722874793984, +STORE, 140722874793984, 140722874798079, +STORE, 94448916213760, 94448916926463, +ERASE, 94448916213760, 94448916213760, +STORE, 94448916213760, 94448916262911, +STORE, 94448916262912, 94448916926463, +ERASE, 94448916262912, 94448916262912, +STORE, 94448916262912, 94448916807679, +STORE, 94448916807680, 94448916905983, +STORE, 94448916905984, 94448916926463, +STORE, 140389117046784, 140389117218815, +ERASE, 140389117046784, 140389117046784, +STORE, 140389117046784, 140389117050879, +STORE, 140389117050880, 140389117218815, +ERASE, 140389117050880, 140389117050880, +STORE, 140389117050880, 140389117173759, +STORE, 140389117173760, 140389117206527, +STORE, 140389117206528, 140389117214719, +STORE, 140389117214720, 140389117218815, +STORE, 140722875297792, 140722875301887, +STORE, 140722875285504, 140722875297791, +STORE, 47243677949952, 47243677958143, +STORE, 47243677958144, 47243677966335, +STORE, 47243677966336, 47243678072831, +STORE, 47243677982720, 47243678072831, +STORE, 47243677966336, 47243677982719, +ERASE, 47243677982720, 47243677982720, +STORE, 47243677982720, 47243678056447, +STORE, 47243678056448, 47243678072831, +STORE, 47243678035968, 47243678056447, +STORE, 47243677982720, 47243678035967, +ERASE, 47243677982720, 47243677982720, +STORE, 47243677982720, 47243678035967, +STORE, 47243678052352, 47243678056447, +STORE, 47243678035968, 47243678052351, +ERASE, 47243678035968, 47243678035968, +STORE, 47243678035968, 47243678052351, +STORE, 47243678064640, 47243678072831, +STORE, 47243678056448, 47243678064639, +ERASE, 47243678056448, 47243678056448, +STORE, 47243678056448, 47243678064639, +ERASE, 47243678064640, 47243678064640, +STORE, 47243678064640, 47243678072831, +STORE, 47243678072832, 47243679911935, +STORE, 47243678212096, 47243679911935, +STORE, 47243678072832, 47243678212095, +ERASE, 47243678212096, 47243678212096, +STORE, 47243678212096, 47243679870975, +STORE, 47243679870976, 47243679911935, +STORE, 47243679555584, 47243679870975, +STORE, 47243678212096, 47243679555583, +ERASE, 47243678212096, 47243678212096, +STORE, 47243678212096, 47243679555583, +STORE, 47243679866880, 47243679870975, +STORE, 47243679555584, 47243679866879, +ERASE, 47243679555584, 47243679555584, +STORE, 47243679555584, 47243679866879, +STORE, 47243679895552, 47243679911935, +STORE, 47243679870976, 47243679895551, +ERASE, 47243679870976, 47243679870976, +STORE, 47243679870976, 47243679895551, +ERASE, 47243679895552, 47243679895552, +STORE, 47243679895552, 47243679911935, +STORE, 47243679895552, 47243679924223, +ERASE, 47243679870976, 47243679870976, +STORE, 47243679870976, 47243679887359, +STORE, 47243679887360, 47243679895551, +ERASE, 47243678056448, 47243678056448, +STORE, 47243678056448, 47243678060543, +STORE, 47243678060544, 47243678064639, +ERASE, 94448916905984, 94448916905984, +STORE, 94448916905984, 94448916922367, +STORE, 94448916922368, 94448916926463, +ERASE, 140389117206528, 140389117206528, +STORE, 140389117206528, 140389117210623, +STORE, 140389117210624, 140389117214719, +ERASE, 47243677949952, 47243677949952, +STORE, 140737488347136, 140737488351231, +STORE, 140733068505088, 140737488351231, +ERASE, 140733068505088, 140733068505088, +STORE, 140733068505088, 140733068509183, +STORE, 94207145750528, 94207146463231, +ERASE, 94207145750528, 94207145750528, +STORE, 94207145750528, 94207145799679, +STORE, 94207145799680, 94207146463231, +ERASE, 94207145799680, 94207145799680, +STORE, 94207145799680, 94207146344447, +STORE, 94207146344448, 94207146442751, +STORE, 94207146442752, 94207146463231, +STORE, 140684504911872, 140684505083903, +ERASE, 140684504911872, 140684504911872, +STORE, 140684504911872, 140684504915967, +STORE, 140684504915968, 140684505083903, +ERASE, 140684504915968, 140684504915968, +STORE, 140684504915968, 140684505038847, +STORE, 140684505038848, 140684505071615, +STORE, 140684505071616, 140684505079807, +STORE, 140684505079808, 140684505083903, +STORE, 140733068607488, 140733068611583, +STORE, 140733068595200, 140733068607487, +STORE, 46948290084864, 46948290093055, +STORE, 46948290093056, 46948290101247, +STORE, 46948290101248, 46948290207743, +STORE, 46948290117632, 46948290207743, +STORE, 46948290101248, 46948290117631, +ERASE, 46948290117632, 46948290117632, +STORE, 46948290117632, 46948290191359, +STORE, 46948290191360, 46948290207743, +STORE, 46948290170880, 46948290191359, +STORE, 46948290117632, 46948290170879, +ERASE, 46948290117632, 46948290117632, +STORE, 46948290117632, 46948290170879, +STORE, 46948290187264, 46948290191359, +STORE, 46948290170880, 46948290187263, +ERASE, 46948290170880, 46948290170880, +STORE, 46948290170880, 46948290187263, +STORE, 46948290199552, 46948290207743, +STORE, 46948290191360, 46948290199551, +ERASE, 46948290191360, 46948290191360, +STORE, 46948290191360, 46948290199551, +ERASE, 46948290199552, 46948290199552, +STORE, 46948290199552, 46948290207743, +STORE, 46948290207744, 46948292046847, +STORE, 46948290347008, 46948292046847, +STORE, 46948290207744, 46948290347007, +ERASE, 46948290347008, 46948290347008, +STORE, 46948290347008, 46948292005887, +STORE, 46948292005888, 46948292046847, +STORE, 46948291690496, 46948292005887, +STORE, 46948290347008, 46948291690495, +ERASE, 46948290347008, 46948290347008, +STORE, 46948290347008, 46948291690495, +STORE, 46948292001792, 46948292005887, +STORE, 46948291690496, 46948292001791, +ERASE, 46948291690496, 46948291690496, +STORE, 46948291690496, 46948292001791, +STORE, 46948292030464, 46948292046847, +STORE, 46948292005888, 46948292030463, +ERASE, 46948292005888, 46948292005888, +STORE, 46948292005888, 46948292030463, +ERASE, 46948292030464, 46948292030464, +STORE, 46948292030464, 46948292046847, +STORE, 46948292030464, 46948292059135, +ERASE, 46948292005888, 46948292005888, +STORE, 46948292005888, 46948292022271, +STORE, 46948292022272, 46948292030463, +ERASE, 46948290191360, 46948290191360, +STORE, 46948290191360, 46948290195455, +STORE, 46948290195456, 46948290199551, +ERASE, 94207146442752, 94207146442752, +STORE, 94207146442752, 94207146459135, +STORE, 94207146459136, 94207146463231, +ERASE, 140684505071616, 140684505071616, +STORE, 140684505071616, 140684505075711, +STORE, 140684505075712, 140684505079807, +ERASE, 46948290084864, 46948290084864, +STORE, 140737488347136, 140737488351231, +STORE, 140726367158272, 140737488351231, +ERASE, 140726367158272, 140726367158272, +STORE, 140726367158272, 140726367162367, +STORE, 94436124106752, 94436124819455, +ERASE, 94436124106752, 94436124106752, +STORE, 94436124106752, 94436124155903, +STORE, 94436124155904, 94436124819455, +ERASE, 94436124155904, 94436124155904, +STORE, 94436124155904, 94436124700671, +STORE, 94436124700672, 94436124798975, +STORE, 94436124798976, 94436124819455, +STORE, 140049025044480, 140049025216511, +ERASE, 140049025044480, 140049025044480, +STORE, 140049025044480, 140049025048575, +STORE, 140049025048576, 140049025216511, +ERASE, 140049025048576, 140049025048576, +STORE, 140049025048576, 140049025171455, +STORE, 140049025171456, 140049025204223, +STORE, 140049025204224, 140049025212415, +STORE, 140049025212416, 140049025216511, +STORE, 140726367256576, 140726367260671, +STORE, 140726367244288, 140726367256575, +STORE, 47583769952256, 47583769960447, +STORE, 47583769960448, 47583769968639, +STORE, 47583769968640, 47583770075135, +STORE, 47583769985024, 47583770075135, +STORE, 47583769968640, 47583769985023, +ERASE, 47583769985024, 47583769985024, +STORE, 47583769985024, 47583770058751, +STORE, 47583770058752, 47583770075135, +STORE, 47583770038272, 47583770058751, +STORE, 47583769985024, 47583770038271, +ERASE, 47583769985024, 47583769985024, +STORE, 47583769985024, 47583770038271, +STORE, 47583770054656, 47583770058751, +STORE, 47583770038272, 47583770054655, +ERASE, 47583770038272, 47583770038272, +STORE, 47583770038272, 47583770054655, +STORE, 47583770066944, 47583770075135, +STORE, 47583770058752, 47583770066943, +ERASE, 47583770058752, 47583770058752, +STORE, 47583770058752, 47583770066943, +ERASE, 47583770066944, 47583770066944, +STORE, 47583770066944, 47583770075135, +STORE, 47583770075136, 47583771914239, +STORE, 47583770214400, 47583771914239, +STORE, 47583770075136, 47583770214399, +ERASE, 47583770214400, 47583770214400, +STORE, 47583770214400, 47583771873279, +STORE, 47583771873280, 47583771914239, +STORE, 47583771557888, 47583771873279, +STORE, 47583770214400, 47583771557887, +ERASE, 47583770214400, 47583770214400, +STORE, 47583770214400, 47583771557887, +STORE, 47583771869184, 47583771873279, +STORE, 47583771557888, 47583771869183, +ERASE, 47583771557888, 47583771557888, +STORE, 47583771557888, 47583771869183, +STORE, 47583771897856, 47583771914239, +STORE, 47583771873280, 47583771897855, +ERASE, 47583771873280, 47583771873280, +STORE, 47583771873280, 47583771897855, +ERASE, 47583771897856, 47583771897856, +STORE, 47583771897856, 47583771914239, +STORE, 47583771897856, 47583771926527, +ERASE, 47583771873280, 47583771873280, +STORE, 47583771873280, 47583771889663, +STORE, 47583771889664, 47583771897855, +ERASE, 47583770058752, 47583770058752, +STORE, 47583770058752, 47583770062847, +STORE, 47583770062848, 47583770066943, +ERASE, 94436124798976, 94436124798976, +STORE, 94436124798976, 94436124815359, +STORE, 94436124815360, 94436124819455, +ERASE, 140049025204224, 140049025204224, +STORE, 140049025204224, 140049025208319, +STORE, 140049025208320, 140049025212415, +ERASE, 47583769952256, 47583769952256, +STORE, 140737488347136, 140737488351231, +STORE, 140727116099584, 140737488351231, +ERASE, 140727116099584, 140727116099584, +STORE, 140727116099584, 140727116103679, +STORE, 94166319734784, 94166320447487, +ERASE, 94166319734784, 94166319734784, +STORE, 94166319734784, 94166319783935, +STORE, 94166319783936, 94166320447487, +ERASE, 94166319783936, 94166319783936, +STORE, 94166319783936, 94166320328703, +STORE, 94166320328704, 94166320427007, +STORE, 94166320427008, 94166320447487, +STORE, 139976559542272, 139976559714303, +ERASE, 139976559542272, 139976559542272, +STORE, 139976559542272, 139976559546367, +STORE, 139976559546368, 139976559714303, +ERASE, 139976559546368, 139976559546368, +STORE, 139976559546368, 139976559669247, +STORE, 139976559669248, 139976559702015, +STORE, 139976559702016, 139976559710207, +STORE, 139976559710208, 139976559714303, +STORE, 140727116222464, 140727116226559, +STORE, 140727116210176, 140727116222463, +STORE, 47656235454464, 47656235462655, +STORE, 47656235462656, 47656235470847, +STORE, 47656235470848, 47656235577343, +STORE, 47656235487232, 47656235577343, +STORE, 47656235470848, 47656235487231, +ERASE, 47656235487232, 47656235487232, +STORE, 47656235487232, 47656235560959, +STORE, 47656235560960, 47656235577343, +STORE, 47656235540480, 47656235560959, +STORE, 47656235487232, 47656235540479, +ERASE, 47656235487232, 47656235487232, +STORE, 47656235487232, 47656235540479, +STORE, 47656235556864, 47656235560959, +STORE, 47656235540480, 47656235556863, +ERASE, 47656235540480, 47656235540480, +STORE, 47656235540480, 47656235556863, +STORE, 47656235569152, 47656235577343, +STORE, 47656235560960, 47656235569151, +ERASE, 47656235560960, 47656235560960, +STORE, 47656235560960, 47656235569151, +ERASE, 47656235569152, 47656235569152, +STORE, 47656235569152, 47656235577343, +STORE, 47656235577344, 47656237416447, +STORE, 47656235716608, 47656237416447, +STORE, 47656235577344, 47656235716607, +ERASE, 47656235716608, 47656235716608, +STORE, 47656235716608, 47656237375487, +STORE, 47656237375488, 47656237416447, +STORE, 47656237060096, 47656237375487, +STORE, 47656235716608, 47656237060095, +ERASE, 47656235716608, 47656235716608, +STORE, 47656235716608, 47656237060095, +STORE, 47656237371392, 47656237375487, +STORE, 47656237060096, 47656237371391, +ERASE, 47656237060096, 47656237060096, +STORE, 47656237060096, 47656237371391, +STORE, 47656237400064, 47656237416447, +STORE, 47656237375488, 47656237400063, +ERASE, 47656237375488, 47656237375488, +STORE, 47656237375488, 47656237400063, +ERASE, 47656237400064, 47656237400064, +STORE, 47656237400064, 47656237416447, +STORE, 47656237400064, 47656237428735, +ERASE, 47656237375488, 47656237375488, +STORE, 47656237375488, 47656237391871, +STORE, 47656237391872, 47656237400063, +ERASE, 47656235560960, 47656235560960, +STORE, 47656235560960, 47656235565055, +STORE, 47656235565056, 47656235569151, +ERASE, 94166320427008, 94166320427008, +STORE, 94166320427008, 94166320443391, +STORE, 94166320443392, 94166320447487, +ERASE, 139976559702016, 139976559702016, +STORE, 139976559702016, 139976559706111, +STORE, 139976559706112, 139976559710207, +ERASE, 47656235454464, 47656235454464, +STORE, 94166332153856, 94166332289023, +STORE, 140737488347136, 140737488351231, +STORE, 140726412816384, 140737488351231, +ERASE, 140726412816384, 140726412816384, +STORE, 140726412816384, 140726412820479, +STORE, 94094884507648, 94094885220351, +ERASE, 94094884507648, 94094884507648, +STORE, 94094884507648, 94094884556799, +STORE, 94094884556800, 94094885220351, +ERASE, 94094884556800, 94094884556800, +STORE, 94094884556800, 94094885101567, +STORE, 94094885101568, 94094885199871, +STORE, 94094885199872, 94094885220351, +STORE, 139773773938688, 139773774110719, +ERASE, 139773773938688, 139773773938688, +STORE, 139773773938688, 139773773942783, +STORE, 139773773942784, 139773774110719, +ERASE, 139773773942784, 139773773942784, +STORE, 139773773942784, 139773774065663, +STORE, 139773774065664, 139773774098431, +STORE, 139773774098432, 139773774106623, +STORE, 139773774106624, 139773774110719, +STORE, 140726412963840, 140726412967935, +STORE, 140726412951552, 140726412963839, +STORE, 47859021058048, 47859021066239, +STORE, 47859021066240, 47859021074431, +STORE, 47859021074432, 47859021180927, +STORE, 47859021090816, 47859021180927, +STORE, 47859021074432, 47859021090815, +ERASE, 47859021090816, 47859021090816, +STORE, 47859021090816, 47859021164543, +STORE, 47859021164544, 47859021180927, +STORE, 47859021144064, 47859021164543, +STORE, 47859021090816, 47859021144063, +ERASE, 47859021090816, 47859021090816, +STORE, 47859021090816, 47859021144063, +STORE, 47859021160448, 47859021164543, +STORE, 47859021144064, 47859021160447, +ERASE, 47859021144064, 47859021144064, +STORE, 47859021144064, 47859021160447, +STORE, 47859021172736, 47859021180927, +STORE, 47859021164544, 47859021172735, +ERASE, 47859021164544, 47859021164544, +STORE, 47859021164544, 47859021172735, +ERASE, 47859021172736, 47859021172736, +STORE, 47859021172736, 47859021180927, +STORE, 47859021180928, 47859023020031, +STORE, 47859021320192, 47859023020031, +STORE, 47859021180928, 47859021320191, +ERASE, 47859021320192, 47859021320192, +STORE, 47859021320192, 47859022979071, +STORE, 47859022979072, 47859023020031, +STORE, 47859022663680, 47859022979071, +STORE, 47859021320192, 47859022663679, +ERASE, 47859021320192, 47859021320192, +STORE, 47859021320192, 47859022663679, +STORE, 47859022974976, 47859022979071, +STORE, 47859022663680, 47859022974975, +ERASE, 47859022663680, 47859022663680, +STORE, 47859022663680, 47859022974975, +STORE, 47859023003648, 47859023020031, +STORE, 47859022979072, 47859023003647, +ERASE, 47859022979072, 47859022979072, +STORE, 47859022979072, 47859023003647, +ERASE, 47859023003648, 47859023003648, +STORE, 47859023003648, 47859023020031, +STORE, 47859023003648, 47859023032319, +ERASE, 47859022979072, 47859022979072, +STORE, 47859022979072, 47859022995455, +STORE, 47859022995456, 47859023003647, +ERASE, 47859021164544, 47859021164544, +STORE, 47859021164544, 47859021168639, +STORE, 47859021168640, 47859021172735, +ERASE, 94094885199872, 94094885199872, +STORE, 94094885199872, 94094885216255, +STORE, 94094885216256, 94094885220351, +ERASE, 139773774098432, 139773774098432, +STORE, 139773774098432, 139773774102527, +STORE, 139773774102528, 139773774106623, +ERASE, 47859021058048, 47859021058048, +STORE, 94094901108736, 94094901243903, +STORE, 140737488347136, 140737488351231, +STORE, 140736567963648, 140737488351231, +ERASE, 140736567963648, 140736567963648, +STORE, 140736567963648, 140736567967743, +STORE, 94924425748480, 94924426461183, +ERASE, 94924425748480, 94924425748480, +STORE, 94924425748480, 94924425797631, +STORE, 94924425797632, 94924426461183, +ERASE, 94924425797632, 94924425797632, +STORE, 94924425797632, 94924426342399, +STORE, 94924426342400, 94924426440703, +STORE, 94924426440704, 94924426461183, +STORE, 140042126319616, 140042126491647, +ERASE, 140042126319616, 140042126319616, +STORE, 140042126319616, 140042126323711, +STORE, 140042126323712, 140042126491647, +ERASE, 140042126323712, 140042126323712, +STORE, 140042126323712, 140042126446591, +STORE, 140042126446592, 140042126479359, +STORE, 140042126479360, 140042126487551, +STORE, 140042126487552, 140042126491647, +STORE, 140736568672256, 140736568676351, +STORE, 140736568659968, 140736568672255, +STORE, 47590668677120, 47590668685311, +STORE, 47590668685312, 47590668693503, +STORE, 47590668693504, 47590668799999, +STORE, 47590668709888, 47590668799999, +STORE, 47590668693504, 47590668709887, +ERASE, 47590668709888, 47590668709888, +STORE, 47590668709888, 47590668783615, +STORE, 47590668783616, 47590668799999, +STORE, 47590668763136, 47590668783615, +STORE, 47590668709888, 47590668763135, +ERASE, 47590668709888, 47590668709888, +STORE, 47590668709888, 47590668763135, +STORE, 47590668779520, 47590668783615, +STORE, 47590668763136, 47590668779519, +ERASE, 47590668763136, 47590668763136, +STORE, 47590668763136, 47590668779519, +STORE, 47590668791808, 47590668799999, +STORE, 47590668783616, 47590668791807, +ERASE, 47590668783616, 47590668783616, +STORE, 47590668783616, 47590668791807, +ERASE, 47590668791808, 47590668791808, +STORE, 47590668791808, 47590668799999, +STORE, 47590668800000, 47590670639103, +STORE, 47590668939264, 47590670639103, +STORE, 47590668800000, 47590668939263, +ERASE, 47590668939264, 47590668939264, +STORE, 47590668939264, 47590670598143, +STORE, 47590670598144, 47590670639103, +STORE, 47590670282752, 47590670598143, +STORE, 47590668939264, 47590670282751, +ERASE, 47590668939264, 47590668939264, +STORE, 47590668939264, 47590670282751, +STORE, 47590670594048, 47590670598143, +STORE, 47590670282752, 47590670594047, +ERASE, 47590670282752, 47590670282752, +STORE, 47590670282752, 47590670594047, +STORE, 47590670622720, 47590670639103, +STORE, 47590670598144, 47590670622719, +ERASE, 47590670598144, 47590670598144, +STORE, 47590670598144, 47590670622719, +ERASE, 47590670622720, 47590670622720, +STORE, 47590670622720, 47590670639103, +STORE, 47590670622720, 47590670651391, +ERASE, 47590670598144, 47590670598144, +STORE, 47590670598144, 47590670614527, +STORE, 47590670614528, 47590670622719, +ERASE, 47590668783616, 47590668783616, +STORE, 47590668783616, 47590668787711, +STORE, 47590668787712, 47590668791807, +ERASE, 94924426440704, 94924426440704, +STORE, 94924426440704, 94924426457087, +STORE, 94924426457088, 94924426461183, +ERASE, 140042126479360, 140042126479360, +STORE, 140042126479360, 140042126483455, +STORE, 140042126483456, 140042126487551, +ERASE, 47590668677120, 47590668677120, +STORE, 140737488347136, 140737488351231, +STORE, 140733281439744, 140737488351231, +ERASE, 140733281439744, 140733281439744, +STORE, 140733281439744, 140733281443839, +STORE, 94490667069440, 94490667782143, +ERASE, 94490667069440, 94490667069440, +STORE, 94490667069440, 94490667118591, +STORE, 94490667118592, 94490667782143, +ERASE, 94490667118592, 94490667118592, +STORE, 94490667118592, 94490667663359, +STORE, 94490667663360, 94490667761663, +STORE, 94490667761664, 94490667782143, +STORE, 139878215118848, 139878215290879, +ERASE, 139878215118848, 139878215118848, +STORE, 139878215118848, 139878215122943, +STORE, 139878215122944, 139878215290879, +ERASE, 139878215122944, 139878215122944, +STORE, 139878215122944, 139878215245823, +STORE, 139878215245824, 139878215278591, +STORE, 139878215278592, 139878215286783, +STORE, 139878215286784, 139878215290879, +STORE, 140733281464320, 140733281468415, +STORE, 140733281452032, 140733281464319, +STORE, 47754579877888, 47754579886079, +STORE, 47754579886080, 47754579894271, +STORE, 47754579894272, 47754580000767, +STORE, 47754579910656, 47754580000767, +STORE, 47754579894272, 47754579910655, +ERASE, 47754579910656, 47754579910656, +STORE, 47754579910656, 47754579984383, +STORE, 47754579984384, 47754580000767, +STORE, 47754579963904, 47754579984383, +STORE, 47754579910656, 47754579963903, +ERASE, 47754579910656, 47754579910656, +STORE, 47754579910656, 47754579963903, +STORE, 47754579980288, 47754579984383, +STORE, 47754579963904, 47754579980287, +ERASE, 47754579963904, 47754579963904, +STORE, 47754579963904, 47754579980287, +STORE, 47754579992576, 47754580000767, +STORE, 47754579984384, 47754579992575, +ERASE, 47754579984384, 47754579984384, +STORE, 47754579984384, 47754579992575, +ERASE, 47754579992576, 47754579992576, +STORE, 47754579992576, 47754580000767, +STORE, 47754580000768, 47754581839871, +STORE, 47754580140032, 47754581839871, +STORE, 47754580000768, 47754580140031, +ERASE, 47754580140032, 47754580140032, +STORE, 47754580140032, 47754581798911, +STORE, 47754581798912, 47754581839871, +STORE, 47754581483520, 47754581798911, +STORE, 47754580140032, 47754581483519, +ERASE, 47754580140032, 47754580140032, +STORE, 47754580140032, 47754581483519, +STORE, 47754581794816, 47754581798911, +STORE, 47754581483520, 47754581794815, +ERASE, 47754581483520, 47754581483520, +STORE, 47754581483520, 47754581794815, +STORE, 47754581823488, 47754581839871, +STORE, 47754581798912, 47754581823487, +ERASE, 47754581798912, 47754581798912, +STORE, 47754581798912, 47754581823487, +ERASE, 47754581823488, 47754581823488, +STORE, 47754581823488, 47754581839871, +STORE, 47754581823488, 47754581852159, +ERASE, 47754581798912, 47754581798912, +STORE, 47754581798912, 47754581815295, +STORE, 47754581815296, 47754581823487, +ERASE, 47754579984384, 47754579984384, +STORE, 47754579984384, 47754579988479, +STORE, 47754579988480, 47754579992575, +ERASE, 94490667761664, 94490667761664, +STORE, 94490667761664, 94490667778047, +STORE, 94490667778048, 94490667782143, +ERASE, 139878215278592, 139878215278592, +STORE, 139878215278592, 139878215282687, +STORE, 139878215282688, 139878215286783, +ERASE, 47754579877888, 47754579877888, +STORE, 94490669649920, 94490669785087, +STORE, 140737488347136, 140737488351231, +STORE, 140735382188032, 140737488351231, +ERASE, 140735382188032, 140735382188032, +STORE, 140735382188032, 140735382192127, +STORE, 94150181302272, 94150182014975, +ERASE, 94150181302272, 94150181302272, +STORE, 94150181302272, 94150181351423, +STORE, 94150181351424, 94150182014975, +ERASE, 94150181351424, 94150181351424, +STORE, 94150181351424, 94150181896191, +STORE, 94150181896192, 94150181994495, +STORE, 94150181994496, 94150182014975, +STORE, 139679752458240, 139679752630271, +ERASE, 139679752458240, 139679752458240, +STORE, 139679752458240, 139679752462335, +STORE, 139679752462336, 139679752630271, +ERASE, 139679752462336, 139679752462336, +STORE, 139679752462336, 139679752585215, +STORE, 139679752585216, 139679752617983, +STORE, 139679752617984, 139679752626175, +STORE, 139679752626176, 139679752630271, +STORE, 140735382536192, 140735382540287, +STORE, 140735382523904, 140735382536191, +STORE, 47953042538496, 47953042546687, +STORE, 47953042546688, 47953042554879, +STORE, 47953042554880, 47953042661375, +STORE, 47953042571264, 47953042661375, +STORE, 47953042554880, 47953042571263, +ERASE, 47953042571264, 47953042571264, +STORE, 47953042571264, 47953042644991, +STORE, 47953042644992, 47953042661375, +STORE, 47953042624512, 47953042644991, +STORE, 47953042571264, 47953042624511, +ERASE, 47953042571264, 47953042571264, +STORE, 47953042571264, 47953042624511, +STORE, 47953042640896, 47953042644991, +STORE, 47953042624512, 47953042640895, +ERASE, 47953042624512, 47953042624512, +STORE, 47953042624512, 47953042640895, +STORE, 47953042653184, 47953042661375, +STORE, 47953042644992, 47953042653183, +ERASE, 47953042644992, 47953042644992, +STORE, 47953042644992, 47953042653183, +ERASE, 47953042653184, 47953042653184, +STORE, 47953042653184, 47953042661375, +STORE, 47953042661376, 47953044500479, +STORE, 47953042800640, 47953044500479, +STORE, 47953042661376, 47953042800639, +ERASE, 47953042800640, 47953042800640, +STORE, 47953042800640, 47953044459519, +STORE, 47953044459520, 47953044500479, +STORE, 47953044144128, 47953044459519, +STORE, 47953042800640, 47953044144127, +ERASE, 47953042800640, 47953042800640, +STORE, 47953042800640, 47953044144127, +STORE, 47953044455424, 47953044459519, +STORE, 47953044144128, 47953044455423, +ERASE, 47953044144128, 47953044144128, +STORE, 47953044144128, 47953044455423, +STORE, 47953044484096, 47953044500479, +STORE, 47953044459520, 47953044484095, +ERASE, 47953044459520, 47953044459520, +STORE, 47953044459520, 47953044484095, +ERASE, 47953044484096, 47953044484096, +STORE, 47953044484096, 47953044500479, +STORE, 47953044484096, 47953044512767, +ERASE, 47953044459520, 47953044459520, +STORE, 47953044459520, 47953044475903, +STORE, 47953044475904, 47953044484095, +ERASE, 47953042644992, 47953042644992, +STORE, 47953042644992, 47953042649087, +STORE, 47953042649088, 47953042653183, +ERASE, 94150181994496, 94150181994496, +STORE, 94150181994496, 94150182010879, +STORE, 94150182010880, 94150182014975, +ERASE, 139679752617984, 139679752617984, +STORE, 139679752617984, 139679752622079, +STORE, 139679752622080, 139679752626175, +ERASE, 47953042538496, 47953042538496, +STORE, 140737488347136, 140737488351231, +STORE, 140737044123648, 140737488351231, +ERASE, 140737044123648, 140737044123648, +STORE, 140737044123648, 140737044127743, +STORE, 94425324294144, 94425325006847, +ERASE, 94425324294144, 94425324294144, +STORE, 94425324294144, 94425324343295, +STORE, 94425324343296, 94425325006847, +ERASE, 94425324343296, 94425324343296, +STORE, 94425324343296, 94425324888063, +STORE, 94425324888064, 94425324986367, +STORE, 94425324986368, 94425325006847, +STORE, 140382015016960, 140382015188991, +ERASE, 140382015016960, 140382015016960, +STORE, 140382015016960, 140382015021055, +STORE, 140382015021056, 140382015188991, +ERASE, 140382015021056, 140382015021056, +STORE, 140382015021056, 140382015143935, +STORE, 140382015143936, 140382015176703, +STORE, 140382015176704, 140382015184895, +STORE, 140382015184896, 140382015188991, +STORE, 140737045585920, 140737045590015, +STORE, 140737045573632, 140737045585919, +STORE, 47250779979776, 47250779987967, +STORE, 47250779987968, 47250779996159, +STORE, 47250779996160, 47250780102655, +STORE, 47250780012544, 47250780102655, +STORE, 47250779996160, 47250780012543, +ERASE, 47250780012544, 47250780012544, +STORE, 47250780012544, 47250780086271, +STORE, 47250780086272, 47250780102655, +STORE, 47250780065792, 47250780086271, +STORE, 47250780012544, 47250780065791, +ERASE, 47250780012544, 47250780012544, +STORE, 47250780012544, 47250780065791, +STORE, 47250780082176, 47250780086271, +STORE, 47250780065792, 47250780082175, +ERASE, 47250780065792, 47250780065792, +STORE, 47250780065792, 47250780082175, +STORE, 47250780094464, 47250780102655, +STORE, 47250780086272, 47250780094463, +ERASE, 47250780086272, 47250780086272, +STORE, 47250780086272, 47250780094463, +ERASE, 47250780094464, 47250780094464, +STORE, 47250780094464, 47250780102655, +STORE, 47250780102656, 47250781941759, +STORE, 47250780241920, 47250781941759, +STORE, 47250780102656, 47250780241919, +ERASE, 47250780241920, 47250780241920, +STORE, 47250780241920, 47250781900799, +STORE, 47250781900800, 47250781941759, +STORE, 47250781585408, 47250781900799, +STORE, 47250780241920, 47250781585407, +ERASE, 47250780241920, 47250780241920, +STORE, 47250780241920, 47250781585407, +STORE, 47250781896704, 47250781900799, +STORE, 47250781585408, 47250781896703, +ERASE, 47250781585408, 47250781585408, +STORE, 47250781585408, 47250781896703, +STORE, 47250781925376, 47250781941759, +STORE, 47250781900800, 47250781925375, +ERASE, 47250781900800, 47250781900800, +STORE, 47250781900800, 47250781925375, +ERASE, 47250781925376, 47250781925376, +STORE, 47250781925376, 47250781941759, +STORE, 47250781925376, 47250781954047, +ERASE, 47250781900800, 47250781900800, +STORE, 47250781900800, 47250781917183, +STORE, 47250781917184, 47250781925375, +ERASE, 47250780086272, 47250780086272, +STORE, 47250780086272, 47250780090367, +STORE, 47250780090368, 47250780094463, +ERASE, 94425324986368, 94425324986368, +STORE, 94425324986368, 94425325002751, +STORE, 94425325002752, 94425325006847, +ERASE, 140382015176704, 140382015176704, +STORE, 140382015176704, 140382015180799, +STORE, 140382015180800, 140382015184895, +ERASE, 47250779979776, 47250779979776, +STORE, 94425351438336, 94425351573503, +STORE, 140737488347136, 140737488351231, +STORE, 140736801144832, 140737488351231, +ERASE, 140736801144832, 140736801144832, +STORE, 140736801144832, 140736801148927, +STORE, 94629429358592, 94629430071295, +ERASE, 94629429358592, 94629429358592, +STORE, 94629429358592, 94629429407743, +STORE, 94629429407744, 94629430071295, +ERASE, 94629429407744, 94629429407744, +STORE, 94629429407744, 94629429952511, +STORE, 94629429952512, 94629430050815, +STORE, 94629430050816, 94629430071295, +STORE, 139801685483520, 139801685655551, +ERASE, 139801685483520, 139801685483520, +STORE, 139801685483520, 139801685487615, +STORE, 139801685487616, 139801685655551, +ERASE, 139801685487616, 139801685487616, +STORE, 139801685487616, 139801685610495, +STORE, 139801685610496, 139801685643263, +STORE, 139801685643264, 139801685651455, +STORE, 139801685651456, 139801685655551, +STORE, 140736801198080, 140736801202175, +STORE, 140736801185792, 140736801198079, +STORE, 47831109513216, 47831109521407, +STORE, 47831109521408, 47831109529599, +STORE, 47831109529600, 47831109636095, +STORE, 47831109545984, 47831109636095, +STORE, 47831109529600, 47831109545983, +ERASE, 47831109545984, 47831109545984, +STORE, 47831109545984, 47831109619711, +STORE, 47831109619712, 47831109636095, +STORE, 47831109599232, 47831109619711, +STORE, 47831109545984, 47831109599231, +ERASE, 47831109545984, 47831109545984, +STORE, 47831109545984, 47831109599231, +STORE, 47831109615616, 47831109619711, +STORE, 47831109599232, 47831109615615, +ERASE, 47831109599232, 47831109599232, +STORE, 47831109599232, 47831109615615, +STORE, 47831109627904, 47831109636095, +STORE, 47831109619712, 47831109627903, +ERASE, 47831109619712, 47831109619712, +STORE, 47831109619712, 47831109627903, +ERASE, 47831109627904, 47831109627904, +STORE, 47831109627904, 47831109636095, +STORE, 47831109636096, 47831111475199, +STORE, 47831109775360, 47831111475199, +STORE, 47831109636096, 47831109775359, +ERASE, 47831109775360, 47831109775360, +STORE, 47831109775360, 47831111434239, +STORE, 47831111434240, 47831111475199, +STORE, 47831111118848, 47831111434239, +STORE, 47831109775360, 47831111118847, +ERASE, 47831109775360, 47831109775360, +STORE, 47831109775360, 47831111118847, +STORE, 47831111430144, 47831111434239, +STORE, 47831111118848, 47831111430143, +ERASE, 47831111118848, 47831111118848, +STORE, 47831111118848, 47831111430143, +STORE, 47831111458816, 47831111475199, +STORE, 47831111434240, 47831111458815, +ERASE, 47831111434240, 47831111434240, +STORE, 47831111434240, 47831111458815, +ERASE, 47831111458816, 47831111458816, +STORE, 47831111458816, 47831111475199, +STORE, 47831111458816, 47831111487487, +ERASE, 47831111434240, 47831111434240, +STORE, 47831111434240, 47831111450623, +STORE, 47831111450624, 47831111458815, +ERASE, 47831109619712, 47831109619712, +STORE, 47831109619712, 47831109623807, +STORE, 47831109623808, 47831109627903, +ERASE, 94629430050816, 94629430050816, +STORE, 94629430050816, 94629430067199, +STORE, 94629430067200, 94629430071295, +ERASE, 139801685643264, 139801685643264, +STORE, 139801685643264, 139801685647359, +STORE, 139801685647360, 139801685651455, +ERASE, 47831109513216, 47831109513216, +STORE, 140737488347136, 140737488351231, +STORE, 140729419612160, 140737488351231, +ERASE, 140729419612160, 140729419612160, +STORE, 140729419612160, 140729419616255, +STORE, 94443354148864, 94443354861567, +ERASE, 94443354148864, 94443354148864, +STORE, 94443354148864, 94443354198015, +STORE, 94443354198016, 94443354861567, +ERASE, 94443354198016, 94443354198016, +STORE, 94443354198016, 94443354742783, +STORE, 94443354742784, 94443354841087, +STORE, 94443354841088, 94443354861567, +STORE, 139741700038656, 139741700210687, +ERASE, 139741700038656, 139741700038656, +STORE, 139741700038656, 139741700042751, +STORE, 139741700042752, 139741700210687, +ERASE, 139741700042752, 139741700042752, +STORE, 139741700042752, 139741700165631, +STORE, 139741700165632, 139741700198399, +STORE, 139741700198400, 139741700206591, +STORE, 139741700206592, 139741700210687, +STORE, 140729420574720, 140729420578815, +STORE, 140729420562432, 140729420574719, +STORE, 47891094958080, 47891094966271, +STORE, 47891094966272, 47891094974463, +STORE, 47891094974464, 47891095080959, +STORE, 47891094990848, 47891095080959, +STORE, 47891094974464, 47891094990847, +ERASE, 47891094990848, 47891094990848, +STORE, 47891094990848, 47891095064575, +STORE, 47891095064576, 47891095080959, +STORE, 47891095044096, 47891095064575, +STORE, 47891094990848, 47891095044095, +ERASE, 47891094990848, 47891094990848, +STORE, 47891094990848, 47891095044095, +STORE, 47891095060480, 47891095064575, +STORE, 47891095044096, 47891095060479, +ERASE, 47891095044096, 47891095044096, +STORE, 47891095044096, 47891095060479, +STORE, 47891095072768, 47891095080959, +STORE, 47891095064576, 47891095072767, +ERASE, 47891095064576, 47891095064576, +STORE, 47891095064576, 47891095072767, +ERASE, 47891095072768, 47891095072768, +STORE, 47891095072768, 47891095080959, +STORE, 47891095080960, 47891096920063, +STORE, 47891095220224, 47891096920063, +STORE, 47891095080960, 47891095220223, +ERASE, 47891095220224, 47891095220224, +STORE, 47891095220224, 47891096879103, +STORE, 47891096879104, 47891096920063, +STORE, 47891096563712, 47891096879103, +STORE, 47891095220224, 47891096563711, +ERASE, 47891095220224, 47891095220224, +STORE, 47891095220224, 47891096563711, +STORE, 47891096875008, 47891096879103, +STORE, 47891096563712, 47891096875007, +ERASE, 47891096563712, 47891096563712, +STORE, 47891096563712, 47891096875007, +STORE, 47891096903680, 47891096920063, +STORE, 47891096879104, 47891096903679, +ERASE, 47891096879104, 47891096879104, +STORE, 47891096879104, 47891096903679, +ERASE, 47891096903680, 47891096903680, +STORE, 47891096903680, 47891096920063, +STORE, 47891096903680, 47891096932351, +ERASE, 47891096879104, 47891096879104, +STORE, 47891096879104, 47891096895487, +STORE, 47891096895488, 47891096903679, +ERASE, 47891095064576, 47891095064576, +STORE, 47891095064576, 47891095068671, +STORE, 47891095068672, 47891095072767, +ERASE, 94443354841088, 94443354841088, +STORE, 94443354841088, 94443354857471, +STORE, 94443354857472, 94443354861567, +ERASE, 139741700198400, 139741700198400, +STORE, 139741700198400, 139741700202495, +STORE, 139741700202496, 139741700206591, +ERASE, 47891094958080, 47891094958080, +STORE, 94443360825344, 94443360960511, +STORE, 140737488347136, 140737488351231, +STORE, 140722961661952, 140737488351231, +ERASE, 140722961661952, 140722961661952, +STORE, 140722961661952, 140722961666047, +STORE, 94878388944896, 94878389657599, +ERASE, 94878388944896, 94878388944896, +STORE, 94878388944896, 94878388994047, +STORE, 94878388994048, 94878389657599, +ERASE, 94878388994048, 94878388994048, +STORE, 94878388994048, 94878389538815, +STORE, 94878389538816, 94878389637119, +STORE, 94878389637120, 94878389657599, +STORE, 140210690056192, 140210690228223, +ERASE, 140210690056192, 140210690056192, +STORE, 140210690056192, 140210690060287, +STORE, 140210690060288, 140210690228223, +ERASE, 140210690060288, 140210690060288, +STORE, 140210690060288, 140210690183167, +STORE, 140210690183168, 140210690215935, +STORE, 140210690215936, 140210690224127, +STORE, 140210690224128, 140210690228223, +STORE, 140722963148800, 140722963152895, +STORE, 140722963136512, 140722963148799, +STORE, 47422104940544, 47422104948735, +STORE, 47422104948736, 47422104956927, +STORE, 47422104956928, 47422105063423, +STORE, 47422104973312, 47422105063423, +STORE, 47422104956928, 47422104973311, +ERASE, 47422104973312, 47422104973312, +STORE, 47422104973312, 47422105047039, +STORE, 47422105047040, 47422105063423, +STORE, 47422105026560, 47422105047039, +STORE, 47422104973312, 47422105026559, +ERASE, 47422104973312, 47422104973312, +STORE, 47422104973312, 47422105026559, +STORE, 47422105042944, 47422105047039, +STORE, 47422105026560, 47422105042943, +ERASE, 47422105026560, 47422105026560, +STORE, 47422105026560, 47422105042943, +STORE, 47422105055232, 47422105063423, +STORE, 47422105047040, 47422105055231, +ERASE, 47422105047040, 47422105047040, +STORE, 47422105047040, 47422105055231, +ERASE, 47422105055232, 47422105055232, +STORE, 47422105055232, 47422105063423, +STORE, 47422105063424, 47422106902527, +STORE, 47422105202688, 47422106902527, +STORE, 47422105063424, 47422105202687, +ERASE, 47422105202688, 47422105202688, +STORE, 47422105202688, 47422106861567, +STORE, 47422106861568, 47422106902527, +STORE, 47422106546176, 47422106861567, +STORE, 47422105202688, 47422106546175, +ERASE, 47422105202688, 47422105202688, +STORE, 47422105202688, 47422106546175, +STORE, 47422106857472, 47422106861567, +STORE, 47422106546176, 47422106857471, +ERASE, 47422106546176, 47422106546176, +STORE, 47422106546176, 47422106857471, +STORE, 47422106886144, 47422106902527, +STORE, 47422106861568, 47422106886143, +ERASE, 47422106861568, 47422106861568, +STORE, 47422106861568, 47422106886143, +ERASE, 47422106886144, 47422106886144, +STORE, 47422106886144, 47422106902527, +STORE, 47422106886144, 47422106914815, +ERASE, 47422106861568, 47422106861568, +STORE, 47422106861568, 47422106877951, +STORE, 47422106877952, 47422106886143, +ERASE, 47422105047040, 47422105047040, +STORE, 47422105047040, 47422105051135, +STORE, 47422105051136, 47422105055231, +ERASE, 94878389637120, 94878389637120, +STORE, 94878389637120, 94878389653503, +STORE, 94878389653504, 94878389657599, +ERASE, 140210690215936, 140210690215936, +STORE, 140210690215936, 140210690220031, +STORE, 140210690220032, 140210690224127, +ERASE, 47422104940544, 47422104940544, +STORE, 140737488347136, 140737488351231, +STORE, 140727690309632, 140737488351231, +ERASE, 140727690309632, 140727690309632, +STORE, 140727690309632, 140727690313727, +STORE, 94121892208640, 94121892921343, +ERASE, 94121892208640, 94121892208640, +STORE, 94121892208640, 94121892257791, +STORE, 94121892257792, 94121892921343, +ERASE, 94121892257792, 94121892257792, +STORE, 94121892257792, 94121892802559, +STORE, 94121892802560, 94121892900863, +STORE, 94121892900864, 94121892921343, +STORE, 140662438326272, 140662438498303, +ERASE, 140662438326272, 140662438326272, +STORE, 140662438326272, 140662438330367, +STORE, 140662438330368, 140662438498303, +ERASE, 140662438330368, 140662438330368, +STORE, 140662438330368, 140662438453247, +STORE, 140662438453248, 140662438486015, +STORE, 140662438486016, 140662438494207, +STORE, 140662438494208, 140662438498303, +STORE, 140727690379264, 140727690383359, +STORE, 140727690366976, 140727690379263, +STORE, 46970356670464, 46970356678655, +STORE, 46970356678656, 46970356686847, +STORE, 46970356686848, 46970356793343, +STORE, 46970356703232, 46970356793343, +STORE, 46970356686848, 46970356703231, +ERASE, 46970356703232, 46970356703232, +STORE, 46970356703232, 46970356776959, +STORE, 46970356776960, 46970356793343, +STORE, 46970356756480, 46970356776959, +STORE, 46970356703232, 46970356756479, +ERASE, 46970356703232, 46970356703232, +STORE, 46970356703232, 46970356756479, +STORE, 46970356772864, 46970356776959, +STORE, 46970356756480, 46970356772863, +ERASE, 46970356756480, 46970356756480, +STORE, 46970356756480, 46970356772863, +STORE, 46970356785152, 46970356793343, +STORE, 46970356776960, 46970356785151, +ERASE, 46970356776960, 46970356776960, +STORE, 46970356776960, 46970356785151, +ERASE, 46970356785152, 46970356785152, +STORE, 46970356785152, 46970356793343, +STORE, 46970356793344, 46970358632447, +STORE, 46970356932608, 46970358632447, +STORE, 46970356793344, 46970356932607, +ERASE, 46970356932608, 46970356932608, +STORE, 46970356932608, 46970358591487, +STORE, 46970358591488, 46970358632447, +STORE, 46970358276096, 46970358591487, +STORE, 46970356932608, 46970358276095, +ERASE, 46970356932608, 46970356932608, +STORE, 46970356932608, 46970358276095, +STORE, 46970358587392, 46970358591487, +STORE, 46970358276096, 46970358587391, +ERASE, 46970358276096, 46970358276096, +STORE, 46970358276096, 46970358587391, +STORE, 46970358616064, 46970358632447, +STORE, 46970358591488, 46970358616063, +ERASE, 46970358591488, 46970358591488, +STORE, 46970358591488, 46970358616063, +ERASE, 46970358616064, 46970358616064, +STORE, 46970358616064, 46970358632447, +STORE, 46970358616064, 46970358644735, +ERASE, 46970358591488, 46970358591488, +STORE, 46970358591488, 46970358607871, +STORE, 46970358607872, 46970358616063, +ERASE, 46970356776960, 46970356776960, +STORE, 46970356776960, 46970356781055, +STORE, 46970356781056, 46970356785151, +ERASE, 94121892900864, 94121892900864, +STORE, 94121892900864, 94121892917247, +STORE, 94121892917248, 94121892921343, +ERASE, 140662438486016, 140662438486016, +STORE, 140662438486016, 140662438490111, +STORE, 140662438490112, 140662438494207, +ERASE, 46970356670464, 46970356670464, +STORE, 94121898610688, 94121898745855, +STORE, 140737488347136, 140737488351231, +STORE, 140737189351424, 140737488351231, +ERASE, 140737189351424, 140737189351424, +STORE, 140737189351424, 140737189355519, +STORE, 93847948832768, 93847949545471, +ERASE, 93847948832768, 93847948832768, +STORE, 93847948832768, 93847948881919, +STORE, 93847948881920, 93847949545471, +ERASE, 93847948881920, 93847948881920, +STORE, 93847948881920, 93847949426687, +STORE, 93847949426688, 93847949524991, +STORE, 93847949524992, 93847949545471, +STORE, 139698989985792, 139698990157823, +ERASE, 139698989985792, 139698989985792, +STORE, 139698989985792, 139698989989887, +STORE, 139698989989888, 139698990157823, +ERASE, 139698989989888, 139698989989888, +STORE, 139698989989888, 139698990112767, +STORE, 139698990112768, 139698990145535, +STORE, 139698990145536, 139698990153727, +STORE, 139698990153728, 139698990157823, +STORE, 140737189744640, 140737189748735, +STORE, 140737189732352, 140737189744639, +STORE, 47933805010944, 47933805019135, +STORE, 47933805019136, 47933805027327, +STORE, 47933805027328, 47933805133823, +STORE, 47933805043712, 47933805133823, +STORE, 47933805027328, 47933805043711, +ERASE, 47933805043712, 47933805043712, +STORE, 47933805043712, 47933805117439, +STORE, 47933805117440, 47933805133823, +STORE, 47933805096960, 47933805117439, +STORE, 47933805043712, 47933805096959, +ERASE, 47933805043712, 47933805043712, +STORE, 47933805043712, 47933805096959, +STORE, 47933805113344, 47933805117439, +STORE, 47933805096960, 47933805113343, +ERASE, 47933805096960, 47933805096960, +STORE, 47933805096960, 47933805113343, +STORE, 47933805125632, 47933805133823, +STORE, 47933805117440, 47933805125631, +ERASE, 47933805117440, 47933805117440, +STORE, 47933805117440, 47933805125631, +ERASE, 47933805125632, 47933805125632, +STORE, 47933805125632, 47933805133823, +STORE, 47933805133824, 47933806972927, +STORE, 47933805273088, 47933806972927, +STORE, 47933805133824, 47933805273087, +ERASE, 47933805273088, 47933805273088, +STORE, 47933805273088, 47933806931967, +STORE, 47933806931968, 47933806972927, +STORE, 47933806616576, 47933806931967, +STORE, 47933805273088, 47933806616575, +ERASE, 47933805273088, 47933805273088, +STORE, 47933805273088, 47933806616575, +STORE, 47933806927872, 47933806931967, +STORE, 47933806616576, 47933806927871, +ERASE, 47933806616576, 47933806616576, +STORE, 47933806616576, 47933806927871, +STORE, 47933806956544, 47933806972927, +STORE, 47933806931968, 47933806956543, +ERASE, 47933806931968, 47933806931968, +STORE, 47933806931968, 47933806956543, +ERASE, 47933806956544, 47933806956544, +STORE, 47933806956544, 47933806972927, +STORE, 47933806956544, 47933806985215, +ERASE, 47933806931968, 47933806931968, +STORE, 47933806931968, 47933806948351, +STORE, 47933806948352, 47933806956543, +ERASE, 47933805117440, 47933805117440, +STORE, 47933805117440, 47933805121535, +STORE, 47933805121536, 47933805125631, +ERASE, 93847949524992, 93847949524992, +STORE, 93847949524992, 93847949541375, +STORE, 93847949541376, 93847949545471, +ERASE, 139698990145536, 139698990145536, +STORE, 139698990145536, 139698990149631, +STORE, 139698990149632, 139698990153727, +ERASE, 47933805010944, 47933805010944, +STORE, 140737488347136, 140737488351231, +STORE, 140725553991680, 140737488351231, +ERASE, 140725553991680, 140725553991680, +STORE, 140725553991680, 140725553995775, +STORE, 93980056248320, 93980056961023, +ERASE, 93980056248320, 93980056248320, +STORE, 93980056248320, 93980056297471, +STORE, 93980056297472, 93980056961023, +ERASE, 93980056297472, 93980056297472, +STORE, 93980056297472, 93980056842239, +STORE, 93980056842240, 93980056940543, +STORE, 93980056940544, 93980056961023, +STORE, 140146588971008, 140146589143039, +ERASE, 140146588971008, 140146588971008, +STORE, 140146588971008, 140146588975103, +STORE, 140146588975104, 140146589143039, +ERASE, 140146588975104, 140146588975104, +STORE, 140146588975104, 140146589097983, +STORE, 140146589097984, 140146589130751, +STORE, 140146589130752, 140146589138943, +STORE, 140146589138944, 140146589143039, +STORE, 140725554860032, 140725554864127, +STORE, 140725554847744, 140725554860031, +STORE, 47486206025728, 47486206033919, +STORE, 47486206033920, 47486206042111, +STORE, 47486206042112, 47486206148607, +STORE, 47486206058496, 47486206148607, +STORE, 47486206042112, 47486206058495, +ERASE, 47486206058496, 47486206058496, +STORE, 47486206058496, 47486206132223, +STORE, 47486206132224, 47486206148607, +STORE, 47486206111744, 47486206132223, +STORE, 47486206058496, 47486206111743, +ERASE, 47486206058496, 47486206058496, +STORE, 47486206058496, 47486206111743, +STORE, 47486206128128, 47486206132223, +STORE, 47486206111744, 47486206128127, +ERASE, 47486206111744, 47486206111744, +STORE, 47486206111744, 47486206128127, +STORE, 47486206140416, 47486206148607, +STORE, 47486206132224, 47486206140415, +ERASE, 47486206132224, 47486206132224, +STORE, 47486206132224, 47486206140415, +ERASE, 47486206140416, 47486206140416, +STORE, 47486206140416, 47486206148607, +STORE, 47486206148608, 47486207987711, +STORE, 47486206287872, 47486207987711, +STORE, 47486206148608, 47486206287871, +ERASE, 47486206287872, 47486206287872, +STORE, 47486206287872, 47486207946751, +STORE, 47486207946752, 47486207987711, +STORE, 47486207631360, 47486207946751, +STORE, 47486206287872, 47486207631359, +ERASE, 47486206287872, 47486206287872, +STORE, 47486206287872, 47486207631359, +STORE, 47486207942656, 47486207946751, +STORE, 47486207631360, 47486207942655, +ERASE, 47486207631360, 47486207631360, +STORE, 47486207631360, 47486207942655, +STORE, 47486207971328, 47486207987711, +STORE, 47486207946752, 47486207971327, +ERASE, 47486207946752, 47486207946752, +STORE, 47486207946752, 47486207971327, +ERASE, 47486207971328, 47486207971328, +STORE, 47486207971328, 47486207987711, +STORE, 47486207971328, 47486207999999, +ERASE, 47486207946752, 47486207946752, +STORE, 47486207946752, 47486207963135, +STORE, 47486207963136, 47486207971327, +ERASE, 47486206132224, 47486206132224, +STORE, 47486206132224, 47486206136319, +STORE, 47486206136320, 47486206140415, +ERASE, 93980056940544, 93980056940544, +STORE, 93980056940544, 93980056956927, +STORE, 93980056956928, 93980056961023, +ERASE, 140146589130752, 140146589130752, +STORE, 140146589130752, 140146589134847, +STORE, 140146589134848, 140146589138943, +ERASE, 47486206025728, 47486206025728, +STORE, 93980070006784, 93980070141951, +STORE, 140737488347136, 140737488351231, +STORE, 140727334776832, 140737488351231, +ERASE, 140727334776832, 140727334776832, +STORE, 140727334776832, 140727334780927, +STORE, 94049747247104, 94049747959807, +ERASE, 94049747247104, 94049747247104, +STORE, 94049747247104, 94049747296255, +STORE, 94049747296256, 94049747959807, +ERASE, 94049747296256, 94049747296256, +STORE, 94049747296256, 94049747841023, +STORE, 94049747841024, 94049747939327, +STORE, 94049747939328, 94049747959807, +STORE, 140227307216896, 140227307388927, +ERASE, 140227307216896, 140227307216896, +STORE, 140227307216896, 140227307220991, +STORE, 140227307220992, 140227307388927, +ERASE, 140227307220992, 140227307220992, +STORE, 140227307220992, 140227307343871, +STORE, 140227307343872, 140227307376639, +STORE, 140227307376640, 140227307384831, +STORE, 140227307384832, 140227307388927, +STORE, 140727335337984, 140727335342079, +STORE, 140727335325696, 140727335337983, +STORE, 47405487779840, 47405487788031, +STORE, 47405487788032, 47405487796223, +STORE, 47405487796224, 47405487902719, +STORE, 47405487812608, 47405487902719, +STORE, 47405487796224, 47405487812607, +ERASE, 47405487812608, 47405487812608, +STORE, 47405487812608, 47405487886335, +STORE, 47405487886336, 47405487902719, +STORE, 47405487865856, 47405487886335, +STORE, 47405487812608, 47405487865855, +ERASE, 47405487812608, 47405487812608, +STORE, 47405487812608, 47405487865855, +STORE, 47405487882240, 47405487886335, +STORE, 47405487865856, 47405487882239, +ERASE, 47405487865856, 47405487865856, +STORE, 47405487865856, 47405487882239, +STORE, 47405487894528, 47405487902719, +STORE, 47405487886336, 47405487894527, +ERASE, 47405487886336, 47405487886336, +STORE, 47405487886336, 47405487894527, +ERASE, 47405487894528, 47405487894528, +STORE, 47405487894528, 47405487902719, +STORE, 47405487902720, 47405489741823, +STORE, 47405488041984, 47405489741823, +STORE, 47405487902720, 47405488041983, +ERASE, 47405488041984, 47405488041984, +STORE, 47405488041984, 47405489700863, +STORE, 47405489700864, 47405489741823, +STORE, 47405489385472, 47405489700863, +STORE, 47405488041984, 47405489385471, +ERASE, 47405488041984, 47405488041984, +STORE, 47405488041984, 47405489385471, +STORE, 47405489696768, 47405489700863, +STORE, 47405489385472, 47405489696767, +ERASE, 47405489385472, 47405489385472, +STORE, 47405489385472, 47405489696767, +STORE, 47405489725440, 47405489741823, +STORE, 47405489700864, 47405489725439, +ERASE, 47405489700864, 47405489700864, +STORE, 47405489700864, 47405489725439, +ERASE, 47405489725440, 47405489725440, +STORE, 47405489725440, 47405489741823, +STORE, 47405489725440, 47405489754111, +ERASE, 47405489700864, 47405489700864, +STORE, 47405489700864, 47405489717247, +STORE, 47405489717248, 47405489725439, +ERASE, 47405487886336, 47405487886336, +STORE, 47405487886336, 47405487890431, +STORE, 47405487890432, 47405487894527, +ERASE, 94049747939328, 94049747939328, +STORE, 94049747939328, 94049747955711, +STORE, 94049747955712, 94049747959807, +ERASE, 140227307376640, 140227307376640, +STORE, 140227307376640, 140227307380735, +STORE, 140227307380736, 140227307384831, +ERASE, 47405487779840, 47405487779840, +STORE, 94049758810112, 94049758945279, +STORE, 140737488347136, 140737488351231, +STORE, 140727079718912, 140737488351231, +ERASE, 140727079718912, 140727079718912, +STORE, 140727079718912, 140727079723007, +STORE, 94250996527104, 94250997239807, +ERASE, 94250996527104, 94250996527104, +STORE, 94250996527104, 94250996576255, +STORE, 94250996576256, 94250997239807, +ERASE, 94250996576256, 94250996576256, +STORE, 94250996576256, 94250997121023, +STORE, 94250997121024, 94250997219327, +STORE, 94250997219328, 94250997239807, +STORE, 140060022587392, 140060022759423, +ERASE, 140060022587392, 140060022587392, +STORE, 140060022587392, 140060022591487, +STORE, 140060022591488, 140060022759423, +ERASE, 140060022591488, 140060022591488, +STORE, 140060022591488, 140060022714367, +STORE, 140060022714368, 140060022747135, +STORE, 140060022747136, 140060022755327, +STORE, 140060022755328, 140060022759423, +STORE, 140727079788544, 140727079792639, +STORE, 140727079776256, 140727079788543, +STORE, 47572772409344, 47572772417535, +STORE, 47572772417536, 47572772425727, +STORE, 47572772425728, 47572772532223, +STORE, 47572772442112, 47572772532223, +STORE, 47572772425728, 47572772442111, +ERASE, 47572772442112, 47572772442112, +STORE, 47572772442112, 47572772515839, +STORE, 47572772515840, 47572772532223, +STORE, 47572772495360, 47572772515839, +STORE, 47572772442112, 47572772495359, +ERASE, 47572772442112, 47572772442112, +STORE, 47572772442112, 47572772495359, +STORE, 47572772511744, 47572772515839, +STORE, 47572772495360, 47572772511743, +ERASE, 47572772495360, 47572772495360, +STORE, 47572772495360, 47572772511743, +STORE, 47572772524032, 47572772532223, +STORE, 47572772515840, 47572772524031, +ERASE, 47572772515840, 47572772515840, +STORE, 47572772515840, 47572772524031, +ERASE, 47572772524032, 47572772524032, +STORE, 47572772524032, 47572772532223, +STORE, 47572772532224, 47572774371327, +STORE, 47572772671488, 47572774371327, +STORE, 47572772532224, 47572772671487, +ERASE, 47572772671488, 47572772671488, +STORE, 47572772671488, 47572774330367, +STORE, 47572774330368, 47572774371327, +STORE, 47572774014976, 47572774330367, +STORE, 47572772671488, 47572774014975, +ERASE, 47572772671488, 47572772671488, +STORE, 47572772671488, 47572774014975, +STORE, 47572774326272, 47572774330367, +STORE, 47572774014976, 47572774326271, +ERASE, 47572774014976, 47572774014976, +STORE, 47572774014976, 47572774326271, +STORE, 47572774354944, 47572774371327, +STORE, 47572774330368, 47572774354943, +ERASE, 47572774330368, 47572774330368, +STORE, 47572774330368, 47572774354943, +ERASE, 47572774354944, 47572774354944, +STORE, 47572774354944, 47572774371327, +STORE, 47572774354944, 47572774383615, +ERASE, 47572774330368, 47572774330368, +STORE, 47572774330368, 47572774346751, +STORE, 47572774346752, 47572774354943, +ERASE, 47572772515840, 47572772515840, +STORE, 47572772515840, 47572772519935, +STORE, 47572772519936, 47572772524031, +ERASE, 94250997219328, 94250997219328, +STORE, 94250997219328, 94250997235711, +STORE, 94250997235712, 94250997239807, +ERASE, 140060022747136, 140060022747136, +STORE, 140060022747136, 140060022751231, +STORE, 140060022751232, 140060022755327, +ERASE, 47572772409344, 47572772409344, +STORE, 94251018305536, 94251018440703, +STORE, 140737488347136, 140737488351231, +STORE, 140730012389376, 140737488351231, +ERASE, 140730012389376, 140730012389376, +STORE, 140730012389376, 140730012393471, +STORE, 94382607675392, 94382607695871, +ERASE, 94382607675392, 94382607675392, +STORE, 94382607675392, 94382607679487, +STORE, 94382607679488, 94382607695871, +ERASE, 94382607679488, 94382607679488, +STORE, 94382607679488, 94382607683583, +STORE, 94382607683584, 94382607687679, +STORE, 94382607687680, 94382607695871, +STORE, 140252451454976, 140252451627007, +ERASE, 140252451454976, 140252451454976, +STORE, 140252451454976, 140252451459071, +STORE, 140252451459072, 140252451627007, +ERASE, 140252451459072, 140252451459072, +STORE, 140252451459072, 140252451581951, +STORE, 140252451581952, 140252451614719, +STORE, 140252451614720, 140252451622911, +STORE, 140252451622912, 140252451627007, +STORE, 140730013548544, 140730013552639, +STORE, 140730013536256, 140730013548543, +STORE, 47380343541760, 47380343549951, +STORE, 47380343549952, 47380343558143, +STORE, 47380343558144, 47380345397247, +STORE, 47380343697408, 47380345397247, +STORE, 47380343558144, 47380343697407, +ERASE, 47380343697408, 47380343697408, +STORE, 47380343697408, 47380345356287, +STORE, 47380345356288, 47380345397247, +STORE, 47380345040896, 47380345356287, +STORE, 47380343697408, 47380345040895, +ERASE, 47380343697408, 47380343697408, +STORE, 47380343697408, 47380345040895, +STORE, 47380345352192, 47380345356287, +STORE, 47380345040896, 47380345352191, +ERASE, 47380345040896, 47380345040896, +STORE, 47380345040896, 47380345352191, +STORE, 47380345380864, 47380345397247, +STORE, 47380345356288, 47380345380863, +ERASE, 47380345356288, 47380345356288, +STORE, 47380345356288, 47380345380863, +ERASE, 47380345380864, 47380345380864, +STORE, 47380345380864, 47380345397247, +ERASE, 47380345356288, 47380345356288, +STORE, 47380345356288, 47380345372671, +STORE, 47380345372672, 47380345380863, +ERASE, 94382607687680, 94382607687680, +STORE, 94382607687680, 94382607691775, +STORE, 94382607691776, 94382607695871, +ERASE, 140252451614720, 140252451614720, +STORE, 140252451614720, 140252451618815, +STORE, 140252451618816, 140252451622911, +ERASE, 47380343541760, 47380343541760, +STORE, 94382626803712, 94382626938879, +STORE, 140737488347136, 140737488351231, +STORE, 140730900271104, 140737488351231, +ERASE, 140730900271104, 140730900271104, +STORE, 140730900271104, 140730900275199, +STORE, 93855478120448, 93855478337535, +ERASE, 93855478120448, 93855478120448, +STORE, 93855478120448, 93855478198271, +STORE, 93855478198272, 93855478337535, +ERASE, 93855478198272, 93855478198272, +STORE, 93855478198272, 93855478243327, +STORE, 93855478243328, 93855478288383, +STORE, 93855478288384, 93855478337535, +STORE, 140092686573568, 140092686745599, +ERASE, 140092686573568, 140092686573568, +STORE, 140092686573568, 140092686577663, +STORE, 140092686577664, 140092686745599, +ERASE, 140092686577664, 140092686577664, +STORE, 140092686577664, 140092686700543, +STORE, 140092686700544, 140092686733311, +STORE, 140092686733312, 140092686741503, +STORE, 140092686741504, 140092686745599, +STORE, 140730900537344, 140730900541439, +STORE, 140730900525056, 140730900537343, +STORE, 47540108423168, 47540108431359, +STORE, 47540108431360, 47540108439551, +STORE, 47540108439552, 47540110278655, +STORE, 47540108578816, 47540110278655, +STORE, 47540108439552, 47540108578815, +ERASE, 47540108578816, 47540108578816, +STORE, 47540108578816, 47540110237695, +STORE, 47540110237696, 47540110278655, +STORE, 47540109922304, 47540110237695, +STORE, 47540108578816, 47540109922303, +ERASE, 47540108578816, 47540108578816, +STORE, 47540108578816, 47540109922303, +STORE, 47540110233600, 47540110237695, +STORE, 47540109922304, 47540110233599, +ERASE, 47540109922304, 47540109922304, +STORE, 47540109922304, 47540110233599, +STORE, 47540110262272, 47540110278655, +STORE, 47540110237696, 47540110262271, +ERASE, 47540110237696, 47540110237696, +STORE, 47540110237696, 47540110262271, +ERASE, 47540110262272, 47540110262272, +STORE, 47540110262272, 47540110278655, +ERASE, 47540110237696, 47540110237696, +STORE, 47540110237696, 47540110254079, +STORE, 47540110254080, 47540110262271, +ERASE, 93855478288384, 93855478288384, +STORE, 93855478288384, 93855478333439, +STORE, 93855478333440, 93855478337535, +ERASE, 140092686733312, 140092686733312, +STORE, 140092686733312, 140092686737407, +STORE, 140092686737408, 140092686741503, +ERASE, 47540108423168, 47540108423168, +STORE, 93855492222976, 93855492358143, +STORE, 93855492222976, 93855492493311, +STORE, 140737488347136, 140737488351231, +STORE, 140733498146816, 140737488351231, +ERASE, 140733498146816, 140733498146816, +STORE, 140733498146816, 140733498150911, +STORE, 94170739654656, 94170740367359, +ERASE, 94170739654656, 94170739654656, +STORE, 94170739654656, 94170739703807, +STORE, 94170739703808, 94170740367359, +ERASE, 94170739703808, 94170739703808, +STORE, 94170739703808, 94170740248575, +STORE, 94170740248576, 94170740346879, +STORE, 94170740346880, 94170740367359, +STORE, 140024788877312, 140024789049343, +ERASE, 140024788877312, 140024788877312, +STORE, 140024788877312, 140024788881407, +STORE, 140024788881408, 140024789049343, +ERASE, 140024788881408, 140024788881408, +STORE, 140024788881408, 140024789004287, +STORE, 140024789004288, 140024789037055, +STORE, 140024789037056, 140024789045247, +STORE, 140024789045248, 140024789049343, +STORE, 140733499023360, 140733499027455, +STORE, 140733499011072, 140733499023359, +STORE, 47608006119424, 47608006127615, +STORE, 47608006127616, 47608006135807, +STORE, 47608006135808, 47608006242303, +STORE, 47608006152192, 47608006242303, +STORE, 47608006135808, 47608006152191, +ERASE, 47608006152192, 47608006152192, +STORE, 47608006152192, 47608006225919, +STORE, 47608006225920, 47608006242303, +STORE, 47608006205440, 47608006225919, +STORE, 47608006152192, 47608006205439, +ERASE, 47608006152192, 47608006152192, +STORE, 47608006152192, 47608006205439, +STORE, 47608006221824, 47608006225919, +STORE, 47608006205440, 47608006221823, +ERASE, 47608006205440, 47608006205440, +STORE, 47608006205440, 47608006221823, +STORE, 47608006234112, 47608006242303, +STORE, 47608006225920, 47608006234111, +ERASE, 47608006225920, 47608006225920, +STORE, 47608006225920, 47608006234111, +ERASE, 47608006234112, 47608006234112, +STORE, 47608006234112, 47608006242303, +STORE, 47608006242304, 47608008081407, +STORE, 47608006381568, 47608008081407, +STORE, 47608006242304, 47608006381567, +ERASE, 47608006381568, 47608006381568, +STORE, 47608006381568, 47608008040447, +STORE, 47608008040448, 47608008081407, +STORE, 47608007725056, 47608008040447, +STORE, 47608006381568, 47608007725055, +ERASE, 47608006381568, 47608006381568, +STORE, 47608006381568, 47608007725055, +STORE, 47608008036352, 47608008040447, +STORE, 47608007725056, 47608008036351, +ERASE, 47608007725056, 47608007725056, +STORE, 47608007725056, 47608008036351, +STORE, 47608008065024, 47608008081407, +STORE, 47608008040448, 47608008065023, +ERASE, 47608008040448, 47608008040448, +STORE, 47608008040448, 47608008065023, +ERASE, 47608008065024, 47608008065024, +STORE, 47608008065024, 47608008081407, +STORE, 47608008065024, 47608008093695, +ERASE, 47608008040448, 47608008040448, +STORE, 47608008040448, 47608008056831, +STORE, 47608008056832, 47608008065023, +ERASE, 47608006225920, 47608006225920, +STORE, 47608006225920, 47608006230015, +STORE, 47608006230016, 47608006234111, +ERASE, 94170740346880, 94170740346880, +STORE, 94170740346880, 94170740363263, +STORE, 94170740363264, 94170740367359, +ERASE, 140024789037056, 140024789037056, +STORE, 140024789037056, 140024789041151, +STORE, 140024789041152, 140024789045247, +ERASE, 47608006119424, 47608006119424, +STORE, 140737488347136, 140737488351231, +STORE, 140730264326144, 140737488351231, +ERASE, 140730264326144, 140730264326144, +STORE, 140730264326144, 140730264330239, +STORE, 94653216407552, 94653217120255, +ERASE, 94653216407552, 94653216407552, +STORE, 94653216407552, 94653216456703, +STORE, 94653216456704, 94653217120255, +ERASE, 94653216456704, 94653216456704, +STORE, 94653216456704, 94653217001471, +STORE, 94653217001472, 94653217099775, +STORE, 94653217099776, 94653217120255, +STORE, 140103617011712, 140103617183743, +ERASE, 140103617011712, 140103617011712, +STORE, 140103617011712, 140103617015807, +STORE, 140103617015808, 140103617183743, +ERASE, 140103617015808, 140103617015808, +STORE, 140103617015808, 140103617138687, +STORE, 140103617138688, 140103617171455, +STORE, 140103617171456, 140103617179647, +STORE, 140103617179648, 140103617183743, +STORE, 140730265427968, 140730265432063, +STORE, 140730265415680, 140730265427967, +STORE, 47529177985024, 47529177993215, +STORE, 47529177993216, 47529178001407, +STORE, 47529178001408, 47529178107903, +STORE, 47529178017792, 47529178107903, +STORE, 47529178001408, 47529178017791, +ERASE, 47529178017792, 47529178017792, +STORE, 47529178017792, 47529178091519, +STORE, 47529178091520, 47529178107903, +STORE, 47529178071040, 47529178091519, +STORE, 47529178017792, 47529178071039, +ERASE, 47529178017792, 47529178017792, +STORE, 47529178017792, 47529178071039, +STORE, 47529178087424, 47529178091519, +STORE, 47529178071040, 47529178087423, +ERASE, 47529178071040, 47529178071040, +STORE, 47529178071040, 47529178087423, +STORE, 47529178099712, 47529178107903, +STORE, 47529178091520, 47529178099711, +ERASE, 47529178091520, 47529178091520, +STORE, 47529178091520, 47529178099711, +ERASE, 47529178099712, 47529178099712, +STORE, 47529178099712, 47529178107903, +STORE, 47529178107904, 47529179947007, +STORE, 47529178247168, 47529179947007, +STORE, 47529178107904, 47529178247167, +ERASE, 47529178247168, 47529178247168, +STORE, 47529178247168, 47529179906047, +STORE, 47529179906048, 47529179947007, +STORE, 47529179590656, 47529179906047, +STORE, 47529178247168, 47529179590655, +ERASE, 47529178247168, 47529178247168, +STORE, 47529178247168, 47529179590655, +STORE, 47529179901952, 47529179906047, +STORE, 47529179590656, 47529179901951, +ERASE, 47529179590656, 47529179590656, +STORE, 47529179590656, 47529179901951, +STORE, 47529179930624, 47529179947007, +STORE, 47529179906048, 47529179930623, +ERASE, 47529179906048, 47529179906048, +STORE, 47529179906048, 47529179930623, +ERASE, 47529179930624, 47529179930624, +STORE, 47529179930624, 47529179947007, +STORE, 47529179930624, 47529179959295, +ERASE, 47529179906048, 47529179906048, +STORE, 47529179906048, 47529179922431, +STORE, 47529179922432, 47529179930623, +ERASE, 47529178091520, 47529178091520, +STORE, 47529178091520, 47529178095615, +STORE, 47529178095616, 47529178099711, +ERASE, 94653217099776, 94653217099776, +STORE, 94653217099776, 94653217116159, +STORE, 94653217116160, 94653217120255, +ERASE, 140103617171456, 140103617171456, +STORE, 140103617171456, 140103617175551, +STORE, 140103617175552, 140103617179647, +ERASE, 47529177985024, 47529177985024, +STORE, 94653241135104, 94653241270271, +STORE, 140737488347136, 140737488351231, +STORE, 140736284549120, 140737488351231, +ERASE, 140736284549120, 140736284549120, +STORE, 140736284549120, 140736284553215, +STORE, 93963663822848, 93963664506879, +ERASE, 93963663822848, 93963663822848, +STORE, 93963663822848, 93963663884287, +STORE, 93963663884288, 93963664506879, +ERASE, 93963663884288, 93963663884288, +STORE, 93963663884288, 93963664240639, +STORE, 93963664240640, 93963664379903, +STORE, 93963664379904, 93963664506879, +STORE, 140450188439552, 140450188611583, +ERASE, 140450188439552, 140450188439552, +STORE, 140450188439552, 140450188443647, +STORE, 140450188443648, 140450188611583, +ERASE, 140450188443648, 140450188443648, +STORE, 140450188443648, 140450188566527, +STORE, 140450188566528, 140450188599295, +STORE, 140450188599296, 140450188607487, +STORE, 140450188607488, 140450188611583, +STORE, 140736284577792, 140736284581887, +STORE, 140736284565504, 140736284577791, +STORE, 47182606557184, 47182606565375, +STORE, 47182606565376, 47182606573567, +STORE, 47182606573568, 47182608412671, +STORE, 47182606712832, 47182608412671, +STORE, 47182606573568, 47182606712831, +ERASE, 47182606712832, 47182606712832, +STORE, 47182606712832, 47182608371711, +STORE, 47182608371712, 47182608412671, +STORE, 47182608056320, 47182608371711, +STORE, 47182606712832, 47182608056319, +ERASE, 47182606712832, 47182606712832, +STORE, 47182606712832, 47182608056319, +STORE, 47182608367616, 47182608371711, +STORE, 47182608056320, 47182608367615, +ERASE, 47182608056320, 47182608056320, +STORE, 47182608056320, 47182608367615, +STORE, 47182608396288, 47182608412671, +STORE, 47182608371712, 47182608396287, +ERASE, 47182608371712, 47182608371712, +STORE, 47182608371712, 47182608396287, +ERASE, 47182608396288, 47182608396288, +STORE, 47182608396288, 47182608412671, +STORE, 47182608412672, 47182608523263, +STORE, 47182608429056, 47182608523263, +STORE, 47182608412672, 47182608429055, +ERASE, 47182608429056, 47182608429056, +STORE, 47182608429056, 47182608515071, +STORE, 47182608515072, 47182608523263, +STORE, 47182608490496, 47182608515071, +STORE, 47182608429056, 47182608490495, +ERASE, 47182608429056, 47182608429056, +STORE, 47182608429056, 47182608490495, +STORE, 47182608510976, 47182608515071, +STORE, 47182608490496, 47182608510975, +ERASE, 47182608490496, 47182608490496, +STORE, 47182608490496, 47182608510975, +ERASE, 47182608515072, 47182608515072, +STORE, 47182608515072, 47182608523263, +STORE, 47182608523264, 47182608568319, +ERASE, 47182608523264, 47182608523264, +STORE, 47182608523264, 47182608531455, +STORE, 47182608531456, 47182608568319, +STORE, 47182608551936, 47182608568319, +STORE, 47182608531456, 47182608551935, +ERASE, 47182608531456, 47182608531456, +STORE, 47182608531456, 47182608551935, +STORE, 47182608560128, 47182608568319, +STORE, 47182608551936, 47182608560127, +ERASE, 47182608551936, 47182608551936, +STORE, 47182608551936, 47182608568319, +ERASE, 47182608551936, 47182608551936, +STORE, 47182608551936, 47182608560127, +STORE, 47182608560128, 47182608568319, +ERASE, 47182608560128, 47182608560128, +STORE, 47182608560128, 47182608568319, +STORE, 47182608568320, 47182608916479, +STORE, 47182608609280, 47182608916479, +STORE, 47182608568320, 47182608609279, +ERASE, 47182608609280, 47182608609280, +STORE, 47182608609280, 47182608891903, +STORE, 47182608891904, 47182608916479, +STORE, 47182608822272, 47182608891903, +STORE, 47182608609280, 47182608822271, +ERASE, 47182608609280, 47182608609280, +STORE, 47182608609280, 47182608822271, +STORE, 47182608887808, 47182608891903, +STORE, 47182608822272, 47182608887807, +ERASE, 47182608822272, 47182608822272, +STORE, 47182608822272, 47182608887807, +ERASE, 47182608891904, 47182608891904, +STORE, 47182608891904, 47182608916479, +STORE, 47182608916480, 47182611177471, +STORE, 47182609068032, 47182611177471, +STORE, 47182608916480, 47182609068031, +ERASE, 47182609068032, 47182609068032, +STORE, 47182609068032, 47182611161087, +STORE, 47182611161088, 47182611177471, +STORE, 47182611169280, 47182611177471, +STORE, 47182611161088, 47182611169279, +ERASE, 47182611161088, 47182611161088, +STORE, 47182611161088, 47182611169279, +ERASE, 47182611169280, 47182611169280, +STORE, 47182611169280, 47182611177471, +STORE, 47182611177472, 47182611312639, +ERASE, 47182611177472, 47182611177472, +STORE, 47182611177472, 47182611202047, +STORE, 47182611202048, 47182611312639, +STORE, 47182611263488, 47182611312639, +STORE, 47182611202048, 47182611263487, +ERASE, 47182611202048, 47182611202048, +STORE, 47182611202048, 47182611263487, +STORE, 47182611288064, 47182611312639, +STORE, 47182611263488, 47182611288063, +ERASE, 47182611263488, 47182611263488, +STORE, 47182611263488, 47182611312639, +ERASE, 47182611263488, 47182611263488, +STORE, 47182611263488, 47182611288063, +STORE, 47182611288064, 47182611312639, +STORE, 47182611296256, 47182611312639, +STORE, 47182611288064, 47182611296255, +ERASE, 47182611288064, 47182611288064, +STORE, 47182611288064, 47182611296255, +ERASE, 47182611296256, 47182611296256, +STORE, 47182611296256, 47182611312639, +STORE, 47182611296256, 47182611320831, +STORE, 47182611320832, 47182611484671, +ERASE, 47182611320832, 47182611320832, +STORE, 47182611320832, 47182611333119, +STORE, 47182611333120, 47182611484671, +STORE, 47182611431424, 47182611484671, +STORE, 47182611333120, 47182611431423, +ERASE, 47182611333120, 47182611333120, +STORE, 47182611333120, 47182611431423, +STORE, 47182611476480, 47182611484671, +STORE, 47182611431424, 47182611476479, +ERASE, 47182611431424, 47182611431424, +STORE, 47182611431424, 47182611484671, +ERASE, 47182611431424, 47182611431424, +STORE, 47182611431424, 47182611476479, +STORE, 47182611476480, 47182611484671, +ERASE, 47182611476480, 47182611476480, +STORE, 47182611476480, 47182611484671, +STORE, 47182611484672, 47182612082687, +STORE, 47182611603456, 47182612082687, +STORE, 47182611484672, 47182611603455, +ERASE, 47182611603456, 47182611603456, +STORE, 47182611603456, 47182612029439, +STORE, 47182612029440, 47182612082687, +STORE, 47182611918848, 47182612029439, +STORE, 47182611603456, 47182611918847, +ERASE, 47182611603456, 47182611603456, +STORE, 47182611603456, 47182611918847, +STORE, 47182612025344, 47182612029439, +STORE, 47182611918848, 47182612025343, +ERASE, 47182611918848, 47182611918848, +STORE, 47182611918848, 47182612025343, +ERASE, 47182612029440, 47182612029440, +STORE, 47182612029440, 47182612082687, +STORE, 47182612082688, 47182615134207, +STORE, 47182612627456, 47182615134207, +STORE, 47182612082688, 47182612627455, +ERASE, 47182612627456, 47182612627456, +STORE, 47182612627456, 47182614913023, +STORE, 47182614913024, 47182615134207, +STORE, 47182614323200, 47182614913023, +STORE, 47182612627456, 47182614323199, +ERASE, 47182612627456, 47182612627456, +STORE, 47182612627456, 47182614323199, +STORE, 47182614908928, 47182614913023, +STORE, 47182614323200, 47182614908927, +ERASE, 47182614323200, 47182614323200, +STORE, 47182614323200, 47182614908927, +STORE, 47182615117824, 47182615134207, +STORE, 47182614913024, 47182615117823, +ERASE, 47182614913024, 47182614913024, +STORE, 47182614913024, 47182615117823, +ERASE, 47182615117824, 47182615117824, +STORE, 47182615117824, 47182615134207, +STORE, 47182615134208, 47182615166975, +ERASE, 47182615134208, 47182615134208, +STORE, 47182615134208, 47182615142399, +STORE, 47182615142400, 47182615166975, +STORE, 47182615154688, 47182615166975, +STORE, 47182615142400, 47182615154687, +ERASE, 47182615142400, 47182615142400, +STORE, 47182615142400, 47182615154687, +STORE, 47182615158784, 47182615166975, +STORE, 47182615154688, 47182615158783, +ERASE, 47182615154688, 47182615154688, +STORE, 47182615154688, 47182615166975, +ERASE, 47182615154688, 47182615154688, +STORE, 47182615154688, 47182615158783, +STORE, 47182615158784, 47182615166975, +ERASE, 47182615158784, 47182615158784, +STORE, 47182615158784, 47182615166975, +STORE, 47182615166976, 47182615203839, +ERASE, 47182615166976, 47182615166976, +STORE, 47182615166976, 47182615175167, +STORE, 47182615175168, 47182615203839, +STORE, 47182615191552, 47182615203839, +STORE, 47182615175168, 47182615191551, +ERASE, 47182615175168, 47182615175168, +STORE, 47182615175168, 47182615191551, +STORE, 47182615195648, 47182615203839, +STORE, 47182615191552, 47182615195647, +ERASE, 47182615191552, 47182615191552, +STORE, 47182615191552, 47182615203839, +ERASE, 47182615191552, 47182615191552, +STORE, 47182615191552, 47182615195647, +STORE, 47182615195648, 47182615203839, +ERASE, 47182615195648, 47182615195648, +STORE, 47182615195648, 47182615203839, +STORE, 47182615203840, 47182615678975, +ERASE, 47182615203840, 47182615203840, +STORE, 47182615203840, 47182615212031, +STORE, 47182615212032, 47182615678975, +STORE, 47182615547904, 47182615678975, +STORE, 47182615212032, 47182615547903, +ERASE, 47182615212032, 47182615212032, +STORE, 47182615212032, 47182615547903, +STORE, 47182615670784, 47182615678975, +STORE, 47182615547904, 47182615670783, +ERASE, 47182615547904, 47182615547904, +STORE, 47182615547904, 47182615678975, +ERASE, 47182615547904, 47182615547904, +STORE, 47182615547904, 47182615670783, +STORE, 47182615670784, 47182615678975, +ERASE, 47182615670784, 47182615670784, +STORE, 47182615670784, 47182615678975, +STORE, 47182615678976, 47182615687167, +STORE, 47182615687168, 47182615707647, +ERASE, 47182615687168, 47182615687168, +STORE, 47182615687168, 47182615691263, +STORE, 47182615691264, 47182615707647, +STORE, 47182615695360, 47182615707647, +STORE, 47182615691264, 47182615695359, +ERASE, 47182615691264, 47182615691264, +STORE, 47182615691264, 47182615695359, +STORE, 47182615699456, 47182615707647, +STORE, 47182615695360, 47182615699455, +ERASE, 47182615695360, 47182615695360, +STORE, 47182615695360, 47182615707647, +ERASE, 47182615695360, 47182615695360, +STORE, 47182615695360, 47182615699455, +STORE, 47182615699456, 47182615707647, +ERASE, 47182615699456, 47182615699456, +STORE, 47182615699456, 47182615707647, +STORE, 47182615707648, 47182615715839, +ERASE, 47182608371712, 47182608371712, +STORE, 47182608371712, 47182608388095, +STORE, 47182608388096, 47182608396287, +ERASE, 47182615699456, 47182615699456, +STORE, 47182615699456, 47182615703551, +STORE, 47182615703552, 47182615707647, +ERASE, 47182611288064, 47182611288064, +STORE, 47182611288064, 47182611292159, +STORE, 47182611292160, 47182611296255, +ERASE, 47182615670784, 47182615670784, +STORE, 47182615670784, 47182615674879, +STORE, 47182615674880, 47182615678975, +ERASE, 47182615195648, 47182615195648, +STORE, 47182615195648, 47182615199743, +STORE, 47182615199744, 47182615203839, +ERASE, 47182615158784, 47182615158784, +STORE, 47182615158784, 47182615162879, +STORE, 47182615162880, 47182615166975, +ERASE, 47182614913024, 47182614913024, +STORE, 47182614913024, 47182615109631, +STORE, 47182615109632, 47182615117823, +ERASE, 47182612029440, 47182612029440, +STORE, 47182612029440, 47182612066303, +STORE, 47182612066304, 47182612082687, +ERASE, 47182611476480, 47182611476480, +STORE, 47182611476480, 47182611480575, +STORE, 47182611480576, 47182611484671, +ERASE, 47182611161088, 47182611161088, +STORE, 47182611161088, 47182611165183, +STORE, 47182611165184, 47182611169279, +ERASE, 47182608891904, 47182608891904, +STORE, 47182608891904, 47182608912383, +STORE, 47182608912384, 47182608916479, +ERASE, 47182608560128, 47182608560128, +STORE, 47182608560128, 47182608564223, +STORE, 47182608564224, 47182608568319, +ERASE, 47182608515072, 47182608515072, +STORE, 47182608515072, 47182608519167, +STORE, 47182608519168, 47182608523263, +ERASE, 93963664379904, 93963664379904, +STORE, 93963664379904, 93963664502783, +STORE, 93963664502784, 93963664506879, +ERASE, 140450188599296, 140450188599296, +STORE, 140450188599296, 140450188603391, +STORE, 140450188603392, 140450188607487, +ERASE, 47182606557184, 47182606557184, +STORE, 93963694723072, 93963694858239, +STORE, 140737488347136, 140737488351231, +STORE, 140730313261056, 140737488351231, +ERASE, 140730313261056, 140730313261056, +STORE, 140730313261056, 140730313265151, +STORE, 94386579017728, 94386579697663, +ERASE, 94386579017728, 94386579017728, +STORE, 94386579017728, 94386579083263, +STORE, 94386579083264, 94386579697663, +ERASE, 94386579083264, 94386579083264, +STORE, 94386579083264, 94386579431423, +STORE, 94386579431424, 94386579570687, +STORE, 94386579570688, 94386579697663, +STORE, 140124810838016, 140124811010047, +ERASE, 140124810838016, 140124810838016, +STORE, 140124810838016, 140124810842111, +STORE, 140124810842112, 140124811010047, +ERASE, 140124810842112, 140124810842112, +STORE, 140124810842112, 140124810964991, +STORE, 140124810964992, 140124810997759, +STORE, 140124810997760, 140124811005951, +STORE, 140124811005952, 140124811010047, +STORE, 140730313601024, 140730313605119, +STORE, 140730313588736, 140730313601023, +STORE, 47507984158720, 47507984166911, +STORE, 47507984166912, 47507984175103, +STORE, 47507984175104, 47507986014207, +STORE, 47507984314368, 47507986014207, +STORE, 47507984175104, 47507984314367, +ERASE, 47507984314368, 47507984314368, +STORE, 47507984314368, 47507985973247, +STORE, 47507985973248, 47507986014207, +STORE, 47507985657856, 47507985973247, +STORE, 47507984314368, 47507985657855, +ERASE, 47507984314368, 47507984314368, +STORE, 47507984314368, 47507985657855, +STORE, 47507985969152, 47507985973247, +STORE, 47507985657856, 47507985969151, +ERASE, 47507985657856, 47507985657856, +STORE, 47507985657856, 47507985969151, +STORE, 47507985997824, 47507986014207, +STORE, 47507985973248, 47507985997823, +ERASE, 47507985973248, 47507985973248, +STORE, 47507985973248, 47507985997823, +ERASE, 47507985997824, 47507985997824, +STORE, 47507985997824, 47507986014207, +STORE, 47507986014208, 47507986124799, +STORE, 47507986030592, 47507986124799, +STORE, 47507986014208, 47507986030591, +ERASE, 47507986030592, 47507986030592, +STORE, 47507986030592, 47507986116607, +STORE, 47507986116608, 47507986124799, +STORE, 47507986092032, 47507986116607, +STORE, 47507986030592, 47507986092031, +ERASE, 47507986030592, 47507986030592, +STORE, 47507986030592, 47507986092031, +STORE, 47507986112512, 47507986116607, +STORE, 47507986092032, 47507986112511, +ERASE, 47507986092032, 47507986092032, +STORE, 47507986092032, 47507986112511, +ERASE, 47507986116608, 47507986116608, +STORE, 47507986116608, 47507986124799, +STORE, 47507986124800, 47507986169855, +ERASE, 47507986124800, 47507986124800, +STORE, 47507986124800, 47507986132991, +STORE, 47507986132992, 47507986169855, +STORE, 47507986153472, 47507986169855, +STORE, 47507986132992, 47507986153471, +ERASE, 47507986132992, 47507986132992, +STORE, 47507986132992, 47507986153471, +STORE, 47507986161664, 47507986169855, +STORE, 47507986153472, 47507986161663, +ERASE, 47507986153472, 47507986153472, +STORE, 47507986153472, 47507986169855, +ERASE, 47507986153472, 47507986153472, +STORE, 47507986153472, 47507986161663, +STORE, 47507986161664, 47507986169855, +ERASE, 47507986161664, 47507986161664, +STORE, 47507986161664, 47507986169855, +STORE, 47507986169856, 47507986518015, +STORE, 47507986210816, 47507986518015, +STORE, 47507986169856, 47507986210815, +ERASE, 47507986210816, 47507986210816, +STORE, 47507986210816, 47507986493439, +STORE, 47507986493440, 47507986518015, +STORE, 47507986423808, 47507986493439, +STORE, 47507986210816, 47507986423807, +ERASE, 47507986210816, 47507986210816, +STORE, 47507986210816, 47507986423807, +STORE, 47507986489344, 47507986493439, +STORE, 47507986423808, 47507986489343, +ERASE, 47507986423808, 47507986423808, +STORE, 47507986423808, 47507986489343, +ERASE, 47507986493440, 47507986493440, +STORE, 47507986493440, 47507986518015, +STORE, 47507986518016, 47507988779007, +STORE, 47507986669568, 47507988779007, +STORE, 47507986518016, 47507986669567, +ERASE, 47507986669568, 47507986669568, +STORE, 47507986669568, 47507988762623, +STORE, 47507988762624, 47507988779007, +STORE, 47507988770816, 47507988779007, +STORE, 47507988762624, 47507988770815, +ERASE, 47507988762624, 47507988762624, +STORE, 47507988762624, 47507988770815, +ERASE, 47507988770816, 47507988770816, +STORE, 47507988770816, 47507988779007, +STORE, 47507988779008, 47507988914175, +ERASE, 47507988779008, 47507988779008, +STORE, 47507988779008, 47507988803583, +STORE, 47507988803584, 47507988914175, +STORE, 47507988865024, 47507988914175, +STORE, 47507988803584, 47507988865023, +ERASE, 47507988803584, 47507988803584, +STORE, 47507988803584, 47507988865023, +STORE, 47507988889600, 47507988914175, +STORE, 47507988865024, 47507988889599, +ERASE, 47507988865024, 47507988865024, +STORE, 47507988865024, 47507988914175, +ERASE, 47507988865024, 47507988865024, +STORE, 47507988865024, 47507988889599, +STORE, 47507988889600, 47507988914175, +STORE, 47507988897792, 47507988914175, +STORE, 47507988889600, 47507988897791, +ERASE, 47507988889600, 47507988889600, +STORE, 47507988889600, 47507988897791, +ERASE, 47507988897792, 47507988897792, +STORE, 47507988897792, 47507988914175, +STORE, 47507988897792, 47507988922367, +STORE, 47507988922368, 47507989086207, +ERASE, 47507988922368, 47507988922368, +STORE, 47507988922368, 47507988934655, +STORE, 47507988934656, 47507989086207, +STORE, 47507989032960, 47507989086207, +STORE, 47507988934656, 47507989032959, +ERASE, 47507988934656, 47507988934656, +STORE, 47507988934656, 47507989032959, +STORE, 47507989078016, 47507989086207, +STORE, 47507989032960, 47507989078015, +ERASE, 47507989032960, 47507989032960, +STORE, 47507989032960, 47507989086207, +ERASE, 47507989032960, 47507989032960, +STORE, 47507989032960, 47507989078015, +STORE, 47507989078016, 47507989086207, +ERASE, 47507989078016, 47507989078016, +STORE, 47507989078016, 47507989086207, +STORE, 47507989086208, 47507989684223, +STORE, 47507989204992, 47507989684223, +STORE, 47507989086208, 47507989204991, +ERASE, 47507989204992, 47507989204992, +STORE, 47507989204992, 47507989630975, +STORE, 47507989630976, 47507989684223, +STORE, 47507989520384, 47507989630975, +STORE, 47507989204992, 47507989520383, +ERASE, 47507989204992, 47507989204992, +STORE, 47507989204992, 47507989520383, +STORE, 47507989626880, 47507989630975, +STORE, 47507989520384, 47507989626879, +ERASE, 47507989520384, 47507989520384, +STORE, 47507989520384, 47507989626879, +ERASE, 47507989630976, 47507989630976, +STORE, 47507989630976, 47507989684223, +STORE, 47507989684224, 47507992735743, +STORE, 47507990228992, 47507992735743, +STORE, 47507989684224, 47507990228991, +ERASE, 47507990228992, 47507990228992, +STORE, 47507990228992, 47507992514559, +STORE, 47507992514560, 47507992735743, +STORE, 47507991924736, 47507992514559, +STORE, 47507990228992, 47507991924735, +ERASE, 47507990228992, 47507990228992, +STORE, 47507990228992, 47507991924735, +STORE, 47507992510464, 47507992514559, +STORE, 47507991924736, 47507992510463, +ERASE, 47507991924736, 47507991924736, +STORE, 47507991924736, 47507992510463, +STORE, 47507992719360, 47507992735743, +STORE, 47507992514560, 47507992719359, +ERASE, 47507992514560, 47507992514560, +STORE, 47507992514560, 47507992719359, +ERASE, 47507992719360, 47507992719360, +STORE, 47507992719360, 47507992735743, +STORE, 47507992735744, 47507992768511, +ERASE, 47507992735744, 47507992735744, +STORE, 47507992735744, 47507992743935, +STORE, 47507992743936, 47507992768511, +STORE, 47507992756224, 47507992768511, +STORE, 47507992743936, 47507992756223, +ERASE, 47507992743936, 47507992743936, +STORE, 47507992743936, 47507992756223, +STORE, 47507992760320, 47507992768511, +STORE, 47507992756224, 47507992760319, +ERASE, 47507992756224, 47507992756224, +STORE, 47507992756224, 47507992768511, +ERASE, 47507992756224, 47507992756224, +STORE, 47507992756224, 47507992760319, +STORE, 47507992760320, 47507992768511, +ERASE, 47507992760320, 47507992760320, +STORE, 47507992760320, 47507992768511, +STORE, 47507992768512, 47507992805375, +ERASE, 47507992768512, 47507992768512, +STORE, 47507992768512, 47507992776703, +STORE, 47507992776704, 47507992805375, +STORE, 47507992793088, 47507992805375, +STORE, 47507992776704, 47507992793087, +ERASE, 47507992776704, 47507992776704, +STORE, 47507992776704, 47507992793087, +STORE, 47507992797184, 47507992805375, +STORE, 47507992793088, 47507992797183, +ERASE, 47507992793088, 47507992793088, +STORE, 47507992793088, 47507992805375, +ERASE, 47507992793088, 47507992793088, +STORE, 47507992793088, 47507992797183, +STORE, 47507992797184, 47507992805375, +ERASE, 47507992797184, 47507992797184, +STORE, 47507992797184, 47507992805375, +STORE, 47507992805376, 47507993280511, +ERASE, 47507992805376, 47507992805376, +STORE, 47507992805376, 47507992813567, +STORE, 47507992813568, 47507993280511, +STORE, 47507993149440, 47507993280511, +STORE, 47507992813568, 47507993149439, +ERASE, 47507992813568, 47507992813568, +STORE, 47507992813568, 47507993149439, +STORE, 47507993272320, 47507993280511, +STORE, 47507993149440, 47507993272319, +ERASE, 47507993149440, 47507993149440, +STORE, 47507993149440, 47507993280511, +ERASE, 47507993149440, 47507993149440, +STORE, 47507993149440, 47507993272319, +STORE, 47507993272320, 47507993280511, +ERASE, 47507993272320, 47507993272320, +STORE, 47507993272320, 47507993280511, +STORE, 47507993280512, 47507993288703, +STORE, 47507993288704, 47507993309183, +ERASE, 47507993288704, 47507993288704, +STORE, 47507993288704, 47507993292799, +STORE, 47507993292800, 47507993309183, +STORE, 47507993296896, 47507993309183, +STORE, 47507993292800, 47507993296895, +ERASE, 47507993292800, 47507993292800, +STORE, 47507993292800, 47507993296895, +STORE, 47507993300992, 47507993309183, +STORE, 47507993296896, 47507993300991, +ERASE, 47507993296896, 47507993296896, +STORE, 47507993296896, 47507993309183, +ERASE, 47507993296896, 47507993296896, +STORE, 47507993296896, 47507993300991, +STORE, 47507993300992, 47507993309183, +ERASE, 47507993300992, 47507993300992, +STORE, 47507993300992, 47507993309183, +STORE, 47507993309184, 47507993317375, +ERASE, 47507985973248, 47507985973248, +STORE, 47507985973248, 47507985989631, +STORE, 47507985989632, 47507985997823, +ERASE, 47507993300992, 47507993300992, +STORE, 47507993300992, 47507993305087, +STORE, 47507993305088, 47507993309183, +ERASE, 47507988889600, 47507988889600, +STORE, 47507988889600, 47507988893695, +STORE, 47507988893696, 47507988897791, +ERASE, 47507993272320, 47507993272320, +STORE, 47507993272320, 47507993276415, +STORE, 47507993276416, 47507993280511, +ERASE, 47507992797184, 47507992797184, +STORE, 47507992797184, 47507992801279, +STORE, 47507992801280, 47507992805375, +ERASE, 47507992760320, 47507992760320, +STORE, 47507992760320, 47507992764415, +STORE, 47507992764416, 47507992768511, +ERASE, 47507992514560, 47507992514560, +STORE, 47507992514560, 47507992711167, +STORE, 47507992711168, 47507992719359, +ERASE, 47507989630976, 47507989630976, +STORE, 47507989630976, 47507989667839, +STORE, 47507989667840, 47507989684223, +ERASE, 47507989078016, 47507989078016, +STORE, 47507989078016, 47507989082111, +STORE, 47507989082112, 47507989086207, +ERASE, 47507988762624, 47507988762624, +STORE, 47507988762624, 47507988766719, +STORE, 47507988766720, 47507988770815, +ERASE, 47507986493440, 47507986493440, +STORE, 47507986493440, 47507986513919, +STORE, 47507986513920, 47507986518015, +ERASE, 47507986161664, 47507986161664, +STORE, 47507986161664, 47507986165759, +STORE, 47507986165760, 47507986169855, +ERASE, 47507986116608, 47507986116608, +STORE, 47507986116608, 47507986120703, +STORE, 47507986120704, 47507986124799, +ERASE, 94386579570688, 94386579570688, +STORE, 94386579570688, 94386579693567, +STORE, 94386579693568, 94386579697663, +ERASE, 140124810997760, 140124810997760, +STORE, 140124810997760, 140124811001855, +STORE, 140124811001856, 140124811005951, +ERASE, 47507984158720, 47507984158720, +STORE, 94386583982080, 94386584117247, +STORE, 94386583982080, 94386584256511, +ERASE, 94386583982080, 94386583982080, +STORE, 94386583982080, 94386584223743, +STORE, 94386584223744, 94386584256511, +ERASE, 94386584223744, 94386584223744, +STORE, 140737488347136, 140737488351231, +STORE, 140733763395584, 140737488351231, +ERASE, 140733763395584, 140733763395584, +STORE, 140733763395584, 140733763399679, +STORE, 94011546472448, 94011547152383, +ERASE, 94011546472448, 94011546472448, +STORE, 94011546472448, 94011546537983, +STORE, 94011546537984, 94011547152383, +ERASE, 94011546537984, 94011546537984, +STORE, 94011546537984, 94011546886143, +STORE, 94011546886144, 94011547025407, +STORE, 94011547025408, 94011547152383, +STORE, 139757597949952, 139757598121983, +ERASE, 139757597949952, 139757597949952, +STORE, 139757597949952, 139757597954047, +STORE, 139757597954048, 139757598121983, +ERASE, 139757597954048, 139757597954048, +STORE, 139757597954048, 139757598076927, +STORE, 139757598076928, 139757598109695, +STORE, 139757598109696, 139757598117887, +STORE, 139757598117888, 139757598121983, +STORE, 140733763596288, 140733763600383, +STORE, 140733763584000, 140733763596287, +STORE, 47875197046784, 47875197054975, +STORE, 47875197054976, 47875197063167, +STORE, 47875197063168, 47875198902271, +STORE, 47875197202432, 47875198902271, +STORE, 47875197063168, 47875197202431, +ERASE, 47875197202432, 47875197202432, +STORE, 47875197202432, 47875198861311, +STORE, 47875198861312, 47875198902271, +STORE, 47875198545920, 47875198861311, +STORE, 47875197202432, 47875198545919, +ERASE, 47875197202432, 47875197202432, +STORE, 47875197202432, 47875198545919, +STORE, 47875198857216, 47875198861311, +STORE, 47875198545920, 47875198857215, +ERASE, 47875198545920, 47875198545920, +STORE, 47875198545920, 47875198857215, +STORE, 47875198885888, 47875198902271, +STORE, 47875198861312, 47875198885887, +ERASE, 47875198861312, 47875198861312, +STORE, 47875198861312, 47875198885887, +ERASE, 47875198885888, 47875198885888, +STORE, 47875198885888, 47875198902271, +STORE, 47875198902272, 47875199012863, +STORE, 47875198918656, 47875199012863, +STORE, 47875198902272, 47875198918655, +ERASE, 47875198918656, 47875198918656, +STORE, 47875198918656, 47875199004671, +STORE, 47875199004672, 47875199012863, +STORE, 47875198980096, 47875199004671, +STORE, 47875198918656, 47875198980095, +ERASE, 47875198918656, 47875198918656, +STORE, 47875198918656, 47875198980095, +STORE, 47875199000576, 47875199004671, +STORE, 47875198980096, 47875199000575, +ERASE, 47875198980096, 47875198980096, +STORE, 47875198980096, 47875199000575, +ERASE, 47875199004672, 47875199004672, +STORE, 47875199004672, 47875199012863, +STORE, 47875199012864, 47875199057919, +ERASE, 47875199012864, 47875199012864, +STORE, 47875199012864, 47875199021055, +STORE, 47875199021056, 47875199057919, +STORE, 47875199041536, 47875199057919, +STORE, 47875199021056, 47875199041535, +ERASE, 47875199021056, 47875199021056, +STORE, 47875199021056, 47875199041535, +STORE, 47875199049728, 47875199057919, +STORE, 47875199041536, 47875199049727, +ERASE, 47875199041536, 47875199041536, +STORE, 47875199041536, 47875199057919, +ERASE, 47875199041536, 47875199041536, +STORE, 47875199041536, 47875199049727, +STORE, 47875199049728, 47875199057919, +ERASE, 47875199049728, 47875199049728, +STORE, 47875199049728, 47875199057919, +STORE, 47875199057920, 47875199406079, +STORE, 47875199098880, 47875199406079, +STORE, 47875199057920, 47875199098879, +ERASE, 47875199098880, 47875199098880, +STORE, 47875199098880, 47875199381503, +STORE, 47875199381504, 47875199406079, +STORE, 47875199311872, 47875199381503, +STORE, 47875199098880, 47875199311871, +ERASE, 47875199098880, 47875199098880, +STORE, 47875199098880, 47875199311871, +STORE, 47875199377408, 47875199381503, +STORE, 47875199311872, 47875199377407, +ERASE, 47875199311872, 47875199311872, +STORE, 47875199311872, 47875199377407, +ERASE, 47875199381504, 47875199381504, +STORE, 47875199381504, 47875199406079, +STORE, 47875199406080, 47875201667071, +STORE, 47875199557632, 47875201667071, +STORE, 47875199406080, 47875199557631, +ERASE, 47875199557632, 47875199557632, +STORE, 47875199557632, 47875201650687, +STORE, 47875201650688, 47875201667071, +STORE, 47875201658880, 47875201667071, +STORE, 47875201650688, 47875201658879, +ERASE, 47875201650688, 47875201650688, +STORE, 47875201650688, 47875201658879, +ERASE, 47875201658880, 47875201658880, +STORE, 47875201658880, 47875201667071, +STORE, 47875201667072, 47875201802239, +ERASE, 47875201667072, 47875201667072, +STORE, 47875201667072, 47875201691647, +STORE, 47875201691648, 47875201802239, +STORE, 47875201753088, 47875201802239, +STORE, 47875201691648, 47875201753087, +ERASE, 47875201691648, 47875201691648, +STORE, 47875201691648, 47875201753087, +STORE, 47875201777664, 47875201802239, +STORE, 47875201753088, 47875201777663, +ERASE, 47875201753088, 47875201753088, +STORE, 47875201753088, 47875201802239, +ERASE, 47875201753088, 47875201753088, +STORE, 47875201753088, 47875201777663, +STORE, 47875201777664, 47875201802239, +STORE, 47875201785856, 47875201802239, +STORE, 47875201777664, 47875201785855, +ERASE, 47875201777664, 47875201777664, +STORE, 47875201777664, 47875201785855, +ERASE, 47875201785856, 47875201785856, +STORE, 47875201785856, 47875201802239, +STORE, 47875201785856, 47875201810431, +STORE, 47875201810432, 47875201974271, +ERASE, 47875201810432, 47875201810432, +STORE, 47875201810432, 47875201822719, +STORE, 47875201822720, 47875201974271, +STORE, 47875201921024, 47875201974271, +STORE, 47875201822720, 47875201921023, +ERASE, 47875201822720, 47875201822720, +STORE, 47875201822720, 47875201921023, +STORE, 47875201966080, 47875201974271, +STORE, 47875201921024, 47875201966079, +ERASE, 47875201921024, 47875201921024, +STORE, 47875201921024, 47875201974271, +ERASE, 47875201921024, 47875201921024, +STORE, 47875201921024, 47875201966079, +STORE, 47875201966080, 47875201974271, +ERASE, 47875201966080, 47875201966080, +STORE, 47875201966080, 47875201974271, +STORE, 47875201974272, 47875202572287, +STORE, 47875202093056, 47875202572287, +STORE, 47875201974272, 47875202093055, +ERASE, 47875202093056, 47875202093056, +STORE, 47875202093056, 47875202519039, +STORE, 47875202519040, 47875202572287, +STORE, 47875202408448, 47875202519039, +STORE, 47875202093056, 47875202408447, +ERASE, 47875202093056, 47875202093056, +STORE, 47875202093056, 47875202408447, +STORE, 47875202514944, 47875202519039, +STORE, 47875202408448, 47875202514943, +ERASE, 47875202408448, 47875202408448, +STORE, 47875202408448, 47875202514943, +ERASE, 47875202519040, 47875202519040, +STORE, 47875202519040, 47875202572287, +STORE, 47875202572288, 47875205623807, +STORE, 47875203117056, 47875205623807, +STORE, 47875202572288, 47875203117055, +ERASE, 47875203117056, 47875203117056, +STORE, 47875203117056, 47875205402623, +STORE, 47875205402624, 47875205623807, +STORE, 47875204812800, 47875205402623, +STORE, 47875203117056, 47875204812799, +ERASE, 47875203117056, 47875203117056, +STORE, 47875203117056, 47875204812799, +STORE, 47875205398528, 47875205402623, +STORE, 47875204812800, 47875205398527, +ERASE, 47875204812800, 47875204812800, +STORE, 47875204812800, 47875205398527, +STORE, 47875205607424, 47875205623807, +STORE, 47875205402624, 47875205607423, +ERASE, 47875205402624, 47875205402624, +STORE, 47875205402624, 47875205607423, +ERASE, 47875205607424, 47875205607424, +STORE, 47875205607424, 47875205623807, +STORE, 47875205623808, 47875205656575, +ERASE, 47875205623808, 47875205623808, +STORE, 47875205623808, 47875205631999, +STORE, 47875205632000, 47875205656575, +STORE, 47875205644288, 47875205656575, +STORE, 47875205632000, 47875205644287, +ERASE, 47875205632000, 47875205632000, +STORE, 47875205632000, 47875205644287, +STORE, 47875205648384, 47875205656575, +STORE, 47875205644288, 47875205648383, +ERASE, 47875205644288, 47875205644288, +STORE, 47875205644288, 47875205656575, +ERASE, 47875205644288, 47875205644288, +STORE, 47875205644288, 47875205648383, +STORE, 47875205648384, 47875205656575, +ERASE, 47875205648384, 47875205648384, +STORE, 47875205648384, 47875205656575, +STORE, 47875205656576, 47875205693439, +ERASE, 47875205656576, 47875205656576, +STORE, 47875205656576, 47875205664767, +STORE, 47875205664768, 47875205693439, +STORE, 47875205681152, 47875205693439, +STORE, 47875205664768, 47875205681151, +ERASE, 47875205664768, 47875205664768, +STORE, 47875205664768, 47875205681151, +STORE, 47875205685248, 47875205693439, +STORE, 47875205681152, 47875205685247, +ERASE, 47875205681152, 47875205681152, +STORE, 47875205681152, 47875205693439, +ERASE, 47875205681152, 47875205681152, +STORE, 47875205681152, 47875205685247, +STORE, 47875205685248, 47875205693439, +ERASE, 47875205685248, 47875205685248, +STORE, 47875205685248, 47875205693439, +STORE, 47875205693440, 47875206168575, +ERASE, 47875205693440, 47875205693440, +STORE, 47875205693440, 47875205701631, +STORE, 47875205701632, 47875206168575, +STORE, 47875206037504, 47875206168575, +STORE, 47875205701632, 47875206037503, +ERASE, 47875205701632, 47875205701632, +STORE, 47875205701632, 47875206037503, +STORE, 47875206160384, 47875206168575, +STORE, 47875206037504, 47875206160383, +ERASE, 47875206037504, 47875206037504, +STORE, 47875206037504, 47875206168575, +ERASE, 47875206037504, 47875206037504, +STORE, 47875206037504, 47875206160383, +STORE, 47875206160384, 47875206168575, +ERASE, 47875206160384, 47875206160384, +STORE, 47875206160384, 47875206168575, +STORE, 47875206168576, 47875206176767, +STORE, 47875206176768, 47875206197247, +ERASE, 47875206176768, 47875206176768, +STORE, 47875206176768, 47875206180863, +STORE, 47875206180864, 47875206197247, +STORE, 47875206184960, 47875206197247, +STORE, 47875206180864, 47875206184959, +ERASE, 47875206180864, 47875206180864, +STORE, 47875206180864, 47875206184959, +STORE, 47875206189056, 47875206197247, +STORE, 47875206184960, 47875206189055, +ERASE, 47875206184960, 47875206184960, +STORE, 47875206184960, 47875206197247, +ERASE, 47875206184960, 47875206184960, +STORE, 47875206184960, 47875206189055, +STORE, 47875206189056, 47875206197247, +ERASE, 47875206189056, 47875206189056, +STORE, 47875206189056, 47875206197247, +STORE, 47875206197248, 47875206205439, +ERASE, 47875198861312, 47875198861312, +STORE, 47875198861312, 47875198877695, +STORE, 47875198877696, 47875198885887, +ERASE, 47875206189056, 47875206189056, +STORE, 47875206189056, 47875206193151, +STORE, 47875206193152, 47875206197247, +ERASE, 47875201777664, 47875201777664, +STORE, 47875201777664, 47875201781759, +STORE, 47875201781760, 47875201785855, +ERASE, 47875206160384, 47875206160384, +STORE, 47875206160384, 47875206164479, +STORE, 47875206164480, 47875206168575, +ERASE, 47875205685248, 47875205685248, +STORE, 47875205685248, 47875205689343, +STORE, 47875205689344, 47875205693439, +ERASE, 47875205648384, 47875205648384, +STORE, 47875205648384, 47875205652479, +STORE, 47875205652480, 47875205656575, +ERASE, 47875205402624, 47875205402624, +STORE, 47875205402624, 47875205599231, +STORE, 47875205599232, 47875205607423, +ERASE, 47875202519040, 47875202519040, +STORE, 47875202519040, 47875202555903, +STORE, 47875202555904, 47875202572287, +ERASE, 47875201966080, 47875201966080, +STORE, 47875201966080, 47875201970175, +STORE, 47875201970176, 47875201974271, +ERASE, 47875201650688, 47875201650688, +STORE, 47875201650688, 47875201654783, +STORE, 47875201654784, 47875201658879, +ERASE, 47875199381504, 47875199381504, +STORE, 47875199381504, 47875199401983, +STORE, 47875199401984, 47875199406079, +ERASE, 47875199049728, 47875199049728, +STORE, 47875199049728, 47875199053823, +STORE, 47875199053824, 47875199057919, +ERASE, 47875199004672, 47875199004672, +STORE, 47875199004672, 47875199008767, +STORE, 47875199008768, 47875199012863, +ERASE, 94011547025408, 94011547025408, +STORE, 94011547025408, 94011547148287, +STORE, 94011547148288, 94011547152383, +ERASE, 139757598109696, 139757598109696, +STORE, 139757598109696, 139757598113791, +STORE, 139757598113792, 139757598117887, +ERASE, 47875197046784, 47875197046784, +STORE, 94011557584896, 94011557720063, +STORE, 94011557584896, 94011557855231, +ERASE, 94011557584896, 94011557584896, +STORE, 94011557584896, 94011557851135, +STORE, 94011557851136, 94011557855231, +ERASE, 94011557851136, 94011557851136, +ERASE, 94011557584896, 94011557584896, +STORE, 94011557584896, 94011557847039, +STORE, 94011557847040, 94011557851135, +ERASE, 94011557847040, 94011557847040, +STORE, 94011557584896, 94011557982207, +ERASE, 94011557584896, 94011557584896, +STORE, 94011557584896, 94011557978111, +STORE, 94011557978112, 94011557982207, +ERASE, 94011557978112, 94011557978112, +ERASE, 94011557584896, 94011557584896, +STORE, 94011557584896, 94011557974015, +STORE, 94011557974016, 94011557978111, +ERASE, 94011557974016, 94011557974016, +STORE, 140737488347136, 140737488351231, +STORE, 140734130360320, 140737488351231, +ERASE, 140734130360320, 140734130360320, +STORE, 140734130360320, 140734130364415, +STORE, 94641232105472, 94641232785407, +ERASE, 94641232105472, 94641232105472, +STORE, 94641232105472, 94641232171007, +STORE, 94641232171008, 94641232785407, +ERASE, 94641232171008, 94641232171008, +STORE, 94641232171008, 94641232519167, +STORE, 94641232519168, 94641232658431, +STORE, 94641232658432, 94641232785407, +STORE, 139726599516160, 139726599688191, +ERASE, 139726599516160, 139726599516160, +STORE, 139726599516160, 139726599520255, +STORE, 139726599520256, 139726599688191, +ERASE, 139726599520256, 139726599520256, +STORE, 139726599520256, 139726599643135, +STORE, 139726599643136, 139726599675903, +STORE, 139726599675904, 139726599684095, +STORE, 139726599684096, 139726599688191, +STORE, 140734130446336, 140734130450431, +STORE, 140734130434048, 140734130446335, +STORE, 47906195480576, 47906195488767, +STORE, 47906195488768, 47906195496959, +STORE, 47906195496960, 47906197336063, +STORE, 47906195636224, 47906197336063, +STORE, 47906195496960, 47906195636223, +ERASE, 47906195636224, 47906195636224, +STORE, 47906195636224, 47906197295103, +STORE, 47906197295104, 47906197336063, +STORE, 47906196979712, 47906197295103, +STORE, 47906195636224, 47906196979711, +ERASE, 47906195636224, 47906195636224, +STORE, 47906195636224, 47906196979711, +STORE, 47906197291008, 47906197295103, +STORE, 47906196979712, 47906197291007, +ERASE, 47906196979712, 47906196979712, +STORE, 47906196979712, 47906197291007, +STORE, 47906197319680, 47906197336063, +STORE, 47906197295104, 47906197319679, +ERASE, 47906197295104, 47906197295104, +STORE, 47906197295104, 47906197319679, +ERASE, 47906197319680, 47906197319680, +STORE, 47906197319680, 47906197336063, +STORE, 47906197336064, 47906197446655, +STORE, 47906197352448, 47906197446655, +STORE, 47906197336064, 47906197352447, +ERASE, 47906197352448, 47906197352448, +STORE, 47906197352448, 47906197438463, +STORE, 47906197438464, 47906197446655, +STORE, 47906197413888, 47906197438463, +STORE, 47906197352448, 47906197413887, +ERASE, 47906197352448, 47906197352448, +STORE, 47906197352448, 47906197413887, +STORE, 47906197434368, 47906197438463, +STORE, 47906197413888, 47906197434367, +ERASE, 47906197413888, 47906197413888, +STORE, 47906197413888, 47906197434367, +ERASE, 47906197438464, 47906197438464, +STORE, 47906197438464, 47906197446655, +STORE, 47906197446656, 47906197491711, +ERASE, 47906197446656, 47906197446656, +STORE, 47906197446656, 47906197454847, +STORE, 47906197454848, 47906197491711, +STORE, 47906197475328, 47906197491711, +STORE, 47906197454848, 47906197475327, +ERASE, 47906197454848, 47906197454848, +STORE, 47906197454848, 47906197475327, +STORE, 47906197483520, 47906197491711, +STORE, 47906197475328, 47906197483519, +ERASE, 47906197475328, 47906197475328, +STORE, 47906197475328, 47906197491711, +ERASE, 47906197475328, 47906197475328, +STORE, 47906197475328, 47906197483519, +STORE, 47906197483520, 47906197491711, +ERASE, 47906197483520, 47906197483520, +STORE, 47906197483520, 47906197491711, +STORE, 47906197491712, 47906197839871, +STORE, 47906197532672, 47906197839871, +STORE, 47906197491712, 47906197532671, +ERASE, 47906197532672, 47906197532672, +STORE, 47906197532672, 47906197815295, +STORE, 47906197815296, 47906197839871, +STORE, 47906197745664, 47906197815295, +STORE, 47906197532672, 47906197745663, +ERASE, 47906197532672, 47906197532672, +STORE, 47906197532672, 47906197745663, +STORE, 47906197811200, 47906197815295, +STORE, 47906197745664, 47906197811199, +ERASE, 47906197745664, 47906197745664, +STORE, 47906197745664, 47906197811199, +ERASE, 47906197815296, 47906197815296, +STORE, 47906197815296, 47906197839871, +STORE, 47906197839872, 47906200100863, +STORE, 47906197991424, 47906200100863, +STORE, 47906197839872, 47906197991423, +ERASE, 47906197991424, 47906197991424, +STORE, 47906197991424, 47906200084479, +STORE, 47906200084480, 47906200100863, +STORE, 47906200092672, 47906200100863, +STORE, 47906200084480, 47906200092671, +ERASE, 47906200084480, 47906200084480, +STORE, 47906200084480, 47906200092671, +ERASE, 47906200092672, 47906200092672, +STORE, 47906200092672, 47906200100863, +STORE, 47906200100864, 47906200236031, +ERASE, 47906200100864, 47906200100864, +STORE, 47906200100864, 47906200125439, +STORE, 47906200125440, 47906200236031, +STORE, 47906200186880, 47906200236031, +STORE, 47906200125440, 47906200186879, +ERASE, 47906200125440, 47906200125440, +STORE, 47906200125440, 47906200186879, +STORE, 47906200211456, 47906200236031, +STORE, 47906200186880, 47906200211455, +ERASE, 47906200186880, 47906200186880, +STORE, 47906200186880, 47906200236031, +ERASE, 47906200186880, 47906200186880, +STORE, 47906200186880, 47906200211455, +STORE, 47906200211456, 47906200236031, +STORE, 47906200219648, 47906200236031, +STORE, 47906200211456, 47906200219647, +ERASE, 47906200211456, 47906200211456, +STORE, 47906200211456, 47906200219647, +ERASE, 47906200219648, 47906200219648, +STORE, 47906200219648, 47906200236031, +STORE, 47906200219648, 47906200244223, +STORE, 47906200244224, 47906200408063, +ERASE, 47906200244224, 47906200244224, +STORE, 47906200244224, 47906200256511, +STORE, 47906200256512, 47906200408063, +STORE, 47906200354816, 47906200408063, +STORE, 47906200256512, 47906200354815, +ERASE, 47906200256512, 47906200256512, +STORE, 47906200256512, 47906200354815, +STORE, 47906200399872, 47906200408063, +STORE, 47906200354816, 47906200399871, +ERASE, 47906200354816, 47906200354816, +STORE, 47906200354816, 47906200408063, +ERASE, 47906200354816, 47906200354816, +STORE, 47906200354816, 47906200399871, +STORE, 47906200399872, 47906200408063, +ERASE, 47906200399872, 47906200399872, +STORE, 47906200399872, 47906200408063, +STORE, 47906200408064, 47906201006079, +STORE, 47906200526848, 47906201006079, +STORE, 47906200408064, 47906200526847, +ERASE, 47906200526848, 47906200526848, +STORE, 47906200526848, 47906200952831, +STORE, 47906200952832, 47906201006079, +STORE, 47906200842240, 47906200952831, +STORE, 47906200526848, 47906200842239, +ERASE, 47906200526848, 47906200526848, +STORE, 47906200526848, 47906200842239, +STORE, 47906200948736, 47906200952831, +STORE, 47906200842240, 47906200948735, +ERASE, 47906200842240, 47906200842240, +STORE, 47906200842240, 47906200948735, +ERASE, 47906200952832, 47906200952832, +STORE, 47906200952832, 47906201006079, +STORE, 47906201006080, 47906204057599, +STORE, 47906201550848, 47906204057599, +STORE, 47906201006080, 47906201550847, +ERASE, 47906201550848, 47906201550848, +STORE, 47906201550848, 47906203836415, +STORE, 47906203836416, 47906204057599, +STORE, 47906203246592, 47906203836415, +STORE, 47906201550848, 47906203246591, +ERASE, 47906201550848, 47906201550848, +STORE, 47906201550848, 47906203246591, +STORE, 47906203832320, 47906203836415, +STORE, 47906203246592, 47906203832319, +ERASE, 47906203246592, 47906203246592, +STORE, 47906203246592, 47906203832319, +STORE, 47906204041216, 47906204057599, +STORE, 47906203836416, 47906204041215, +ERASE, 47906203836416, 47906203836416, +STORE, 47906203836416, 47906204041215, +ERASE, 47906204041216, 47906204041216, +STORE, 47906204041216, 47906204057599, +STORE, 47906204057600, 47906204090367, +ERASE, 47906204057600, 47906204057600, +STORE, 47906204057600, 47906204065791, +STORE, 47906204065792, 47906204090367, +STORE, 47906204078080, 47906204090367, +STORE, 47906204065792, 47906204078079, +ERASE, 47906204065792, 47906204065792, +STORE, 47906204065792, 47906204078079, +STORE, 47906204082176, 47906204090367, +STORE, 47906204078080, 47906204082175, +ERASE, 47906204078080, 47906204078080, +STORE, 47906204078080, 47906204090367, +ERASE, 47906204078080, 47906204078080, +STORE, 47906204078080, 47906204082175, +STORE, 47906204082176, 47906204090367, +ERASE, 47906204082176, 47906204082176, +STORE, 47906204082176, 47906204090367, +STORE, 47906204090368, 47906204127231, +ERASE, 47906204090368, 47906204090368, +STORE, 47906204090368, 47906204098559, +STORE, 47906204098560, 47906204127231, +STORE, 47906204114944, 47906204127231, +STORE, 47906204098560, 47906204114943, +ERASE, 47906204098560, 47906204098560, +STORE, 47906204098560, 47906204114943, +STORE, 47906204119040, 47906204127231, +STORE, 47906204114944, 47906204119039, +ERASE, 47906204114944, 47906204114944, +STORE, 47906204114944, 47906204127231, +ERASE, 47906204114944, 47906204114944, +STORE, 47906204114944, 47906204119039, +STORE, 47906204119040, 47906204127231, +ERASE, 47906204119040, 47906204119040, +STORE, 47906204119040, 47906204127231, +STORE, 47906204127232, 47906204602367, +ERASE, 47906204127232, 47906204127232, +STORE, 47906204127232, 47906204135423, +STORE, 47906204135424, 47906204602367, +STORE, 47906204471296, 47906204602367, +STORE, 47906204135424, 47906204471295, +ERASE, 47906204135424, 47906204135424, +STORE, 47906204135424, 47906204471295, +STORE, 47906204594176, 47906204602367, +STORE, 47906204471296, 47906204594175, +ERASE, 47906204471296, 47906204471296, +STORE, 47906204471296, 47906204602367, +ERASE, 47906204471296, 47906204471296, +STORE, 47906204471296, 47906204594175, +STORE, 47906204594176, 47906204602367, +ERASE, 47906204594176, 47906204594176, +STORE, 47906204594176, 47906204602367, +STORE, 47906204602368, 47906204610559, +STORE, 47906204610560, 47906204631039, +ERASE, 47906204610560, 47906204610560, +STORE, 47906204610560, 47906204614655, +STORE, 47906204614656, 47906204631039, +STORE, 47906204618752, 47906204631039, +STORE, 47906204614656, 47906204618751, +ERASE, 47906204614656, 47906204614656, +STORE, 47906204614656, 47906204618751, +STORE, 47906204622848, 47906204631039, +STORE, 47906204618752, 47906204622847, +ERASE, 47906204618752, 47906204618752, +STORE, 47906204618752, 47906204631039, +ERASE, 47906204618752, 47906204618752, +STORE, 47906204618752, 47906204622847, +STORE, 47906204622848, 47906204631039, +ERASE, 47906204622848, 47906204622848, +STORE, 47906204622848, 47906204631039, +STORE, 47906204631040, 47906204639231, +ERASE, 47906197295104, 47906197295104, +STORE, 47906197295104, 47906197311487, +STORE, 47906197311488, 47906197319679, +ERASE, 47906204622848, 47906204622848, +STORE, 47906204622848, 47906204626943, +STORE, 47906204626944, 47906204631039, +ERASE, 47906200211456, 47906200211456, +STORE, 47906200211456, 47906200215551, +STORE, 47906200215552, 47906200219647, +ERASE, 47906204594176, 47906204594176, +STORE, 47906204594176, 47906204598271, +STORE, 47906204598272, 47906204602367, +ERASE, 47906204119040, 47906204119040, +STORE, 47906204119040, 47906204123135, +STORE, 47906204123136, 47906204127231, +ERASE, 47906204082176, 47906204082176, +STORE, 47906204082176, 47906204086271, +STORE, 47906204086272, 47906204090367, +ERASE, 47906203836416, 47906203836416, +STORE, 47906203836416, 47906204033023, +STORE, 47906204033024, 47906204041215, +ERASE, 47906200952832, 47906200952832, +STORE, 47906200952832, 47906200989695, +STORE, 47906200989696, 47906201006079, +ERASE, 47906200399872, 47906200399872, +STORE, 47906200399872, 47906200403967, +STORE, 47906200403968, 47906200408063, +ERASE, 47906200084480, 47906200084480, +STORE, 47906200084480, 47906200088575, +STORE, 47906200088576, 47906200092671, +ERASE, 47906197815296, 47906197815296, +STORE, 47906197815296, 47906197835775, +STORE, 47906197835776, 47906197839871, +ERASE, 47906197483520, 47906197483520, +STORE, 47906197483520, 47906197487615, +STORE, 47906197487616, 47906197491711, +ERASE, 47906197438464, 47906197438464, +STORE, 47906197438464, 47906197442559, +STORE, 47906197442560, 47906197446655, +ERASE, 94641232658432, 94641232658432, +STORE, 94641232658432, 94641232781311, +STORE, 94641232781312, 94641232785407, +ERASE, 139726599675904, 139726599675904, +STORE, 139726599675904, 139726599679999, +STORE, 139726599680000, 139726599684095, +ERASE, 47906195480576, 47906195480576, +STORE, 94641242615808, 94641242750975, + }; + unsigned long set11[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140732658499584, 140737488351231, +ERASE, 140732658499584, 140732658499584, +STORE, 140732658499584, 140732658503679, +STORE, 94029856579584, 94029856751615, +ERASE, 94029856579584, 94029856579584, +STORE, 94029856579584, 94029856595967, +STORE, 94029856595968, 94029856751615, +ERASE, 94029856595968, 94029856595968, +STORE, 94029856595968, 94029856698367, +STORE, 94029856698368, 94029856739327, +STORE, 94029856739328, 94029856751615, +STORE, 140014592573440, 140014592745471, +ERASE, 140014592573440, 140014592573440, +STORE, 140014592573440, 140014592577535, +STORE, 140014592577536, 140014592745471, +ERASE, 140014592577536, 140014592577536, +STORE, 140014592577536, 140014592700415, +STORE, 140014592700416, 140014592733183, +STORE, 140014592733184, 140014592741375, +STORE, 140014592741376, 140014592745471, +STORE, 140732658565120, 140732658569215, +STORE, 140732658552832, 140732658565119, + }; + + unsigned long set12[] = { /* contains 12 values. */ +STORE, 140737488347136, 140737488351231, +STORE, 140732658499584, 140737488351231, +ERASE, 140732658499584, 140732658499584, +STORE, 140732658499584, 140732658503679, +STORE, 94029856579584, 94029856751615, +ERASE, 94029856579584, 94029856579584, +STORE, 94029856579584, 94029856595967, +STORE, 94029856595968, 94029856751615, +ERASE, 94029856595968, 94029856595968, +STORE, 94029856595968, 94029856698367, +STORE, 94029856698368, 94029856739327, +STORE, 94029856739328, 94029856751615, +STORE, 140014592573440, 140014592745471, +ERASE, 140014592573440, 140014592573440, +STORE, 140014592573440, 140014592577535, +STORE, 140014592577536, 140014592745471, +ERASE, 140014592577536, 140014592577536, +STORE, 140014592577536, 140014592700415, +STORE, 140014592700416, 140014592733183, +STORE, 140014592733184, 140014592741375, +STORE, 140014592741376, 140014592745471, +STORE, 140732658565120, 140732658569215, +STORE, 140732658552832, 140732658565119, +STORE, 140014592741375, 140014592741375, /* contrived */ +STORE, 140014592733184, 140014592741376, /* creates first entry retry. */ + }; + unsigned long set13[] = { +STORE, 140373516247040, 140373516251135,/*: ffffa2e7b0e10d80 */ +STORE, 140373516251136, 140373516255231,/*: ffffa2e7b1195d80 */ +STORE, 140373516255232, 140373516443647,/*: ffffa2e7b0e109c0 */ +STORE, 140373516443648, 140373516587007,/*: ffffa2e7b05fecc0 */ +STORE, 140373516963840, 140373518647295,/*: ffffa2e7bfbdcc00 */ +STORE, 140373518647296, 140373518663679,/*: ffffa2e7bf5d59c0 */ +STORE, 140373518663680, 140373518684159,/*: deleted (257) */ +STORE, 140373518680064, 140373518684159,/*: ffffa2e7b0e1cb40 */ +STORE, 140373518684160, 140373518688254,/*: ffffa2e7b05fec00 */ +STORE, 140373518688256, 140373518692351,/*: ffffa2e7bfbdcd80 */ +STORE, 140373518692352, 140373518696447,/*: ffffa2e7b0749e40 */ + }; + unsigned long set14[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140731667996672, 140737488351231, +SNULL, 140731668000767, 140737488351231, +STORE, 140731667996672, 140731668000767, +STORE, 140731667865600, 140731668000767, +STORE, 94077521272832, 94077521313791, +SNULL, 94077521301503, 94077521313791, +STORE, 94077521272832, 94077521301503, +STORE, 94077521301504, 94077521313791, +ERASE, 94077521301504, 94077521313791, +STORE, 94077521305600, 94077521313791, +STORE, 139826134630400, 139826136883199, +SNULL, 139826134773759, 139826136883199, +STORE, 139826134630400, 139826134773759, +STORE, 139826134773760, 139826136883199, +ERASE, 139826134773760, 139826136883199, +STORE, 139826136870912, 139826136879103, +STORE, 139826136879104, 139826136883199, +STORE, 140731668013056, 140731668017151, +STORE, 140731668000768, 140731668013055, +STORE, 139826136862720, 139826136870911, +STORE, 139826132406272, 139826134630399, +SNULL, 139826134056959, 139826134630399, +STORE, 139826132406272, 139826134056959, +STORE, 139826134056960, 139826134630399, +SNULL, 139826134056960, 139826134626303, +STORE, 139826134626304, 139826134630399, +STORE, 139826134056960, 139826134626303, +ERASE, 139826134056960, 139826134626303, +STORE, 139826134056960, 139826134626303, +ERASE, 139826134626304, 139826134630399, +STORE, 139826134626304, 139826134630399, +STORE, 139826136842240, 139826136862719, +STORE, 139826130022400, 139826132406271, +SNULL, 139826130022400, 139826130288639, +STORE, 139826130288640, 139826132406271, +STORE, 139826130022400, 139826130288639, +SNULL, 139826132381695, 139826132406271, +STORE, 139826130288640, 139826132381695, +STORE, 139826132381696, 139826132406271, +SNULL, 139826132381696, 139826132402175, +STORE, 139826132402176, 139826132406271, +STORE, 139826132381696, 139826132402175, +ERASE, 139826132381696, 139826132402175, +STORE, 139826132381696, 139826132402175, +ERASE, 139826132402176, 139826132406271, +STORE, 139826132402176, 139826132406271, +STORE, 139826127806464, 139826130022399, +SNULL, 139826127806464, 139826127904767, +STORE, 139826127904768, 139826130022399, +STORE, 139826127806464, 139826127904767, +SNULL, 139826129997823, 139826130022399, +STORE, 139826127904768, 139826129997823, +STORE, 139826129997824, 139826130022399, +SNULL, 139826129997824, 139826130006015, +STORE, 139826130006016, 139826130022399, +STORE, 139826129997824, 139826130006015, +ERASE, 139826129997824, 139826130006015, +STORE, 139826129997824, 139826130006015, +ERASE, 139826130006016, 139826130022399, +STORE, 139826130006016, 139826130022399, +STORE, 139826124009472, 139826127806463, +SNULL, 139826124009472, 139826125668351, +STORE, 139826125668352, 139826127806463, +STORE, 139826124009472, 139826125668351, +SNULL, 139826127765503, 139826127806463, +STORE, 139826125668352, 139826127765503, +STORE, 139826127765504, 139826127806463, +SNULL, 139826127765504, 139826127790079, +STORE, 139826127790080, 139826127806463, +STORE, 139826127765504, 139826127790079, +ERASE, 139826127765504, 139826127790079, +STORE, 139826127765504, 139826127790079, +ERASE, 139826127790080, 139826127806463, +STORE, 139826127790080, 139826127806463, +STORE, 139826121748480, 139826124009471, +SNULL, 139826121748480, 139826121900031, +STORE, 139826121900032, 139826124009471, +STORE, 139826121748480, 139826121900031, +SNULL, 139826123993087, 139826124009471, +STORE, 139826121900032, 139826123993087, +STORE, 139826123993088, 139826124009471, +SNULL, 139826123993088, 139826124001279, +STORE, 139826124001280, 139826124009471, +STORE, 139826123993088, 139826124001279, +ERASE, 139826123993088, 139826124001279, +STORE, 139826123993088, 139826124001279, +ERASE, 139826124001280, 139826124009471, +STORE, 139826124001280, 139826124009471, +STORE, 139826119626752, 139826121748479, +SNULL, 139826119626752, 139826119643135, +STORE, 139826119643136, 139826121748479, +STORE, 139826119626752, 139826119643135, +SNULL, 139826121740287, 139826121748479, +STORE, 139826119643136, 139826121740287, +STORE, 139826121740288, 139826121748479, +ERASE, 139826121740288, 139826121748479, +STORE, 139826121740288, 139826121748479, +STORE, 139826136834048, 139826136842239, +STORE, 139826117496832, 139826119626751, +SNULL, 139826117496832, 139826117525503, +STORE, 139826117525504, 139826119626751, +STORE, 139826117496832, 139826117525503, +SNULL, 139826119618559, 139826119626751, +STORE, 139826117525504, 139826119618559, +STORE, 139826119618560, 139826119626751, +ERASE, 139826119618560, 139826119626751, +STORE, 139826119618560, 139826119626751, +STORE, 139826115244032, 139826117496831, +SNULL, 139826115244032, 139826115395583, +STORE, 139826115395584, 139826117496831, +STORE, 139826115244032, 139826115395583, +SNULL, 139826117488639, 139826117496831, +STORE, 139826115395584, 139826117488639, +STORE, 139826117488640, 139826117496831, +ERASE, 139826117488640, 139826117496831, +STORE, 139826117488640, 139826117496831, +STORE, 139826113073152, 139826115244031, +SNULL, 139826113073152, 139826113142783, +STORE, 139826113142784, 139826115244031, +STORE, 139826113073152, 139826113142783, +SNULL, 139826115235839, 139826115244031, +STORE, 139826113142784, 139826115235839, +STORE, 139826115235840, 139826115244031, +ERASE, 139826115235840, 139826115244031, +STORE, 139826115235840, 139826115244031, +STORE, 139826109861888, 139826113073151, +SNULL, 139826109861888, 139826110939135, +STORE, 139826110939136, 139826113073151, +STORE, 139826109861888, 139826110939135, +SNULL, 139826113036287, 139826113073151, +STORE, 139826110939136, 139826113036287, +STORE, 139826113036288, 139826113073151, +ERASE, 139826113036288, 139826113073151, +STORE, 139826113036288, 139826113073151, +STORE, 139826107727872, 139826109861887, +SNULL, 139826107727872, 139826107756543, +STORE, 139826107756544, 139826109861887, +STORE, 139826107727872, 139826107756543, +SNULL, 139826109853695, 139826109861887, +STORE, 139826107756544, 139826109853695, +STORE, 139826109853696, 139826109861887, +ERASE, 139826109853696, 139826109861887, +STORE, 139826109853696, 139826109861887, +STORE, 139826105417728, 139826107727871, +SNULL, 139826105417728, 139826105622527, +STORE, 139826105622528, 139826107727871, +STORE, 139826105417728, 139826105622527, +SNULL, 139826107719679, 139826107727871, +STORE, 139826105622528, 139826107719679, +STORE, 139826107719680, 139826107727871, +ERASE, 139826107719680, 139826107727871, +STORE, 139826107719680, 139826107727871, +STORE, 139826136825856, 139826136842239, +STORE, 139826103033856, 139826105417727, +SNULL, 139826103033856, 139826103226367, +STORE, 139826103226368, 139826105417727, +STORE, 139826103033856, 139826103226367, +SNULL, 139826105319423, 139826105417727, +STORE, 139826103226368, 139826105319423, +STORE, 139826105319424, 139826105417727, +ERASE, 139826105319424, 139826105417727, +STORE, 139826105319424, 139826105417727, +STORE, 139826100916224, 139826103033855, +SNULL, 139826100916224, 139826100932607, +STORE, 139826100932608, 139826103033855, +STORE, 139826100916224, 139826100932607, +SNULL, 139826103025663, 139826103033855, +STORE, 139826100932608, 139826103025663, +STORE, 139826103025664, 139826103033855, +ERASE, 139826103025664, 139826103033855, +STORE, 139826103025664, 139826103033855, +STORE, 139826098348032, 139826100916223, +SNULL, 139826098348032, 139826098814975, +STORE, 139826098814976, 139826100916223, +STORE, 139826098348032, 139826098814975, +SNULL, 139826100908031, 139826100916223, +STORE, 139826098814976, 139826100908031, +STORE, 139826100908032, 139826100916223, +ERASE, 139826100908032, 139826100916223, +STORE, 139826100908032, 139826100916223, +STORE, 139826096234496, 139826098348031, +SNULL, 139826096234496, 139826096246783, +STORE, 139826096246784, 139826098348031, +STORE, 139826096234496, 139826096246783, +SNULL, 139826098339839, 139826098348031, +STORE, 139826096246784, 139826098339839, +STORE, 139826098339840, 139826098348031, +ERASE, 139826098339840, 139826098348031, +STORE, 139826098339840, 139826098348031, +STORE, 139826094055424, 139826096234495, +SNULL, 139826094055424, 139826094133247, +STORE, 139826094133248, 139826096234495, +STORE, 139826094055424, 139826094133247, +SNULL, 139826096226303, 139826096234495, +STORE, 139826094133248, 139826096226303, +STORE, 139826096226304, 139826096234495, +ERASE, 139826096226304, 139826096234495, +STORE, 139826096226304, 139826096234495, +STORE, 139826136817664, 139826136842239, +STORE, 139826091937792, 139826094055423, +SNULL, 139826091937792, 139826091954175, +STORE, 139826091954176, 139826094055423, +STORE, 139826091937792, 139826091954175, +SNULL, 139826094047231, 139826094055423, +STORE, 139826091954176, 139826094047231, +STORE, 139826094047232, 139826094055423, +ERASE, 139826094047232, 139826094055423, +STORE, 139826094047232, 139826094055423, +STORE, 139826136809472, 139826136842239, +SNULL, 139826127781887, 139826127790079, +STORE, 139826127765504, 139826127781887, +STORE, 139826127781888, 139826127790079, +SNULL, 139826094051327, 139826094055423, +STORE, 139826094047232, 139826094051327, +STORE, 139826094051328, 139826094055423, +SNULL, 139826096230399, 139826096234495, +STORE, 139826096226304, 139826096230399, +STORE, 139826096230400, 139826096234495, +SNULL, 139826098343935, 139826098348031, +STORE, 139826098339840, 139826098343935, +STORE, 139826098343936, 139826098348031, +SNULL, 139826130001919, 139826130006015, +STORE, 139826129997824, 139826130001919, +STORE, 139826130001920, 139826130006015, +SNULL, 139826100912127, 139826100916223, +STORE, 139826100908032, 139826100912127, +STORE, 139826100912128, 139826100916223, +SNULL, 139826103029759, 139826103033855, +STORE, 139826103025664, 139826103029759, +STORE, 139826103029760, 139826103033855, +SNULL, 139826105413631, 139826105417727, +STORE, 139826105319424, 139826105413631, +STORE, 139826105413632, 139826105417727, +SNULL, 139826107723775, 139826107727871, +STORE, 139826107719680, 139826107723775, +STORE, 139826107723776, 139826107727871, +SNULL, 139826109857791, 139826109861887, +STORE, 139826109853696, 139826109857791, +STORE, 139826109857792, 139826109861887, +SNULL, 139826113044479, 139826113073151, +STORE, 139826113036288, 139826113044479, +STORE, 139826113044480, 139826113073151, +SNULL, 139826115239935, 139826115244031, +STORE, 139826115235840, 139826115239935, +STORE, 139826115239936, 139826115244031, +SNULL, 139826117492735, 139826117496831, +STORE, 139826117488640, 139826117492735, +STORE, 139826117492736, 139826117496831, +SNULL, 139826119622655, 139826119626751, +STORE, 139826119618560, 139826119622655, +STORE, 139826119622656, 139826119626751, +SNULL, 139826121744383, 139826121748479, +STORE, 139826121740288, 139826121744383, +STORE, 139826121744384, 139826121748479, +SNULL, 139826123997183, 139826124001279, +STORE, 139826123993088, 139826123997183, +STORE, 139826123997184, 139826124001279, +SNULL, 139826132398079, 139826132402175, +STORE, 139826132381696, 139826132398079, +STORE, 139826132398080, 139826132402175, +SNULL, 139826134622207, 139826134626303, +STORE, 139826134056960, 139826134622207, +STORE, 139826134622208, 139826134626303, +SNULL, 94077521309695, 94077521313791, +STORE, 94077521305600, 94077521309695, +STORE, 94077521309696, 94077521313791, +SNULL, 139826136875007, 139826136879103, +STORE, 139826136870912, 139826136875007, +STORE, 139826136875008, 139826136879103, +ERASE, 139826136842240, 139826136862719, +STORE, 94077554049024, 94077554184191, +STORE, 139826136543232, 139826136842239, +STORE, 139826136276992, 139826136842239, +STORE, 139826136010752, 139826136842239, +STORE, 139826135744512, 139826136842239, +SNULL, 139826136543231, 139826136842239, +STORE, 139826135744512, 139826136543231, +STORE, 139826136543232, 139826136842239, +SNULL, 139826136543232, 139826136809471, +STORE, 139826136809472, 139826136842239, +STORE, 139826136543232, 139826136809471, + }; + unsigned long set15[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140722061451264, 140737488351231, +SNULL, 140722061455359, 140737488351231, +STORE, 140722061451264, 140722061455359, +STORE, 140722061320192, 140722061455359, +STORE, 94728600248320, 94728600289279, +SNULL, 94728600276991, 94728600289279, +STORE, 94728600248320, 94728600276991, +STORE, 94728600276992, 94728600289279, +ERASE, 94728600276992, 94728600289279, +STORE, 94728600281088, 94728600289279, +STORE, 139906806779904, 139906809032703, +SNULL, 139906806923263, 139906809032703, +STORE, 139906806779904, 139906806923263, +STORE, 139906806923264, 139906809032703, +ERASE, 139906806923264, 139906809032703, +STORE, 139906809020416, 139906809028607, +STORE, 139906809028608, 139906809032703, +STORE, 140722061692928, 140722061697023, +STORE, 140722061680640, 140722061692927, +STORE, 139906809012224, 139906809020415, +STORE, 139906804555776, 139906806779903, +SNULL, 139906806206463, 139906806779903, +STORE, 139906804555776, 139906806206463, +STORE, 139906806206464, 139906806779903, +SNULL, 139906806206464, 139906806775807, +STORE, 139906806775808, 139906806779903, +STORE, 139906806206464, 139906806775807, +ERASE, 139906806206464, 139906806775807, +STORE, 139906806206464, 139906806775807, +ERASE, 139906806775808, 139906806779903, +STORE, 139906806775808, 139906806779903, +STORE, 139906808991744, 139906809012223, +STORE, 139906802171904, 139906804555775, +SNULL, 139906802171904, 139906802438143, +STORE, 139906802438144, 139906804555775, +STORE, 139906802171904, 139906802438143, +SNULL, 139906804531199, 139906804555775, +STORE, 139906802438144, 139906804531199, +STORE, 139906804531200, 139906804555775, +SNULL, 139906804531200, 139906804551679, +STORE, 139906804551680, 139906804555775, +STORE, 139906804531200, 139906804551679, +ERASE, 139906804531200, 139906804551679, +STORE, 139906804531200, 139906804551679, +ERASE, 139906804551680, 139906804555775, +STORE, 139906804551680, 139906804555775, +STORE, 139906799955968, 139906802171903, +SNULL, 139906799955968, 139906800054271, +STORE, 139906800054272, 139906802171903, +STORE, 139906799955968, 139906800054271, +SNULL, 139906802147327, 139906802171903, +STORE, 139906800054272, 139906802147327, +STORE, 139906802147328, 139906802171903, +SNULL, 139906802147328, 139906802155519, +STORE, 139906802155520, 139906802171903, +STORE, 139906802147328, 139906802155519, +ERASE, 139906802147328, 139906802155519, +STORE, 139906802147328, 139906802155519, +ERASE, 139906802155520, 139906802171903, +STORE, 139906802155520, 139906802171903, +STORE, 139906796158976, 139906799955967, +SNULL, 139906796158976, 139906797817855, +STORE, 139906797817856, 139906799955967, +STORE, 139906796158976, 139906797817855, +SNULL, 139906799915007, 139906799955967, +STORE, 139906797817856, 139906799915007, +STORE, 139906799915008, 139906799955967, +SNULL, 139906799915008, 139906799939583, +STORE, 139906799939584, 139906799955967, +STORE, 139906799915008, 139906799939583, +ERASE, 139906799915008, 139906799939583, +STORE, 139906799915008, 139906799939583, +ERASE, 139906799939584, 139906799955967, +STORE, 139906799939584, 139906799955967, +STORE, 139906793897984, 139906796158975, +SNULL, 139906793897984, 139906794049535, +STORE, 139906794049536, 139906796158975, +STORE, 139906793897984, 139906794049535, +SNULL, 139906796142591, 139906796158975, +STORE, 139906794049536, 139906796142591, +STORE, 139906796142592, 139906796158975, +SNULL, 139906796142592, 139906796150783, +STORE, 139906796150784, 139906796158975, +STORE, 139906796142592, 139906796150783, +ERASE, 139906796142592, 139906796150783, +STORE, 139906796142592, 139906796150783, +ERASE, 139906796150784, 139906796158975, +STORE, 139906796150784, 139906796158975, +STORE, 139906791776256, 139906793897983, +SNULL, 139906791776256, 139906791792639, +STORE, 139906791792640, 139906793897983, +STORE, 139906791776256, 139906791792639, +SNULL, 139906793889791, 139906793897983, +STORE, 139906791792640, 139906793889791, +STORE, 139906793889792, 139906793897983, +ERASE, 139906793889792, 139906793897983, +STORE, 139906793889792, 139906793897983, +STORE, 139906808983552, 139906808991743, +STORE, 139906789646336, 139906791776255, +SNULL, 139906789646336, 139906789675007, +STORE, 139906789675008, 139906791776255, +STORE, 139906789646336, 139906789675007, +SNULL, 139906791768063, 139906791776255, +STORE, 139906789675008, 139906791768063, +STORE, 139906791768064, 139906791776255, +ERASE, 139906791768064, 139906791776255, +STORE, 139906791768064, 139906791776255, +STORE, 139906787393536, 139906789646335, +SNULL, 139906787393536, 139906787545087, +STORE, 139906787545088, 139906789646335, +STORE, 139906787393536, 139906787545087, +SNULL, 139906789638143, 139906789646335, +STORE, 139906787545088, 139906789638143, +STORE, 139906789638144, 139906789646335, +ERASE, 139906789638144, 139906789646335, +STORE, 139906789638144, 139906789646335, +STORE, 139906785222656, 139906787393535, +SNULL, 139906785222656, 139906785292287, +STORE, 139906785292288, 139906787393535, +STORE, 139906785222656, 139906785292287, +SNULL, 139906787385343, 139906787393535, +STORE, 139906785292288, 139906787385343, +STORE, 139906787385344, 139906787393535, +ERASE, 139906787385344, 139906787393535, +STORE, 139906787385344, 139906787393535, +STORE, 139906782011392, 139906785222655, +SNULL, 139906782011392, 139906783088639, +STORE, 139906783088640, 139906785222655, +STORE, 139906782011392, 139906783088639, +SNULL, 139906785185791, 139906785222655, +STORE, 139906783088640, 139906785185791, +STORE, 139906785185792, 139906785222655, +ERASE, 139906785185792, 139906785222655, +STORE, 139906785185792, 139906785222655, +STORE, 139906779877376, 139906782011391, +SNULL, 139906779877376, 139906779906047, +STORE, 139906779906048, 139906782011391, +STORE, 139906779877376, 139906779906047, +SNULL, 139906782003199, 139906782011391, +STORE, 139906779906048, 139906782003199, +STORE, 139906782003200, 139906782011391, +ERASE, 139906782003200, 139906782011391, +STORE, 139906782003200, 139906782011391, +STORE, 139906777567232, 139906779877375, +SNULL, 139906777567232, 139906777772031, +STORE, 139906777772032, 139906779877375, +STORE, 139906777567232, 139906777772031, +SNULL, 139906779869183, 139906779877375, +STORE, 139906777772032, 139906779869183, +STORE, 139906779869184, 139906779877375, +ERASE, 139906779869184, 139906779877375, +STORE, 139906779869184, 139906779877375, +STORE, 139906808975360, 139906808991743, +STORE, 139906775183360, 139906777567231, +SNULL, 139906775183360, 139906775375871, +STORE, 139906775375872, 139906777567231, +STORE, 139906775183360, 139906775375871, +SNULL, 139906777468927, 139906777567231, +STORE, 139906775375872, 139906777468927, +STORE, 139906777468928, 139906777567231, +ERASE, 139906777468928, 139906777567231, +STORE, 139906777468928, 139906777567231, +STORE, 139906773065728, 139906775183359, +SNULL, 139906773065728, 139906773082111, +STORE, 139906773082112, 139906775183359, +STORE, 139906773065728, 139906773082111, +SNULL, 139906775175167, 139906775183359, +STORE, 139906773082112, 139906775175167, +STORE, 139906775175168, 139906775183359, +ERASE, 139906775175168, 139906775183359, +STORE, 139906775175168, 139906775183359, +STORE, 139906770497536, 139906773065727, +SNULL, 139906770497536, 139906770964479, +STORE, 139906770964480, 139906773065727, +STORE, 139906770497536, 139906770964479, +SNULL, 139906773057535, 139906773065727, +STORE, 139906770964480, 139906773057535, +STORE, 139906773057536, 139906773065727, +ERASE, 139906773057536, 139906773065727, +STORE, 139906773057536, 139906773065727, +STORE, 139906768384000, 139906770497535, +SNULL, 139906768384000, 139906768396287, +STORE, 139906768396288, 139906770497535, +STORE, 139906768384000, 139906768396287, +SNULL, 139906770489343, 139906770497535, +STORE, 139906768396288, 139906770489343, +STORE, 139906770489344, 139906770497535, +ERASE, 139906770489344, 139906770497535, +STORE, 139906770489344, 139906770497535, +STORE, 139906766204928, 139906768383999, +SNULL, 139906766204928, 139906766282751, +STORE, 139906766282752, 139906768383999, +STORE, 139906766204928, 139906766282751, +SNULL, 139906768375807, 139906768383999, +STORE, 139906766282752, 139906768375807, +STORE, 139906768375808, 139906768383999, +ERASE, 139906768375808, 139906768383999, +STORE, 139906768375808, 139906768383999, +STORE, 139906808967168, 139906808991743, +STORE, 139906764087296, 139906766204927, +SNULL, 139906764087296, 139906764103679, +STORE, 139906764103680, 139906766204927, +STORE, 139906764087296, 139906764103679, +SNULL, 139906766196735, 139906766204927, +STORE, 139906764103680, 139906766196735, +STORE, 139906766196736, 139906766204927, +ERASE, 139906766196736, 139906766204927, +STORE, 139906766196736, 139906766204927, +STORE, 139906808958976, 139906808991743, +SNULL, 139906799931391, 139906799939583, +STORE, 139906799915008, 139906799931391, +STORE, 139906799931392, 139906799939583, +SNULL, 139906766200831, 139906766204927, +STORE, 139906766196736, 139906766200831, +STORE, 139906766200832, 139906766204927, +SNULL, 139906768379903, 139906768383999, +STORE, 139906768375808, 139906768379903, +STORE, 139906768379904, 139906768383999, +SNULL, 139906770493439, 139906770497535, +STORE, 139906770489344, 139906770493439, +STORE, 139906770493440, 139906770497535, +SNULL, 139906802151423, 139906802155519, +STORE, 139906802147328, 139906802151423, +STORE, 139906802151424, 139906802155519, +SNULL, 139906773061631, 139906773065727, +STORE, 139906773057536, 139906773061631, +STORE, 139906773061632, 139906773065727, +SNULL, 139906775179263, 139906775183359, +STORE, 139906775175168, 139906775179263, +STORE, 139906775179264, 139906775183359, +SNULL, 139906777563135, 139906777567231, +STORE, 139906777468928, 139906777563135, +STORE, 139906777563136, 139906777567231, +SNULL, 139906779873279, 139906779877375, +STORE, 139906779869184, 139906779873279, +STORE, 139906779873280, 139906779877375, +SNULL, 139906782007295, 139906782011391, +STORE, 139906782003200, 139906782007295, +STORE, 139906782007296, 139906782011391, +SNULL, 139906785193983, 139906785222655, +STORE, 139906785185792, 139906785193983, +STORE, 139906785193984, 139906785222655, +SNULL, 139906787389439, 139906787393535, +STORE, 139906787385344, 139906787389439, +STORE, 139906787389440, 139906787393535, +SNULL, 139906789642239, 139906789646335, +STORE, 139906789638144, 139906789642239, +STORE, 139906789642240, 139906789646335, +SNULL, 139906791772159, 139906791776255, +STORE, 139906791768064, 139906791772159, +STORE, 139906791772160, 139906791776255, +SNULL, 139906793893887, 139906793897983, +STORE, 139906793889792, 139906793893887, +STORE, 139906793893888, 139906793897983, +SNULL, 139906796146687, 139906796150783, +STORE, 139906796142592, 139906796146687, +STORE, 139906796146688, 139906796150783, +SNULL, 139906804547583, 139906804551679, +STORE, 139906804531200, 139906804547583, +STORE, 139906804547584, 139906804551679, +SNULL, 139906806771711, 139906806775807, +STORE, 139906806206464, 139906806771711, +STORE, 139906806771712, 139906806775807, +SNULL, 94728600285183, 94728600289279, +STORE, 94728600281088, 94728600285183, +STORE, 94728600285184, 94728600289279, +SNULL, 139906809024511, 139906809028607, +STORE, 139906809020416, 139906809024511, +STORE, 139906809024512, 139906809028607, +ERASE, 139906808991744, 139906809012223, +STORE, 94728620138496, 94728620273663, +STORE, 139906808692736, 139906808991743, +STORE, 139906808426496, 139906808991743, +STORE, 139906808160256, 139906808991743, +STORE, 139906807894016, 139906808991743, +SNULL, 139906808692735, 139906808991743, +STORE, 139906807894016, 139906808692735, +STORE, 139906808692736, 139906808991743, +SNULL, 139906808692736, 139906808958975, +STORE, 139906808958976, 139906808991743, +STORE, 139906808692736, 139906808958975, + }; + + unsigned long set16[] = { +STORE, 94174808662016, 94174809321471, +STORE, 94174811414528, 94174811426815, +STORE, 94174811426816, 94174811430911, +STORE, 94174811430912, 94174811443199, +STORE, 94174841700352, 94174841835519, +STORE, 140173257838592, 140173259497471, +STORE, 140173259497472, 140173261594623, +STORE, 140173261594624, 140173261611007, +STORE, 140173261611008, 140173261619199, +STORE, 140173261619200, 140173261635583, +STORE, 140173261635584, 140173261778943, +STORE, 140173263863808, 140173263871999, +STORE, 140173263876096, 140173263880191, +STORE, 140173263880192, 140173263884287, +STORE, 140173263884288, 140173263888383, +STORE, 140729801007104, 140729801142271, +STORE, 140729801617408, 140729801629695, +STORE, 140729801629696, 140729801633791, +STORE, 140737488347136, 140737488351231, +STORE, 140728166858752, 140737488351231, +SNULL, 140728166862847, 140737488351231, +STORE, 140728166858752, 140728166862847, +STORE, 140728166727680, 140728166862847, +STORE, 93912949866496, 93912950337535, +SNULL, 93912950288383, 93912950337535, +STORE, 93912949866496, 93912950288383, +STORE, 93912950288384, 93912950337535, +ERASE, 93912950288384, 93912950337535, +STORE, 93912950292480, 93912950337535, +STORE, 139921863385088, 139921865637887, +SNULL, 139921863528447, 139921865637887, +STORE, 139921863385088, 139921863528447, +STORE, 139921863528448, 139921865637887, +ERASE, 139921863528448, 139921865637887, +STORE, 139921865625600, 139921865633791, +STORE, 139921865633792, 139921865637887, +STORE, 140728167899136, 140728167903231, +STORE, 140728167886848, 140728167899135, +STORE, 139921865601024, 139921865625599, +STORE, 139921865592832, 139921865601023, +STORE, 139921861251072, 139921863385087, +SNULL, 139921861251072, 139921861279743, +STORE, 139921861279744, 139921863385087, +STORE, 139921861251072, 139921861279743, +SNULL, 139921863376895, 139921863385087, +STORE, 139921861279744, 139921863376895, +STORE, 139921863376896, 139921863385087, +ERASE, 139921863376896, 139921863385087, +STORE, 139921863376896, 139921863385087, +STORE, 139921858867200, 139921861251071, +SNULL, 139921858867200, 139921859133439, +STORE, 139921859133440, 139921861251071, +STORE, 139921858867200, 139921859133439, +SNULL, 139921861226495, 139921861251071, +STORE, 139921859133440, 139921861226495, +STORE, 139921861226496, 139921861251071, +SNULL, 139921861226496, 139921861246975, +STORE, 139921861246976, 139921861251071, +STORE, 139921861226496, 139921861246975, +ERASE, 139921861226496, 139921861246975, +STORE, 139921861226496, 139921861246975, +ERASE, 139921861246976, 139921861251071, +STORE, 139921861246976, 139921861251071, +STORE, 139921856675840, 139921858867199, +SNULL, 139921856675840, 139921856765951, +STORE, 139921856765952, 139921858867199, +STORE, 139921856675840, 139921856765951, +SNULL, 139921858859007, 139921858867199, +STORE, 139921856765952, 139921858859007, +STORE, 139921858859008, 139921858867199, +ERASE, 139921858859008, 139921858867199, +STORE, 139921858859008, 139921858867199, +STORE, 139921854414848, 139921856675839, +SNULL, 139921854414848, 139921854566399, +STORE, 139921854566400, 139921856675839, +STORE, 139921854414848, 139921854566399, +SNULL, 139921856659455, 139921856675839, +STORE, 139921854566400, 139921856659455, +STORE, 139921856659456, 139921856675839, +SNULL, 139921856659456, 139921856667647, +STORE, 139921856667648, 139921856675839, +STORE, 139921856659456, 139921856667647, +ERASE, 139921856659456, 139921856667647, +STORE, 139921856659456, 139921856667647, +ERASE, 139921856667648, 139921856675839, +STORE, 139921856667648, 139921856675839, +STORE, 139921852284928, 139921854414847, +SNULL, 139921852284928, 139921852313599, +STORE, 139921852313600, 139921854414847, +STORE, 139921852284928, 139921852313599, +SNULL, 139921854406655, 139921854414847, +STORE, 139921852313600, 139921854406655, +STORE, 139921854406656, 139921854414847, +ERASE, 139921854406656, 139921854414847, +STORE, 139921854406656, 139921854414847, +STORE, 139921850068992, 139921852284927, +SNULL, 139921850068992, 139921850167295, +STORE, 139921850167296, 139921852284927, +STORE, 139921850068992, 139921850167295, +SNULL, 139921852260351, 139921852284927, +STORE, 139921850167296, 139921852260351, +STORE, 139921852260352, 139921852284927, +SNULL, 139921852260352, 139921852268543, +STORE, 139921852268544, 139921852284927, +STORE, 139921852260352, 139921852268543, +ERASE, 139921852260352, 139921852268543, +STORE, 139921852260352, 139921852268543, +ERASE, 139921852268544, 139921852284927, +STORE, 139921852268544, 139921852284927, +STORE, 139921865584640, 139921865601023, +STORE, 139921846272000, 139921850068991, +SNULL, 139921846272000, 139921847930879, +STORE, 139921847930880, 139921850068991, +STORE, 139921846272000, 139921847930879, +SNULL, 139921850028031, 139921850068991, +STORE, 139921847930880, 139921850028031, +STORE, 139921850028032, 139921850068991, +SNULL, 139921850028032, 139921850052607, +STORE, 139921850052608, 139921850068991, +STORE, 139921850028032, 139921850052607, +ERASE, 139921850028032, 139921850052607, +STORE, 139921850028032, 139921850052607, +ERASE, 139921850052608, 139921850068991, +STORE, 139921850052608, 139921850068991, +STORE, 139921844154368, 139921846271999, +SNULL, 139921844154368, 139921844170751, +STORE, 139921844170752, 139921846271999, +STORE, 139921844154368, 139921844170751, +SNULL, 139921846263807, 139921846271999, +STORE, 139921844170752, 139921846263807, +STORE, 139921846263808, 139921846271999, +ERASE, 139921846263808, 139921846271999, +STORE, 139921846263808, 139921846271999, +STORE, 139921842036736, 139921844154367, +SNULL, 139921842036736, 139921842053119, +STORE, 139921842053120, 139921844154367, +STORE, 139921842036736, 139921842053119, +SNULL, 139921844146175, 139921844154367, +STORE, 139921842053120, 139921844146175, +STORE, 139921844146176, 139921844154367, +ERASE, 139921844146176, 139921844154367, +STORE, 139921844146176, 139921844154367, +STORE, 139921839468544, 139921842036735, +SNULL, 139921839468544, 139921839935487, +STORE, 139921839935488, 139921842036735, +STORE, 139921839468544, 139921839935487, +SNULL, 139921842028543, 139921842036735, +STORE, 139921839935488, 139921842028543, +STORE, 139921842028544, 139921842036735, +ERASE, 139921842028544, 139921842036735, +STORE, 139921842028544, 139921842036735, +STORE, 139921837355008, 139921839468543, +SNULL, 139921837355008, 139921837367295, +STORE, 139921837367296, 139921839468543, +STORE, 139921837355008, 139921837367295, +SNULL, 139921839460351, 139921839468543, +STORE, 139921837367296, 139921839460351, +STORE, 139921839460352, 139921839468543, +ERASE, 139921839460352, 139921839468543, +STORE, 139921839460352, 139921839468543, +STORE, 139921865576448, 139921865601023, +STORE, 139921865564160, 139921865601023, +SNULL, 139921850044415, 139921850052607, +STORE, 139921850028032, 139921850044415, +STORE, 139921850044416, 139921850052607, +SNULL, 139921839464447, 139921839468543, +STORE, 139921839460352, 139921839464447, +STORE, 139921839464448, 139921839468543, +SNULL, 139921852264447, 139921852268543, +STORE, 139921852260352, 139921852264447, +STORE, 139921852264448, 139921852268543, +SNULL, 139921842032639, 139921842036735, +STORE, 139921842028544, 139921842032639, +STORE, 139921842032640, 139921842036735, +SNULL, 139921844150271, 139921844154367, +STORE, 139921844146176, 139921844150271, +STORE, 139921844150272, 139921844154367, +SNULL, 139921846267903, 139921846271999, +STORE, 139921846263808, 139921846267903, +STORE, 139921846267904, 139921846271999, +SNULL, 139921854410751, 139921854414847, +STORE, 139921854406656, 139921854410751, +STORE, 139921854410752, 139921854414847, +SNULL, 139921856663551, 139921856667647, +STORE, 139921856659456, 139921856663551, +STORE, 139921856663552, 139921856667647, +SNULL, 139921858863103, 139921858867199, +STORE, 139921858859008, 139921858863103, +STORE, 139921858863104, 139921858867199, +SNULL, 139921861242879, 139921861246975, +STORE, 139921861226496, 139921861242879, +STORE, 139921861242880, 139921861246975, +SNULL, 139921863380991, 139921863385087, +STORE, 139921863376896, 139921863380991, +STORE, 139921863380992, 139921863385087, +SNULL, 93912950333439, 93912950337535, +STORE, 93912950292480, 93912950333439, +STORE, 93912950333440, 93912950337535, +SNULL, 139921865629695, 139921865633791, +STORE, 139921865625600, 139921865629695, +STORE, 139921865629696, 139921865633791, +ERASE, 139921865601024, 139921865625599, +STORE, 93912968110080, 93912968245247, +STORE, 139921828913152, 139921837355007, +STORE, 139921865621504, 139921865625599, +STORE, 139921865617408, 139921865621503, +STORE, 139921865613312, 139921865617407, +STORE, 139921865547776, 139921865564159, + }; + + unsigned long set17[] = { +STORE, 94397057224704, 94397057646591, +STORE, 94397057650688, 94397057691647, +STORE, 94397057691648, 94397057695743, +STORE, 94397075271680, 94397075406847, +STORE, 139953169051648, 139953169063935, +STORE, 139953169063936, 139953171156991, +STORE, 139953171156992, 139953171161087, +STORE, 139953171161088, 139953171165183, +STORE, 139953171165184, 139953171632127, +STORE, 139953171632128, 139953173725183, +STORE, 139953173725184, 139953173729279, +STORE, 139953173729280, 139953173733375, +STORE, 139953173733376, 139953173749759, +STORE, 139953173749760, 139953175842815, +STORE, 139953175842816, 139953175846911, +STORE, 139953175846912, 139953175851007, +STORE, 139953175851008, 139953175867391, +STORE, 139953175867392, 139953177960447, +STORE, 139953177960448, 139953177964543, +STORE, 139953177964544, 139953177968639, +STORE, 139953177968640, 139953179627519, +STORE, 139953179627520, 139953181724671, +STORE, 139953181724672, 139953181741055, +STORE, 139953181741056, 139953181749247, +STORE, 139953181749248, 139953181765631, +STORE, 139953181765632, 139953181863935, +STORE, 139953181863936, 139953183956991, +STORE, 139953183956992, 139953183961087, +STORE, 139953183961088, 139953183965183, +STORE, 139953183965184, 139953183981567, +STORE, 139953183981568, 139953184010239, +STORE, 139953184010240, 139953186103295, +STORE, 139953186103296, 139953186107391, +STORE, 139953186107392, 139953186111487, +STORE, 139953186111488, 139953186263039, +STORE, 139953186263040, 139953188356095, +STORE, 139953188356096, 139953188360191, +STORE, 139953188360192, 139953188364287, +STORE, 139953188364288, 139953188372479, +STORE, 139953188372480, 139953188462591, +STORE, 139953188462592, 139953190555647, +STORE, 139953190555648, 139953190559743, +STORE, 139953190559744, 139953190563839, +STORE, 139953190563840, 139953190830079, +STORE, 139953190830080, 139953192923135, +STORE, 139953192923136, 139953192939519, +STORE, 139953192939520, 139953192943615, +STORE, 139953192943616, 139953192947711, +STORE, 139953192947712, 139953192976383, +STORE, 139953192976384, 139953195073535, +STORE, 139953195073536, 139953195077631, +STORE, 139953195077632, 139953195081727, +STORE, 139953195081728, 139953195225087, +STORE, 139953197281280, 139953197318143, +STORE, 139953197322240, 139953197326335, +STORE, 139953197326336, 139953197330431, +STORE, 139953197330432, 139953197334527, +STORE, 140720477511680, 140720477646847, +STORE, 140720478302208, 140720478314495, +STORE, 140720478314496, 140720478318591, + }; + unsigned long set18[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140724953673728, 140737488351231, +SNULL, 140724953677823, 140737488351231, +STORE, 140724953673728, 140724953677823, +STORE, 140724953542656, 140724953677823, +STORE, 94675199266816, 94675199311871, +SNULL, 94675199303679, 94675199311871, +STORE, 94675199266816, 94675199303679, +STORE, 94675199303680, 94675199311871, +ERASE, 94675199303680, 94675199311871, +STORE, 94675199303680, 94675199311871, +STORE, 140222970605568, 140222972858367, +SNULL, 140222970748927, 140222972858367, +STORE, 140222970605568, 140222970748927, +STORE, 140222970748928, 140222972858367, +ERASE, 140222970748928, 140222972858367, +STORE, 140222972846080, 140222972854271, +STORE, 140222972854272, 140222972858367, +STORE, 140724954365952, 140724954370047, +STORE, 140724954353664, 140724954365951, +STORE, 140222972841984, 140222972846079, +STORE, 140222972833792, 140222972841983, +STORE, 140222968475648, 140222970605567, +SNULL, 140222968475648, 140222968504319, +STORE, 140222968504320, 140222970605567, +STORE, 140222968475648, 140222968504319, +SNULL, 140222970597375, 140222970605567, +STORE, 140222968504320, 140222970597375, +STORE, 140222970597376, 140222970605567, +ERASE, 140222970597376, 140222970605567, +STORE, 140222970597376, 140222970605567, + }; + unsigned long set19[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140725182459904, 140737488351231, +SNULL, 140725182463999, 140737488351231, +STORE, 140725182459904, 140725182463999, +STORE, 140725182328832, 140725182463999, +STORE, 94730166636544, 94730166763519, +SNULL, 94730166747135, 94730166763519, +STORE, 94730166636544, 94730166747135, +STORE, 94730166747136, 94730166763519, +ERASE, 94730166747136, 94730166763519, +STORE, 94730166751232, 94730166763519, +STORE, 140656834555904, 140656836808703, +SNULL, 140656834699263, 140656836808703, +STORE, 140656834555904, 140656834699263, +STORE, 140656834699264, 140656836808703, +ERASE, 140656834699264, 140656836808703, +STORE, 140656836796416, 140656836804607, +STORE, 140656836804608, 140656836808703, +STORE, 140725183389696, 140725183393791, +STORE, 140725183377408, 140725183389695, +STORE, 140656836788224, 140656836796415, +STORE, 140656832331776, 140656834555903, +SNULL, 140656833982463, 140656834555903, +STORE, 140656832331776, 140656833982463, +STORE, 140656833982464, 140656834555903, +SNULL, 140656833982464, 140656834551807, +STORE, 140656834551808, 140656834555903, +STORE, 140656833982464, 140656834551807, +ERASE, 140656833982464, 140656834551807, +STORE, 140656833982464, 140656834551807, +ERASE, 140656834551808, 140656834555903, +STORE, 140656834551808, 140656834555903, +STORE, 140656836763648, 140656836788223, +STORE, 140656830070784, 140656832331775, +SNULL, 140656830070784, 140656830222335, +STORE, 140656830222336, 140656832331775, +STORE, 140656830070784, 140656830222335, +SNULL, 140656832315391, 140656832331775, +STORE, 140656830222336, 140656832315391, +STORE, 140656832315392, 140656832331775, +SNULL, 140656832315392, 140656832323583, +STORE, 140656832323584, 140656832331775, +STORE, 140656832315392, 140656832323583, +ERASE, 140656832315392, 140656832323583, +STORE, 140656832315392, 140656832323583, +ERASE, 140656832323584, 140656832331775, +STORE, 140656832323584, 140656832331775, +STORE, 140656827940864, 140656830070783, +SNULL, 140656827940864, 140656827969535, +STORE, 140656827969536, 140656830070783, +STORE, 140656827940864, 140656827969535, +SNULL, 140656830062591, 140656830070783, +STORE, 140656827969536, 140656830062591, +STORE, 140656830062592, 140656830070783, +ERASE, 140656830062592, 140656830070783, +STORE, 140656830062592, 140656830070783, +STORE, 140656825724928, 140656827940863, +SNULL, 140656825724928, 140656825823231, +STORE, 140656825823232, 140656827940863, +STORE, 140656825724928, 140656825823231, +SNULL, 140656827916287, 140656827940863, +STORE, 140656825823232, 140656827916287, +STORE, 140656827916288, 140656827940863, +SNULL, 140656827916288, 140656827924479, +STORE, 140656827924480, 140656827940863, +STORE, 140656827916288, 140656827924479, +ERASE, 140656827916288, 140656827924479, +STORE, 140656827916288, 140656827924479, +ERASE, 140656827924480, 140656827940863, +STORE, 140656827924480, 140656827940863, +STORE, 140656821927936, 140656825724927, +SNULL, 140656821927936, 140656823586815, +STORE, 140656823586816, 140656825724927, +STORE, 140656821927936, 140656823586815, +SNULL, 140656825683967, 140656825724927, +STORE, 140656823586816, 140656825683967, +STORE, 140656825683968, 140656825724927, +SNULL, 140656825683968, 140656825708543, +STORE, 140656825708544, 140656825724927, +STORE, 140656825683968, 140656825708543, +ERASE, 140656825683968, 140656825708543, +STORE, 140656825683968, 140656825708543, +ERASE, 140656825708544, 140656825724927, +STORE, 140656825708544, 140656825724927, +STORE, 140656819806208, 140656821927935, +SNULL, 140656819806208, 140656819822591, +STORE, 140656819822592, 140656821927935, +STORE, 140656819806208, 140656819822591, +SNULL, 140656821919743, 140656821927935, +STORE, 140656819822592, 140656821919743, +STORE, 140656821919744, 140656821927935, +ERASE, 140656821919744, 140656821927935, +STORE, 140656821919744, 140656821927935, +STORE, 140656836755456, 140656836763647, +STORE, 140656817553408, 140656819806207, +SNULL, 140656817553408, 140656817704959, +STORE, 140656817704960, 140656819806207, +STORE, 140656817553408, 140656817704959, +SNULL, 140656819798015, 140656819806207, +STORE, 140656817704960, 140656819798015, +STORE, 140656819798016, 140656819806207, +ERASE, 140656819798016, 140656819806207, +STORE, 140656819798016, 140656819806207, +STORE, 140656815382528, 140656817553407, +SNULL, 140656815382528, 140656815452159, +STORE, 140656815452160, 140656817553407, +STORE, 140656815382528, 140656815452159, +SNULL, 140656817545215, 140656817553407, +STORE, 140656815452160, 140656817545215, +STORE, 140656817545216, 140656817553407, +ERASE, 140656817545216, 140656817553407, +STORE, 140656817545216, 140656817553407, +STORE, 140656812171264, 140656815382527, +SNULL, 140656812171264, 140656813248511, +STORE, 140656813248512, 140656815382527, +STORE, 140656812171264, 140656813248511, +SNULL, 140656815345663, 140656815382527, +STORE, 140656813248512, 140656815345663, +STORE, 140656815345664, 140656815382527, +ERASE, 140656815345664, 140656815382527, +STORE, 140656815345664, 140656815382527, +STORE, 140656810037248, 140656812171263, +SNULL, 140656810037248, 140656810065919, +STORE, 140656810065920, 140656812171263, +STORE, 140656810037248, 140656810065919, +SNULL, 140656812163071, 140656812171263, +STORE, 140656810065920, 140656812163071, +STORE, 140656812163072, 140656812171263, +ERASE, 140656812163072, 140656812171263, +STORE, 140656812163072, 140656812171263, +STORE, 140656807727104, 140656810037247, +SNULL, 140656807727104, 140656807931903, +STORE, 140656807931904, 140656810037247, +STORE, 140656807727104, 140656807931903, +SNULL, 140656810029055, 140656810037247, +STORE, 140656807931904, 140656810029055, +STORE, 140656810029056, 140656810037247, +ERASE, 140656810029056, 140656810037247, +STORE, 140656810029056, 140656810037247, +STORE, 140656805343232, 140656807727103, +SNULL, 140656805343232, 140656805535743, +STORE, 140656805535744, 140656807727103, +STORE, 140656805343232, 140656805535743, +SNULL, 140656807628799, 140656807727103, +STORE, 140656805535744, 140656807628799, +STORE, 140656807628800, 140656807727103, +ERASE, 140656807628800, 140656807727103, +STORE, 140656807628800, 140656807727103, +STORE, 140656836747264, 140656836763647, +STORE, 140656802775040, 140656805343231, +SNULL, 140656802775040, 140656803241983, +STORE, 140656803241984, 140656805343231, +STORE, 140656802775040, 140656803241983, +SNULL, 140656805335039, 140656805343231, +STORE, 140656803241984, 140656805335039, +STORE, 140656805335040, 140656805343231, +ERASE, 140656805335040, 140656805343231, +STORE, 140656805335040, 140656805343231, +STORE, 140656800661504, 140656802775039, +SNULL, 140656800661504, 140656800673791, +STORE, 140656800673792, 140656802775039, +STORE, 140656800661504, 140656800673791, +SNULL, 140656802766847, 140656802775039, +STORE, 140656800673792, 140656802766847, +STORE, 140656802766848, 140656802775039, +ERASE, 140656802766848, 140656802775039, +STORE, 140656802766848, 140656802775039, +STORE, 140656798482432, 140656800661503, +SNULL, 140656798482432, 140656798560255, +STORE, 140656798560256, 140656800661503, +STORE, 140656798482432, 140656798560255, +SNULL, 140656800653311, 140656800661503, +STORE, 140656798560256, 140656800653311, +STORE, 140656800653312, 140656800661503, +ERASE, 140656800653312, 140656800661503, +STORE, 140656800653312, 140656800661503, +STORE, 140656796364800, 140656798482431, +SNULL, 140656796364800, 140656796381183, +STORE, 140656796381184, 140656798482431, +STORE, 140656796364800, 140656796381183, +SNULL, 140656798474239, 140656798482431, +STORE, 140656796381184, 140656798474239, +STORE, 140656798474240, 140656798482431, +ERASE, 140656798474240, 140656798482431, +STORE, 140656798474240, 140656798482431, +STORE, 140656836739072, 140656836763647, +STORE, 140656836726784, 140656836763647, +SNULL, 140656825700351, 140656825708543, +STORE, 140656825683968, 140656825700351, +STORE, 140656825700352, 140656825708543, +SNULL, 140656798478335, 140656798482431, +STORE, 140656798474240, 140656798478335, +STORE, 140656798478336, 140656798482431, +SNULL, 140656800657407, 140656800661503, +STORE, 140656800653312, 140656800657407, +STORE, 140656800657408, 140656800661503, +SNULL, 140656802770943, 140656802775039, +STORE, 140656802766848, 140656802770943, +STORE, 140656802770944, 140656802775039, +SNULL, 140656827920383, 140656827924479, +STORE, 140656827916288, 140656827920383, +STORE, 140656827920384, 140656827924479, +SNULL, 140656805339135, 140656805343231, +STORE, 140656805335040, 140656805339135, +STORE, 140656805339136, 140656805343231, +SNULL, 140656807723007, 140656807727103, +STORE, 140656807628800, 140656807723007, +STORE, 140656807723008, 140656807727103, +SNULL, 140656810033151, 140656810037247, +STORE, 140656810029056, 140656810033151, +STORE, 140656810033152, 140656810037247, +SNULL, 140656812167167, 140656812171263, +STORE, 140656812163072, 140656812167167, +STORE, 140656812167168, 140656812171263, +SNULL, 140656815353855, 140656815382527, +STORE, 140656815345664, 140656815353855, +STORE, 140656815353856, 140656815382527, +SNULL, 140656817549311, 140656817553407, +STORE, 140656817545216, 140656817549311, +STORE, 140656817549312, 140656817553407, +SNULL, 140656819802111, 140656819806207, +STORE, 140656819798016, 140656819802111, +STORE, 140656819802112, 140656819806207, +SNULL, 140656821923839, 140656821927935, +STORE, 140656821919744, 140656821923839, +STORE, 140656821923840, 140656821927935, +SNULL, 140656830066687, 140656830070783, +STORE, 140656830062592, 140656830066687, +STORE, 140656830066688, 140656830070783, +SNULL, 140656832319487, 140656832323583, +STORE, 140656832315392, 140656832319487, +STORE, 140656832319488, 140656832323583, +SNULL, 140656834547711, 140656834551807, +STORE, 140656833982464, 140656834547711, +STORE, 140656834547712, 140656834551807, +SNULL, 94730166759423, 94730166763519, +STORE, 94730166751232, 94730166759423, +STORE, 94730166759424, 94730166763519, +SNULL, 140656836800511, 140656836804607, +STORE, 140656836796416, 140656836800511, +STORE, 140656836800512, 140656836804607, +ERASE, 140656836763648, 140656836788223, +STORE, 94730171318272, 94730171453439, +STORE, 140656836784128, 140656836788223, +STORE, 140656836780032, 140656836784127, +STORE, 140656791920640, 140656796364799, +STORE, 140656836775936, 140656836780031, +STORE, 140656787476480, 140656791920639, +STORE, 140656779083776, 140656787476479, +SNULL, 140656779087871, 140656787476479, +STORE, 140656779083776, 140656779087871, +STORE, 140656779087872, 140656787476479, +STORE, 140656836771840, 140656836775935, +STORE, 140656774639616, 140656779083775, +STORE, 140656766246912, 140656774639615, +SNULL, 140656766251007, 140656774639615, +STORE, 140656766246912, 140656766251007, +STORE, 140656766251008, 140656774639615, +ERASE, 140656791920640, 140656796364799, +ERASE, 140656836780032, 140656836784127, +ERASE, 140656787476480, 140656791920639, +ERASE, 140656836775936, 140656836780031, +STORE, 140656836780032, 140656836784127, +STORE, 140656791920640, 140656796364799, +STORE, 140656836775936, 140656836780031, +STORE, 140656787476480, 140656791920639, +ERASE, 140656774639616, 140656779083775, + }; + unsigned long set20[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140735952392192, 140737488351231, +SNULL, 140735952396287, 140737488351231, +STORE, 140735952392192, 140735952396287, +STORE, 140735952261120, 140735952396287, +STORE, 94849008947200, 94849009414143, +SNULL, 94849009364991, 94849009414143, +STORE, 94849008947200, 94849009364991, +STORE, 94849009364992, 94849009414143, +ERASE, 94849009364992, 94849009414143, +STORE, 94849009364992, 94849009414143, +STORE, 140590397943808, 140590400196607, +SNULL, 140590398087167, 140590400196607, +STORE, 140590397943808, 140590398087167, +STORE, 140590398087168, 140590400196607, +ERASE, 140590398087168, 140590400196607, +STORE, 140590400184320, 140590400192511, +STORE, 140590400192512, 140590400196607, +STORE, 140735952850944, 140735952855039, +STORE, 140735952838656, 140735952850943, +STORE, 140590400180224, 140590400184319, +STORE, 140590400172032, 140590400180223, +STORE, 140590395809792, 140590397943807, +SNULL, 140590395809792, 140590395838463, +STORE, 140590395838464, 140590397943807, +STORE, 140590395809792, 140590395838463, +SNULL, 140590397935615, 140590397943807, +STORE, 140590395838464, 140590397935615, +STORE, 140590397935616, 140590397943807, +ERASE, 140590397935616, 140590397943807, +STORE, 140590397935616, 140590397943807, +STORE, 140590393425920, 140590395809791, +SNULL, 140590393425920, 140590393692159, +STORE, 140590393692160, 140590395809791, +STORE, 140590393425920, 140590393692159, +SNULL, 140590395785215, 140590395809791, +STORE, 140590393692160, 140590395785215, +STORE, 140590395785216, 140590395809791, +SNULL, 140590395785216, 140590395805695, +STORE, 140590395805696, 140590395809791, +STORE, 140590395785216, 140590395805695, +ERASE, 140590395785216, 140590395805695, +STORE, 140590395785216, 140590395805695, +ERASE, 140590395805696, 140590395809791, +STORE, 140590395805696, 140590395809791, +STORE, 140590391234560, 140590393425919, +SNULL, 140590391234560, 140590391324671, +STORE, 140590391324672, 140590393425919, +STORE, 140590391234560, 140590391324671, +SNULL, 140590393417727, 140590393425919, +STORE, 140590391324672, 140590393417727, +STORE, 140590393417728, 140590393425919, +ERASE, 140590393417728, 140590393425919, +STORE, 140590393417728, 140590393425919, +STORE, 140590388973568, 140590391234559, +SNULL, 140590388973568, 140590389125119, +STORE, 140590389125120, 140590391234559, +STORE, 140590388973568, 140590389125119, +SNULL, 140590391218175, 140590391234559, +STORE, 140590389125120, 140590391218175, +STORE, 140590391218176, 140590391234559, +SNULL, 140590391218176, 140590391226367, +STORE, 140590391226368, 140590391234559, +STORE, 140590391218176, 140590391226367, +ERASE, 140590391218176, 140590391226367, +STORE, 140590391218176, 140590391226367, +ERASE, 140590391226368, 140590391234559, +STORE, 140590391226368, 140590391234559, +STORE, 140590386843648, 140590388973567, +SNULL, 140590386843648, 140590386872319, +STORE, 140590386872320, 140590388973567, +STORE, 140590386843648, 140590386872319, +SNULL, 140590388965375, 140590388973567, +STORE, 140590386872320, 140590388965375, +STORE, 140590388965376, 140590388973567, +ERASE, 140590388965376, 140590388973567, +STORE, 140590388965376, 140590388973567, +STORE, 140590384627712, 140590386843647, +SNULL, 140590384627712, 140590384726015, +STORE, 140590384726016, 140590386843647, +STORE, 140590384627712, 140590384726015, +SNULL, 140590386819071, 140590386843647, +STORE, 140590384726016, 140590386819071, +STORE, 140590386819072, 140590386843647, +SNULL, 140590386819072, 140590386827263, +STORE, 140590386827264, 140590386843647, +STORE, 140590386819072, 140590386827263, +ERASE, 140590386819072, 140590386827263, +STORE, 140590386819072, 140590386827263, +ERASE, 140590386827264, 140590386843647, +STORE, 140590386827264, 140590386843647, +STORE, 140590400163840, 140590400180223, +STORE, 140590380830720, 140590384627711, +SNULL, 140590380830720, 140590382489599, +STORE, 140590382489600, 140590384627711, +STORE, 140590380830720, 140590382489599, +SNULL, 140590384586751, 140590384627711, +STORE, 140590382489600, 140590384586751, +STORE, 140590384586752, 140590384627711, +SNULL, 140590384586752, 140590384611327, +STORE, 140590384611328, 140590384627711, +STORE, 140590384586752, 140590384611327, +ERASE, 140590384586752, 140590384611327, +STORE, 140590384586752, 140590384611327, +ERASE, 140590384611328, 140590384627711, +STORE, 140590384611328, 140590384627711, +STORE, 140590378713088, 140590380830719, +SNULL, 140590378713088, 140590378729471, +STORE, 140590378729472, 140590380830719, +STORE, 140590378713088, 140590378729471, +SNULL, 140590380822527, 140590380830719, +STORE, 140590378729472, 140590380822527, +STORE, 140590380822528, 140590380830719, +ERASE, 140590380822528, 140590380830719, +STORE, 140590380822528, 140590380830719, +STORE, 140590376595456, 140590378713087, +SNULL, 140590376595456, 140590376611839, +STORE, 140590376611840, 140590378713087, +STORE, 140590376595456, 140590376611839, +SNULL, 140590378704895, 140590378713087, +STORE, 140590376611840, 140590378704895, +STORE, 140590378704896, 140590378713087, +ERASE, 140590378704896, 140590378713087, +STORE, 140590378704896, 140590378713087, +STORE, 140590374027264, 140590376595455, +SNULL, 140590374027264, 140590374494207, +STORE, 140590374494208, 140590376595455, +STORE, 140590374027264, 140590374494207, +SNULL, 140590376587263, 140590376595455, +STORE, 140590374494208, 140590376587263, +STORE, 140590376587264, 140590376595455, +ERASE, 140590376587264, 140590376595455, +STORE, 140590376587264, 140590376595455, +STORE, 140590371913728, 140590374027263, +SNULL, 140590371913728, 140590371926015, +STORE, 140590371926016, 140590374027263, +STORE, 140590371913728, 140590371926015, +SNULL, 140590374019071, 140590374027263, +STORE, 140590371926016, 140590374019071, +STORE, 140590374019072, 140590374027263, +ERASE, 140590374019072, 140590374027263, +STORE, 140590374019072, 140590374027263, +STORE, 140590400155648, 140590400180223, +STORE, 140590400143360, 140590400180223, +SNULL, 140590384603135, 140590384611327, +STORE, 140590384586752, 140590384603135, +STORE, 140590384603136, 140590384611327, +SNULL, 140590374023167, 140590374027263, +STORE, 140590374019072, 140590374023167, +STORE, 140590374023168, 140590374027263, +SNULL, 140590386823167, 140590386827263, +STORE, 140590386819072, 140590386823167, +STORE, 140590386823168, 140590386827263, +SNULL, 140590376591359, 140590376595455, + }; + unsigned long set21[] = { +STORE, 93874710941696, 93874711363583, +STORE, 93874711367680, 93874711408639, +STORE, 93874711408640, 93874711412735, +STORE, 93874720989184, 93874721124351, +STORE, 140708365086720, 140708365099007, +STORE, 140708365099008, 140708367192063, +STORE, 140708367192064, 140708367196159, +STORE, 140708367196160, 140708367200255, +STORE, 140708367200256, 140708367667199, +STORE, 140708367667200, 140708369760255, +STORE, 140708369760256, 140708369764351, +STORE, 140708369764352, 140708369768447, +STORE, 140708369768448, 140708369784831, +STORE, 140708369784832, 140708371877887, +STORE, 140708371877888, 140708371881983, +STORE, 140708371881984, 140708371886079, +STORE, 140708371886080, 140708371902463, +STORE, 140708371902464, 140708373995519, +STORE, 140708373995520, 140708373999615, +STORE, 140708373999616, 140708374003711, +STORE, 140708374003712, 140708375662591, +STORE, 140708375662592, 140708377759743, +STORE, 140708377759744, 140708377776127, +STORE, 140708377776128, 140708377784319, +STORE, 140708377784320, 140708377800703, +STORE, 140708377800704, 140708377899007, +STORE, 140708377899008, 140708379992063, +STORE, 140708379992064, 140708379996159, +STORE, 140708379996160, 140708380000255, +STORE, 140708380000256, 140708380016639, +STORE, 140708380016640, 140708380045311, +STORE, 140708380045312, 140708382138367, +STORE, 140708382138368, 140708382142463, +STORE, 140708382142464, 140708382146559, +STORE, 140708382146560, 140708382298111, +STORE, 140708382298112, 140708384391167, +STORE, 140708384391168, 140708384395263, +STORE, 140708384395264, 140708384399359, +STORE, 140708384399360, 140708384407551, +STORE, 140708384407552, 140708384497663, +STORE, 140708384497664, 140708386590719, +STORE, 140708386590720, 140708386594815, +STORE, 140708386594816, 140708386598911, +STORE, 140708386598912, 140708386865151, +STORE, 140708386865152, 140708388958207, +STORE, 140708388958208, 140708388974591, +STORE, 140708388974592, 140708388978687, +STORE, 140708388978688, 140708388982783, +STORE, 140708388982784, 140708389011455, +STORE, 140708389011456, 140708391108607, +STORE, 140708391108608, 140708391112703, +STORE, 140708391112704, 140708391116799, +STORE, 140708391116800, 140708391260159, +STORE, 140708393291776, 140708393308159, +STORE, 140708393308160, 140708393312255, +STORE, 140708393312256, 140708393316351, +STORE, 140708393316352, 140708393353215, +STORE, 140708393353216, 140708393357311, +STORE, 140708393357312, 140708393361407, +STORE, 140708393361408, 140708393365503, +STORE, 140708393365504, 140708393369599, +STORE, 140730557042688, 140730557177855, +STORE, 140730557235200, 140730557247487, +STORE, 140730557247488, 140730557251583, +ERASE, 140708393353216, 140708393357311, +ERASE, 140708393312256, 140708393316351, +ERASE, 140708393308160, 140708393312255, +ERASE, 140708393291776, 140708393308159, + }; + unsigned long set22[] = { +STORE, 93951397134336, 93951397183487, +STORE, 93951397183488, 93951397728255, +STORE, 93951397728256, 93951397826559, +STORE, 93951397826560, 93951397842943, +STORE, 93951397842944, 93951397847039, +STORE, 93951425974272, 93951426109439, +STORE, 140685152665600, 140685152677887, +STORE, 140685152677888, 140685152829439, +STORE, 140685152829440, 140685154181119, +STORE, 140685154181120, 140685154484223, +STORE, 140685154484224, 140685154496511, +STORE, 140685154496512, 140685154508799, +STORE, 140685154508800, 140685154525183, +STORE, 140685154525184, 140685154541567, +STORE, 140685154541568, 140685154590719, +STORE, 140685154590720, 140685154603007, +STORE, 140685154603008, 140685154607103, +STORE, 140685154607104, 140685154611199, +STORE, 140685154611200, 140685154615295, +STORE, 140685154615296, 140685154631679, +STORE, 140685154639872, 140685154643967, +STORE, 140685154643968, 140685154766847, +STORE, 140685154766848, 140685154799615, +STORE, 140685154803712, 140685154807807, +STORE, 140685154807808, 140685154811903, +STORE, 140685154811904, 140685154815999, +STORE, 140722188902400, 140722189037567, +STORE, 140722189512704, 140722189524991, +STORE, 140722189524992, 140722189529087, +STORE, 140737488347136, 140737488351231, +STORE, 140733429354496, 140737488351231, +SNULL, 140733429358591, 140737488351231, +STORE, 140733429354496, 140733429358591, +STORE, 140733429223424, 140733429358591, +STORE, 94526683537408, 94526683660287, +SNULL, 94526683553791, 94526683660287, +STORE, 94526683537408, 94526683553791, +STORE, 94526683553792, 94526683660287, +ERASE, 94526683553792, 94526683660287, +STORE, 94526683553792, 94526683623423, +STORE, 94526683623424, 94526683647999, +STORE, 94526683652096, 94526683660287, +STORE, 140551363747840, 140551363923967, +SNULL, 140551363751935, 140551363923967, +STORE, 140551363747840, 140551363751935, +STORE, 140551363751936, 140551363923967, +ERASE, 140551363751936, 140551363923967, +STORE, 140551363751936, 140551363874815, +STORE, 140551363874816, 140551363907583, +STORE, 140551363911680, 140551363919871, +STORE, 140551363919872, 140551363923967, +STORE, 140733429690368, 140733429694463, +STORE, 140733429678080, 140733429690367, +STORE, 140551363739648, 140551363747839, +STORE, 140551363731456, 140551363739647, +STORE, 140551363379200, 140551363731455, +SNULL, 140551363379200, 140551363420159, +STORE, 140551363420160, 140551363731455, +STORE, 140551363379200, 140551363420159, +SNULL, 140551363706879, 140551363731455, +STORE, 140551363420160, 140551363706879, +STORE, 140551363706880, 140551363731455, +SNULL, 140551363420160, 140551363637247, +STORE, 140551363637248, 140551363706879, +STORE, 140551363420160, 140551363637247, +ERASE, 140551363420160, 140551363637247, +STORE, 140551363420160, 140551363637247, +SNULL, 140551363637248, 140551363702783, +STORE, 140551363702784, 140551363706879, +STORE, 140551363637248, 140551363702783, +ERASE, 140551363637248, 140551363702783, +STORE, 140551363637248, 140551363702783, +ERASE, 140551363706880, 140551363731455, +STORE, 140551363706880, 140551363731455, +STORE, 140551361531904, 140551363379199, +SNULL, 140551361683455, 140551363379199, +STORE, 140551361531904, 140551361683455, +STORE, 140551361683456, 140551363379199, +SNULL, 140551361683456, 140551363035135, +STORE, 140551363035136, 140551363379199, +STORE, 140551361683456, 140551363035135, +ERASE, 140551361683456, 140551363035135, +STORE, 140551361683456, 140551363035135, +SNULL, 140551363035136, 140551363338239, +STORE, 140551363338240, 140551363379199, +STORE, 140551363035136, 140551363338239, +ERASE, 140551363035136, 140551363338239, +STORE, 140551363035136, 140551363379199, +SNULL, 140551363338239, 140551363379199, +STORE, 140551363035136, 140551363338239, +STORE, 140551363338240, 140551363379199, +SNULL, 140551363338240, 140551363362815, +STORE, 140551363362816, 140551363379199, +STORE, 140551363338240, 140551363362815, +ERASE, 140551363338240, 140551363362815, +STORE, 140551363338240, 140551363362815, +ERASE, 140551363362816, 140551363379199, +STORE, 140551363362816, 140551363379199, +STORE, 140551361519616, 140551361531903, +SNULL, 140551363350527, 140551363362815, +STORE, 140551363338240, 140551363350527, +STORE, 140551363350528, 140551363362815, +SNULL, 140551363727359, 140551363731455, +STORE, 140551363706880, 140551363727359, +STORE, 140551363727360, 140551363731455, +SNULL, 94526683656191, 94526683660287, +STORE, 94526683652096, 94526683656191, +STORE, 94526683656192, 94526683660287, +SNULL, 140551363915775, 140551363919871, +STORE, 140551363911680, 140551363915775, +STORE, 140551363915776, 140551363919871, +ERASE, 140551363739648, 140551363747839, +STORE, 94526715490304, 94526715625471, +STORE, 140551361253376, 140551361531903, +STORE, 140551360987136, 140551361531903, +STORE, 140551360720896, 140551361531903, +STORE, 140551360454656, 140551361531903, +SNULL, 140551361253375, 140551361531903, +STORE, 140551360454656, 140551361253375, +STORE, 140551361253376, 140551361531903, +SNULL, 140551361253376, 140551361519615, +STORE, 140551361519616, 140551361531903, +STORE, 140551361253376, 140551361519615, +ERASE, 140551361253376, 140551361519615, + }; + + unsigned long set23[] = { +STORE, 94014447943680, 94014448156671, +STORE, 94014450253824, 94014450257919, +STORE, 94014450257920, 94014450266111, +STORE, 94014450266112, 94014450278399, +STORE, 94014464225280, 94014464630783, +STORE, 139761764306944, 139761765965823, +STORE, 139761765965824, 139761768062975, +STORE, 139761768062976, 139761768079359, +STORE, 139761768079360, 139761768087551, +STORE, 139761768087552, 139761768103935, +STORE, 139761768103936, 139761768116223, +STORE, 139761768116224, 139761770209279, +STORE, 139761770209280, 139761770213375, +STORE, 139761770213376, 139761770217471, +STORE, 139761770217472, 139761770360831, +STORE, 139761770729472, 139761772412927, +STORE, 139761772412928, 139761772429311, +STORE, 139761772457984, 139761772462079, +STORE, 139761772462080, 139761772466175, +STORE, 139761772466176, 139761772470271, +STORE, 140724336517120, 140724336652287, +STORE, 140724336955392, 140724336967679, +STORE, 140724336967680, 140724336971775, +STORE, 140737488347136, 140737488351231, +STORE, 140721840295936, 140737488351231, +SNULL, 140721840300031, 140737488351231, +STORE, 140721840295936, 140721840300031, +STORE, 140721840164864, 140721840300031, +STORE, 93937913667584, 93937915830271, +SNULL, 93937913729023, 93937915830271, +STORE, 93937913667584, 93937913729023, +STORE, 93937913729024, 93937915830271, +ERASE, 93937913729024, 93937915830271, +STORE, 93937915822080, 93937915830271, +STORE, 140598835335168, 140598837587967, +SNULL, 140598835478527, 140598837587967, +STORE, 140598835335168, 140598835478527, +STORE, 140598835478528, 140598837587967, +ERASE, 140598835478528, 140598837587967, +STORE, 140598837575680, 140598837583871, +STORE, 140598837583872, 140598837587967, +STORE, 140721841086464, 140721841090559, +STORE, 140721841074176, 140721841086463, +STORE, 140598837547008, 140598837575679, +STORE, 140598837538816, 140598837547007, +STORE, 140598831538176, 140598835335167, +SNULL, 140598831538176, 140598833197055, +STORE, 140598833197056, 140598835335167, +STORE, 140598831538176, 140598833197055, +SNULL, 140598835294207, 140598835335167, +STORE, 140598833197056, 140598835294207, +STORE, 140598835294208, 140598835335167, +SNULL, 140598835294208, 140598835318783, +STORE, 140598835318784, 140598835335167, +STORE, 140598835294208, 140598835318783, +ERASE, 140598835294208, 140598835318783, +STORE, 140598835294208, 140598835318783, +ERASE, 140598835318784, 140598835335167, +STORE, 140598835318784, 140598835335167, +SNULL, 140598835310591, 140598835318783, +STORE, 140598835294208, 140598835310591, +STORE, 140598835310592, 140598835318783, +SNULL, 93937915826175, 93937915830271, +STORE, 93937915822080, 93937915826175, +STORE, 93937915826176, 93937915830271, +SNULL, 140598837579775, 140598837583871, +STORE, 140598837575680, 140598837579775, +STORE, 140598837579776, 140598837583871, +ERASE, 140598837547008, 140598837575679, +STORE, 93937929179136, 93937929314303, +STORE, 140598835855360, 140598837538815, +STORE, 140737488347136, 140737488351231, +STORE, 140728187723776, 140737488351231, +SNULL, 140728187727871, 140737488351231, +STORE, 140728187723776, 140728187727871, +STORE, 140728187592704, 140728187727871, +STORE, 4194304, 5128191, +STORE, 7221248, 7241727, +STORE, 7241728, 7249919, +STORE, 140583951437824, 140583953690623, +SNULL, 140583951581183, 140583953690623, +STORE, 140583951437824, 140583951581183, +STORE, 140583951581184, 140583953690623, +ERASE, 140583951581184, 140583953690623, +STORE, 140583953678336, 140583953686527, +STORE, 140583953686528, 140583953690623, +STORE, 140728189116416, 140728189120511, +STORE, 140728189104128, 140728189116415, +STORE, 140583953649664, 140583953678335, +STORE, 140583953641472, 140583953649663, +STORE, 140583948275712, 140583951437823, +SNULL, 140583948275712, 140583949336575, +STORE, 140583949336576, 140583951437823, +STORE, 140583948275712, 140583949336575, +SNULL, 140583951429631, 140583951437823, +STORE, 140583949336576, 140583951429631, +STORE, 140583951429632, 140583951437823, +ERASE, 140583951429632, 140583951437823, +STORE, 140583951429632, 140583951437823, +STORE, 140583944478720, 140583948275711, +SNULL, 140583944478720, 140583946137599, +STORE, 140583946137600, 140583948275711, +STORE, 140583944478720, 140583946137599, +SNULL, 140583948234751, 140583948275711, +STORE, 140583946137600, 140583948234751, +STORE, 140583948234752, 140583948275711, +SNULL, 140583948234752, 140583948259327, +STORE, 140583948259328, 140583948275711, +STORE, 140583948234752, 140583948259327, +ERASE, 140583948234752, 140583948259327, +STORE, 140583948234752, 140583948259327, +ERASE, 140583948259328, 140583948275711, +STORE, 140583948259328, 140583948275711, +STORE, 140583953629184, 140583953649663, +SNULL, 140583948251135, 140583948259327, +STORE, 140583948234752, 140583948251135, +STORE, 140583948251136, 140583948259327, +SNULL, 140583951433727, 140583951437823, +STORE, 140583951429632, 140583951433727, +STORE, 140583951433728, 140583951437823, +SNULL, 7233535, 7241727, +STORE, 7221248, 7233535, +STORE, 7233536, 7241727, +SNULL, 140583953682431, 140583953686527, +STORE, 140583953678336, 140583953682431, +STORE, 140583953682432, 140583953686527, +ERASE, 140583953649664, 140583953678335, +STORE, 17821696, 17956863, +STORE, 17821696, 18104319, +STORE, 140583951945728, 140583953629183, +STORE, 94014447943680, 94014448156671, +STORE, 94014450253824, 94014450257919, +STORE, 94014450257920, 94014450266111, +STORE, 94014450266112, 94014450278399, +STORE, 94014464225280, 94014465196031, +STORE, 139761764306944, 139761765965823, +STORE, 139761765965824, 139761768062975, +STORE, 139761768062976, 139761768079359, +STORE, 139761768079360, 139761768087551, +STORE, 139761768087552, 139761768103935, +STORE, 139761768103936, 139761768116223, +STORE, 139761768116224, 139761770209279, +STORE, 139761770209280, 139761770213375, +STORE, 139761770213376, 139761770217471, +STORE, 139761770217472, 139761770360831, +STORE, 139761770729472, 139761772412927, +STORE, 139761772412928, 139761772429311, +STORE, 139761772457984, 139761772462079, +STORE, 139761772462080, 139761772466175, +STORE, 139761772466176, 139761772470271, +STORE, 140724336517120, 140724336652287, +STORE, 140724336955392, 140724336967679, +STORE, 140724336967680, 140724336971775, +STORE, 140737488347136, 140737488351231, +STORE, 140726063296512, 140737488351231, +SNULL, 140726063300607, 140737488351231, +STORE, 140726063296512, 140726063300607, +STORE, 140726063165440, 140726063300607, +STORE, 94016795934720, 94016798158847, +SNULL, 94016796045311, 94016798158847, +STORE, 94016795934720, 94016796045311, +STORE, 94016796045312, 94016798158847, +ERASE, 94016796045312, 94016798158847, +STORE, 94016798138368, 94016798150655, +STORE, 94016798150656, 94016798158847, +STORE, 139975915966464, 139975918219263, +SNULL, 139975916109823, 139975918219263, +STORE, 139975915966464, 139975916109823, +STORE, 139975916109824, 139975918219263, +ERASE, 139975916109824, 139975918219263, +STORE, 139975918206976, 139975918215167, +STORE, 139975918215168, 139975918219263, +STORE, 140726064541696, 140726064545791, +STORE, 140726064529408, 140726064541695, +STORE, 139975918178304, 139975918206975, +STORE, 139975918170112, 139975918178303, +STORE, 139975912169472, 139975915966463, +SNULL, 139975912169472, 139975913828351, +STORE, 139975913828352, 139975915966463, +STORE, 139975912169472, 139975913828351, +SNULL, 139975915925503, 139975915966463, +STORE, 139975913828352, 139975915925503, +STORE, 139975915925504, 139975915966463, +SNULL, 139975915925504, 139975915950079, +STORE, 139975915950080, 139975915966463, +STORE, 139975915925504, 139975915950079, +ERASE, 139975915925504, 139975915950079, +STORE, 139975915925504, 139975915950079, +ERASE, 139975915950080, 139975915966463, +STORE, 139975915950080, 139975915966463, +SNULL, 139975915941887, 139975915950079, +STORE, 139975915925504, 139975915941887, +STORE, 139975915941888, 139975915950079, +SNULL, 94016798146559, 94016798150655, +STORE, 94016798138368, 94016798146559, +STORE, 94016798146560, 94016798150655, +SNULL, 139975918211071, 139975918215167, +STORE, 139975918206976, 139975918211071, +STORE, 139975918211072, 139975918215167, +ERASE, 139975918178304, 139975918206975, +STORE, 94016804925440, 94016805060607, +STORE, 94596177661952, 94596177772543, +STORE, 94596179865600, 94596179873791, +STORE, 94596179873792, 94596179877887, +STORE, 94596179877888, 94596179886079, +STORE, 94596211597312, 94596211863551, +STORE, 140127351840768, 140127353499647, +STORE, 140127353499648, 140127355596799, +STORE, 140127355596800, 140127355613183, +STORE, 140127355613184, 140127355621375, +STORE, 140127355621376, 140127355637759, +STORE, 140127355637760, 140127355781119, +STORE, 140127357841408, 140127357849599, +STORE, 140127357878272, 140127357882367, +STORE, 140127357882368, 140127357886463, +STORE, 140127357886464, 140127357890559, +STORE, 140726167252992, 140726167392255, +STORE, 140726167838720, 140726167851007, +STORE, 140726167851008, 140726167855103, +STORE, 140737488347136, 140737488351231, +STORE, 140731874017280, 140737488351231, +SNULL, 140731874021375, 140737488351231, +STORE, 140731874017280, 140731874021375, +STORE, 140731873886208, 140731874021375, +STORE, 94178682265600, 94178684489727, +SNULL, 94178682376191, 94178684489727, +STORE, 94178682265600, 94178682376191, +STORE, 94178682376192, 94178684489727, +ERASE, 94178682376192, 94178684489727, +STORE, 94178684469248, 94178684481535, +STORE, 94178684481536, 94178684489727, +STORE, 140460853403648, 140460855656447, +SNULL, 140460853547007, 140460855656447, +STORE, 140460853403648, 140460853547007, +STORE, 140460853547008, 140460855656447, +ERASE, 140460853547008, 140460855656447, +STORE, 140460855644160, 140460855652351, +STORE, 140460855652352, 140460855656447, +STORE, 140731874103296, 140731874107391, +STORE, 140731874091008, 140731874103295, +STORE, 140460855615488, 140460855644159, +STORE, 140460855607296, 140460855615487, +STORE, 140460849606656, 140460853403647, +SNULL, 140460849606656, 140460851265535, +STORE, 140460851265536, 140460853403647, +STORE, 140460849606656, 140460851265535, +SNULL, 140460853362687, 140460853403647, +STORE, 140460851265536, 140460853362687, +STORE, 140460853362688, 140460853403647, +SNULL, 140460853362688, 140460853387263, +STORE, 140460853387264, 140460853403647, +STORE, 140460853362688, 140460853387263, +ERASE, 140460853362688, 140460853387263, +STORE, 140460853362688, 140460853387263, +ERASE, 140460853387264, 140460853403647, +STORE, 140460853387264, 140460853403647, +SNULL, 140460853379071, 140460853387263, +STORE, 140460853362688, 140460853379071, +STORE, 140460853379072, 140460853387263, +SNULL, 94178684477439, 94178684481535, +STORE, 94178684469248, 94178684477439, +STORE, 94178684477440, 94178684481535, +SNULL, 140460855648255, 140460855652351, +STORE, 140460855644160, 140460855648255, +STORE, 140460855648256, 140460855652351, +ERASE, 140460855615488, 140460855644159, +STORE, 94178692063232, 94178692198399, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140733096603648, 140737488351231, +SNULL, 140733096611839, 140737488351231, +STORE, 140733096603648, 140733096611839, +STORE, 140733096472576, 140733096611839, +STORE, 94796716122112, 94796718325759, +SNULL, 94796716224511, 94796718325759, +STORE, 94796716122112, 94796716224511, +STORE, 94796716224512, 94796718325759, +ERASE, 94796716224512, 94796718325759, +STORE, 94796718317568, 94796718325759, +STORE, 139667892793344, 139667895046143, +SNULL, 139667892936703, 139667895046143, +STORE, 139667892793344, 139667892936703, +STORE, 139667892936704, 139667895046143, +ERASE, 139667892936704, 139667895046143, +STORE, 139667895033856, 139667895042047, +STORE, 139667895042048, 139667895046143, +STORE, 140733096857600, 140733096861695, +STORE, 140733096845312, 140733096857599, +STORE, 139667895005184, 139667895033855, +STORE, 139667894996992, 139667895005183, +STORE, 139667890532352, 139667892793343, +SNULL, 139667890532352, 139667890683903, +STORE, 139667890683904, 139667892793343, +STORE, 139667890532352, 139667890683903, +SNULL, 139667892776959, 139667892793343, +STORE, 139667890683904, 139667892776959, +STORE, 139667892776960, 139667892793343, +SNULL, 139667892776960, 139667892785151, +STORE, 139667892785152, 139667892793343, +STORE, 139667892776960, 139667892785151, +ERASE, 139667892776960, 139667892785151, +STORE, 139667892776960, 139667892785151, +ERASE, 139667892785152, 139667892793343, +STORE, 139667892785152, 139667892793343, +STORE, 139667886735360, 139667890532351, +SNULL, 139667886735360, 139667888394239, +STORE, 139667888394240, 139667890532351, +STORE, 139667886735360, 139667888394239, +SNULL, 139667890491391, 139667890532351, +STORE, 139667888394240, 139667890491391, +STORE, 139667890491392, 139667890532351, +SNULL, 139667890491392, 139667890515967, +STORE, 139667890515968, 139667890532351, +STORE, 139667890491392, 139667890515967, +ERASE, 139667890491392, 139667890515967, +STORE, 139667890491392, 139667890515967, +ERASE, 139667890515968, 139667890532351, +STORE, 139667890515968, 139667890532351, +STORE, 139667884167168, 139667886735359, +SNULL, 139667884167168, 139667884634111, +STORE, 139667884634112, 139667886735359, +STORE, 139667884167168, 139667884634111, +SNULL, 139667886727167, 139667886735359, +STORE, 139667884634112, 139667886727167, +STORE, 139667886727168, 139667886735359, +ERASE, 139667886727168, 139667886735359, +STORE, 139667886727168, 139667886735359, +STORE, 139667882053632, 139667884167167, +SNULL, 139667882053632, 139667882065919, +STORE, 139667882065920, 139667884167167, +STORE, 139667882053632, 139667882065919, +SNULL, 139667884158975, 139667884167167, +STORE, 139667882065920, 139667884158975, +STORE, 139667884158976, 139667884167167, +ERASE, 139667884158976, 139667884167167, +STORE, 139667884158976, 139667884167167, +STORE, 139667879837696, 139667882053631, +SNULL, 139667879837696, 139667879935999, +STORE, 139667879936000, 139667882053631, +STORE, 139667879837696, 139667879935999, +SNULL, 139667882029055, 139667882053631, +STORE, 139667879936000, 139667882029055, +STORE, 139667882029056, 139667882053631, +SNULL, 139667882029056, 139667882037247, +STORE, 139667882037248, 139667882053631, +STORE, 139667882029056, 139667882037247, +ERASE, 139667882029056, 139667882037247, +STORE, 139667882029056, 139667882037247, +ERASE, 139667882037248, 139667882053631, +STORE, 139667882037248, 139667882053631, +STORE, 139667894988800, 139667895005183, +SNULL, 139667890507775, 139667890515967, +STORE, 139667890491392, 139667890507775, +STORE, 139667890507776, 139667890515967, +SNULL, 139667882033151, 139667882037247, +STORE, 139667882029056, 139667882033151, +STORE, 139667882033152, 139667882037247, +SNULL, 139667884163071, 139667884167167, +STORE, 139667884158976, 139667884163071, +STORE, 139667884163072, 139667884167167, +SNULL, 139667886731263, 139667886735359, +STORE, 139667886727168, 139667886731263, +STORE, 139667886731264, 139667886735359, +SNULL, 139667892781055, 139667892785151, +STORE, 139667892776960, 139667892781055, +STORE, 139667892781056, 139667892785151, +SNULL, 94796718321663, 94796718325759, +STORE, 94796718317568, 94796718321663, +STORE, 94796718321664, 94796718325759, +SNULL, 139667895037951, 139667895042047, +STORE, 139667895033856, 139667895037951, +STORE, 139667895037952, 139667895042047, +ERASE, 139667895005184, 139667895033855, +STORE, 94796726063104, 94796726198271, +STORE, 139667893305344, 139667894988799, +STORE, 139667895005184, 139667895033855, +STORE, 94796726063104, 94796726333439, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140722489507840, 140737488351231, +SNULL, 140722489516031, 140737488351231, +STORE, 140722489507840, 140722489516031, +STORE, 140722489376768, 140722489516031, +STORE, 93980993265664, 93980995489791, +SNULL, 93980993376255, 93980995489791, +STORE, 93980993265664, 93980993376255, +STORE, 93980993376256, 93980995489791, +ERASE, 93980993376256, 93980995489791, +STORE, 93980995469312, 93980995481599, +STORE, 93980995481600, 93980995489791, +STORE, 140261313593344, 140261315846143, +SNULL, 140261313736703, 140261315846143, +STORE, 140261313593344, 140261313736703, +STORE, 140261313736704, 140261315846143, +ERASE, 140261313736704, 140261315846143, +STORE, 140261315833856, 140261315842047, +STORE, 140261315842048, 140261315846143, +STORE, 140722489675776, 140722489679871, +STORE, 140722489663488, 140722489675775, +STORE, 140261315805184, 140261315833855, +STORE, 140261315796992, 140261315805183, +STORE, 140261309796352, 140261313593343, +SNULL, 140261309796352, 140261311455231, +STORE, 140261311455232, 140261313593343, +STORE, 140261309796352, 140261311455231, +SNULL, 140261313552383, 140261313593343, +STORE, 140261311455232, 140261313552383, +STORE, 140261313552384, 140261313593343, +SNULL, 140261313552384, 140261313576959, +STORE, 140261313576960, 140261313593343, +STORE, 140261313552384, 140261313576959, +ERASE, 140261313552384, 140261313576959, +STORE, 140261313552384, 140261313576959, +ERASE, 140261313576960, 140261313593343, +STORE, 140261313576960, 140261313593343, +SNULL, 140261313568767, 140261313576959, +STORE, 140261313552384, 140261313568767, +STORE, 140261313568768, 140261313576959, +SNULL, 93980995477503, 93980995481599, +STORE, 93980995469312, 93980995477503, +STORE, 93980995477504, 93980995481599, +SNULL, 140261315837951, 140261315842047, +STORE, 140261315833856, 140261315837951, +STORE, 140261315837952, 140261315842047, +ERASE, 140261315805184, 140261315833855, +STORE, 93980997443584, 93980997578751, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140737488338944, 140737488351231, +STORE, 140734059450368, 140737488351231, +SNULL, 140734059462655, 140737488351231, +STORE, 140734059450368, 140734059462655, +STORE, 140734059319296, 140734059462655, +STORE, 4194304, 5128191, +STORE, 7221248, 7241727, +STORE, 7241728, 7249919, +STORE, 140307554983936, 140307557236735, +SNULL, 140307555127295, 140307557236735, +STORE, 140307554983936, 140307555127295, +STORE, 140307555127296, 140307557236735, +ERASE, 140307555127296, 140307557236735, +STORE, 140307557224448, 140307557232639, +STORE, 140307557232640, 140307557236735, +STORE, 140734059483136, 140734059487231, +STORE, 140734059470848, 140734059483135, +STORE, 140307557195776, 140307557224447, +STORE, 140307557187584, 140307557195775, +STORE, 140307551821824, 140307554983935, +SNULL, 140307551821824, 140307552882687, +STORE, 140307552882688, 140307554983935, +STORE, 140307551821824, 140307552882687, +SNULL, 140307554975743, 140307554983935, +STORE, 140307552882688, 140307554975743, +STORE, 140307554975744, 140307554983935, +ERASE, 140307554975744, 140307554983935, +STORE, 140307554975744, 140307554983935, +STORE, 140307548024832, 140307551821823, +SNULL, 140307548024832, 140307549683711, +STORE, 140307549683712, 140307551821823, +STORE, 140307548024832, 140307549683711, +SNULL, 140307551780863, 140307551821823, +STORE, 140307549683712, 140307551780863, +STORE, 140307551780864, 140307551821823, +SNULL, 140307551780864, 140307551805439, +STORE, 140307551805440, 140307551821823, +STORE, 140307551780864, 140307551805439, +ERASE, 140307551780864, 140307551805439, +STORE, 140307551780864, 140307551805439, +ERASE, 140307551805440, 140307551821823, +STORE, 140307551805440, 140307551821823, +STORE, 140307557175296, 140307557195775, +SNULL, 140307551797247, 140307551805439, +STORE, 140307551780864, 140307551797247, +STORE, 140307551797248, 140307551805439, +SNULL, 140307554979839, 140307554983935, +STORE, 140307554975744, 140307554979839, +STORE, 140307554979840, 140307554983935, +SNULL, 7233535, 7241727, +STORE, 7221248, 7233535, +STORE, 7233536, 7241727, +SNULL, 140307557228543, 140307557232639, +STORE, 140307557224448, 140307557228543, +STORE, 140307557228544, 140307557232639, +ERASE, 140307557195776, 140307557224447, +STORE, 39698432, 39833599, +STORE, 39698432, 39981055, +STORE, 94306485321728, 94306485432319, +STORE, 94306487525376, 94306487533567, +STORE, 94306487533568, 94306487537663, +STORE, 94306487537664, 94306487545855, +STORE, 94306488868864, 94306489004031, +STORE, 140497673998336, 140497675657215, +STORE, 140497675657216, 140497677754367, +STORE, 140497677754368, 140497677770751, +STORE, 140497677770752, 140497677778943, +STORE, 140497677778944, 140497677795327, +STORE, 140497677795328, 140497677938687, +STORE, 140497679998976, 140497680007167, +STORE, 140497680035840, 140497680039935, +STORE, 140497680039936, 140497680044031, +STORE, 140497680044032, 140497680048127, +STORE, 140732780462080, 140732780601343, +STORE, 140732782239744, 140732782252031, +STORE, 140732782252032, 140732782256127, +STORE, 94236915900416, 94236916011007, +STORE, 94236918104064, 94236918112255, +STORE, 94236918112256, 94236918116351, +STORE, 94236918116352, 94236918124543, +STORE, 94236939489280, 94236939624447, +STORE, 140046091743232, 140046093402111, +STORE, 140046093402112, 140046095499263, +STORE, 140046095499264, 140046095515647, +STORE, 140046095515648, 140046095523839, +STORE, 140046095523840, 140046095540223, +STORE, 140046095540224, 140046095683583, +STORE, 140046097743872, 140046097752063, +STORE, 140046097780736, 140046097784831, +STORE, 140046097784832, 140046097788927, +STORE, 140046097788928, 140046097793023, +STORE, 140726694449152, 140726694588415, +STORE, 140726695313408, 140726695325695, +STORE, 140726695325696, 140726695329791, +STORE, 94894582779904, 94894582992895, +STORE, 94894585090048, 94894585094143, +STORE, 94894585094144, 94894585102335, +STORE, 94894585102336, 94894585114623, +STORE, 94894592868352, 94894594293759, +STORE, 139733563842560, 139733565501439, +STORE, 139733565501440, 139733567598591, +STORE, 139733567598592, 139733567614975, +STORE, 139733567614976, 139733567623167, +STORE, 139733567623168, 139733567639551, +STORE, 139733567639552, 139733567651839, +STORE, 139733567651840, 139733569744895, +STORE, 139733569744896, 139733569748991, +STORE, 139733569748992, 139733569753087, +STORE, 139733569753088, 139733569896447, +STORE, 139733570265088, 139733571948543, +STORE, 139733571948544, 139733571964927, +STORE, 139733571993600, 139733571997695, +STORE, 139733571997696, 139733572001791, +STORE, 139733572001792, 139733572005887, +STORE, 140726369255424, 140726369394687, +STORE, 140726370402304, 140726370414591, +STORE, 140726370414592, 140726370418687, +STORE, 94899236483072, 94899236696063, +STORE, 94899238793216, 94899238797311, +STORE, 94899238797312, 94899238805503, +STORE, 94899238805504, 94899238817791, +STORE, 94899263045632, 94899263979519, +STORE, 140040959893504, 140040961552383, +STORE, 140040961552384, 140040963649535, +STORE, 140040963649536, 140040963665919, +STORE, 140040963665920, 140040963674111, +STORE, 140040963674112, 140040963690495, +STORE, 140040963690496, 140040963702783, +STORE, 140040963702784, 140040965795839, +STORE, 140040965795840, 140040965799935, +STORE, 140040965799936, 140040965804031, +STORE, 140040965804032, 140040965947391, +STORE, 140040966316032, 140040967999487, +STORE, 140040967999488, 140040968015871, +STORE, 140040968044544, 140040968048639, +STORE, 140040968048640, 140040968052735, +STORE, 140040968052736, 140040968056831, +STORE, 140729921359872, 140729921499135, +STORE, 140729921613824, 140729921626111, +STORE, 140729921626112, 140729921630207, +STORE, 94818265190400, 94818265403391, +STORE, 94818267500544, 94818267504639, +STORE, 94818267504640, 94818267512831, +STORE, 94818267512832, 94818267525119, +STORE, 94818283372544, 94818285858815, +STORE, 139818425675776, 139818427334655, +STORE, 139818427334656, 139818429431807, +STORE, 139818429431808, 139818429448191, +STORE, 139818429448192, 139818429456383, +STORE, 139818429456384, 139818429472767, +STORE, 139818429472768, 139818429485055, +STORE, 139818429485056, 139818431578111, +STORE, 139818431578112, 139818431582207, +STORE, 139818431582208, 139818431586303, +STORE, 139818431586304, 139818431729663, +STORE, 139818432098304, 139818433781759, +STORE, 139818433781760, 139818433798143, +STORE, 139818433826816, 139818433830911, +STORE, 139818433830912, 139818433835007, +STORE, 139818433835008, 139818433839103, +STORE, 140726170509312, 140726170648575, +STORE, 140726171824128, 140726171836415, +STORE, 140726171836416, 140726171840511, +STORE, 94611513188352, 94611513401343, +STORE, 94611515498496, 94611515502591, +STORE, 94611515502592, 94611515510783, +STORE, 94611515510784, 94611515523071, +STORE, 94611516502016, 94611516907519, +STORE, 140596246388736, 140596248047615, +STORE, 140596248047616, 140596250144767, +STORE, 140596250144768, 140596250161151, +STORE, 140596250161152, 140596250169343, +STORE, 140596250169344, 140596250185727, +STORE, 140596250185728, 140596250198015, +STORE, 140596250198016, 140596252291071, +STORE, 140596252291072, 140596252295167, +STORE, 140596252295168, 140596252299263, +STORE, 140596252299264, 140596252442623, +STORE, 140596252811264, 140596254494719, +STORE, 140596254494720, 140596254511103, +STORE, 140596254539776, 140596254543871, +STORE, 140596254543872, 140596254547967, +STORE, 140596254547968, 140596254552063, +STORE, 140731551338496, 140731551477759, +STORE, 140731551780864, 140731551793151, +STORE, 140731551793152, 140731551797247, +STORE, 94313835851776, 94313836064767, +STORE, 94313838161920, 94313838166015, +STORE, 94313838166016, 94313838174207, +STORE, 94313838174208, 94313838186495, +STORE, 94313858416640, 94313861906431, +STORE, 140693503918080, 140693505576959, +STORE, 140693505576960, 140693507674111, +STORE, 140693507674112, 140693507690495, +STORE, 140693507690496, 140693507698687, +STORE, 140693507698688, 140693507715071, +STORE, 140693507715072, 140693507727359, +STORE, 140693507727360, 140693509820415, +STORE, 140693509820416, 140693509824511, +STORE, 140693509824512, 140693509828607, +STORE, 140693509828608, 140693509971967, +STORE, 140693510340608, 140693512024063, +STORE, 140693512024064, 140693512040447, +STORE, 140693512069120, 140693512073215, +STORE, 140693512073216, 140693512077311, +STORE, 140693512077312, 140693512081407, +STORE, 140721116065792, 140721116205055, +STORE, 140721117831168, 140721117843455, +STORE, 140721117843456, 140721117847551, +STORE, 94843650150400, 94843650363391, +STORE, 94843652460544, 94843652464639, +STORE, 94843652464640, 94843652472831, +STORE, 94843652472832, 94843652485119, +STORE, 94843685388288, 94843686281215, +STORE, 140484193681408, 140484195340287, +STORE, 140484195340288, 140484197437439, +STORE, 140484197437440, 140484197453823, +STORE, 140484197453824, 140484197462015, +STORE, 140484197462016, 140484197478399, +STORE, 140484197478400, 140484197490687, +STORE, 140484197490688, 140484199583743, +STORE, 140484199583744, 140484199587839, +STORE, 140484199587840, 140484199591935, +STORE, 140484199591936, 140484199735295, +STORE, 140484200103936, 140484201787391, +STORE, 140484201787392, 140484201803775, +STORE, 140484201832448, 140484201836543, +STORE, 140484201836544, 140484201840639, +STORE, 140484201840640, 140484201844735, +STORE, 140726294315008, 140726294454271, +STORE, 140726295646208, 140726295658495, +STORE, 140726295658496, 140726295662591, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140720422371328, 140737488351231, +SNULL, 140720422379519, 140737488351231, +STORE, 140720422371328, 140720422379519, +STORE, 140720422240256, 140720422379519, +STORE, 94417967845376, 94417970180095, +SNULL, 94417968058367, 94417970180095, +STORE, 94417967845376, 94417968058367, +STORE, 94417968058368, 94417970180095, +ERASE, 94417968058368, 94417970180095, +STORE, 94417970155520, 94417970167807, +STORE, 94417970167808, 94417970180095, +STORE, 140252450045952, 140252452298751, +SNULL, 140252450189311, 140252452298751, +STORE, 140252450045952, 140252450189311, +STORE, 140252450189312, 140252452298751, +ERASE, 140252450189312, 140252452298751, +STORE, 140252452286464, 140252452294655, +STORE, 140252452294656, 140252452298751, +STORE, 140720422416384, 140720422420479, +STORE, 140720422404096, 140720422416383, +STORE, 140252452257792, 140252452286463, +STORE, 140252452249600, 140252452257791, +STORE, 140252447932416, 140252450045951, +SNULL, 140252447932416, 140252447944703, +STORE, 140252447944704, 140252450045951, +STORE, 140252447932416, 140252447944703, +SNULL, 140252450037759, 140252450045951, +STORE, 140252447944704, 140252450037759, +STORE, 140252450037760, 140252450045951, +ERASE, 140252450037760, 140252450045951, +STORE, 140252450037760, 140252450045951, +STORE, 140252444135424, 140252447932415, +SNULL, 140252444135424, 140252445794303, +STORE, 140252445794304, 140252447932415, +STORE, 140252444135424, 140252445794303, +SNULL, 140252447891455, 140252447932415, +STORE, 140252445794304, 140252447891455, +STORE, 140252447891456, 140252447932415, +SNULL, 140252447891456, 140252447916031, +STORE, 140252447916032, 140252447932415, +STORE, 140252447891456, 140252447916031, +ERASE, 140252447891456, 140252447916031, +STORE, 140252447891456, 140252447916031, +ERASE, 140252447916032, 140252447932415, +STORE, 140252447916032, 140252447932415, +STORE, 140252452241408, 140252452257791, +SNULL, 140252447907839, 140252447916031, +STORE, 140252447891456, 140252447907839, +STORE, 140252447907840, 140252447916031, +SNULL, 140252450041855, 140252450045951, +STORE, 140252450037760, 140252450041855, +STORE, 140252450041856, 140252450045951, +SNULL, 94417970159615, 94417970167807, +STORE, 94417970155520, 94417970159615, +STORE, 94417970159616, 94417970167807, +SNULL, 140252452290559, 140252452294655, +STORE, 140252452286464, 140252452290559, +STORE, 140252452290560, 140252452294655, +ERASE, 140252452257792, 140252452286463, +STORE, 94417996333056, 94417996468223, +STORE, 140252450557952, 140252452241407, +STORE, 94417996333056, 94417996603391, +STORE, 94417996333056, 94417996738559, +STORE, 94417996333056, 94417996910591, +SNULL, 94417996881919, 94417996910591, +STORE, 94417996333056, 94417996881919, +STORE, 94417996881920, 94417996910591, +ERASE, 94417996881920, 94417996910591, +STORE, 94417996333056, 94417997017087, +STORE, 94417996333056, 94417997152255, +SNULL, 94417997135871, 94417997152255, +STORE, 94417996333056, 94417997135871, +STORE, 94417997135872, 94417997152255, +ERASE, 94417997135872, 94417997152255, +STORE, 94417996333056, 94417997291519, +SNULL, 94417997271039, 94417997291519, +STORE, 94417996333056, 94417997271039, +STORE, 94417997271040, 94417997291519, +ERASE, 94417997271040, 94417997291519, +STORE, 94417996333056, 94417997406207, +SNULL, 94417997381631, 94417997406207, +STORE, 94417996333056, 94417997381631, +STORE, 94417997381632, 94417997406207, +ERASE, 94417997381632, 94417997406207, +STORE, 94417996333056, 94417997516799, +SNULL, 94417997488127, 94417997516799, +STORE, 94417996333056, 94417997488127, +STORE, 94417997488128, 94417997516799, +ERASE, 94417997488128, 94417997516799, +STORE, 94417996333056, 94417997643775, +SNULL, 94417997631487, 94417997643775, +STORE, 94417996333056, 94417997631487, +STORE, 94417997631488, 94417997643775, +ERASE, 94417997631488, 94417997643775, +SNULL, 94417997590527, 94417997631487, +STORE, 94417996333056, 94417997590527, +STORE, 94417997590528, 94417997631487, +ERASE, 94417997590528, 94417997631487, +STORE, 94417996333056, 94417997733887, +STORE, 94417996333056, 94417997869055, +STORE, 94417996333056, 94417998004223, +SNULL, 94417998000127, 94417998004223, +STORE, 94417996333056, 94417998000127, +STORE, 94417998000128, 94417998004223, +ERASE, 94417998000128, 94417998004223, +STORE, 94049170993152, 94049171206143, +STORE, 94049173303296, 94049173307391, +STORE, 94049173307392, 94049173315583, +STORE, 94049173315584, 94049173327871, +STORE, 94049176236032, 94049183645695, +STORE, 139807795544064, 139807797202943, +STORE, 139807797202944, 139807799300095, +STORE, 139807799300096, 139807799316479, +STORE, 139807799316480, 139807799324671, +STORE, 139807799324672, 139807799341055, +STORE, 139807799341056, 139807799353343, +STORE, 139807799353344, 139807801446399, +STORE, 139807801446400, 139807801450495, +STORE, 139807801450496, 139807801454591, +STORE, 139807801454592, 139807801597951, +STORE, 139807801966592, 139807803650047, +STORE, 139807803650048, 139807803666431, +STORE, 139807803695104, 139807803699199, +STORE, 139807803699200, 139807803703295, +STORE, 139807803703296, 139807803707391, +STORE, 140727555538944, 140727555678207, +STORE, 140727555940352, 140727555952639, +STORE, 140727555952640, 140727555956735, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140722483441664, 140737488351231, +SNULL, 140722483449855, 140737488351231, +STORE, 140722483441664, 140722483449855, +STORE, 140722483310592, 140722483449855, +STORE, 94416704921600, 94416707145727, +SNULL, 94416705032191, 94416707145727, +STORE, 94416704921600, 94416705032191, +STORE, 94416705032192, 94416707145727, +ERASE, 94416705032192, 94416707145727, +STORE, 94416707125248, 94416707137535, +STORE, 94416707137536, 94416707145727, +STORE, 140555439296512, 140555441549311, +SNULL, 140555439439871, 140555441549311, +STORE, 140555439296512, 140555439439871, +STORE, 140555439439872, 140555441549311, +ERASE, 140555439439872, 140555441549311, +STORE, 140555441537024, 140555441545215, +STORE, 140555441545216, 140555441549311, +STORE, 140722484781056, 140722484785151, +STORE, 140722484768768, 140722484781055, +STORE, 140555441508352, 140555441537023, +STORE, 140555441500160, 140555441508351, +STORE, 140555435499520, 140555439296511, +SNULL, 140555435499520, 140555437158399, +STORE, 140555437158400, 140555439296511, +STORE, 140555435499520, 140555437158399, +SNULL, 140555439255551, 140555439296511, +STORE, 140555437158400, 140555439255551, +STORE, 140555439255552, 140555439296511, +SNULL, 140555439255552, 140555439280127, +STORE, 140555439280128, 140555439296511, +STORE, 140555439255552, 140555439280127, +ERASE, 140555439255552, 140555439280127, +STORE, 140555439255552, 140555439280127, +ERASE, 140555439280128, 140555439296511, +STORE, 140555439280128, 140555439296511, +SNULL, 140555439271935, 140555439280127, +STORE, 140555439255552, 140555439271935, +STORE, 140555439271936, 140555439280127, +SNULL, 94416707133439, 94416707137535, +STORE, 94416707125248, 94416707133439, +STORE, 94416707133440, 94416707137535, +SNULL, 140555441541119, 140555441545215, +STORE, 140555441537024, 140555441541119, +STORE, 140555441541120, 140555441545215, +ERASE, 140555441508352, 140555441537023, +STORE, 94416724672512, 94416724807679, +STORE, 94686636953600, 94686637166591, +STORE, 94686639263744, 94686639267839, +STORE, 94686639267840, 94686639276031, +STORE, 94686639276032, 94686639288319, +STORE, 94686662193152, 94686663163903, +STORE, 140312944431104, 140312946089983, +STORE, 140312946089984, 140312948187135, +STORE, 140312948187136, 140312948203519, +STORE, 140312948203520, 140312948211711, +STORE, 140312948211712, 140312948228095, +STORE, 140312948228096, 140312948240383, +STORE, 140312948240384, 140312950333439, +STORE, 140312950333440, 140312950337535, +STORE, 140312950337536, 140312950341631, +STORE, 140312950341632, 140312950484991, +STORE, 140312950853632, 140312952537087, +STORE, 140312952537088, 140312952553471, +STORE, 140312952582144, 140312952586239, +STORE, 140312952586240, 140312952590335, +STORE, 140312952590336, 140312952594431, +STORE, 140730598920192, 140730599059455, +STORE, 140730599108608, 140730599120895, +STORE, 140730599120896, 140730599124991, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140726234079232, 140737488351231, +SNULL, 140726234087423, 140737488351231, +STORE, 140726234079232, 140726234087423, +STORE, 140726233948160, 140726234087423, +STORE, 94589467578368, 94589469802495, +SNULL, 94589467688959, 94589469802495, +STORE, 94589467578368, 94589467688959, +STORE, 94589467688960, 94589469802495, +ERASE, 94589467688960, 94589469802495, +STORE, 94589469782016, 94589469794303, +STORE, 94589469794304, 94589469802495, +STORE, 140587082842112, 140587085094911, +SNULL, 140587082985471, 140587085094911, +STORE, 140587082842112, 140587082985471, +STORE, 140587082985472, 140587085094911, +ERASE, 140587082985472, 140587085094911, +STORE, 140587085082624, 140587085090815, +STORE, 140587085090816, 140587085094911, +STORE, 140726234103808, 140726234107903, +STORE, 140726234091520, 140726234103807, +STORE, 140587085053952, 140587085082623, +STORE, 140587085045760, 140587085053951, +STORE, 140587079045120, 140587082842111, +SNULL, 140587079045120, 140587080703999, +STORE, 140587080704000, 140587082842111, +STORE, 140587079045120, 140587080703999, +SNULL, 140587082801151, 140587082842111, +STORE, 140587080704000, 140587082801151, +STORE, 140587082801152, 140587082842111, +SNULL, 140587082801152, 140587082825727, +STORE, 140587082825728, 140587082842111, +STORE, 140587082801152, 140587082825727, +ERASE, 140587082801152, 140587082825727, +STORE, 140587082801152, 140587082825727, +ERASE, 140587082825728, 140587082842111, +STORE, 140587082825728, 140587082842111, +SNULL, 140587082817535, 140587082825727, +STORE, 140587082801152, 140587082817535, +STORE, 140587082817536, 140587082825727, +SNULL, 94589469790207, 94589469794303, +STORE, 94589469782016, 94589469790207, +STORE, 94589469790208, 94589469794303, +SNULL, 140587085086719, 140587085090815, +STORE, 140587085082624, 140587085086719, +STORE, 140587085086720, 140587085090815, +ERASE, 140587085053952, 140587085082623, +STORE, 94589477507072, 94589477642239, +STORE, 94225448325120, 94225448538111, +STORE, 94225450635264, 94225450639359, +STORE, 94225450639360, 94225450647551, +STORE, 94225450647552, 94225450659839, +STORE, 94225470246912, 94225473548287, +STORE, 140199245496320, 140199247155199, +STORE, 140199247155200, 140199249252351, +STORE, 140199249252352, 140199249268735, +STORE, 140199249268736, 140199249276927, +STORE, 140199249276928, 140199249293311, +STORE, 140199249293312, 140199249305599, +STORE, 140199249305600, 140199251398655, +STORE, 140199251398656, 140199251402751, +STORE, 140199251402752, 140199251406847, +STORE, 140199251406848, 140199251550207, +STORE, 140199251918848, 140199253602303, +STORE, 140199253602304, 140199253618687, +STORE, 140199253647360, 140199253651455, +STORE, 140199253651456, 140199253655551, +STORE, 140199253655552, 140199253659647, +STORE, 140726264414208, 140726264553471, +STORE, 140726265843712, 140726265855999, +STORE, 140726265856000, 140726265860095, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140733508358144, 140737488351231, +SNULL, 140733508366335, 140737488351231, +STORE, 140733508358144, 140733508366335, +STORE, 140733508227072, 140733508366335, +STORE, 94766263947264, 94766266171391, +SNULL, 94766264057855, 94766266171391, +STORE, 94766263947264, 94766264057855, +STORE, 94766264057856, 94766266171391, +ERASE, 94766264057856, 94766266171391, +STORE, 94766266150912, 94766266163199, +STORE, 94766266163200, 94766266171391, +STORE, 140693985132544, 140693987385343, +SNULL, 140693985275903, 140693987385343, +STORE, 140693985132544, 140693985275903, +STORE, 140693985275904, 140693987385343, +ERASE, 140693985275904, 140693987385343, +STORE, 140693987373056, 140693987381247, +STORE, 140693987381248, 140693987385343, +STORE, 140733509939200, 140733509943295, +STORE, 140733509926912, 140733509939199, +STORE, 140693987344384, 140693987373055, +STORE, 140693987336192, 140693987344383, +STORE, 140693981335552, 140693985132543, +SNULL, 140693981335552, 140693982994431, +STORE, 140693982994432, 140693985132543, +STORE, 140693981335552, 140693982994431, +SNULL, 140693985091583, 140693985132543, +STORE, 140693982994432, 140693985091583, +STORE, 140693985091584, 140693985132543, +SNULL, 140693985091584, 140693985116159, +STORE, 140693985116160, 140693985132543, +STORE, 140693985091584, 140693985116159, +ERASE, 140693985091584, 140693985116159, +STORE, 140693985091584, 140693985116159, +ERASE, 140693985116160, 140693985132543, +STORE, 140693985116160, 140693985132543, +SNULL, 140693985107967, 140693985116159, +STORE, 140693985091584, 140693985107967, +STORE, 140693985107968, 140693985116159, +SNULL, 94766266159103, 94766266163199, +STORE, 94766266150912, 94766266159103, +STORE, 94766266159104, 94766266163199, +SNULL, 140693987377151, 140693987381247, +STORE, 140693987373056, 140693987377151, +STORE, 140693987377152, 140693987381247, +ERASE, 140693987344384, 140693987373055, +STORE, 94766282035200, 94766282170367, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140724769353728, 140737488351231, +SNULL, 140724769361919, 140737488351231, +STORE, 140724769353728, 140724769361919, +STORE, 140724769222656, 140724769361919, +STORE, 94710460526592, 94710462750719, +SNULL, 94710460637183, 94710462750719, +STORE, 94710460526592, 94710460637183, +STORE, 94710460637184, 94710462750719, +ERASE, 94710460637184, 94710462750719, +STORE, 94710462730240, 94710462742527, +STORE, 94710462742528, 94710462750719, +STORE, 140469764395008, 140469766647807, +SNULL, 140469764538367, 140469766647807, +STORE, 140469764395008, 140469764538367, +STORE, 140469764538368, 140469766647807, +ERASE, 140469764538368, 140469766647807, +STORE, 140469766635520, 140469766643711, +STORE, 140469766643712, 140469766647807, +STORE, 140724770877440, 140724770881535, +STORE, 140724770865152, 140724770877439, +STORE, 140469766606848, 140469766635519, +STORE, 140469766598656, 140469766606847, +STORE, 140469760598016, 140469764395007, +SNULL, 140469760598016, 140469762256895, +STORE, 140469762256896, 140469764395007, +STORE, 140469760598016, 140469762256895, +SNULL, 140469764354047, 140469764395007, +STORE, 140469762256896, 140469764354047, +STORE, 140469764354048, 140469764395007, +SNULL, 140469764354048, 140469764378623, +STORE, 140469764378624, 140469764395007, +STORE, 140469764354048, 140469764378623, +ERASE, 140469764354048, 140469764378623, +STORE, 140469764354048, 140469764378623, +ERASE, 140469764378624, 140469764395007, +STORE, 140469764378624, 140469764395007, +SNULL, 140469764370431, 140469764378623, +STORE, 140469764354048, 140469764370431, +STORE, 140469764370432, 140469764378623, +SNULL, 94710462738431, 94710462742527, +STORE, 94710462730240, 94710462738431, +STORE, 94710462738432, 94710462742527, +SNULL, 140469766639615, 140469766643711, +STORE, 140469766635520, 140469766639615, +STORE, 140469766639616, 140469766643711, +ERASE, 140469766606848, 140469766635519, +STORE, 94710485581824, 94710485716991, +STORE, 94105755795456, 94105756008447, +STORE, 94105758105600, 94105758109695, +STORE, 94105758109696, 94105758117887, +STORE, 94105758117888, 94105758130175, +STORE, 94105788981248, 94105794871295, +STORE, 140641190031360, 140641191690239, +STORE, 140641191690240, 140641193787391, +STORE, 140641193787392, 140641193803775, +STORE, 140641193803776, 140641193811967, +STORE, 140641193811968, 140641193828351, +STORE, 140641193828352, 140641193840639, +STORE, 140641193840640, 140641195933695, +STORE, 140641195933696, 140641195937791, +STORE, 140641195937792, 140641195941887, +STORE, 140641195941888, 140641196085247, +STORE, 140641196453888, 140641198137343, +STORE, 140641198137344, 140641198153727, +STORE, 140641198182400, 140641198186495, +STORE, 140641198186496, 140641198190591, +STORE, 140641198190592, 140641198194687, +STORE, 140731980034048, 140731980173311, +STORE, 140731981078528, 140731981090815, +STORE, 140731981090816, 140731981094911, +STORE, 93828086431744, 93828086644735, +STORE, 93828088741888, 93828088745983, +STORE, 93828088745984, 93828088754175, +STORE, 93828088754176, 93828088766463, +STORE, 93828094193664, 93828096831487, +STORE, 139844717334528, 139844718993407, +STORE, 139844718993408, 139844721090559, +STORE, 139844721090560, 139844721106943, +STORE, 139844721106944, 139844721115135, +STORE, 139844721115136, 139844721131519, +STORE, 139844721131520, 139844721143807, +STORE, 139844721143808, 139844723236863, +STORE, 139844723236864, 139844723240959, +STORE, 139844723240960, 139844723245055, +STORE, 139844723245056, 139844723388415, +STORE, 139844723757056, 139844725440511, +STORE, 139844725440512, 139844725456895, +STORE, 139844725485568, 139844725489663, +STORE, 139844725489664, 139844725493759, +STORE, 139844725493760, 139844725497855, +STORE, 140729996185600, 140729996324863, +STORE, 140729996828672, 140729996840959, +STORE, 140729996840960, 140729996845055, +STORE, 140737488347136, 140737488351231, +STORE, 140722494771200, 140737488351231, +SNULL, 140722494775295, 140737488351231, +STORE, 140722494771200, 140722494775295, +STORE, 140722494640128, 140722494775295, +STORE, 94324011311104, 94324013535231, +SNULL, 94324011421695, 94324013535231, +STORE, 94324011311104, 94324011421695, +STORE, 94324011421696, 94324013535231, +ERASE, 94324011421696, 94324013535231, +STORE, 94324013514752, 94324013527039, +STORE, 94324013527040, 94324013535231, +STORE, 140151462309888, 140151464562687, +SNULL, 140151462453247, 140151464562687, +STORE, 140151462309888, 140151462453247, +STORE, 140151462453248, 140151464562687, +ERASE, 140151462453248, 140151464562687, +STORE, 140151464550400, 140151464558591, +STORE, 140151464558592, 140151464562687, +STORE, 140722495467520, 140722495471615, +STORE, 140722495455232, 140722495467519, +STORE, 140151464521728, 140151464550399, +STORE, 140151464513536, 140151464521727, +STORE, 140151458512896, 140151462309887, +SNULL, 140151458512896, 140151460171775, +STORE, 140151460171776, 140151462309887, +STORE, 140151458512896, 140151460171775, +SNULL, 140151462268927, 140151462309887, +STORE, 140151460171776, 140151462268927, +STORE, 140151462268928, 140151462309887, +SNULL, 140151462268928, 140151462293503, +STORE, 140151462293504, 140151462309887, +STORE, 140151462268928, 140151462293503, +ERASE, 140151462268928, 140151462293503, +STORE, 140151462268928, 140151462293503, +ERASE, 140151462293504, 140151462309887, +STORE, 140151462293504, 140151462309887, +SNULL, 140151462285311, 140151462293503, +STORE, 140151462268928, 140151462285311, +STORE, 140151462285312, 140151462293503, +SNULL, 94324013522943, 94324013527039, +STORE, 94324013514752, 94324013522943, +STORE, 94324013522944, 94324013527039, +SNULL, 140151464554495, 140151464558591, +STORE, 140151464550400, 140151464554495, +STORE, 140151464554496, 140151464558591, +ERASE, 140151464521728, 140151464550399, +STORE, 94324024778752, 94324024913919, +STORE, 94899262967808, 94899263180799, +STORE, 94899265277952, 94899265282047, +STORE, 94899265282048, 94899265290239, +STORE, 94899265290240, 94899265302527, +STORE, 94899295469568, 94899298689023, +STORE, 140434388418560, 140434390077439, +STORE, 140434390077440, 140434392174591, +STORE, 140434392174592, 140434392190975, +STORE, 140434392190976, 140434392199167, +STORE, 140434392199168, 140434392215551, +STORE, 140434392215552, 140434392227839, +STORE, 140434392227840, 140434394320895, +STORE, 140434394320896, 140434394324991, +STORE, 140434394324992, 140434394329087, +STORE, 140434394329088, 140434394472447, +STORE, 140434394841088, 140434396524543, +STORE, 140434396524544, 140434396540927, +STORE, 140434396569600, 140434396573695, +STORE, 140434396573696, 140434396577791, +STORE, 140434396577792, 140434396581887, +STORE, 140720618135552, 140720618274815, +STORE, 140720618418176, 140720618430463, +STORE, 140720618430464, 140720618434559, +STORE, 94425529798656, 94425530011647, +STORE, 94425532108800, 94425532112895, +STORE, 94425532112896, 94425532121087, +STORE, 94425532121088, 94425532133375, +STORE, 94425557753856, 94425566576639, +STORE, 140600528470016, 140600530128895, +STORE, 140600530128896, 140600532226047, +STORE, 140600532226048, 140600532242431, +STORE, 140600532242432, 140600532250623, +STORE, 140600532250624, 140600532267007, +STORE, 140600532267008, 140600532279295, +STORE, 140600532279296, 140600534372351, +STORE, 140600534372352, 140600534376447, +STORE, 140600534376448, 140600534380543, +STORE, 140600534380544, 140600534523903, +STORE, 140600534892544, 140600536575999, +STORE, 140600536576000, 140600536592383, +STORE, 140600536621056, 140600536625151, +STORE, 140600536625152, 140600536629247, +STORE, 140600536629248, 140600536633343, +STORE, 140721857785856, 140721857925119, +STORE, 140721858068480, 140721858080767, +STORE, 140721858080768, 140721858084863, +STORE, 94425529798656, 94425530011647, +STORE, 94425532108800, 94425532112895, +STORE, 94425532112896, 94425532121087, +STORE, 94425532121088, 94425532133375, +STORE, 94425557753856, 94425568772095, +STORE, 140600528470016, 140600530128895, +STORE, 140600530128896, 140600532226047, +STORE, 140600532226048, 140600532242431, +STORE, 140600532242432, 140600532250623, +STORE, 140600532250624, 140600532267007, +STORE, 140600532267008, 140600532279295, +STORE, 140600532279296, 140600534372351, +STORE, 140600534372352, 140600534376447, +STORE, 140600534376448, 140600534380543, +STORE, 140600534380544, 140600534523903, +STORE, 140600534892544, 140600536575999, +STORE, 140600536576000, 140600536592383, +STORE, 140600536621056, 140600536625151, +STORE, 140600536625152, 140600536629247, +STORE, 140600536629248, 140600536633343, +STORE, 140721857785856, 140721857925119, +STORE, 140721858068480, 140721858080767, +STORE, 140721858080768, 140721858084863, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140735611645952, 140737488351231, +SNULL, 140735611654143, 140737488351231, +STORE, 140735611645952, 140735611654143, +STORE, 140735611514880, 140735611654143, +STORE, 94592137641984, 94592139866111, +SNULL, 94592137752575, 94592139866111, +STORE, 94592137641984, 94592137752575, +STORE, 94592137752576, 94592139866111, +ERASE, 94592137752576, 94592139866111, +STORE, 94592139845632, 94592139857919, +STORE, 94592139857920, 94592139866111, +STORE, 140350425030656, 140350427283455, +SNULL, 140350425174015, 140350427283455, +STORE, 140350425030656, 140350425174015, +STORE, 140350425174016, 140350427283455, +ERASE, 140350425174016, 140350427283455, +STORE, 140350427271168, 140350427279359, +STORE, 140350427279360, 140350427283455, +STORE, 140735612043264, 140735612047359, +STORE, 140735612030976, 140735612043263, +STORE, 140350427242496, 140350427271167, +STORE, 140350427234304, 140350427242495, +STORE, 140350421233664, 140350425030655, +SNULL, 140350421233664, 140350422892543, +STORE, 140350422892544, 140350425030655, +STORE, 140350421233664, 140350422892543, +SNULL, 140350424989695, 140350425030655, +STORE, 140350422892544, 140350424989695, +STORE, 140350424989696, 140350425030655, +SNULL, 140350424989696, 140350425014271, +STORE, 140350425014272, 140350425030655, +STORE, 140350424989696, 140350425014271, +ERASE, 140350424989696, 140350425014271, +STORE, 140350424989696, 140350425014271, +ERASE, 140350425014272, 140350425030655, +STORE, 140350425014272, 140350425030655, +SNULL, 140350425006079, 140350425014271, +STORE, 140350424989696, 140350425006079, +STORE, 140350425006080, 140350425014271, +SNULL, 94592139853823, 94592139857919, +STORE, 94592139845632, 94592139853823, +STORE, 94592139853824, 94592139857919, +SNULL, 140350427275263, 140350427279359, +STORE, 140350427271168, 140350427275263, +STORE, 140350427275264, 140350427279359, +ERASE, 140350427242496, 140350427271167, +STORE, 94592164823040, 94592164958207, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140723500535808, 140737488351231, +SNULL, 140723500543999, 140737488351231, +STORE, 140723500535808, 140723500543999, +STORE, 140723500404736, 140723500543999, +STORE, 94458379010048, 94458381234175, +SNULL, 94458379120639, 94458381234175, +STORE, 94458379010048, 94458379120639, +STORE, 94458379120640, 94458381234175, +ERASE, 94458379120640, 94458381234175, +STORE, 94458381213696, 94458381225983, +STORE, 94458381225984, 94458381234175, +STORE, 139771674230784, 139771676483583, +SNULL, 139771674374143, 139771676483583, +STORE, 139771674230784, 139771674374143, +STORE, 139771674374144, 139771676483583, +ERASE, 139771674374144, 139771676483583, +STORE, 139771676471296, 139771676479487, +STORE, 139771676479488, 139771676483583, +STORE, 140723500769280, 140723500773375, +STORE, 140723500756992, 140723500769279, +STORE, 139771676442624, 139771676471295, +STORE, 139771676434432, 139771676442623, +STORE, 139771670433792, 139771674230783, +SNULL, 139771670433792, 139771672092671, +STORE, 139771672092672, 139771674230783, +STORE, 139771670433792, 139771672092671, +SNULL, 139771674189823, 139771674230783, +STORE, 139771672092672, 139771674189823, +STORE, 139771674189824, 139771674230783, +SNULL, 139771674189824, 139771674214399, +STORE, 139771674214400, 139771674230783, +STORE, 139771674189824, 139771674214399, +ERASE, 139771674189824, 139771674214399, +STORE, 139771674189824, 139771674214399, +ERASE, 139771674214400, 139771674230783, +STORE, 139771674214400, 139771674230783, +SNULL, 139771674206207, 139771674214399, +STORE, 139771674189824, 139771674206207, +STORE, 139771674206208, 139771674214399, +SNULL, 94458381221887, 94458381225983, +STORE, 94458381213696, 94458381221887, +STORE, 94458381221888, 94458381225983, +SNULL, 139771676475391, 139771676479487, +STORE, 139771676471296, 139771676475391, +STORE, 139771676475392, 139771676479487, +ERASE, 139771676442624, 139771676471295, +STORE, 94458401873920, 94458402009087, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140731316264960, 140737488351231, +SNULL, 140731316273151, 140737488351231, +STORE, 140731316264960, 140731316273151, +STORE, 140731316133888, 140731316273151, +STORE, 94437830881280, 94437833215999, +SNULL, 94437831094271, 94437833215999, +STORE, 94437830881280, 94437831094271, +STORE, 94437831094272, 94437833215999, +ERASE, 94437831094272, 94437833215999, +STORE, 94437833191424, 94437833203711, +STORE, 94437833203712, 94437833215999, +STORE, 140265986031616, 140265988284415, +SNULL, 140265986174975, 140265988284415, +STORE, 140265986031616, 140265986174975, +STORE, 140265986174976, 140265988284415, +ERASE, 140265986174976, 140265988284415, +STORE, 140265988272128, 140265988280319, +STORE, 140265988280320, 140265988284415, +STORE, 140731316318208, 140731316322303, +STORE, 140731316305920, 140731316318207, +STORE, 140265988243456, 140265988272127, +STORE, 140265988235264, 140265988243455, +STORE, 140265983918080, 140265986031615, +SNULL, 140265983918080, 140265983930367, +STORE, 140265983930368, 140265986031615, +STORE, 140265983918080, 140265983930367, +SNULL, 140265986023423, 140265986031615, +STORE, 140265983930368, 140265986023423, +STORE, 140265986023424, 140265986031615, +ERASE, 140265986023424, 140265986031615, +STORE, 140265986023424, 140265986031615, +STORE, 140265980121088, 140265983918079, +SNULL, 140265980121088, 140265981779967, +STORE, 140265981779968, 140265983918079, +STORE, 140265980121088, 140265981779967, +SNULL, 140265983877119, 140265983918079, +STORE, 140265981779968, 140265983877119, +STORE, 140265983877120, 140265983918079, +SNULL, 140265983877120, 140265983901695, +STORE, 140265983901696, 140265983918079, +STORE, 140265983877120, 140265983901695, +ERASE, 140265983877120, 140265983901695, +STORE, 140265983877120, 140265983901695, +ERASE, 140265983901696, 140265983918079, +STORE, 140265983901696, 140265983918079, +STORE, 140265988227072, 140265988243455, +SNULL, 140265983893503, 140265983901695, +STORE, 140265983877120, 140265983893503, +STORE, 140265983893504, 140265983901695, +SNULL, 140265986027519, 140265986031615, +STORE, 140265986023424, 140265986027519, +STORE, 140265986027520, 140265986031615, +SNULL, 94437833195519, 94437833203711, +STORE, 94437833191424, 94437833195519, +STORE, 94437833195520, 94437833203711, +SNULL, 140265988276223, 140265988280319, +STORE, 140265988272128, 140265988276223, +STORE, 140265988276224, 140265988280319, +ERASE, 140265988243456, 140265988272127, +STORE, 94437847638016, 94437847773183, +STORE, 140265986543616, 140265988227071, +STORE, 94437847638016, 94437847908351, +STORE, 94437847638016, 94437848043519, +STORE, 94437847638016, 94437848190975, +SNULL, 94437848178687, 94437848190975, +STORE, 94437847638016, 94437848178687, +STORE, 94437848178688, 94437848190975, +ERASE, 94437848178688, 94437848190975, +STORE, 94437847638016, 94437848330239, +STORE, 94437847638016, 94437848465407, +SNULL, 94437848444927, 94437848465407, +STORE, 94437847638016, 94437848444927, +STORE, 94437848444928, 94437848465407, +ERASE, 94437848444928, 94437848465407, +STORE, 94437847638016, 94437848584191, +STORE, 94437847638016, 94437848719359, +SNULL, 94437848678399, 94437848719359, +STORE, 94437847638016, 94437848678399, +STORE, 94437848678400, 94437848719359, +ERASE, 94437848678400, 94437848719359, +STORE, 94437847638016, 94437848842239, +SNULL, 94437848825855, 94437848842239, +STORE, 94437847638016, 94437848825855, +STORE, 94437848825856, 94437848842239, +ERASE, 94437848825856, 94437848842239, +STORE, 94437847638016, 94437848961023, +STORE, 94437847638016, 94437849096191, +STORE, 94661814710272, 94661814923263, +STORE, 94661817020416, 94661817024511, +STORE, 94661817024512, 94661817032703, +STORE, 94661817032704, 94661817044991, +STORE, 94661840424960, 94661841240063, +STORE, 140582259814400, 140582261473279, +STORE, 140582261473280, 140582263570431, +STORE, 140582263570432, 140582263586815, +STORE, 140582263586816, 140582263595007, +STORE, 140582263595008, 140582263611391, +STORE, 140582263611392, 140582263623679, +STORE, 140582263623680, 140582265716735, +STORE, 140582265716736, 140582265720831, +STORE, 140582265720832, 140582265724927, +STORE, 140582265724928, 140582265868287, +STORE, 140582266236928, 140582267920383, +STORE, 140582267920384, 140582267936767, +STORE, 140582267965440, 140582267969535, +STORE, 140582267969536, 140582267973631, +STORE, 140582267973632, 140582267977727, +STORE, 140735472508928, 140735472648191, +STORE, 140735472672768, 140735472685055, +STORE, 140735472685056, 140735472689151, +STORE, 94440069140480, 94440069353471, +STORE, 94440071450624, 94440071454719, +STORE, 94440071454720, 94440071462911, +STORE, 94440071462912, 94440071475199, +STORE, 94440072122368, 94440079048703, +STORE, 140112218095616, 140112219754495, +STORE, 140112219754496, 140112221851647, +STORE, 140112221851648, 140112221868031, +STORE, 140112221868032, 140112221876223, +STORE, 140112221876224, 140112221892607, +STORE, 140112221892608, 140112221904895, +STORE, 140112221904896, 140112223997951, +STORE, 140112223997952, 140112224002047, +STORE, 140112224002048, 140112224006143, +STORE, 140112224006144, 140112224149503, +STORE, 140112224518144, 140112226201599, +STORE, 140112226201600, 140112226217983, +STORE, 140112226246656, 140112226250751, +STORE, 140112226250752, 140112226254847, +STORE, 140112226254848, 140112226258943, +STORE, 140737460969472, 140737461108735, +STORE, 140737462083584, 140737462095871, +STORE, 140737462095872, 140737462099967, +STORE, 94257654345728, 94257654390783, +STORE, 94257656483840, 94257656487935, +STORE, 94257656487936, 94257656492031, +STORE, 94257656492032, 94257656496127, +STORE, 94257665859584, 94257665994751, +STORE, 140507070345216, 140507070386175, +STORE, 140507070386176, 140507072483327, +STORE, 140507072483328, 140507072487423, +STORE, 140507072487424, 140507072491519, +STORE, 140507072491520, 140507072516095, +STORE, 140507072516096, 140507072561151, +STORE, 140507072561152, 140507074654207, +STORE, 140507074654208, 140507074658303, +STORE, 140507074658304, 140507074662399, +STORE, 140507074662400, 140507074744319, +STORE, 140507074744320, 140507076841471, +STORE, 140507076841472, 140507076845567, +STORE, 140507076845568, 140507076849663, +STORE, 140507076849664, 140507076857855, +STORE, 140507076857856, 140507076886527, +STORE, 140507076886528, 140507078979583, +STORE, 140507078979584, 140507078983679, +STORE, 140507078983680, 140507078987775, +STORE, 140507078987776, 140507079086079, +STORE, 140507079086080, 140507081179135, +STORE, 140507081179136, 140507081183231, +STORE, 140507081183232, 140507081187327, +STORE, 140507081187328, 140507081203711, +STORE, 140507081203712, 140507081220095, +STORE, 140507081220096, 140507083317247, +STORE, 140507083317248, 140507083321343, +STORE, 140507083321344, 140507083325439, +STORE, 140507083325440, 140507083792383, +STORE, 140507083792384, 140507085885439, +STORE, 140507085885440, 140507085889535, +STORE, 140507085889536, 140507085893631, +STORE, 140507085893632, 140507085905919, +STORE, 140507085905920, 140507087998975, +STORE, 140507087998976, 140507088003071, +STORE, 140507088003072, 140507088007167, +STORE, 140507088007168, 140507088125951, +STORE, 140507088125952, 140507090219007, +STORE, 140507090219008, 140507090223103, +STORE, 140507090223104, 140507090227199, +STORE, 140507090227200, 140507090268159, +STORE, 140507090268160, 140507091927039, +STORE, 140507091927040, 140507094024191, +STORE, 140507094024192, 140507094040575, +STORE, 140507094040576, 140507094048767, +STORE, 140507094048768, 140507094065151, +STORE, 140507094065152, 140507094216703, +STORE, 140507094216704, 140507096309759, +STORE, 140507096309760, 140507096313855, +STORE, 140507096313856, 140507096317951, +STORE, 140507096317952, 140507096326143, +STORE, 140507096326144, 140507096379391, +STORE, 140507096379392, 140507098472447, +STORE, 140507098472448, 140507098476543, +STORE, 140507098476544, 140507098480639, +STORE, 140507098480640, 140507098623999, +STORE, 140507098980352, 140507100663807, +STORE, 140507100663808, 140507100692479, +STORE, 140507100721152, 140507100725247, +STORE, 140507100725248, 140507100729343, +STORE, 140507100729344, 140507100733439, +STORE, 140728152780800, 140728152915967, +STORE, 140728153698304, 140728153710591, +STORE, 140728153710592, 140728153714687, +STORE, 140507068137472, 140507070345215, +SNULL, 140507068137472, 140507068190719, +STORE, 140507068190720, 140507070345215, +STORE, 140507068137472, 140507068190719, +SNULL, 140507070287871, 140507070345215, +STORE, 140507068190720, 140507070287871, +STORE, 140507070287872, 140507070345215, +SNULL, 140507070287872, 140507070296063, +STORE, 140507070296064, 140507070345215, +STORE, 140507070287872, 140507070296063, +ERASE, 140507070287872, 140507070296063, +STORE, 140507070287872, 140507070296063, +ERASE, 140507070296064, 140507070345215, +STORE, 140507070296064, 140507070345215, +STORE, 140507100692480, 140507100721151, +STORE, 140507065810944, 140507068137471, +SNULL, 140507065810944, 140507065843711, +STORE, 140507065843712, 140507068137471, +STORE, 140507065810944, 140507065843711, +SNULL, 140507067940863, 140507068137471, +STORE, 140507065843712, 140507067940863, +STORE, 140507067940864, 140507068137471, +SNULL, 140507067940864, 140507067949055, +STORE, 140507067949056, 140507068137471, +STORE, 140507067940864, 140507067949055, +ERASE, 140507067940864, 140507067949055, +STORE, 140507067940864, 140507067949055, +ERASE, 140507067949056, 140507068137471, +STORE, 140507067949056, 140507068137471, +SNULL, 140507067944959, 140507067949055, +STORE, 140507067940864, 140507067944959, +STORE, 140507067944960, 140507067949055, +SNULL, 140507070291967, 140507070296063, +STORE, 140507070287872, 140507070291967, +STORE, 140507070291968, 140507070296063, +ERASE, 140507100692480, 140507100721151, +STORE, 140507063705600, 140507065810943, +SNULL, 140507063705600, 140507063709695, +STORE, 140507063709696, 140507065810943, +STORE, 140507063705600, 140507063709695, +SNULL, 140507065802751, 140507065810943, +STORE, 140507063709696, 140507065802751, +STORE, 140507065802752, 140507065810943, +ERASE, 140507065802752, 140507065810943, +STORE, 140507065802752, 140507065810943, +SNULL, 140507065806847, 140507065810943, +STORE, 140507065802752, 140507065806847, +STORE, 140507065806848, 140507065810943, +STORE, 140507061600256, 140507063705599, +SNULL, 140507061600256, 140507061604351, +STORE, 140507061604352, 140507063705599, +STORE, 140507061600256, 140507061604351, +SNULL, 140507063697407, 140507063705599, +STORE, 140507061604352, 140507063697407, +STORE, 140507063697408, 140507063705599, +ERASE, 140507063697408, 140507063705599, +STORE, 140507063697408, 140507063705599, +SNULL, 140507063701503, 140507063705599, +STORE, 140507063697408, 140507063701503, +STORE, 140507063701504, 140507063705599, +STORE, 140507059490816, 140507061600255, +SNULL, 140507059490816, 140507059499007, +STORE, 140507059499008, 140507061600255, +STORE, 140507059490816, 140507059499007, +SNULL, 140507061592063, 140507061600255, +STORE, 140507059499008, 140507061592063, +STORE, 140507061592064, 140507061600255, +ERASE, 140507061592064, 140507061600255, +STORE, 140507061592064, 140507061600255, +SNULL, 140507061596159, 140507061600255, +STORE, 140507061592064, 140507061596159, +STORE, 140507061596160, 140507061600255, +STORE, 140507057377280, 140507059490815, +SNULL, 140507057377280, 140507057389567, +STORE, 140507057389568, 140507059490815, +STORE, 140507057377280, 140507057389567, +SNULL, 140507059482623, 140507059490815, +STORE, 140507057389568, 140507059482623, +STORE, 140507059482624, 140507059490815, +ERASE, 140507059482624, 140507059490815, +STORE, 140507059482624, 140507059490815, +SNULL, 140507059486719, 140507059490815, +STORE, 140507059482624, 140507059486719, +STORE, 140507059486720, 140507059490815, +STORE, 140507055255552, 140507057377279, +SNULL, 140507055255552, 140507055276031, +STORE, 140507055276032, 140507057377279, +STORE, 140507055255552, 140507055276031, +SNULL, 140507057369087, 140507057377279, +STORE, 140507055276032, 140507057369087, +STORE, 140507057369088, 140507057377279, +ERASE, 140507057369088, 140507057377279, +STORE, 140507057369088, 140507057377279, +SNULL, 140507057373183, 140507057377279, +STORE, 140507057369088, 140507057373183, +STORE, 140507057373184, 140507057377279, +STORE, 140507098693632, 140507098980351, +SNULL, 140507098959871, 140507098980351, +STORE, 140507098693632, 140507098959871, +STORE, 140507098959872, 140507098980351, +SNULL, 140507098959872, 140507098976255, +STORE, 140507098976256, 140507098980351, +STORE, 140507098959872, 140507098976255, +ERASE, 140507098959872, 140507098976255, +STORE, 140507098959872, 140507098976255, +ERASE, 140507098976256, 140507098980351, +STORE, 140507098976256, 140507098980351, +STORE, 140507100692480, 140507100721151, +STORE, 140507053125632, 140507055255551, +SNULL, 140507053125632, 140507053154303, +STORE, 140507053154304, 140507055255551, +STORE, 140507053125632, 140507053154303, +SNULL, 140507055247359, 140507055255551, +STORE, 140507053154304, 140507055247359, +STORE, 140507055247360, 140507055255551, +ERASE, 140507055247360, 140507055255551, +STORE, 140507055247360, 140507055255551, +STORE, 140507051012096, 140507053125631, +SNULL, 140507051012096, 140507051024383, +STORE, 140507051024384, 140507053125631, +STORE, 140507051012096, 140507051024383, +SNULL, 140507053117439, 140507053125631, +STORE, 140507051024384, 140507053117439, +STORE, 140507053117440, 140507053125631, +ERASE, 140507053117440, 140507053125631, +STORE, 140507053117440, 140507053125631, +SNULL, 140507053121535, 140507053125631, +STORE, 140507053117440, 140507053121535, +STORE, 140507053121536, 140507053125631, +SNULL, 140507055251455, 140507055255551, +STORE, 140507055247360, 140507055251455, +STORE, 140507055251456, 140507055255551, +SNULL, 140507098972159, 140507098976255, +STORE, 140507098959872, 140507098972159, +STORE, 140507098972160, 140507098976255, +ERASE, 140507100692480, 140507100721151, +STORE, 140507100717056, 140507100721151, +ERASE, 140507100717056, 140507100721151, +STORE, 140507100717056, 140507100721151, +ERASE, 140507100717056, 140507100721151, +STORE, 140507100717056, 140507100721151, +ERASE, 140507100717056, 140507100721151, +STORE, 140507100717056, 140507100721151, +ERASE, 140507100717056, 140507100721151, +STORE, 140507100692480, 140507100721151, +ERASE, 140507068137472, 140507068190719, +ERASE, 140507068190720, 140507070287871, +ERASE, 140507070287872, 140507070291967, +ERASE, 140507070291968, 140507070296063, +ERASE, 140507070296064, 140507070345215, +ERASE, 140507065810944, 140507065843711, +ERASE, 140507065843712, 140507067940863, +ERASE, 140507067940864, 140507067944959, +ERASE, 140507067944960, 140507067949055, +ERASE, 140507067949056, 140507068137471, +ERASE, 140507063705600, 140507063709695, +ERASE, 140507063709696, 140507065802751, +ERASE, 140507065802752, 140507065806847, +ERASE, 140507065806848, 140507065810943, +ERASE, 140507061600256, 140507061604351, +ERASE, 140507061604352, 140507063697407, +ERASE, 140507063697408, 140507063701503, +ERASE, 140507063701504, 140507063705599, +ERASE, 140507059490816, 140507059499007, +ERASE, 140507059499008, 140507061592063, +ERASE, 140507061592064, 140507061596159, +ERASE, 140507061596160, 140507061600255, +ERASE, 140507057377280, 140507057389567, +ERASE, 140507057389568, 140507059482623, +ERASE, 140507059482624, 140507059486719, +ERASE, 140507059486720, 140507059490815, +ERASE, 140507055255552, 140507055276031, +ERASE, 140507055276032, 140507057369087, +ERASE, 140507057369088, 140507057373183, +ERASE, 140507057373184, 140507057377279, +ERASE, 140507098693632, 140507098959871, +ERASE, 140507098959872, 140507098972159, +ERASE, 140507098972160, 140507098976255, +ERASE, 140507098976256, 140507098980351, +ERASE, 140507051012096, 140507051024383, +ERASE, 140507051024384, 140507053117439, +ERASE, 140507053117440, 140507053121535, +ERASE, 140507053121536, 140507053125631, +STORE, 94036448296960, 94036448509951, +STORE, 94036450607104, 94036450611199, +STORE, 94036450611200, 94036450619391, +STORE, 94036450619392, 94036450631679, +STORE, 94036482445312, 94036502376447, +STORE, 140469487013888, 140469488672767, +STORE, 140469488672768, 140469490769919, +STORE, 140469490769920, 140469490786303, +STORE, 140469490786304, 140469490794495, +STORE, 140469490794496, 140469490810879, +STORE, 140469490810880, 140469490823167, +STORE, 140469490823168, 140469492916223, +STORE, 140469492916224, 140469492920319, +STORE, 140469492920320, 140469492924415, +STORE, 140469492924416, 140469493067775, +STORE, 140469493436416, 140469495119871, +STORE, 140469495119872, 140469495136255, +STORE, 140469495164928, 140469495169023, +STORE, 140469495169024, 140469495173119, +STORE, 140469495173120, 140469495177215, +STORE, 140732281446400, 140732281585663, +STORE, 140732282736640, 140732282748927, +STORE, 140732282748928, 140732282753023, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140723411931136, 140737488351231, +SNULL, 140723411939327, 140737488351231, +STORE, 140723411931136, 140723411939327, +STORE, 140723411800064, 140723411939327, +STORE, 93993768685568, 93993770909695, +SNULL, 93993768796159, 93993770909695, +STORE, 93993768685568, 93993768796159, +STORE, 93993768796160, 93993770909695, +ERASE, 93993768796160, 93993770909695, +STORE, 93993770889216, 93993770901503, +STORE, 93993770901504, 93993770909695, +STORE, 140508681740288, 140508683993087, +SNULL, 140508681883647, 140508683993087, +STORE, 140508681740288, 140508681883647, +STORE, 140508681883648, 140508683993087, +ERASE, 140508681883648, 140508683993087, +STORE, 140508683980800, 140508683988991, +STORE, 140508683988992, 140508683993087, +STORE, 140723412070400, 140723412074495, +STORE, 140723412058112, 140723412070399, +STORE, 140508683952128, 140508683980799, +STORE, 140508683943936, 140508683952127, +STORE, 140508677943296, 140508681740287, +SNULL, 140508677943296, 140508679602175, +STORE, 140508679602176, 140508681740287, +STORE, 140508677943296, 140508679602175, +SNULL, 140508681699327, 140508681740287, +STORE, 140508679602176, 140508681699327, +STORE, 140508681699328, 140508681740287, +SNULL, 140508681699328, 140508681723903, +STORE, 140508681723904, 140508681740287, +STORE, 140508681699328, 140508681723903, +ERASE, 140508681699328, 140508681723903, +STORE, 140508681699328, 140508681723903, +ERASE, 140508681723904, 140508681740287, +STORE, 140508681723904, 140508681740287, +SNULL, 140508681715711, 140508681723903, +STORE, 140508681699328, 140508681715711, +STORE, 140508681715712, 140508681723903, +SNULL, 93993770897407, 93993770901503, +STORE, 93993770889216, 93993770897407, +STORE, 93993770897408, 93993770901503, +SNULL, 140508683984895, 140508683988991, +STORE, 140508683980800, 140508683984895, +STORE, 140508683984896, 140508683988991, +ERASE, 140508683952128, 140508683980799, +STORE, 93993791582208, 93993791717375, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140734685458432, 140737488351231, +SNULL, 140734685466623, 140737488351231, +STORE, 140734685458432, 140734685466623, +STORE, 140734685327360, 140734685466623, +STORE, 93832321548288, 93832323772415, +SNULL, 93832321658879, 93832323772415, +STORE, 93832321548288, 93832321658879, +STORE, 93832321658880, 93832323772415, +ERASE, 93832321658880, 93832323772415, +STORE, 93832323751936, 93832323764223, +STORE, 93832323764224, 93832323772415, +STORE, 140650945118208, 140650947371007, +SNULL, 140650945261567, 140650947371007, +STORE, 140650945118208, 140650945261567, +STORE, 140650945261568, 140650947371007, +ERASE, 140650945261568, 140650947371007, +STORE, 140650947358720, 140650947366911, +STORE, 140650947366912, 140650947371007, +STORE, 140734686081024, 140734686085119, +STORE, 140734686068736, 140734686081023, +STORE, 140650947330048, 140650947358719, +STORE, 140650947321856, 140650947330047, +STORE, 140650941321216, 140650945118207, +SNULL, 140650941321216, 140650942980095, +STORE, 140650942980096, 140650945118207, +STORE, 140650941321216, 140650942980095, +SNULL, 140650945077247, 140650945118207, +STORE, 140650942980096, 140650945077247, +STORE, 140650945077248, 140650945118207, +SNULL, 140650945077248, 140650945101823, +STORE, 140650945101824, 140650945118207, +STORE, 140650945077248, 140650945101823, +ERASE, 140650945077248, 140650945101823, +STORE, 140650945077248, 140650945101823, +ERASE, 140650945101824, 140650945118207, +STORE, 140650945101824, 140650945118207, +SNULL, 140650945093631, 140650945101823, +STORE, 140650945077248, 140650945093631, +STORE, 140650945093632, 140650945101823, +SNULL, 93832323760127, 93832323764223, +STORE, 93832323751936, 93832323760127, +STORE, 93832323760128, 93832323764223, +SNULL, 140650947362815, 140650947366911, +STORE, 140650947358720, 140650947362815, +STORE, 140650947362816, 140650947366911, +ERASE, 140650947330048, 140650947358719, +STORE, 93832331890688, 93832332025855, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140728333520896, 140737488351231, +SNULL, 140728333529087, 140737488351231, +STORE, 140728333520896, 140728333529087, +STORE, 140728333389824, 140728333529087, +STORE, 94872734732288, 94872736956415, +SNULL, 94872734842879, 94872736956415, +STORE, 94872734732288, 94872734842879, +STORE, 94872734842880, 94872736956415, +ERASE, 94872734842880, 94872736956415, +STORE, 94872736935936, 94872736948223, +STORE, 94872736948224, 94872736956415, +STORE, 139755193257984, 139755195510783, +SNULL, 139755193401343, 139755195510783, +STORE, 139755193257984, 139755193401343, +STORE, 139755193401344, 139755195510783, +ERASE, 139755193401344, 139755195510783, +STORE, 139755195498496, 139755195506687, +STORE, 139755195506688, 139755195510783, +STORE, 140728333926400, 140728333930495, +STORE, 140728333914112, 140728333926399, +STORE, 139755195469824, 139755195498495, +STORE, 139755195461632, 139755195469823, +STORE, 139755189460992, 139755193257983, +SNULL, 139755189460992, 139755191119871, +STORE, 139755191119872, 139755193257983, +STORE, 139755189460992, 139755191119871, +SNULL, 139755193217023, 139755193257983, +STORE, 139755191119872, 139755193217023, +STORE, 139755193217024, 139755193257983, +SNULL, 139755193217024, 139755193241599, +STORE, 139755193241600, 139755193257983, +STORE, 139755193217024, 139755193241599, +ERASE, 139755193217024, 139755193241599, +STORE, 139755193217024, 139755193241599, +ERASE, 139755193241600, 139755193257983, +STORE, 139755193241600, 139755193257983, +SNULL, 139755193233407, 139755193241599, +STORE, 139755193217024, 139755193233407, +STORE, 139755193233408, 139755193241599, +SNULL, 94872736944127, 94872736948223, +STORE, 94872736935936, 94872736944127, +STORE, 94872736944128, 94872736948223, +SNULL, 139755195502591, 139755195506687, +STORE, 139755195498496, 139755195502591, +STORE, 139755195502592, 139755195506687, +ERASE, 139755195469824, 139755195498495, +STORE, 94872749744128, 94872749879295, +STORE, 94720243642368, 94720243855359, +STORE, 94720245952512, 94720245956607, +STORE, 94720245956608, 94720245964799, +STORE, 94720245964800, 94720245977087, +STORE, 94720277745664, 94720278151167, +STORE, 140453174497280, 140453176156159, +STORE, 140453176156160, 140453178253311, +STORE, 140453178253312, 140453178269695, +STORE, 140453178269696, 140453178277887, +STORE, 140453178277888, 140453178294271, +STORE, 140453178294272, 140453178306559, +STORE, 140453178306560, 140453180399615, +STORE, 140453180399616, 140453180403711, +STORE, 140453180403712, 140453180407807, +STORE, 140453180407808, 140453180551167, +STORE, 140453180919808, 140453182603263, +STORE, 140453182603264, 140453182619647, +STORE, 140453182648320, 140453182652415, +STORE, 140453182652416, 140453182656511, +STORE, 140453182656512, 140453182660607, +STORE, 140733223923712, 140733224062975, +STORE, 140733224808448, 140733224820735, +STORE, 140733224820736, 140733224824831, +STORE, 94321091141632, 94321091354623, +STORE, 94321093451776, 94321093455871, +STORE, 94321093455872, 94321093464063, +STORE, 94321093464064, 94321093476351, +STORE, 94321115873280, 94321117229055, +STORE, 139695978840064, 139695980498943, +STORE, 139695980498944, 139695982596095, +STORE, 139695982596096, 139695982612479, +STORE, 139695982612480, 139695982620671, +STORE, 139695982620672, 139695982637055, +STORE, 139695982637056, 139695982649343, +STORE, 139695982649344, 139695984742399, +STORE, 139695984742400, 139695984746495, +STORE, 139695984746496, 139695984750591, +STORE, 139695984750592, 139695984893951, +STORE, 139695985262592, 139695986946047, +STORE, 139695986946048, 139695986962431, +STORE, 139695986991104, 139695986995199, +STORE, 139695986995200, 139695986999295, +STORE, 139695986999296, 139695987003391, +STORE, 140734650564608, 140734650703871, +STORE, 140734650785792, 140734650798079, +STORE, 140734650798080, 140734650802175, +STORE, 94523438456832, 94523438669823, +STORE, 94523440766976, 94523440771071, +STORE, 94523440771072, 94523440779263, +STORE, 94523440779264, 94523440791551, +STORE, 94523464544256, 94523465842687, +STORE, 140453231493120, 140453233151999, +STORE, 140453233152000, 140453235249151, +STORE, 140453235249152, 140453235265535, +STORE, 140453235265536, 140453235273727, +STORE, 140453235273728, 140453235290111, +STORE, 140453235290112, 140453235302399, +STORE, 140453235302400, 140453237395455, +STORE, 140453237395456, 140453237399551, +STORE, 140453237399552, 140453237403647, +STORE, 140453237403648, 140453237547007, +STORE, 140453237915648, 140453239599103, +STORE, 140453239599104, 140453239615487, +STORE, 140453239644160, 140453239648255, +STORE, 140453239648256, 140453239652351, +STORE, 140453239652352, 140453239656447, +STORE, 140734679445504, 140734679584767, +STORE, 140734680018944, 140734680031231, +STORE, 140734680031232, 140734680035327, +STORE, 94614776987648, 94614777200639, +STORE, 94614779297792, 94614779301887, +STORE, 94614779301888, 94614779310079, +STORE, 94614779310080, 94614779322367, +STORE, 94614798467072, 94614800699391, +STORE, 139677037182976, 139677038841855, +STORE, 139677038841856, 139677040939007, +STORE, 139677040939008, 139677040955391, +STORE, 139677040955392, 139677040963583, +STORE, 139677040963584, 139677040979967, +STORE, 139677040979968, 139677040992255, +STORE, 139677040992256, 139677043085311, +STORE, 139677043085312, 139677043089407, +STORE, 139677043089408, 139677043093503, +STORE, 139677043093504, 139677043236863, +STORE, 139677043605504, 139677045288959, +STORE, 139677045288960, 139677045305343, +STORE, 139677045334016, 139677045338111, +STORE, 139677045338112, 139677045342207, +STORE, 139677045342208, 139677045346303, +STORE, 140721604411392, 140721604550655, +STORE, 140721606135808, 140721606148095, +STORE, 140721606148096, 140721606152191, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140729280544768, 140737488351231, +SNULL, 140729280552959, 140737488351231, +STORE, 140729280544768, 140729280552959, +STORE, 140729280413696, 140729280552959, +STORE, 94863939334144, 94863941558271, +SNULL, 94863939444735, 94863941558271, +STORE, 94863939334144, 94863939444735, +STORE, 94863939444736, 94863941558271, +ERASE, 94863939444736, 94863941558271, +STORE, 94863941537792, 94863941550079, +STORE, 94863941550080, 94863941558271, +STORE, 139691047276544, 139691049529343, +SNULL, 139691047419903, 139691049529343, +STORE, 139691047276544, 139691047419903, +STORE, 139691047419904, 139691049529343, +ERASE, 139691047419904, 139691049529343, +STORE, 139691049517056, 139691049525247, +STORE, 139691049525248, 139691049529343, +STORE, 140729281679360, 140729281683455, +STORE, 140729281667072, 140729281679359, +STORE, 139691049488384, 139691049517055, +STORE, 139691049480192, 139691049488383, +STORE, 139691043479552, 139691047276543, +SNULL, 139691043479552, 139691045138431, +STORE, 139691045138432, 139691047276543, +STORE, 139691043479552, 139691045138431, +SNULL, 139691047235583, 139691047276543, +STORE, 139691045138432, 139691047235583, +STORE, 139691047235584, 139691047276543, +SNULL, 139691047235584, 139691047260159, +STORE, 139691047260160, 139691047276543, +STORE, 139691047235584, 139691047260159, +ERASE, 139691047235584, 139691047260159, +STORE, 139691047235584, 139691047260159, +ERASE, 139691047260160, 139691047276543, +STORE, 139691047260160, 139691047276543, +SNULL, 139691047251967, 139691047260159, +STORE, 139691047235584, 139691047251967, +STORE, 139691047251968, 139691047260159, +SNULL, 94863941545983, 94863941550079, +STORE, 94863941537792, 94863941545983, +STORE, 94863941545984, 94863941550079, +SNULL, 139691049521151, 139691049525247, +STORE, 139691049517056, 139691049521151, +STORE, 139691049521152, 139691049525247, +ERASE, 139691049488384, 139691049517055, +STORE, 94863951294464, 94863951429631, +STORE, 93998209294336, 93998209507327, +STORE, 93998211604480, 93998211608575, +STORE, 93998211608576, 93998211616767, +STORE, 93998211616768, 93998211629055, +STORE, 93998227210240, 93998227615743, +STORE, 140243029913600, 140243031572479, +STORE, 140243031572480, 140243033669631, +STORE, 140243033669632, 140243033686015, +STORE, 140243033686016, 140243033694207, +STORE, 140243033694208, 140243033710591, +STORE, 140243033710592, 140243033722879, +STORE, 140243033722880, 140243035815935, +STORE, 140243035815936, 140243035820031, +STORE, 140243035820032, 140243035824127, +STORE, 140243035824128, 140243035967487, +STORE, 140243036336128, 140243038019583, +STORE, 140243038019584, 140243038035967, +STORE, 140243038064640, 140243038068735, +STORE, 140243038068736, 140243038072831, +STORE, 140243038072832, 140243038076927, +STORE, 140734976479232, 140734976618495, +STORE, 140734977978368, 140734977990655, +STORE, 140734977990656, 140734977994751, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140722742775808, 140737488351231, +SNULL, 140722742783999, 140737488351231, +STORE, 140722742775808, 140722742783999, +STORE, 140722742644736, 140722742783999, +STORE, 93857673662464, 93857675997183, +SNULL, 93857673875455, 93857675997183, +STORE, 93857673662464, 93857673875455, +STORE, 93857673875456, 93857675997183, +ERASE, 93857673875456, 93857675997183, +STORE, 93857675972608, 93857675984895, +STORE, 93857675984896, 93857675997183, +STORE, 140629677498368, 140629679751167, +SNULL, 140629677641727, 140629679751167, +STORE, 140629677498368, 140629677641727, +STORE, 140629677641728, 140629679751167, +ERASE, 140629677641728, 140629679751167, +STORE, 140629679738880, 140629679747071, +STORE, 140629679747072, 140629679751167, +STORE, 140722743222272, 140722743226367, +STORE, 140722743209984, 140722743222271, +STORE, 140629679710208, 140629679738879, +STORE, 140629679702016, 140629679710207, +STORE, 140629675384832, 140629677498367, +SNULL, 140629675384832, 140629675397119, +STORE, 140629675397120, 140629677498367, +STORE, 140629675384832, 140629675397119, +SNULL, 140629677490175, 140629677498367, +STORE, 140629675397120, 140629677490175, +STORE, 140629677490176, 140629677498367, +ERASE, 140629677490176, 140629677498367, +STORE, 140629677490176, 140629677498367, +STORE, 140629671587840, 140629675384831, +SNULL, 140629671587840, 140629673246719, +STORE, 140629673246720, 140629675384831, +STORE, 140629671587840, 140629673246719, +SNULL, 140629675343871, 140629675384831, +STORE, 140629673246720, 140629675343871, +STORE, 140629675343872, 140629675384831, +SNULL, 140629675343872, 140629675368447, +STORE, 140629675368448, 140629675384831, +STORE, 140629675343872, 140629675368447, +ERASE, 140629675343872, 140629675368447, +STORE, 140629675343872, 140629675368447, +ERASE, 140629675368448, 140629675384831, +STORE, 140629675368448, 140629675384831, +STORE, 140629679693824, 140629679710207, +SNULL, 140629675360255, 140629675368447, +STORE, 140629675343872, 140629675360255, +STORE, 140629675360256, 140629675368447, +SNULL, 140629677494271, 140629677498367, +STORE, 140629677490176, 140629677494271, +STORE, 140629677494272, 140629677498367, +SNULL, 93857675976703, 93857675984895, +STORE, 93857675972608, 93857675976703, +STORE, 93857675976704, 93857675984895, +SNULL, 140629679742975, 140629679747071, +STORE, 140629679738880, 140629679742975, +STORE, 140629679742976, 140629679747071, +ERASE, 140629679710208, 140629679738879, +STORE, 93857705832448, 93857705967615, +STORE, 140629678010368, 140629679693823, +STORE, 93857705832448, 93857706102783, +STORE, 93857705832448, 93857706237951, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140735922421760, 140737488351231, +SNULL, 140735922429951, 140737488351231, +STORE, 140735922421760, 140735922429951, +STORE, 140735922290688, 140735922429951, +STORE, 94651136139264, 94651138363391, +SNULL, 94651136249855, 94651138363391, +STORE, 94651136139264, 94651136249855, +STORE, 94651136249856, 94651138363391, +ERASE, 94651136249856, 94651138363391, +STORE, 94651138342912, 94651138355199, +STORE, 94651138355200, 94651138363391, +STORE, 140325788266496, 140325790519295, +SNULL, 140325788409855, 140325790519295, +STORE, 140325788266496, 140325788409855, +STORE, 140325788409856, 140325790519295, +ERASE, 140325788409856, 140325790519295, +STORE, 140325790507008, 140325790515199, +STORE, 140325790515200, 140325790519295, +STORE, 140735923572736, 140735923576831, +STORE, 140735923560448, 140735923572735, +STORE, 140325790478336, 140325790507007, +STORE, 140325790470144, 140325790478335, +STORE, 140325784469504, 140325788266495, +SNULL, 140325784469504, 140325786128383, +STORE, 140325786128384, 140325788266495, +STORE, 140325784469504, 140325786128383, +SNULL, 140325788225535, 140325788266495, +STORE, 140325786128384, 140325788225535, +STORE, 140325788225536, 140325788266495, +SNULL, 140325788225536, 140325788250111, +STORE, 140325788250112, 140325788266495, +STORE, 140325788225536, 140325788250111, +ERASE, 140325788225536, 140325788250111, +STORE, 140325788225536, 140325788250111, +ERASE, 140325788250112, 140325788266495, +STORE, 140325788250112, 140325788266495, +SNULL, 140325788241919, 140325788250111, +STORE, 140325788225536, 140325788241919, +STORE, 140325788241920, 140325788250111, +SNULL, 94651138351103, 94651138355199, +STORE, 94651138342912, 94651138351103, +STORE, 94651138351104, 94651138355199, +SNULL, 140325790511103, 140325790515199, +STORE, 140325790507008, 140325790511103, +STORE, 140325790511104, 140325790515199, +ERASE, 140325790478336, 140325790507007, +STORE, 94651146297344, 94651146432511, +STORE, 94212330168320, 94212330381311, +STORE, 94212332478464, 94212332482559, +STORE, 94212332482560, 94212332490751, +STORE, 94212332490752, 94212332503039, +STORE, 94212348891136, 94212349825023, +STORE, 140611630604288, 140611632263167, +STORE, 140611632263168, 140611634360319, +STORE, 140611634360320, 140611634376703, +STORE, 140611634376704, 140611634384895, +STORE, 140611634384896, 140611634401279, +STORE, 140611634401280, 140611634413567, +STORE, 140611634413568, 140611636506623, +STORE, 140611636506624, 140611636510719, +STORE, 140611636510720, 140611636514815, +STORE, 140611636514816, 140611636658175, +STORE, 140611637026816, 140611638710271, +STORE, 140611638710272, 140611638726655, +STORE, 140611638755328, 140611638759423, +STORE, 140611638759424, 140611638763519, +STORE, 140611638763520, 140611638767615, +STORE, 140726974533632, 140726974672895, +STORE, 140726974943232, 140726974955519, +STORE, 140726974955520, 140726974959615, +STORE, 94572463521792, 94572463734783, +STORE, 94572465831936, 94572465836031, +STORE, 94572465836032, 94572465844223, +STORE, 94572465844224, 94572465856511, +STORE, 94572491534336, 94572492865535, +STORE, 140644351492096, 140644353150975, +STORE, 140644353150976, 140644355248127, +STORE, 140644355248128, 140644355264511, +STORE, 140644355264512, 140644355272703, +STORE, 140644355272704, 140644355289087, +STORE, 140644355289088, 140644355301375, +STORE, 140644355301376, 140644357394431, +STORE, 140644357394432, 140644357398527, +STORE, 140644357398528, 140644357402623, +STORE, 140644357402624, 140644357545983, +STORE, 140644357914624, 140644359598079, +STORE, 140644359598080, 140644359614463, +STORE, 140644359643136, 140644359647231, +STORE, 140644359647232, 140644359651327, +STORE, 140644359651328, 140644359655423, +STORE, 140727841824768, 140727841964031, +STORE, 140727843188736, 140727843201023, +STORE, 140727843201024, 140727843205119, +STORE, 94144315457536, 94144315670527, +STORE, 94144317767680, 94144317771775, +STORE, 94144317771776, 94144317779967, +STORE, 94144317779968, 94144317792255, +STORE, 94144318369792, 94144320815103, +STORE, 140316717645824, 140316719304703, +STORE, 140316719304704, 140316721401855, +STORE, 140316721401856, 140316721418239, +STORE, 140316721418240, 140316721426431, +STORE, 140316721426432, 140316721442815, +STORE, 140316721442816, 140316721455103, +STORE, 140316721455104, 140316723548159, +STORE, 140316723548160, 140316723552255, +STORE, 140316723552256, 140316723556351, +STORE, 140316723556352, 140316723699711, +STORE, 140316724068352, 140316725751807, +STORE, 140316725751808, 140316725768191, +STORE, 140316725796864, 140316725800959, +STORE, 140316725800960, 140316725805055, +STORE, 140316725805056, 140316725809151, +STORE, 140725744283648, 140725744422911, +STORE, 140725745852416, 140725745864703, +STORE, 140725745864704, 140725745868799, +STORE, 94646858846208, 94646859059199, +STORE, 94646861156352, 94646861160447, +STORE, 94646861160448, 94646861168639, +STORE, 94646861168640, 94646861180927, +STORE, 94646879805440, 94646881894399, +STORE, 140435449745408, 140435451404287, +STORE, 140435451404288, 140435453501439, +STORE, 140435453501440, 140435453517823, +STORE, 140435453517824, 140435453526015, +STORE, 140435453526016, 140435453542399, +STORE, 140435453542400, 140435453554687, +STORE, 140435453554688, 140435455647743, +STORE, 140435455647744, 140435455651839, +STORE, 140435455651840, 140435455655935, +STORE, 140435455655936, 140435455799295, +STORE, 140435456167936, 140435457851391, +STORE, 140435457851392, 140435457867775, +STORE, 140435457896448, 140435457900543, +STORE, 140435457900544, 140435457904639, +STORE, 140435457904640, 140435457908735, +STORE, 140721033818112, 140721033957375, +STORE, 140721034018816, 140721034031103, +STORE, 140721034031104, 140721034035199, +STORE, 94872903438336, 94872903651327, +STORE, 94872905748480, 94872905752575, +STORE, 94872905752576, 94872905760767, +STORE, 94872905760768, 94872905773055, +STORE, 94872931246080, 94872931651583, +STORE, 139771607810048, 139771609468927, +STORE, 139771609468928, 139771611566079, +STORE, 139771611566080, 139771611582463, +STORE, 139771611582464, 139771611590655, +STORE, 139771611590656, 139771611607039, +STORE, 139771611607040, 139771611619327, +STORE, 139771611619328, 139771613712383, +STORE, 139771613712384, 139771613716479, +STORE, 139771613716480, 139771613720575, +STORE, 139771613720576, 139771613863935, +STORE, 139771614232576, 139771615916031, +STORE, 139771615916032, 139771615932415, +STORE, 139771615961088, 139771615965183, +STORE, 139771615965184, 139771615969279, +STORE, 139771615969280, 139771615973375, +STORE, 140725402931200, 140725403070463, +STORE, 140725403852800, 140725403865087, +STORE, 140725403865088, 140725403869183, +STORE, 94740737736704, 94740737949695, +STORE, 94740740046848, 94740740050943, +STORE, 94740740050944, 94740740059135, +STORE, 94740740059136, 94740740071423, +STORE, 94740743249920, 94740744724479, +STORE, 140640287010816, 140640288669695, +STORE, 140640288669696, 140640290766847, +STORE, 140640290766848, 140640290783231, +STORE, 140640290783232, 140640290791423, +STORE, 140640290791424, 140640290807807, +STORE, 140640290807808, 140640290820095, +STORE, 140640290820096, 140640292913151, +STORE, 140640292913152, 140640292917247, +STORE, 140640292917248, 140640292921343, +STORE, 140640292921344, 140640293064703, +STORE, 140640293433344, 140640295116799, +STORE, 140640295116800, 140640295133183, +STORE, 140640295161856, 140640295165951, +STORE, 140640295165952, 140640295170047, +STORE, 140640295170048, 140640295174143, +STORE, 140725133303808, 140725133443071, +STORE, 140725133684736, 140725133697023, +STORE, 140725133697024, 140725133701119, +STORE, 140737488347136, 140737488351231, +STORE, 140722826371072, 140737488351231, +SNULL, 140722826375167, 140737488351231, +STORE, 140722826371072, 140722826375167, +STORE, 140722826240000, 140722826375167, +STORE, 94113818611712, 94113820835839, +SNULL, 94113818722303, 94113820835839, +STORE, 94113818611712, 94113818722303, +STORE, 94113818722304, 94113820835839, +ERASE, 94113818722304, 94113820835839, +STORE, 94113820815360, 94113820827647, +STORE, 94113820827648, 94113820835839, +STORE, 139628194508800, 139628196761599, +SNULL, 139628194652159, 139628196761599, +STORE, 139628194508800, 139628194652159, +STORE, 139628194652160, 139628196761599, +ERASE, 139628194652160, 139628196761599, +STORE, 139628196749312, 139628196757503, +STORE, 139628196757504, 139628196761599, +STORE, 140722826727424, 140722826731519, +STORE, 140722826715136, 140722826727423, +STORE, 139628196720640, 139628196749311, +STORE, 139628196712448, 139628196720639, +STORE, 139628190711808, 139628194508799, +SNULL, 139628190711808, 139628192370687, +STORE, 139628192370688, 139628194508799, +STORE, 139628190711808, 139628192370687, +SNULL, 139628194467839, 139628194508799, +STORE, 139628192370688, 139628194467839, +STORE, 139628194467840, 139628194508799, +SNULL, 139628194467840, 139628194492415, +STORE, 139628194492416, 139628194508799, +STORE, 139628194467840, 139628194492415, +ERASE, 139628194467840, 139628194492415, +STORE, 139628194467840, 139628194492415, +ERASE, 139628194492416, 139628194508799, +STORE, 139628194492416, 139628194508799, +SNULL, 139628194484223, 139628194492415, +STORE, 139628194467840, 139628194484223, +STORE, 139628194484224, 139628194492415, +SNULL, 94113820823551, 94113820827647, +STORE, 94113820815360, 94113820823551, +STORE, 94113820823552, 94113820827647, +SNULL, 139628196753407, 139628196757503, +STORE, 139628196749312, 139628196753407, +STORE, 139628196753408, 139628196757503, +ERASE, 139628196720640, 139628196749311, +STORE, 94113830850560, 94113830985727, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140731865833472, 140737488351231, +SNULL, 140731865841663, 140737488351231, +STORE, 140731865833472, 140731865841663, +STORE, 140731865702400, 140731865841663, +STORE, 94763339386880, 94763341611007, +SNULL, 94763339497471, 94763341611007, +STORE, 94763339386880, 94763339497471, +STORE, 94763339497472, 94763341611007, +ERASE, 94763339497472, 94763341611007, +STORE, 94763341590528, 94763341602815, +STORE, 94763341602816, 94763341611007, +STORE, 139778398486528, 139778400739327, +SNULL, 139778398629887, 139778400739327, +STORE, 139778398486528, 139778398629887, +STORE, 139778398629888, 139778400739327, +ERASE, 139778398629888, 139778400739327, +STORE, 139778400727040, 139778400735231, +STORE, 139778400735232, 139778400739327, +STORE, 140731865858048, 140731865862143, +STORE, 140731865845760, 140731865858047, +STORE, 139778400698368, 139778400727039, +STORE, 139778400690176, 139778400698367, +STORE, 139778394689536, 139778398486527, +SNULL, 139778394689536, 139778396348415, +STORE, 139778396348416, 139778398486527, +STORE, 139778394689536, 139778396348415, +SNULL, 139778398445567, 139778398486527, +STORE, 139778396348416, 139778398445567, +STORE, 139778398445568, 139778398486527, +SNULL, 139778398445568, 139778398470143, +STORE, 139778398470144, 139778398486527, +STORE, 139778398445568, 139778398470143, +ERASE, 139778398445568, 139778398470143, +STORE, 139778398445568, 139778398470143, +ERASE, 139778398470144, 139778398486527, +STORE, 139778398470144, 139778398486527, +SNULL, 139778398461951, 139778398470143, +STORE, 139778398445568, 139778398461951, +STORE, 139778398461952, 139778398470143, +SNULL, 94763341598719, 94763341602815, +STORE, 94763341590528, 94763341598719, +STORE, 94763341598720, 94763341602815, +SNULL, 139778400731135, 139778400735231, +STORE, 139778400727040, 139778400731135, +STORE, 139778400731136, 139778400735231, +ERASE, 139778400698368, 139778400727039, +STORE, 94763362197504, 94763362332671, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140737488338944, 140737488351231, +STORE, 140732053192704, 140737488351231, +SNULL, 140732053204991, 140737488351231, +STORE, 140732053192704, 140732053204991, +STORE, 140732053061632, 140732053204991, +STORE, 4194304, 26279935, +STORE, 28372992, 28454911, +STORE, 28454912, 29806591, +STORE, 140176018599936, 140176020852735, +SNULL, 140176018743295, 140176020852735, +STORE, 140176018599936, 140176018743295, +STORE, 140176018743296, 140176020852735, +ERASE, 140176018743296, 140176020852735, +STORE, 140176020840448, 140176020848639, +STORE, 140176020848640, 140176020852735, +STORE, 140732053381120, 140732053385215, +STORE, 140732053368832, 140732053381119, +STORE, 140176020811776, 140176020840447, +STORE, 140176020803584, 140176020811775, +STORE, 140176014766080, 140176018599935, +SNULL, 140176014766080, 140176016474111, +STORE, 140176016474112, 140176018599935, +STORE, 140176014766080, 140176016474111, +SNULL, 140176018567167, 140176018599935, +STORE, 140176016474112, 140176018567167, +STORE, 140176018567168, 140176018599935, +ERASE, 140176018567168, 140176018599935, +STORE, 140176018567168, 140176018599935, +STORE, 140176012570624, 140176014766079, +SNULL, 140176012570624, 140176012664831, +STORE, 140176012664832, 140176014766079, +STORE, 140176012570624, 140176012664831, +SNULL, 140176014757887, 140176014766079, +STORE, 140176012664832, 140176014757887, +STORE, 140176014757888, 140176014766079, +ERASE, 140176014757888, 140176014766079, +STORE, 140176014757888, 140176014766079, +STORE, 140176010051584, 140176012570623, +SNULL, 140176010051584, 140176010465279, +STORE, 140176010465280, 140176012570623, +STORE, 140176010051584, 140176010465279, +SNULL, 140176012558335, 140176012570623, +STORE, 140176010465280, 140176012558335, +STORE, 140176012558336, 140176012570623, +ERASE, 140176012558336, 140176012570623, +STORE, 140176012558336, 140176012570623, +STORE, 140176007417856, 140176010051583, +SNULL, 140176007417856, 140176007946239, +STORE, 140176007946240, 140176010051583, +STORE, 140176007417856, 140176007946239, +SNULL, 140176010043391, 140176010051583, +STORE, 140176007946240, 140176010043391, +STORE, 140176010043392, 140176010051583, +ERASE, 140176010043392, 140176010051583, +STORE, 140176010043392, 140176010051583, +STORE, 140176005304320, 140176007417855, +SNULL, 140176005304320, 140176005316607, +STORE, 140176005316608, 140176007417855, +STORE, 140176005304320, 140176005316607, +SNULL, 140176007409663, 140176007417855, +STORE, 140176005316608, 140176007409663, +STORE, 140176007409664, 140176007417855, +ERASE, 140176007409664, 140176007417855, +STORE, 140176007409664, 140176007417855, +STORE, 140176003100672, 140176005304319, +SNULL, 140176003100672, 140176003203071, +STORE, 140176003203072, 140176005304319, +STORE, 140176003100672, 140176003203071, +SNULL, 140176005296127, 140176005304319, +STORE, 140176003203072, 140176005296127, +STORE, 140176005296128, 140176005304319, +ERASE, 140176005296128, 140176005304319, +STORE, 140176005296128, 140176005304319, +STORE, 140176020795392, 140176020811775, +STORE, 140175999938560, 140176003100671, +SNULL, 140175999938560, 140176000999423, +STORE, 140176000999424, 140176003100671, +STORE, 140175999938560, 140176000999423, +SNULL, 140176003092479, 140176003100671, +STORE, 140176000999424, 140176003092479, +STORE, 140176003092480, 140176003100671, +ERASE, 140176003092480, 140176003100671, +STORE, 140176003092480, 140176003100671, +STORE, 140175996141568, 140175999938559, +SNULL, 140175996141568, 140175997800447, +STORE, 140175997800448, 140175999938559, +STORE, 140175996141568, 140175997800447, +SNULL, 140175999897599, 140175999938559, +STORE, 140175997800448, 140175999897599, +STORE, 140175999897600, 140175999938559, +SNULL, 140175999897600, 140175999922175, +STORE, 140175999922176, 140175999938559, +STORE, 140175999897600, 140175999922175, +ERASE, 140175999897600, 140175999922175, +STORE, 140175999897600, 140175999922175, +ERASE, 140175999922176, 140175999938559, +STORE, 140175999922176, 140175999938559, +STORE, 140176020783104, 140176020811775, +SNULL, 140175999913983, 140175999922175, +STORE, 140175999897600, 140175999913983, +STORE, 140175999913984, 140175999922175, +SNULL, 140176003096575, 140176003100671, +STORE, 140176003092480, 140176003096575, +STORE, 140176003096576, 140176003100671, +SNULL, 140176005300223, 140176005304319, +STORE, 140176005296128, 140176005300223, +STORE, 140176005300224, 140176005304319, +SNULL, 140176007413759, 140176007417855, +STORE, 140176007409664, 140176007413759, +STORE, 140176007413760, 140176007417855, +SNULL, 140176010047487, 140176010051583, +STORE, 140176010043392, 140176010047487, +STORE, 140176010047488, 140176010051583, +SNULL, 140176012566527, 140176012570623, +STORE, 140176012558336, 140176012566527, +STORE, 140176012566528, 140176012570623, +SNULL, 140176014761983, 140176014766079, +STORE, 140176014757888, 140176014761983, +STORE, 140176014761984, 140176014766079, +SNULL, 140176018571263, 140176018599935, +STORE, 140176018567168, 140176018571263, +STORE, 140176018571264, 140176018599935, +SNULL, 28405759, 28454911, +STORE, 28372992, 28405759, +STORE, 28405760, 28454911, +SNULL, 140176020844543, 140176020848639, +STORE, 140176020840448, 140176020844543, +STORE, 140176020844544, 140176020848639, +ERASE, 140176020811776, 140176020840447, +STORE, 53080064, 53215231, +STORE, 140176019099648, 140176020783103, +STORE, 140176020836352, 140176020840447, +STORE, 140176018964480, 140176019099647, +STORE, 53080064, 53358591, +STORE, 140175994044416, 140175996141567, +STORE, 140176020828160, 140176020840447, +STORE, 140176020819968, 140176020840447, +STORE, 140176020783104, 140176020819967, +STORE, 140176018948096, 140176019099647, +STORE, 53080064, 53493759, +STORE, 53080064, 53649407, +STORE, 140176018939904, 140176019099647, +STORE, 140176018931712, 140176019099647, +STORE, 53080064, 53784575, +STORE, 53080064, 53919743, +STORE, 140176018915328, 140176019099647, +STORE, 140176018907136, 140176019099647, +STORE, 53080064, 54059007, +STORE, 140175993769984, 140175996141567, +STORE, 140176018747392, 140176019099647, +STORE, 53080064, 54198271, +SNULL, 54190079, 54198271, +STORE, 53080064, 54190079, +STORE, 54190080, 54198271, +ERASE, 54190080, 54198271, +SNULL, 54181887, 54190079, +STORE, 53080064, 54181887, +STORE, 54181888, 54190079, +ERASE, 54181888, 54190079, +SNULL, 54173695, 54181887, +STORE, 53080064, 54173695, +STORE, 54173696, 54181887, +ERASE, 54173696, 54181887, +SNULL, 54165503, 54173695, +STORE, 53080064, 54165503, +STORE, 54165504, 54173695, +ERASE, 54165504, 54173695, +STORE, 140175993753600, 140175996141567, +STORE, 140175993688064, 140175996141567, +STORE, 140175993655296, 140175996141567, +STORE, 140175991558144, 140175996141567, +STORE, 140175991492608, 140175996141567, +STORE, 53080064, 54312959, +STORE, 140175991361536, 140175996141567, +STORE, 140175991099392, 140175996141567, +STORE, 140175991091200, 140175996141567, +STORE, 140175991074816, 140175996141567, +STORE, 140175991066624, 140175996141567, +STORE, 140175991058432, 140175996141567, +STORE, 53080064, 54448127, +SNULL, 54439935, 54448127, +STORE, 53080064, 54439935, +STORE, 54439936, 54448127, +ERASE, 54439936, 54448127, +SNULL, 54431743, 54439935, +STORE, 53080064, 54431743, +STORE, 54431744, 54439935, +ERASE, 54431744, 54439935, +SNULL, 54419455, 54431743, +STORE, 53080064, 54419455, +STORE, 54419456, 54431743, +ERASE, 54419456, 54431743, +SNULL, 54403071, 54419455, +STORE, 53080064, 54403071, +STORE, 54403072, 54419455, +ERASE, 54403072, 54419455, +STORE, 140175991042048, 140175996141567, +STORE, 53080064, 54538239, +SNULL, 54534143, 54538239, +STORE, 53080064, 54534143, +STORE, 54534144, 54538239, +ERASE, 54534144, 54538239, +SNULL, 54530047, 54534143, +STORE, 53080064, 54530047, +STORE, 54530048, 54534143, +ERASE, 54530048, 54534143, +SNULL, 54525951, 54530047, +STORE, 53080064, 54525951, +STORE, 54525952, 54530047, +ERASE, 54525952, 54530047, +SNULL, 54521855, 54525951, +STORE, 53080064, 54521855, +STORE, 54521856, 54525951, +ERASE, 54521856, 54525951, +SNULL, 54517759, 54521855, +STORE, 53080064, 54517759, +STORE, 54517760, 54521855, +ERASE, 54517760, 54521855, +SNULL, 54513663, 54517759, +STORE, 53080064, 54513663, +STORE, 54513664, 54517759, +ERASE, 54513664, 54517759, +SNULL, 54509567, 54513663, +STORE, 53080064, 54509567, +STORE, 54509568, 54513663, +ERASE, 54509568, 54513663, +STORE, 140175991025664, 140175996141567, +STORE, 140175990992896, 140175996141567, +STORE, 53080064, 54644735, +SNULL, 54628351, 54644735, +STORE, 53080064, 54628351, +STORE, 54628352, 54644735, +ERASE, 54628352, 54644735, +SNULL, 54616063, 54628351, +STORE, 53080064, 54616063, +STORE, 54616064, 54628351, +ERASE, 54616064, 54628351, +STORE, 140175988895744, 140175996141567, +STORE, 53080064, 54767615, +STORE, 140175988879360, 140175996141567, +STORE, 140175988617216, 140175996141567, +STORE, 140175988609024, 140175996141567, +STORE, 140175988600832, 140175996141567, +STORE, 53080064, 54906879, +SNULL, 54898687, 54906879, +STORE, 53080064, 54898687, +STORE, 54898688, 54906879, +ERASE, 54898688, 54906879, +SNULL, 54853631, 54898687, +STORE, 53080064, 54853631, +STORE, 54853632, 54898687, +ERASE, 54853632, 54898687, +STORE, 140175986503680, 140175996141567, +STORE, 53080064, 54996991, +STORE, 140175986495488, 140175996141567, +STORE, 140175986487296, 140175996141567, +STORE, 140175985438720, 140175996141567, +STORE, 53080064, 55136255, +STORE, 140175985405952, 140175996141567, +STORE, 140175985139712, 140175996141567, +SNULL, 140176018964479, 140176019099647, +STORE, 140176018747392, 140176018964479, +STORE, 140176018964480, 140176019099647, +ERASE, 140176018964480, 140176019099647, +STORE, 140175983042560, 140175996141567, +STORE, 140175982518272, 140175996141567, +STORE, 140175980421120, 140175996141567, +STORE, 53080064, 55287807, +STORE, 53080064, 55427071, +STORE, 140176019091456, 140176019099647, +STORE, 140176019083264, 140176019099647, +STORE, 140176019075072, 140176019099647, +STORE, 140176019066880, 140176019099647, +STORE, 140176019058688, 140176019099647, +STORE, 140175980158976, 140175996141567, +STORE, 140176019050496, 140176019099647, +STORE, 140176019042304, 140176019099647, +STORE, 140176019034112, 140176019099647, +STORE, 140176019025920, 140176019099647, +STORE, 140176019017728, 140176019099647, +STORE, 140176019009536, 140176019099647, +STORE, 140176019001344, 140176019099647, +STORE, 140176018993152, 140176019099647, +STORE, 140176018984960, 140176019099647, +STORE, 140176018976768, 140176019099647, +STORE, 140176018968576, 140176019099647, +STORE, 140175978061824, 140175996141567, +STORE, 53080064, 55603199, +STORE, 140175978029056, 140175996141567, +STORE, 140175977996288, 140175996141567, +STORE, 53080064, 55738367, +STORE, 53080064, 55881727, +STORE, 140175977963520, 140175996141567, +STORE, 140175977930752, 140175996141567, +STORE, 53080064, 56041471, +STORE, 140175977897984, 140175996141567, +STORE, 140175977865216, 140175996141567, +SNULL, 55881727, 56041471, +STORE, 53080064, 55881727, +STORE, 55881728, 56041471, +ERASE, 55881728, 56041471, +SNULL, 55721983, 55881727, +STORE, 53080064, 55721983, +STORE, 55721984, 55881727, +ERASE, 55721984, 55881727, +SNULL, 55570431, 55721983, +STORE, 53080064, 55570431, +STORE, 55570432, 55721983, +ERASE, 55570432, 55721983, +STORE, 140175977857024, 140175996141567, +STORE, 140175975759872, 140175996141567, +STORE, 53080064, 55754751, +STORE, 53080064, 55943167, +STORE, 140175975751680, 140175996141567, +STORE, 140175975743488, 140175996141567, +STORE, 140175975735296, 140175996141567, +STORE, 140175975727104, 140175996141567, +STORE, 140175975718912, 140175996141567, +STORE, 140175975710720, 140175996141567, +STORE, 140175975702528, 140175996141567, +STORE, 140175975694336, 140175996141567, +STORE, 140175975686144, 140175996141567, +STORE, 140175975677952, 140175996141567, +STORE, 140175975669760, 140175996141567, +STORE, 140175974621184, 140175996141567, +STORE, 140175974612992, 140175996141567, +STORE, 53080064, 56139775, +STORE, 140175972515840, 140175996141567, +STORE, 53080064, 56401919, +STORE, 140175970418688, 140175996141567, +STORE, 140175970410496, 140175996141567, +STORE, 140175970402304, 140175996141567, +STORE, 140175970394112, 140175996141567, +STORE, 53080064, 56569855, +STORE, 140175969865728, 140175996141567, +SNULL, 140175985139711, 140175996141567, +STORE, 140175969865728, 140175985139711, +STORE, 140175985139712, 140175996141567, +SNULL, 140175985139712, 140175985405951, +STORE, 140175985405952, 140175996141567, +STORE, 140175985139712, 140175985405951, +ERASE, 140175985139712, 140175985405951, +STORE, 140175965671424, 140175985139711, +STORE, 140175985397760, 140175996141567, +STORE, 140175985389568, 140175996141567, +STORE, 140175985381376, 140175996141567, +STORE, 140175985373184, 140175996141567, +STORE, 140175985364992, 140175996141567, +STORE, 140175985356800, 140175996141567, +STORE, 140175985348608, 140175996141567, +STORE, 140175985340416, 140175996141567, +STORE, 140175985332224, 140175996141567, +STORE, 140175985324032, 140175996141567, +STORE, 140175985315840, 140175996141567, +STORE, 140175985307648, 140175996141567, +STORE, 140175985299456, 140175996141567, +STORE, 140175985291264, 140175996141567, +STORE, 140175985283072, 140175996141567, +STORE, 140175985274880, 140175996141567, +STORE, 140175963574272, 140175985139711, +STORE, 140175985266688, 140175996141567, +STORE, 140175961477120, 140175985139711, +STORE, 53080064, 56831999, +STORE, 140175959379968, 140175985139711, +STORE, 140175985258496, 140175996141567, +STORE, 140175957282816, 140175985139711, +STORE, 140175985250304, 140175996141567, +STORE, 140175985242112, 140175996141567, +STORE, 140175985233920, 140175996141567, +STORE, 140175985225728, 140175996141567, +STORE, 140175985217536, 140175996141567, +STORE, 140175957151744, 140175985139711, +STORE, 140175956627456, 140175985139711, +SNULL, 140175980158975, 140175985139711, +STORE, 140175956627456, 140175980158975, +STORE, 140175980158976, 140175985139711, +SNULL, 140175980158976, 140175980421119, +STORE, 140175980421120, 140175985139711, +STORE, 140175980158976, 140175980421119, +ERASE, 140175980158976, 140175980421119, +STORE, 140175954530304, 140175980158975, +STORE, 140175985209344, 140175996141567, +STORE, 53080064, 57094143, +STORE, 140175952433152, 140175980158975, +STORE, 140175985192960, 140175996141567, +STORE, 140175985184768, 140175996141567, +STORE, 140175985176576, 140175996141567, +STORE, 140175985168384, 140175996141567, +STORE, 140175985160192, 140175996141567, +STORE, 140175985152000, 140175996141567, +STORE, 140175985143808, 140175996141567, +STORE, 140175980412928, 140175985139711, +STORE, 140175980404736, 140175985139711, +STORE, 140175980396544, 140175985139711, +STORE, 140175980388352, 140175985139711, +STORE, 140175980380160, 140175985139711, +STORE, 140175980371968, 140175985139711, +STORE, 140175980363776, 140175985139711, +STORE, 140175980355584, 140175985139711, +STORE, 140175980347392, 140175985139711, +STORE, 140175980339200, 140175985139711, +STORE, 53080064, 57356287, +SNULL, 140176018747392, 140176018907135, +STORE, 140176018907136, 140176018964479, +STORE, 140176018747392, 140176018907135, +ERASE, 140176018747392, 140176018907135, +STORE, 140175952146432, 140175980158975, +STORE, 140175950049280, 140175980158975, +SNULL, 140175952146431, 140175980158975, +STORE, 140175950049280, 140175952146431, +STORE, 140175952146432, 140175980158975, +SNULL, 140175952146432, 140175952433151, +STORE, 140175952433152, 140175980158975, +STORE, 140175952146432, 140175952433151, +ERASE, 140175952146432, 140175952433151, +STORE, 140176018898944, 140176018964479, +STORE, 53080064, 57749503, +STORE, 140175949520896, 140175952146431, +STORE, 140175947423744, 140175952146431, +SNULL, 140175993769983, 140175996141567, +STORE, 140175985143808, 140175993769983, +STORE, 140175993769984, 140175996141567, +SNULL, 140175993769984, 140175994044415, +STORE, 140175994044416, 140175996141567, +STORE, 140175993769984, 140175994044415, +ERASE, 140175993769984, 140175994044415, +STORE, 140176018890752, 140176018964479, +STORE, 140176018882560, 140176018964479, +STORE, 140176018874368, 140176018964479, +STORE, 140176018866176, 140176018964479, +STORE, 140176018849792, 140176018964479, +STORE, 140176018841600, 140176018964479, +STORE, 140176018825216, 140176018964479, +STORE, 140176018817024, 140176018964479, +STORE, 140176018800640, 140176018964479, +STORE, 140176018792448, 140176018964479, +STORE, 140176018759680, 140176018964479, +STORE, 140176018751488, 140176018964479, +STORE, 140175994028032, 140175996141567, +STORE, 140176018743296, 140176018964479, +STORE, 140175994011648, 140175996141567, +STORE, 140175994003456, 140175996141567, +STORE, 140175993987072, 140175996141567, +STORE, 140175993978880, 140175996141567, +STORE, 140175993946112, 140175996141567, +STORE, 140175993937920, 140175996141567, +STORE, 140175993921536, 140175996141567, +STORE, 140175993913344, 140175996141567, +STORE, 140175993896960, 140175996141567, +STORE, 140175993888768, 140175996141567, +STORE, 140175993872384, 140175996141567, +STORE, 140175993864192, 140175996141567, +STORE, 140175993831424, 140175996141567, +STORE, 140175993823232, 140175996141567, +STORE, 140175993806848, 140175996141567, +STORE, 140175993798656, 140175996141567, +STORE, 140175993782272, 140175996141567, +STORE, 140175993774080, 140175996141567, +STORE, 140175980322816, 140175985139711, +STORE, 140175980314624, 140175985139711, +STORE, 140175980281856, 140175985139711, +STORE, 140175980273664, 140175985139711, +STORE, 140175980257280, 140175985139711, +STORE, 140175945326592, 140175952146431, +STORE, 140175980249088, 140175985139711, +STORE, 140175980232704, 140175985139711, +STORE, 140175980224512, 140175985139711, +STORE, 140175980208128, 140175985139711, +STORE, 140175980199936, 140175985139711, +STORE, 140175980167168, 140175985139711, +STORE, 140175952433152, 140175985139711, +STORE, 140175952416768, 140175985139711, +STORE, 140175952408576, 140175985139711, +STORE, 140175952392192, 140175985139711, +STORE, 140175952384000, 140175985139711, +STORE, 140175952367616, 140175985139711, +STORE, 140175943229440, 140175952146431, +STORE, 140175952359424, 140175985139711, +STORE, 140175952326656, 140175985139711, +STORE, 140175952318464, 140175985139711, +STORE, 140175952302080, 140175985139711, +STORE, 140175952293888, 140175985139711, +STORE, 140175952277504, 140175985139711, +STORE, 140175952269312, 140175985139711, +STORE, 140175952252928, 140175985139711, +STORE, 140175952244736, 140175985139711, +STORE, 140175952211968, 140175985139711, +STORE, 140175952203776, 140175985139711, +STORE, 140175952187392, 140175985139711, +STORE, 140175952179200, 140175985139711, +STORE, 140175952162816, 140175985139711, +STORE, 140175952154624, 140175985139711, +STORE, 140175943213056, 140175952146431, +STORE, 140175943213056, 140175985139711, +STORE, 140175943180288, 140175985139711, +STORE, 140175943172096, 140175985139711, +STORE, 140175943155712, 140175985139711, +STORE, 140175943147520, 140175985139711, +STORE, 140175943131136, 140175985139711, +STORE, 140175943122944, 140175985139711, +STORE, 140175943106560, 140175985139711, +STORE, 140175943098368, 140175985139711, +STORE, 140175943065600, 140175985139711, +STORE, 140175943057408, 140175985139711, +STORE, 140175943041024, 140175985139711, +STORE, 140175943032832, 140175985139711, +STORE, 140175943016448, 140175985139711, +STORE, 140175943008256, 140175985139711, +STORE, 140175942991872, 140175985139711, +STORE, 140175942983680, 140175985139711, +STORE, 140175942950912, 140175985139711, +STORE, 140175942942720, 140175985139711, +STORE, 140175942926336, 140175985139711, +STORE, 140175942918144, 140175985139711, +STORE, 140175942901760, 140175985139711, +STORE, 140175942893568, 140175985139711, +STORE, 140175942877184, 140175985139711, +STORE, 140175942868992, 140175985139711, +STORE, 140175942836224, 140175985139711, +STORE, 140175942828032, 140175985139711, +STORE, 140175942811648, 140175985139711, +STORE, 140175942803456, 140175985139711, +STORE, 140175942787072, 140175985139711, +STORE, 140175942778880, 140175985139711, +STORE, 140175942762496, 140175985139711, +STORE, 140175942754304, 140175985139711, +STORE, 140175942721536, 140175985139711, +STORE, 140175942713344, 140175985139711, +STORE, 140175942696960, 140175985139711, +STORE, 140175942688768, 140175985139711, +STORE, 140175942672384, 140175985139711, +STORE, 140175942664192, 140175985139711, +STORE, 140175942647808, 140175985139711, +STORE, 140175942639616, 140175985139711, +STORE, 140175942606848, 140175985139711, +STORE, 140175942598656, 140175985139711, +STORE, 140175942582272, 140175985139711, +STORE, 140175942574080, 140175985139711, +STORE, 140175942557696, 140175985139711, +STORE, 140175942549504, 140175985139711, +STORE, 140175942533120, 140175985139711, +STORE, 140175942524928, 140175985139711, +STORE, 140175942492160, 140175985139711, +STORE, 140175942483968, 140175985139711, +STORE, 140175942467584, 140175985139711, +STORE, 140175942459392, 140175985139711, +STORE, 140175942443008, 140175985139711, +STORE, 140175942434816, 140175985139711, +STORE, 140175942418432, 140175985139711, +STORE, 140175942410240, 140175985139711, +STORE, 140175942377472, 140175985139711, +STORE, 140175942369280, 140175985139711, +STORE, 140175942352896, 140175985139711, +STORE, 140175942344704, 140175985139711, +STORE, 140175942328320, 140175985139711, +STORE, 140175942320128, 140175985139711, +STORE, 140175942303744, 140175985139711, +STORE, 140175942295552, 140175985139711, +STORE, 140175942262784, 140175985139711, +STORE, 140175942254592, 140175985139711, +STORE, 140175942238208, 140175985139711, +STORE, 140175942230016, 140175985139711, +STORE, 140175942213632, 140175985139711, +STORE, 140175942205440, 140175985139711, +STORE, 140175942189056, 140175985139711, +STORE, 140175942180864, 140175985139711, +STORE, 140175942148096, 140175985139711, +STORE, 140175942139904, 140175985139711, +STORE, 140175942123520, 140175985139711, +STORE, 140175942115328, 140175985139711, +STORE, 140175942098944, 140175985139711, +STORE, 140175942090752, 140175985139711, +STORE, 140175942074368, 140175985139711, +STORE, 140175942066176, 140175985139711, +STORE, 140175942033408, 140175985139711, +STORE, 140175942025216, 140175985139711, +STORE, 140175942008832, 140175985139711, +STORE, 140175942000640, 140175985139711, +STORE, 140175941984256, 140175985139711, +STORE, 140175941976064, 140175985139711, +STORE, 140175941959680, 140175985139711, +STORE, 140175939862528, 140175985139711, +STORE, 140175939854336, 140175985139711, +STORE, 140175939821568, 140175985139711, +STORE, 140175939813376, 140175985139711, +STORE, 140175939796992, 140175985139711, +STORE, 140175939788800, 140175985139711, +STORE, 140175939772416, 140175985139711, +STORE, 140175939764224, 140175985139711, +STORE, 140175939747840, 140175985139711, +STORE, 140175939739648, 140175985139711, +STORE, 140175939706880, 140175985139711, +STORE, 140175939698688, 140175985139711, +STORE, 140175939682304, 140175985139711, +STORE, 140175939674112, 140175985139711, +STORE, 140175939657728, 140175985139711, +STORE, 140175939649536, 140175985139711, +STORE, 140175939633152, 140175985139711, +STORE, 140175939624960, 140175985139711, +STORE, 140175939592192, 140175985139711, +STORE, 140175939584000, 140175985139711, +STORE, 140175939567616, 140175985139711, +STORE, 140175939559424, 140175985139711, +STORE, 140175939543040, 140175985139711, +STORE, 140175939534848, 140175985139711, +STORE, 140175939518464, 140175985139711, +STORE, 140175939510272, 140175985139711, +STORE, 140175939477504, 140175985139711, +STORE, 140175939469312, 140175985139711, +STORE, 140175939452928, 140175985139711, +STORE, 140175939444736, 140175985139711, +STORE, 140175939428352, 140175985139711, +STORE, 140175939420160, 140175985139711, +STORE, 140175939403776, 140175985139711, +STORE, 140175939395584, 140175985139711, +STORE, 140175939362816, 140175985139711, +STORE, 140175939354624, 140175985139711, +STORE, 140175939338240, 140175985139711, +STORE, 140175939330048, 140175985139711, +STORE, 140175939313664, 140175985139711, +STORE, 140175939305472, 140175985139711, +STORE, 140175939289088, 140175985139711, +STORE, 140175939280896, 140175985139711, +STORE, 140175939248128, 140175985139711, +STORE, 140175939239936, 140175985139711, +STORE, 140175939223552, 140175985139711, +STORE, 140175939215360, 140175985139711, +STORE, 140175939198976, 140175985139711, +STORE, 140175939190784, 140175985139711, +STORE, 140175939174400, 140175985139711, +STORE, 140175939166208, 140175985139711, +STORE, 140175939133440, 140175985139711, +STORE, 140175939125248, 140175985139711, +STORE, 140175939108864, 140175985139711, +STORE, 140175939100672, 140175985139711, +STORE, 140175939084288, 140175985139711, +STORE, 140175939076096, 140175985139711, +STORE, 140175939059712, 140175985139711, +STORE, 140175939051520, 140175985139711, +STORE, 140175939018752, 140175985139711, +STORE, 140175939010560, 140175985139711, +STORE, 140175938994176, 140175985139711, +STORE, 140175938985984, 140175985139711, +STORE, 140175938969600, 140175985139711, +STORE, 140175938961408, 140175985139711, +STORE, 140175938945024, 140175985139711, +STORE, 140175938936832, 140175985139711, +STORE, 140175938904064, 140175985139711, +STORE, 140175938895872, 140175985139711, +STORE, 140175938879488, 140175985139711, +STORE, 140175938871296, 140175985139711, +STORE, 140175938854912, 140175985139711, +STORE, 140175938846720, 140175985139711, +STORE, 140175938830336, 140175985139711, +STORE, 140175938822144, 140175985139711, +STORE, 140175938789376, 140175985139711, +STORE, 140175938781184, 140175985139711, +STORE, 140175938764800, 140175985139711, +STORE, 140175938756608, 140175985139711, +STORE, 140175938740224, 140175985139711, +STORE, 140175938732032, 140175985139711, +STORE, 140175938715648, 140175985139711, +STORE, 140175938707456, 140175985139711, +STORE, 140175938674688, 140175985139711, +STORE, 140175938666496, 140175985139711, +STORE, 140175938650112, 140175985139711, +STORE, 140175938641920, 140175985139711, +STORE, 140175938625536, 140175985139711, +STORE, 140175938617344, 140175985139711, +STORE, 140175938600960, 140175985139711, +STORE, 140175938592768, 140175985139711, +STORE, 140175938560000, 140175985139711, +STORE, 140175938551808, 140175985139711, +STORE, 140175938535424, 140175985139711, +STORE, 140175938527232, 140175985139711, +STORE, 140175938510848, 140175985139711, +STORE, 140175938502656, 140175985139711, +STORE, 140175938486272, 140175985139711, +STORE, 140175938478080, 140175985139711, +STORE, 140175938445312, 140175985139711, +STORE, 140175938437120, 140175985139711, +STORE, 140175938420736, 140175985139711, +STORE, 140175938412544, 140175985139711, +STORE, 140175938396160, 140175985139711, +STORE, 140175938387968, 140175985139711, +STORE, 140175938371584, 140175985139711, +STORE, 140175938363392, 140175985139711, +STORE, 140175938330624, 140175985139711, +STORE, 140175938322432, 140175985139711, +STORE, 140175938306048, 140175985139711, +STORE, 140175938297856, 140175985139711, +STORE, 140175938281472, 140175985139711, +STORE, 140175938273280, 140175985139711, +STORE, 140175938256896, 140175985139711, +STORE, 140175938248704, 140175985139711, +STORE, 140175938215936, 140175985139711, +STORE, 140175938207744, 140175985139711, +STORE, 140175938191360, 140175985139711, +STORE, 140175938183168, 140175985139711, +STORE, 140175938166784, 140175985139711, +STORE, 140175938158592, 140175985139711, +STORE, 140175938142208, 140175985139711, +STORE, 140175936045056, 140175985139711, +STORE, 140175936036864, 140175985139711, +STORE, 140175936004096, 140175985139711, +STORE, 140175935995904, 140175985139711, +STORE, 140175935979520, 140175985139711, +STORE, 140175935971328, 140175985139711, +STORE, 140175935954944, 140175985139711, +STORE, 140175935946752, 140175985139711, +STORE, 140175935930368, 140175985139711, +STORE, 140175935922176, 140175985139711, +STORE, 140175935889408, 140175985139711, +STORE, 140175935881216, 140175985139711, +STORE, 140175935864832, 140175985139711, +STORE, 140175935856640, 140175985139711, +STORE, 140175935840256, 140175985139711, +STORE, 140175935832064, 140175985139711, +STORE, 140175935815680, 140175985139711, +STORE, 140175935807488, 140175985139711, +STORE, 140175935774720, 140175985139711, +STORE, 140175935766528, 140175985139711, +STORE, 140175935750144, 140175985139711, +STORE, 140175935741952, 140175985139711, +STORE, 140175935725568, 140175985139711, +STORE, 140175935717376, 140175985139711, +STORE, 140175935700992, 140175985139711, +STORE, 140175935692800, 140175985139711, +STORE, 140175935660032, 140175985139711, +STORE, 140175935651840, 140175985139711, +STORE, 140175935635456, 140175985139711, +STORE, 140175935627264, 140175985139711, +STORE, 140175935610880, 140175985139711, +STORE, 140175935602688, 140175985139711, +STORE, 140175935586304, 140175985139711, +STORE, 140175935578112, 140175985139711, +STORE, 140175935545344, 140175985139711, +STORE, 140175935537152, 140175985139711, +STORE, 140175935520768, 140175985139711, +STORE, 140175935512576, 140175985139711, +STORE, 140175935496192, 140175985139711, +STORE, 140175935488000, 140175985139711, +STORE, 140175935471616, 140175985139711, +STORE, 140175935463424, 140175985139711, +STORE, 140175935430656, 140175985139711, +STORE, 140175935422464, 140175985139711, +STORE, 140175935406080, 140175985139711, +STORE, 140175935397888, 140175985139711, +STORE, 140175935381504, 140175985139711, +STORE, 140175935373312, 140175985139711, +STORE, 140175935356928, 140175985139711, +STORE, 140175935348736, 140175985139711, +STORE, 140175935315968, 140175985139711, +STORE, 140175935307776, 140175985139711, +STORE, 140175935291392, 140175985139711, +STORE, 140175935283200, 140175985139711, +STORE, 140175935266816, 140175985139711, +STORE, 140175935258624, 140175985139711, +STORE, 140175935242240, 140175985139711, +STORE, 140175935234048, 140175985139711, +STORE, 140175935201280, 140175985139711, +STORE, 140175935193088, 140175985139711, +STORE, 140175935176704, 140175985139711, +STORE, 140175935168512, 140175985139711, +STORE, 140175935152128, 140175985139711, +STORE, 140175935143936, 140175985139711, +STORE, 140175935127552, 140175985139711, +STORE, 140175935119360, 140175985139711, +STORE, 140175935086592, 140175985139711, +STORE, 140175935078400, 140175985139711, +STORE, 140175935062016, 140175985139711, +STORE, 140175935053824, 140175985139711, +STORE, 140175935037440, 140175985139711, +STORE, 140175935029248, 140175985139711, +STORE, 140175935012864, 140175985139711, +STORE, 140175935004672, 140175985139711, +STORE, 140175934971904, 140175985139711, +STORE, 140175934963712, 140175985139711, +STORE, 140175934947328, 140175985139711, +STORE, 140175934939136, 140175985139711, +STORE, 140175934922752, 140175985139711, +STORE, 140175934914560, 140175985139711, +STORE, 140175934898176, 140175985139711, +STORE, 140175934889984, 140175985139711, +STORE, 140175934857216, 140175985139711, +STORE, 140175934849024, 140175985139711, +STORE, 140175934832640, 140175985139711, +STORE, 140175934824448, 140175985139711, +STORE, 140175934808064, 140175985139711, +STORE, 140175934799872, 140175985139711, +STORE, 140175934783488, 140175985139711, +STORE, 140175934775296, 140175985139711, +STORE, 140175934742528, 140175985139711, +STORE, 140175934734336, 140175985139711, +STORE, 140175934717952, 140175985139711, +STORE, 140175934709760, 140175985139711, +STORE, 140175934693376, 140175985139711, +STORE, 140175934685184, 140175985139711, +STORE, 140175934668800, 140175985139711, +STORE, 140175934660608, 140175985139711, +STORE, 140175934627840, 140175985139711, +STORE, 140175934619648, 140175985139711, +STORE, 140175934603264, 140175985139711, +STORE, 140175934595072, 140175985139711, +STORE, 140175934578688, 140175985139711, +STORE, 140175934570496, 140175985139711, +STORE, 140175934554112, 140175985139711, +STORE, 140175934545920, 140175985139711, +STORE, 140175934513152, 140175985139711, +STORE, 140175934504960, 140175985139711, +STORE, 140175934488576, 140175985139711, +STORE, 140175934480384, 140175985139711, +STORE, 140175934464000, 140175985139711, +STORE, 140175934455808, 140175985139711, +STORE, 140175934439424, 140175985139711, +STORE, 140175934431232, 140175985139711, +STORE, 140175934398464, 140175985139711, +STORE, 140175934390272, 140175985139711, +STORE, 140175934373888, 140175985139711, +STORE, 140175934365696, 140175985139711, +STORE, 140175934349312, 140175985139711, +STORE, 140175934341120, 140175985139711, +STORE, 140175934324736, 140175985139711, +STORE, 140175932227584, 140175985139711, +STORE, 140175932219392, 140175985139711, +STORE, 140175932186624, 140175985139711, +STORE, 140175932178432, 140175985139711, +STORE, 140175932162048, 140175985139711, +STORE, 140175932153856, 140175985139711, +STORE, 140175932137472, 140175985139711, +STORE, 53080064, 57884671, +STORE, 140175932129280, 140175985139711, +STORE, 140175932112896, 140175985139711, +STORE, 140175932104704, 140175985139711, +STORE, 140175932071936, 140175985139711, +STORE, 140175932063744, 140175985139711, +STORE, 140175932047360, 140175985139711, +STORE, 140175932039168, 140175985139711, +STORE, 140175932022784, 140175985139711, +STORE, 140175932014592, 140175985139711, +STORE, 140175931998208, 140175985139711, +STORE, 140175931990016, 140175985139711, +STORE, 140175931957248, 140175985139711, +STORE, 140175931949056, 140175985139711, +STORE, 140175931932672, 140175985139711, +STORE, 140175931924480, 140175985139711, +STORE, 140175931908096, 140175985139711, +STORE, 140175931899904, 140175985139711, +STORE, 140175931883520, 140175985139711, +STORE, 140175931875328, 140175985139711, +STORE, 140175931842560, 140175985139711, +STORE, 140175931834368, 140175985139711, +STORE, 140175931817984, 140175985139711, +STORE, 140175931809792, 140175985139711, +STORE, 140175931793408, 140175985139711, +STORE, 140175931785216, 140175985139711, +STORE, 140175931768832, 140175985139711, +STORE, 140175931760640, 140175985139711, +STORE, 140175931727872, 140175985139711, +STORE, 140175931719680, 140175985139711, +STORE, 140175931703296, 140175985139711, +STORE, 140175931695104, 140175985139711, +STORE, 140175931678720, 140175985139711, +STORE, 140175931670528, 140175985139711, +STORE, 140175931654144, 140175985139711, +STORE, 140175931645952, 140175985139711, +STORE, 140175931613184, 140175985139711, +STORE, 140175931604992, 140175985139711, +STORE, 140175931588608, 140175985139711, +STORE, 140175931580416, 140175985139711, +STORE, 140175931564032, 140175985139711, +STORE, 140175931555840, 140175985139711, +STORE, 140175931539456, 140175985139711, +STORE, 140175931531264, 140175985139711, +STORE, 140175931498496, 140175985139711, +STORE, 140175931490304, 140175985139711, +STORE, 140175931473920, 140175985139711, +STORE, 140175931465728, 140175985139711, +STORE, 140175931449344, 140175985139711, +STORE, 140175931441152, 140175985139711, +STORE, 140175931424768, 140175985139711, +STORE, 140175931416576, 140175985139711, +STORE, 140175931383808, 140175985139711, +STORE, 140175931375616, 140175985139711, +STORE, 140175931359232, 140175985139711, +STORE, 140175931351040, 140175985139711, +STORE, 140175931334656, 140175985139711, +STORE, 140175931326464, 140175985139711, +STORE, 140175931310080, 140175985139711, +STORE, 140175931301888, 140175985139711, +STORE, 140175931269120, 140175985139711, +STORE, 140175931260928, 140175985139711, +STORE, 140175931244544, 140175985139711, +STORE, 140175931236352, 140175985139711, +STORE, 140175931219968, 140175985139711, +STORE, 140175931211776, 140175985139711, +STORE, 140175931195392, 140175985139711, +STORE, 140175931187200, 140175985139711, +STORE, 140175931154432, 140175985139711, +STORE, 140175931146240, 140175985139711, +STORE, 140175931129856, 140175985139711, +STORE, 140175931121664, 140175985139711, +STORE, 140175931105280, 140175985139711, +STORE, 140175931097088, 140175985139711, +STORE, 140175931080704, 140175985139711, +STORE, 140175931072512, 140175985139711, +STORE, 140175931039744, 140175985139711, +STORE, 140175931031552, 140175985139711, +STORE, 140175931015168, 140175985139711, +STORE, 140175931006976, 140175985139711, +STORE, 140175930990592, 140175985139711, +STORE, 140175930982400, 140175985139711, +STORE, 140175930966016, 140175985139711, +STORE, 140175930957824, 140175985139711, +STORE, 140175930925056, 140175985139711, +STORE, 140175930916864, 140175985139711, +STORE, 140175930900480, 140175985139711, +STORE, 140175930892288, 140175985139711, +STORE, 140175930875904, 140175985139711, +STORE, 140175930867712, 140175985139711, +STORE, 140175930851328, 140175985139711, +STORE, 140175930843136, 140175985139711, +STORE, 140175930810368, 140175985139711, +STORE, 140175930802176, 140175985139711, +STORE, 140175930785792, 140175985139711, +STORE, 140175930777600, 140175985139711, +STORE, 140175930761216, 140175985139711, +STORE, 140175930753024, 140175985139711, +STORE, 140175930736640, 140175985139711, +STORE, 140175930728448, 140175985139711, +STORE, 140175930695680, 140175985139711, +STORE, 140175930687488, 140175985139711, +STORE, 140175930671104, 140175985139711, +STORE, 140175930662912, 140175985139711, +STORE, 140175930646528, 140175985139711, +STORE, 140175930638336, 140175985139711, +STORE, 140175930621952, 140175985139711, +STORE, 140175930613760, 140175985139711, +STORE, 140175930580992, 140175985139711, +STORE, 140175930572800, 140175985139711, +STORE, 140175930556416, 140175985139711, +STORE, 140175930548224, 140175985139711, +STORE, 140175930531840, 140175985139711, +STORE, 140175930523648, 140175985139711, +STORE, 140175930507264, 140175985139711, +STORE, 140175928410112, 140175985139711, +STORE, 140175928401920, 140175985139711, +STORE, 140175928369152, 140175985139711, +STORE, 140175928360960, 140175985139711, +STORE, 140175928344576, 140175985139711, +STORE, 140175928336384, 140175985139711, +STORE, 140175928320000, 140175985139711, +STORE, 140175928311808, 140175985139711, +STORE, 140175928295424, 140175985139711, +STORE, 140175927242752, 140175985139711, +SNULL, 140175956627455, 140175985139711, +STORE, 140175927242752, 140175956627455, +STORE, 140175956627456, 140175985139711, + }; + unsigned long set24[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140735281639424, 140737488351231, +SNULL, 140735281643519, 140737488351231, +STORE, 140735281639424, 140735281643519, +STORE, 140735281508352, 140735281643519, +STORE, 94717834911744, 94717834928127, +SNULL, 94717834915839, 94717834928127, +STORE, 94717834911744, 94717834915839, +STORE, 94717834915840, 94717834928127, +ERASE, 94717834915840, 94717834928127, +STORE, 94717834919936, 94717834928127, +STORE, 140428246065152, 140428248317951, +SNULL, 140428246208511, 140428248317951, +STORE, 140428246065152, 140428246208511, +STORE, 140428246208512, 140428248317951, +ERASE, 140428246208512, 140428248317951, +STORE, 140428248305664, 140428248313855, +STORE, 140428248313856, 140428248317951, +STORE, 140735281811456, 140735281815551, +STORE, 140735281799168, 140735281811455, +STORE, 140428248297472, 140428248305663, +STORE, 140428243841024, 140428246065151, +SNULL, 140428245491711, 140428246065151, +STORE, 140428243841024, 140428245491711, +STORE, 140428245491712, 140428246065151, +SNULL, 140428245491712, 140428246061055, +STORE, 140428246061056, 140428246065151, +STORE, 140428245491712, 140428246061055, +ERASE, 140428245491712, 140428246061055, +STORE, 140428245491712, 140428246061055, +ERASE, 140428246061056, 140428246065151, +STORE, 140428246061056, 140428246065151, +STORE, 140428248268800, 140428248297471, +STORE, 140428241625088, 140428243841023, +SNULL, 140428241625088, 140428241723391, +STORE, 140428241723392, 140428243841023, +STORE, 140428241625088, 140428241723391, +SNULL, 140428243816447, 140428243841023, +STORE, 140428241723392, 140428243816447, +STORE, 140428243816448, 140428243841023, +SNULL, 140428243816448, 140428243824639, +STORE, 140428243824640, 140428243841023, +STORE, 140428243816448, 140428243824639, +ERASE, 140428243816448, 140428243824639, +STORE, 140428243816448, 140428243824639, +ERASE, 140428243824640, 140428243841023, +STORE, 140428243824640, 140428243841023, +STORE, 140428237828096, 140428241625087, +SNULL, 140428237828096, 140428239486975, +STORE, 140428239486976, 140428241625087, +STORE, 140428237828096, 140428239486975, +SNULL, 140428241584127, 140428241625087, +STORE, 140428239486976, 140428241584127, +STORE, 140428241584128, 140428241625087, +SNULL, 140428241584128, 140428241608703, +STORE, 140428241608704, 140428241625087, +STORE, 140428241584128, 140428241608703, +ERASE, 140428241584128, 140428241608703, +STORE, 140428241584128, 140428241608703, +ERASE, 140428241608704, 140428241625087, +STORE, 140428241608704, 140428241625087, +STORE, 140428235567104, 140428237828095, +SNULL, 140428235567104, 140428235718655, +STORE, 140428235718656, 140428237828095, +STORE, 140428235567104, 140428235718655, +SNULL, 140428237811711, 140428237828095, +STORE, 140428235718656, 140428237811711, +STORE, 140428237811712, 140428237828095, +SNULL, 140428237811712, 140428237819903, +STORE, 140428237819904, 140428237828095, +STORE, 140428237811712, 140428237819903, +ERASE, 140428237811712, 140428237819903, +STORE, 140428237811712, 140428237819903, +ERASE, 140428237819904, 140428237828095, +STORE, 140428237819904, 140428237828095, +STORE, 140428233445376, 140428235567103, +SNULL, 140428233445376, 140428233461759, +STORE, 140428233461760, 140428235567103, +STORE, 140428233445376, 140428233461759, +SNULL, 140428235558911, 140428235567103, +STORE, 140428233461760, 140428235558911, +STORE, 140428235558912, 140428235567103, +ERASE, 140428235558912, 140428235567103, +STORE, 140428235558912, 140428235567103, +STORE, 140428231315456, 140428233445375, +SNULL, 140428231315456, 140428231344127, +STORE, 140428231344128, 140428233445375, +STORE, 140428231315456, 140428231344127, +SNULL, 140428233437183, 140428233445375, +STORE, 140428231344128, 140428233437183, +STORE, 140428233437184, 140428233445375, +ERASE, 140428233437184, 140428233445375, +STORE, 140428233437184, 140428233445375, +STORE, 140428248260608, 140428248268799, +STORE, 140428229062656, 140428231315455, +SNULL, 140428229062656, 140428229214207, +STORE, 140428229214208, 140428231315455, +STORE, 140428229062656, 140428229214207, +SNULL, 140428231307263, 140428231315455, +STORE, 140428229214208, 140428231307263, +STORE, 140428231307264, 140428231315455, +ERASE, 140428231307264, 140428231315455, +STORE, 140428231307264, 140428231315455, +STORE, 140428226891776, 140428229062655, +SNULL, 140428226891776, 140428226961407, +STORE, 140428226961408, 140428229062655, +STORE, 140428226891776, 140428226961407, +SNULL, 140428229054463, 140428229062655, +STORE, 140428226961408, 140428229054463, +STORE, 140428229054464, 140428229062655, +ERASE, 140428229054464, 140428229062655, +STORE, 140428229054464, 140428229062655, +STORE, 140428223680512, 140428226891775, +SNULL, 140428223680512, 140428224757759, +STORE, 140428224757760, 140428226891775, +STORE, 140428223680512, 140428224757759, +SNULL, 140428226854911, 140428226891775, +STORE, 140428224757760, 140428226854911, +STORE, 140428226854912, 140428226891775, +ERASE, 140428226854912, 140428226891775, +STORE, 140428226854912, 140428226891775, +STORE, 140428221546496, 140428223680511, +SNULL, 140428221546496, 140428221575167, +STORE, 140428221575168, 140428223680511, +STORE, 140428221546496, 140428221575167, +SNULL, 140428223672319, 140428223680511, +STORE, 140428221575168, 140428223672319, +STORE, 140428223672320, 140428223680511, +ERASE, 140428223672320, 140428223680511, +STORE, 140428223672320, 140428223680511, +STORE, 140428219236352, 140428221546495, +SNULL, 140428219236352, 140428219441151, +STORE, 140428219441152, 140428221546495, +STORE, 140428219236352, 140428219441151, +SNULL, 140428221538303, 140428221546495, +STORE, 140428219441152, 140428221538303, +STORE, 140428221538304, 140428221546495, +ERASE, 140428221538304, 140428221546495, +STORE, 140428221538304, 140428221546495, +STORE, 140428216852480, 140428219236351, +SNULL, 140428216852480, 140428217044991, +STORE, 140428217044992, 140428219236351, +STORE, 140428216852480, 140428217044991, +SNULL, 140428219138047, 140428219236351, +STORE, 140428217044992, 140428219138047, +STORE, 140428219138048, 140428219236351, +ERASE, 140428219138048, 140428219236351, +STORE, 140428219138048, 140428219236351, +STORE, 140428248252416, 140428248268799, +STORE, 140428214284288, 140428216852479, +SNULL, 140428214284288, 140428214751231, +STORE, 140428214751232, 140428216852479, +STORE, 140428214284288, 140428214751231, +SNULL, 140428216844287, 140428216852479, +STORE, 140428214751232, 140428216844287, +STORE, 140428216844288, 140428216852479, +ERASE, 140428216844288, 140428216852479, +STORE, 140428216844288, 140428216852479, +STORE, 140428212170752, 140428214284287, +SNULL, 140428212170752, 140428212183039, +STORE, 140428212183040, 140428214284287, +STORE, 140428212170752, 140428212183039, +SNULL, 140428214276095, 140428214284287, +STORE, 140428212183040, 140428214276095, +STORE, 140428214276096, 140428214284287, +ERASE, 140428214276096, 140428214284287, +STORE, 140428214276096, 140428214284287, +STORE, 140428209991680, 140428212170751, +SNULL, 140428209991680, 140428210069503, +STORE, 140428210069504, 140428212170751, +STORE, 140428209991680, 140428210069503, +SNULL, 140428212162559, 140428212170751, +STORE, 140428210069504, 140428212162559, +STORE, 140428212162560, 140428212170751, +ERASE, 140428212162560, 140428212170751, +STORE, 140428212162560, 140428212170751, +STORE, 140428207874048, 140428209991679, +SNULL, 140428207874048, 140428207890431, +STORE, 140428207890432, 140428209991679, +STORE, 140428207874048, 140428207890431, +SNULL, 140428209983487, 140428209991679, +STORE, 140428207890432, 140428209983487, +STORE, 140428209983488, 140428209991679, +ERASE, 140428209983488, 140428209991679, +STORE, 140428209983488, 140428209991679, +STORE, 140428248244224, 140428248268799, +STORE, 140428248231936, 140428248268799, +SNULL, 140428241600511, 140428241608703, +STORE, 140428241584128, 140428241600511, +STORE, 140428241600512, 140428241608703, +SNULL, 140428209987583, 140428209991679, +STORE, 140428209983488, 140428209987583, +STORE, 140428209987584, 140428209991679, +SNULL, 140428212166655, 140428212170751, +STORE, 140428212162560, 140428212166655, +STORE, 140428212166656, 140428212170751, +SNULL, 140428214280191, 140428214284287, +STORE, 140428214276096, 140428214280191, +STORE, 140428214280192, 140428214284287, +SNULL, 140428243820543, 140428243824639, +STORE, 140428243816448, 140428243820543, +STORE, 140428243820544, 140428243824639, +SNULL, 140428216848383, 140428216852479, +STORE, 140428216844288, 140428216848383, +STORE, 140428216848384, 140428216852479, +SNULL, 140428219232255, 140428219236351, +STORE, 140428219138048, 140428219232255, +STORE, 140428219232256, 140428219236351, +SNULL, 140428221542399, 140428221546495, +STORE, 140428221538304, 140428221542399, +STORE, 140428221542400, 140428221546495, +SNULL, 140428223676415, 140428223680511, +STORE, 140428223672320, 140428223676415, +STORE, 140428223676416, 140428223680511, +SNULL, 140428226863103, 140428226891775, +STORE, 140428226854912, 140428226863103, +STORE, 140428226863104, 140428226891775, +SNULL, 140428229058559, 140428229062655, +STORE, 140428229054464, 140428229058559, +STORE, 140428229058560, 140428229062655, +SNULL, 140428231311359, 140428231315455, +STORE, 140428231307264, 140428231311359, +STORE, 140428231311360, 140428231315455, +SNULL, 140428233441279, 140428233445375, +STORE, 140428233437184, 140428233441279, +STORE, 140428233441280, 140428233445375, +SNULL, 140428235563007, 140428235567103, +STORE, 140428235558912, 140428235563007, +STORE, 140428235563008, 140428235567103, +SNULL, 140428237815807, 140428237819903, +STORE, 140428237811712, 140428237815807, +STORE, 140428237815808, 140428237819903, +SNULL, 140428246056959, 140428246061055, +STORE, 140428245491712, 140428246056959, +STORE, 140428246056960, 140428246061055, +SNULL, 94717834924031, 94717834928127, +STORE, 94717834919936, 94717834924031, +STORE, 94717834924032, 94717834928127, +SNULL, 140428248309759, 140428248313855, +STORE, 140428248305664, 140428248309759, +STORE, 140428248309760, 140428248313855, +ERASE, 140428248268800, 140428248297471, +STORE, 94717843058688, 94717843193855, +STORE, 94749677137920, 94749677559807, +STORE, 94749677563904, 94749677604863, +STORE, 94749677604864, 94749677608959, +STORE, 94749710970880, 94749711241215, +STORE, 140490884894720, 140490884935679, +STORE, 140490884935680, 140490887032831, +STORE, 140490887032832, 140490887036927, +STORE, 140490887036928, 140490887041023, +STORE, 140490887041024, 140490887065599, +STORE, 140490887065600, 140490887110655, +STORE, 140490887110656, 140490889203711, +STORE, 140490889203712, 140490889207807, +STORE, 140490889207808, 140490889211903, +STORE, 140490889211904, 140490889293823, +STORE, 140490889293824, 140490891390975, +STORE, 140490891390976, 140490891395071, +STORE, 140490891395072, 140490891399167, +STORE, 140490891399168, 140490891407359, +STORE, 140490891407360, 140490891436031, +STORE, 140490891436032, 140490893529087, +STORE, 140490893529088, 140490893533183, +STORE, 140490893533184, 140490893537279, +STORE, 140490893537280, 140490901979135, +STORE, 140490901979136, 140490901991423, +STORE, 140490901991424, 140490904084479, +STORE, 140490904084480, 140490904088575, +STORE, 140490904088576, 140490904092671, +STORE, 140490904092672, 140490904559615, +STORE, 140490904559616, 140490906652671, +STORE, 140490906652672, 140490906656767, +STORE, 140490906656768, 140490906660863, +STORE, 140490906660864, 140490906677247, +STORE, 140490906677248, 140490908770303, +STORE, 140490908770304, 140490908774399, +STORE, 140490908774400, 140490908778495, +STORE, 140490908778496, 140490908794879, +STORE, 140490908794880, 140490910887935, +STORE, 140490910887936, 140490910892031, +STORE, 140490910892032, 140490910896127, +STORE, 140490910896128, 140490912555007, +STORE, 140490912555008, 140490914652159, +STORE, 140490914652160, 140490914668543, +STORE, 140490914668544, 140490914676735, +STORE, 140490914676736, 140490914693119, +STORE, 140490914693120, 140490914791423, +STORE, 140490914791424, 140490916884479, +STORE, 140490916884480, 140490916888575, +STORE, 140490916888576, 140490916892671, +STORE, 140490916892672, 140490916909055, +STORE, 140490916909056, 140490916937727, +STORE, 140490916937728, 140490919030783, +STORE, 140490919030784, 140490919034879, +STORE, 140490919034880, 140490919038975, +STORE, 140490919038976, 140490919190527, +STORE, 140490919190528, 140490921283583, +STORE, 140490921283584, 140490921287679, +STORE, 140490921287680, 140490921291775, +STORE, 140490921291776, 140490921299967, +STORE, 140490921299968, 140490921390079, +STORE, 140490921390080, 140490923483135, +STORE, 140490923483136, 140490923487231, +STORE, 140490923487232, 140490923491327, +STORE, 140490923491328, 140490923757567, +STORE, 140490923757568, 140490925850623, +STORE, 140490925850624, 140490925867007, +STORE, 140490925867008, 140490925871103, +STORE, 140490925871104, 140490925875199, +STORE, 140490925875200, 140490925903871, +STORE, 140490925903872, 140490928001023, +STORE, 140490928001024, 140490928005119, +STORE, 140490928005120, 140490928009215, +STORE, 140490928009216, 140490928152575, +STORE, 140490930184192, 140490930221055, +STORE, 140490930221056, 140490930237439, +STORE, 140490930237440, 140490930241535, +STORE, 140490930241536, 140490930245631, +STORE, 140490930245632, 140490930249727, +STORE, 140490930249728, 140490930253823, +STORE, 140490930253824, 140490930257919, +STORE, 140490930257920, 140490930262015, +STORE, 140724611694592, 140724611829759, +STORE, 140724612427776, 140724612440063, +STORE, 140724612440064, 140724612444159, +STORE, 94103163662336, 94103163772927, +STORE, 94103165865984, 94103165874175, +STORE, 94103165874176, 94103165878271, +STORE, 94103165878272, 94103165886463, +STORE, 94103182548992, 94103182684159, +STORE, 140092694708224, 140092696367103, +STORE, 140092696367104, 140092698464255, +STORE, 140092698464256, 140092698480639, +STORE, 140092698480640, 140092698488831, +STORE, 140092698488832, 140092698505215, +STORE, 140092698505216, 140092698648575, +STORE, 140092700708864, 140092700717055, +STORE, 140092700745728, 140092700749823, +STORE, 140092700749824, 140092700753919, +STORE, 140092700753920, 140092700758015, +STORE, 140736800911360, 140736801046527, +STORE, 140736802308096, 140736802320383, +STORE, 140736802320384, 140736802324479, +STORE, 93948802064384, 93948802174975, +STORE, 93948804268032, 93948804276223, +STORE, 93948804276224, 93948804280319, +STORE, 93948804280320, 93948804288511, +STORE, 93948806266880, 93948806402047, +STORE, 140222999113728, 140223000772607, +STORE, 140223000772608, 140223002869759, +STORE, 140223002869760, 140223002886143, +STORE, 140223002886144, 140223002894335, +STORE, 140223002894336, 140223002910719, +STORE, 140223002910720, 140223003054079, +STORE, 140223005114368, 140223005122559, +STORE, 140223005151232, 140223005155327, +STORE, 140223005155328, 140223005159423, +STORE, 140223005159424, 140223005163519, +STORE, 140720877506560, 140720877641727, +STORE, 140720878231552, 140720878243839, +STORE, 140720878243840, 140720878247935, +STORE, 140737488347136, 140737488351231, +STORE, 140733232087040, 140737488351231, +SNULL, 140733232091135, 140737488351231, +STORE, 140733232087040, 140733232091135, +STORE, 140733231955968, 140733232091135, +STORE, 4194304, 5128191, +STORE, 7221248, 7241727, +STORE, 7241728, 7249919, +STORE, 140161681321984, 140161683574783, +SNULL, 140161681465343, 140161683574783, +STORE, 140161681321984, 140161681465343, +STORE, 140161681465344, 140161683574783, +ERASE, 140161681465344, 140161683574783, +STORE, 140161683562496, 140161683570687, +STORE, 140161683570688, 140161683574783, +STORE, 140733232214016, 140733232218111, +STORE, 140733232201728, 140733232214015, +STORE, 140161683533824, 140161683562495, +STORE, 140161683525632, 140161683533823, +STORE, 140161678159872, 140161681321983, +SNULL, 140161678159872, 140161679220735, +STORE, 140161679220736, 140161681321983, +STORE, 140161678159872, 140161679220735, +SNULL, 140161681313791, 140161681321983, +STORE, 140161679220736, 140161681313791, +STORE, 140161681313792, 140161681321983, +ERASE, 140161681313792, 140161681321983, +STORE, 140161681313792, 140161681321983, +STORE, 140161674362880, 140161678159871, +SNULL, 140161674362880, 140161676021759, +STORE, 140161676021760, 140161678159871, +STORE, 140161674362880, 140161676021759, +SNULL, 140161678118911, 140161678159871, +STORE, 140161676021760, 140161678118911, +STORE, 140161678118912, 140161678159871, +SNULL, 140161678118912, 140161678143487, +STORE, 140161678143488, 140161678159871, +STORE, 140161678118912, 140161678143487, +ERASE, 140161678118912, 140161678143487, +STORE, 140161678118912, 140161678143487, +ERASE, 140161678143488, 140161678159871, +STORE, 140161678143488, 140161678159871, +STORE, 140161683513344, 140161683533823, +SNULL, 140161678135295, 140161678143487, +STORE, 140161678118912, 140161678135295, +STORE, 140161678135296, 140161678143487, +SNULL, 140161681317887, 140161681321983, +STORE, 140161681313792, 140161681317887, +STORE, 140161681317888, 140161681321983, +SNULL, 7233535, 7241727, +STORE, 7221248, 7233535, +STORE, 7233536, 7241727, +SNULL, 140161683566591, 140161683570687, +STORE, 140161683562496, 140161683566591, +STORE, 140161683566592, 140161683570687, +ERASE, 140161683533824, 140161683562495, +STORE, 25477120, 25612287, +STORE, 25477120, 25759743, +STORE, 140161681829888, 140161683513343, +STORE, 25477120, 25915391, +STORE, 25477120, 26054655, +SNULL, 25800703, 26054655, +STORE, 25477120, 25800703, +STORE, 25800704, 26054655, +ERASE, 25800704, 26054655, +STORE, 140737488347136, 140737488351231, +STORE, 140723218452480, 140737488351231, +SNULL, 140723218456575, 140737488351231, +STORE, 140723218452480, 140723218456575, +STORE, 140723218321408, 140723218456575, +STORE, 4194304, 26279935, +STORE, 28372992, 28454911, +STORE, 28454912, 29806591, +STORE, 140398872264704, 140398874517503, +SNULL, 140398872408063, 140398874517503, +STORE, 140398872264704, 140398872408063, +STORE, 140398872408064, 140398874517503, +ERASE, 140398872408064, 140398874517503, +STORE, 140398874505216, 140398874513407, +STORE, 140398874513408, 140398874517503, +STORE, 140723219247104, 140723219251199, +STORE, 140723219234816, 140723219247103, +STORE, 140398874476544, 140398874505215, +STORE, 140398874468352, 140398874476543, +STORE, 140398868430848, 140398872264703, +SNULL, 140398868430848, 140398870138879, +STORE, 140398870138880, 140398872264703, +STORE, 140398868430848, 140398870138879, +SNULL, 140398872231935, 140398872264703, +STORE, 140398870138880, 140398872231935, +STORE, 140398872231936, 140398872264703, +ERASE, 140398872231936, 140398872264703, +STORE, 140398872231936, 140398872264703, +STORE, 140398866235392, 140398868430847, +SNULL, 140398866235392, 140398866329599, +STORE, 140398866329600, 140398868430847, +STORE, 140398866235392, 140398866329599, +SNULL, 140398868422655, 140398868430847, +STORE, 140398866329600, 140398868422655, +STORE, 140398868422656, 140398868430847, +ERASE, 140398868422656, 140398868430847, +STORE, 140398868422656, 140398868430847, +STORE, 140398863716352, 140398866235391, +SNULL, 140398863716352, 140398864130047, +STORE, 140398864130048, 140398866235391, +STORE, 140398863716352, 140398864130047, +SNULL, 140398866223103, 140398866235391, +STORE, 140398864130048, 140398866223103, +STORE, 140398866223104, 140398866235391, +ERASE, 140398866223104, 140398866235391, +STORE, 140398866223104, 140398866235391, +STORE, 140398861082624, 140398863716351, +SNULL, 140398861082624, 140398861611007, +STORE, 140398861611008, 140398863716351, +STORE, 140398861082624, 140398861611007, +SNULL, 140398863708159, 140398863716351, +STORE, 140398861611008, 140398863708159, +STORE, 140398863708160, 140398863716351, +ERASE, 140398863708160, 140398863716351, +STORE, 140398863708160, 140398863716351, +STORE, 140398858969088, 140398861082623, +SNULL, 140398858969088, 140398858981375, +STORE, 140398858981376, 140398861082623, +STORE, 140398858969088, 140398858981375, +SNULL, 140398861074431, 140398861082623, +STORE, 140398858981376, 140398861074431, +STORE, 140398861074432, 140398861082623, +ERASE, 140398861074432, 140398861082623, +STORE, 140398861074432, 140398861082623, +STORE, 140398856765440, 140398858969087, +SNULL, 140398856765440, 140398856867839, +STORE, 140398856867840, 140398858969087, +STORE, 140398856765440, 140398856867839, +SNULL, 140398858960895, 140398858969087, +STORE, 140398856867840, 140398858960895, +STORE, 140398858960896, 140398858969087, +ERASE, 140398858960896, 140398858969087, +STORE, 140398858960896, 140398858969087, +STORE, 140398874460160, 140398874476543, +STORE, 140398853603328, 140398856765439, +SNULL, 140398853603328, 140398854664191, +STORE, 140398854664192, 140398856765439, +STORE, 140398853603328, 140398854664191, +SNULL, 140398856757247, 140398856765439, +STORE, 140398854664192, 140398856757247, +STORE, 140398856757248, 140398856765439, +ERASE, 140398856757248, 140398856765439, +STORE, 140398856757248, 140398856765439, +STORE, 140398849806336, 140398853603327, +SNULL, 140398849806336, 140398851465215, +STORE, 140398851465216, 140398853603327, +STORE, 140398849806336, 140398851465215, +SNULL, 140398853562367, 140398853603327, +STORE, 140398851465216, 140398853562367, +STORE, 140398853562368, 140398853603327, +SNULL, 140398853562368, 140398853586943, +STORE, 140398853586944, 140398853603327, +STORE, 140398853562368, 140398853586943, +ERASE, 140398853562368, 140398853586943, +STORE, 140398853562368, 140398853586943, +ERASE, 140398853586944, 140398853603327, +STORE, 140398853586944, 140398853603327, +STORE, 140398874447872, 140398874476543, +SNULL, 140398853578751, 140398853586943, +STORE, 140398853562368, 140398853578751, +STORE, 140398853578752, 140398853586943, +SNULL, 140398856761343, 140398856765439, +STORE, 140398856757248, 140398856761343, +STORE, 140398856761344, 140398856765439, +SNULL, 140398858964991, 140398858969087, +STORE, 140398858960896, 140398858964991, +STORE, 140398858964992, 140398858969087, +SNULL, 140398861078527, 140398861082623, +STORE, 140398861074432, 140398861078527, +STORE, 140398861078528, 140398861082623, +SNULL, 140398863712255, 140398863716351, +STORE, 140398863708160, 140398863712255, +STORE, 140398863712256, 140398863716351, +SNULL, 140398866231295, 140398866235391, +STORE, 140398866223104, 140398866231295, +STORE, 140398866231296, 140398866235391, +SNULL, 140398868426751, 140398868430847, +STORE, 140398868422656, 140398868426751, +STORE, 140398868426752, 140398868430847, +SNULL, 140398872236031, 140398872264703, +STORE, 140398872231936, 140398872236031, +STORE, 140398872236032, 140398872264703, +SNULL, 28405759, 28454911, +STORE, 28372992, 28405759, +STORE, 28405760, 28454911, +SNULL, 140398874509311, 140398874513407, +STORE, 140398874505216, 140398874509311, +STORE, 140398874509312, 140398874513407, +ERASE, 140398874476544, 140398874505215, +STORE, 43278336, 43413503, +STORE, 140398872764416, 140398874447871, +STORE, 140398874501120, 140398874505215, +STORE, 140398872629248, 140398872764415, +STORE, 43278336, 43556863, +STORE, 140398847709184, 140398849806335, +STORE, 140398874492928, 140398874505215, +STORE, 140398874484736, 140398874505215, +STORE, 140398874447872, 140398874484735, +STORE, 140398872612864, 140398872764415, +STORE, 43278336, 43692031, +STORE, 43278336, 43880447, +STORE, 140398872604672, 140398872764415, +STORE, 140398872596480, 140398872764415, +STORE, 43278336, 44044287, +STORE, 140398872580096, 140398872764415, +STORE, 140737488347136, 140737488351231, +STORE, 140734403092480, 140737488351231, +SNULL, 140734403096575, 140737488351231, +STORE, 140734403092480, 140734403096575, +STORE, 140734402961408, 140734403096575, +STORE, 4194304, 5128191, +STORE, 7221248, 7241727, +STORE, 7241728, 7249919, +STORE, 140240662380544, 140240664633343, +SNULL, 140240662523903, 140240664633343, +STORE, 140240662380544, 140240662523903, +STORE, 140240662523904, 140240664633343, +ERASE, 140240662523904, 140240664633343, +STORE, 140240664621056, 140240664629247, +STORE, 140240664629248, 140240664633343, +STORE, 140734403145728, 140734403149823, +STORE, 140734403133440, 140734403145727, +STORE, 140240664592384, 140240664621055, +STORE, 140240664584192, 140240664592383, +STORE, 140240659218432, 140240662380543, +SNULL, 140240659218432, 140240660279295, +STORE, 140240660279296, 140240662380543, +STORE, 140240659218432, 140240660279295, +SNULL, 140240662372351, 140240662380543, +STORE, 140240660279296, 140240662372351, +STORE, 140240662372352, 140240662380543, +ERASE, 140240662372352, 140240662380543, +STORE, 140240662372352, 140240662380543, +STORE, 140240655421440, 140240659218431, +SNULL, 140240655421440, 140240657080319, +STORE, 140240657080320, 140240659218431, +STORE, 140240655421440, 140240657080319, +SNULL, 140240659177471, 140240659218431, +STORE, 140240657080320, 140240659177471, +STORE, 140240659177472, 140240659218431, +SNULL, 140240659177472, 140240659202047, +STORE, 140240659202048, 140240659218431, +STORE, 140240659177472, 140240659202047, +ERASE, 140240659177472, 140240659202047, +STORE, 140240659177472, 140240659202047, +ERASE, 140240659202048, 140240659218431, +STORE, 140240659202048, 140240659218431, +STORE, 140240664571904, 140240664592383, +SNULL, 140240659193855, 140240659202047, +STORE, 140240659177472, 140240659193855, +STORE, 140240659193856, 140240659202047, +SNULL, 140240662376447, 140240662380543, +STORE, 140240662372352, 140240662376447, +STORE, 140240662376448, 140240662380543, +SNULL, 7233535, 7241727, +STORE, 7221248, 7233535, +STORE, 7233536, 7241727, +SNULL, 140240664625151, 140240664629247, +STORE, 140240664621056, 140240664625151, +STORE, 140240664625152, 140240664629247, +ERASE, 140240664592384, 140240664621055, +STORE, 30646272, 30781439, +STORE, 30646272, 30928895, +STORE, 140240662888448, 140240664571903, +STORE, 94256659468288, 94256659578879, +STORE, 94256661671936, 94256661680127, +STORE, 94256661680128, 94256661684223, +STORE, 94256661684224, 94256661692415, +STORE, 94256687980544, 94256688115711, +STORE, 139801712504832, 139801714163711, +STORE, 139801714163712, 139801716260863, +STORE, 139801716260864, 139801716277247, +STORE, 139801716277248, 139801716285439, +STORE, 139801716285440, 139801716301823, +STORE, 139801716301824, 139801716445183, +STORE, 139801718505472, 139801718513663, +STORE, 139801718542336, 139801718546431, +STORE, 139801718546432, 139801718550527, +STORE, 139801718550528, 139801718554623, +STORE, 140721575538688, 140721575673855, +STORE, 140721577013248, 140721577025535, +STORE, 140721577025536, 140721577029631, +STORE, 140737488347136, 140737488351231, +STORE, 140729259393024, 140737488351231, +SNULL, 140729259397119, 140737488351231, +STORE, 140729259393024, 140729259397119, +STORE, 140729259261952, 140729259397119, +STORE, 4194304, 5128191, +STORE, 7221248, 7241727, +STORE, 7241728, 7249919, +STORE, 139682376638464, 139682378891263, +SNULL, 139682376781823, 139682378891263, +STORE, 139682376638464, 139682376781823, +STORE, 139682376781824, 139682378891263, +ERASE, 139682376781824, 139682378891263, +STORE, 139682378878976, 139682378887167, +STORE, 139682378887168, 139682378891263, +STORE, 140729260462080, 140729260466175, +STORE, 140729260449792, 140729260462079, +STORE, 139682378850304, 139682378878975, +STORE, 139682378842112, 139682378850303, +STORE, 139682373476352, 139682376638463, +SNULL, 139682373476352, 139682374537215, +STORE, 139682374537216, 139682376638463, +STORE, 139682373476352, 139682374537215, +SNULL, 139682376630271, 139682376638463, +STORE, 139682374537216, 139682376630271, +STORE, 139682376630272, 139682376638463, +ERASE, 139682376630272, 139682376638463, +STORE, 139682376630272, 139682376638463, +STORE, 139682369679360, 139682373476351, +SNULL, 139682369679360, 139682371338239, +STORE, 139682371338240, 139682373476351, +STORE, 139682369679360, 139682371338239, +SNULL, 139682373435391, 139682373476351, +STORE, 139682371338240, 139682373435391, +STORE, 139682373435392, 139682373476351, +SNULL, 139682373435392, 139682373459967, +STORE, 139682373459968, 139682373476351, +STORE, 139682373435392, 139682373459967, +ERASE, 139682373435392, 139682373459967, +STORE, 139682373435392, 139682373459967, +ERASE, 139682373459968, 139682373476351, +STORE, 139682373459968, 139682373476351, +STORE, 139682378829824, 139682378850303, +SNULL, 139682373451775, 139682373459967, +STORE, 139682373435392, 139682373451775, +STORE, 139682373451776, 139682373459967, +SNULL, 139682376634367, 139682376638463, +STORE, 139682376630272, 139682376634367, +STORE, 139682376634368, 139682376638463, +SNULL, 7233535, 7241727, +STORE, 7221248, 7233535, +STORE, 7233536, 7241727, +SNULL, 139682378883071, 139682378887167, +STORE, 139682378878976, 139682378883071, +STORE, 139682378883072, 139682378887167, +ERASE, 139682378850304, 139682378878975, +STORE, 10022912, 10158079, +STORE, 10022912, 10305535, +STORE, 139682377146368, 139682378829823, +STORE, 140737488347136, 140737488351231, +STORE, 140731831926784, 140737488351231, +SNULL, 140731831930879, 140737488351231, +STORE, 140731831926784, 140731831930879, +STORE, 140731831795712, 140731831930879, +STORE, 94615305261056, 94615307485183, +SNULL, 94615305371647, 94615307485183, +STORE, 94615305261056, 94615305371647, +STORE, 94615305371648, 94615307485183, +ERASE, 94615305371648, 94615307485183, +STORE, 94615307464704, 94615307476991, +STORE, 94615307476992, 94615307485183, +STORE, 140163912994816, 140163915247615, +SNULL, 140163913138175, 140163915247615, +STORE, 140163912994816, 140163913138175, +STORE, 140163913138176, 140163915247615, +ERASE, 140163913138176, 140163915247615, +STORE, 140163915235328, 140163915243519, +STORE, 140163915243520, 140163915247615, +STORE, 140731832217600, 140731832221695, +STORE, 140731832205312, 140731832217599, +STORE, 140163915206656, 140163915235327, +STORE, 140163915198464, 140163915206655, +STORE, 140163909197824, 140163912994815, +SNULL, 140163909197824, 140163910856703, +STORE, 140163910856704, 140163912994815, +STORE, 140163909197824, 140163910856703, +SNULL, 140163912953855, 140163912994815, +STORE, 140163910856704, 140163912953855, +STORE, 140163912953856, 140163912994815, +SNULL, 140163912953856, 140163912978431, +STORE, 140163912978432, 140163912994815, +STORE, 140163912953856, 140163912978431, +ERASE, 140163912953856, 140163912978431, +STORE, 140163912953856, 140163912978431, +ERASE, 140163912978432, 140163912994815, +STORE, 140163912978432, 140163912994815, +SNULL, 140163912970239, 140163912978431, +STORE, 140163912953856, 140163912970239, +STORE, 140163912970240, 140163912978431, +SNULL, 94615307472895, 94615307476991, +STORE, 94615307464704, 94615307472895, +STORE, 94615307472896, 94615307476991, +SNULL, 140163915239423, 140163915243519, +STORE, 140163915235328, 140163915239423, +STORE, 140163915239424, 140163915243519, +ERASE, 140163915206656, 140163915235327, +STORE, 94615330672640, 94615330807807, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140725254479872, 140737488351231, +SNULL, 140725254488063, 140737488351231, +STORE, 140725254479872, 140725254488063, +STORE, 140725254348800, 140725254488063, +STORE, 94572781277184, 94572785741823, +SNULL, 94572783312895, 94572785741823, +STORE, 94572781277184, 94572783312895, +STORE, 94572783312896, 94572785741823, +ERASE, 94572783312896, 94572785741823, +STORE, 94572785405952, 94572785455103, +STORE, 94572785455104, 94572785741823, +STORE, 139636001341440, 139636003594239, +SNULL, 139636001484799, 139636003594239, +STORE, 139636001341440, 139636001484799, +STORE, 139636001484800, 139636003594239, +ERASE, 139636001484800, 139636003594239, +STORE, 139636003581952, 139636003590143, +STORE, 139636003590144, 139636003594239, +STORE, 140725255557120, 140725255561215, +STORE, 140725255544832, 140725255557119, +STORE, 139636003553280, 139636003581951, +STORE, 139636003545088, 139636003553279, +STORE, 139635998773248, 139636001341439, +SNULL, 139635998773248, 139635999240191, +STORE, 139635999240192, 139636001341439, +STORE, 139635998773248, 139635999240191, +SNULL, 139636001333247, 139636001341439, +STORE, 139635999240192, 139636001333247, +STORE, 139636001333248, 139636001341439, +ERASE, 139636001333248, 139636001341439, +STORE, 139636001333248, 139636001341439, +STORE, 139635996569600, 139635998773247, +SNULL, 139635996569600, 139635996671999, +STORE, 139635996672000, 139635998773247, +STORE, 139635996569600, 139635996671999, +SNULL, 139635998765055, 139635998773247, +STORE, 139635996672000, 139635998765055, +STORE, 139635998765056, 139635998773247, +ERASE, 139635998765056, 139635998773247, +STORE, 139635998765056, 139635998773247, +STORE, 139635994353664, 139635996569599, +SNULL, 139635994353664, 139635994451967, +STORE, 139635994451968, 139635996569599, +STORE, 139635994353664, 139635994451967, +SNULL, 139635996545023, 139635996569599, +STORE, 139635994451968, 139635996545023, +STORE, 139635996545024, 139635996569599, +SNULL, 139635996545024, 139635996553215, +STORE, 139635996553216, 139635996569599, +STORE, 139635996545024, 139635996553215, +ERASE, 139635996545024, 139635996553215, +STORE, 139635996545024, 139635996553215, +ERASE, 139635996553216, 139635996569599, +STORE, 139635996553216, 139635996569599, +STORE, 139635992223744, 139635994353663, +SNULL, 139635992223744, 139635992252415, +STORE, 139635992252416, 139635994353663, +STORE, 139635992223744, 139635992252415, +SNULL, 139635994345471, 139635994353663, +STORE, 139635992252416, 139635994345471, +STORE, 139635994345472, 139635994353663, +ERASE, 139635994345472, 139635994353663, +STORE, 139635994345472, 139635994353663, +STORE, 139635988426752, 139635992223743, +SNULL, 139635988426752, 139635990085631, +STORE, 139635990085632, 139635992223743, +STORE, 139635988426752, 139635990085631, +SNULL, 139635992182783, 139635992223743, +STORE, 139635990085632, 139635992182783, +STORE, 139635992182784, 139635992223743, +SNULL, 139635992182784, 139635992207359, +STORE, 139635992207360, 139635992223743, +STORE, 139635992182784, 139635992207359, +ERASE, 139635992182784, 139635992207359, +STORE, 139635992182784, 139635992207359, +ERASE, 139635992207360, 139635992223743, +STORE, 139635992207360, 139635992223743, +STORE, 139636003536896, 139636003553279, +SNULL, 139635992199167, 139635992207359, +STORE, 139635992182784, 139635992199167, +STORE, 139635992199168, 139635992207359, +SNULL, 139635996549119, 139635996553215, +STORE, 139635996545024, 139635996549119, +STORE, 139635996549120, 139635996553215, +SNULL, 139635994349567, 139635994353663, +STORE, 139635994345472, 139635994349567, +STORE, 139635994349568, 139635994353663, +SNULL, 139635998769151, 139635998773247, +STORE, 139635998765056, 139635998769151, +STORE, 139635998769152, 139635998773247, +SNULL, 139636001337343, 139636001341439, +STORE, 139636001333248, 139636001337343, +STORE, 139636001337344, 139636001341439, +SNULL, 94572785418239, 94572785455103, +STORE, 94572785405952, 94572785418239, +STORE, 94572785418240, 94572785455103, +SNULL, 139636003586047, 139636003590143, +STORE, 139636003581952, 139636003586047, +STORE, 139636003586048, 139636003590143, +ERASE, 139636003553280, 139636003581951, +STORE, 94572798435328, 94572798570495, +STORE, 139636001853440, 139636003536895, +STORE, 139635981426688, 139635988426751, +STORE, 139635980615680, 139635981426687, +STORE, 94572798435328, 94572798705663, +STORE, 94572798435328, 94572798840831, +STORE, 94572798435328, 94572798975999, +STORE, 94572798435328, 94572799111167, +STORE, 94572798435328, 94572799246335, +STORE, 94572798435328, 94572799381503, +STORE, 94572798435328, 94572799516671, +STORE, 94572798435328, 94572799651839, +STORE, 94572798435328, 94572799787007, +STORE, 94572798435328, 94572799922175, +STORE, 94572798435328, 94572800057343, +STORE, 94572798435328, 94572800192511, +STORE, 94572798435328, 94572800327679, +STORE, 94572798435328, 94572800462847, +STORE, 94572798435328, 94572800598015, +STORE, 94572798435328, 94572800733183, +STORE, 94572798435328, 94572800868351, +STORE, 94572798435328, 94572801003519, +STORE, 94572798435328, 94572801138687, +STORE, 94572798435328, 94572801273855, +STORE, 94572798435328, 94572801409023, +STORE, 94572798435328, 94572801544191, +STORE, 94572798435328, 94572801679359, +STORE, 94572798435328, 94572801814527, +STORE, 94572798435328, 94572801949695, +STORE, 94572798435328, 94572802084863, +STORE, 94572798435328, 94572802220031, +STORE, 94572798435328, 94572802355199, +STORE, 94572798435328, 94572802490367, +STORE, 94572798435328, 94572802625535, +STORE, 94572798435328, 94572802760703, +STORE, 94572798435328, 94572802895871, +STORE, 94572798435328, 94572803031039, +STORE, 94572798435328, 94572803166207, +STORE, 94572798435328, 94572803301375, +STORE, 94572798435328, 94572803436543, +STORE, 94572798435328, 94572803571711, +STORE, 94572798435328, 94572803706879, +STORE, 94572798435328, 94572803842047, +STORE, 94572798435328, 94572803977215, +STORE, 94572798435328, 94572804112383, +STORE, 94572798435328, 94572804247551, +STORE, 94572798435328, 94572804382719, +STORE, 94572798435328, 94572804517887, +STORE, 94572798435328, 94572804653055, +STORE, 94572798435328, 94572804788223, +STORE, 94572798435328, 94572804923391, +STORE, 94572798435328, 94572805058559, +STORE, 94572798435328, 94572805193727, +STORE, 94572798435328, 94572805328895, +STORE, 94572798435328, 94572805464063, +STORE, 94572798435328, 94572805599231, +STORE, 94572798435328, 94572805734399, +STORE, 94572798435328, 94572805869567, +STORE, 94572798435328, 94572806004735, +STORE, 94572798435328, 94572806139903, +STORE, 94572798435328, 94572806275071, +STORE, 94572798435328, 94572806410239, +STORE, 94572798435328, 94572806545407, +STORE, 94572798435328, 94572806680575, +STORE, 94572798435328, 94572806815743, +STORE, 94572798435328, 94572806950911, +STORE, 94572798435328, 94572807086079, +STORE, 94572798435328, 94572807221247, +STORE, 94572798435328, 94572807356415, +STORE, 94572798435328, 94572807491583, +STORE, 94572798435328, 94572807626751, +STORE, 94572798435328, 94572807761919, +STORE, 94572798435328, 94572807897087, +STORE, 94572798435328, 94572808032255, +STORE, 94572798435328, 94572808167423, +STORE, 94572798435328, 94572808302591, +STORE, 94572798435328, 94572808437759, +STORE, 94572798435328, 94572808572927, +ERASE, 139635981426688, 139635988426751, +STORE, 139635985088512, 139635988426751, +STORE, 139635778273280, 139635980615679, +STORE, 139635567632384, 139635778273279, +STORE, 94572798435328, 94572808716287, +STORE, 139635984564224, 139635985088511, +STORE, 139635559239680, 139635567632383, +SNULL, 139635559243775, 139635567632383, +STORE, 139635559239680, 139635559243775, +STORE, 139635559243776, 139635567632383, +STORE, 139635550846976, 139635559239679, +SNULL, 139635550851071, 139635559239679, +STORE, 139635550846976, 139635550851071, +STORE, 139635550851072, 139635559239679, +STORE, 139635542454272, 139635550846975, +STORE, 139635408236544, 139635542454271, +SNULL, 139635408236544, 139635426590719, +STORE, 139635426590720, 139635542454271, +STORE, 139635408236544, 139635426590719, +ERASE, 139635408236544, 139635426590719, +STORE, 139635292372992, 139635542454271, +SNULL, 139635359481855, 139635542454271, +STORE, 139635292372992, 139635359481855, +STORE, 139635359481856, 139635542454271, +SNULL, 139635359481856, 139635426590719, +STORE, 139635426590720, 139635542454271, +STORE, 139635359481856, 139635426590719, +ERASE, 139635359481856, 139635426590719, +SNULL, 139635542458367, 139635550846975, +STORE, 139635542454272, 139635542458367, +STORE, 139635542458368, 139635550846975, +STORE, 139635418198016, 139635426590719, +SNULL, 139635493699583, 139635542454271, +STORE, 139635426590720, 139635493699583, +STORE, 139635493699584, 139635542454271, +ERASE, 139635493699584, 139635542454271, +SNULL, 139635426725887, 139635493699583, +STORE, 139635426590720, 139635426725887, +STORE, 139635426725888, 139635493699583, +SNULL, 139635292508159, 139635359481855, +STORE, 139635292372992, 139635292508159, +STORE, 139635292508160, 139635359481855, +SNULL, 139635418202111, 139635426590719, +STORE, 139635418198016, 139635418202111, +STORE, 139635418202112, 139635426590719, +STORE, 139635225264128, 139635292372991, +STORE, 139635534061568, 139635542454271, +SNULL, 139635534065663, 139635542454271, +STORE, 139635534061568, 139635534065663, +STORE, 139635534065664, 139635542454271, +STORE, 139635525668864, 139635534061567, +SNULL, 139635525672959, 139635534061567, +STORE, 139635525668864, 139635525672959, +STORE, 139635525672960, 139635534061567, +SNULL, 139635225399295, 139635292372991, +STORE, 139635225264128, 139635225399295, +STORE, 139635225399296, 139635292372991, +STORE, 139635091046400, 139635225264127, +SNULL, 139635158155263, 139635225264127, +STORE, 139635091046400, 139635158155263, +STORE, 139635158155264, 139635225264127, +ERASE, 139635158155264, 139635225264127, +STORE, 139634956828672, 139635158155263, +STORE, 139635517276160, 139635525668863, +SNULL, 139635517280255, 139635525668863, +STORE, 139635517276160, 139635517280255, +STORE, 139635517280256, 139635525668863, +SNULL, 139634956828672, 139635091046399, +STORE, 139635091046400, 139635158155263, +STORE, 139634956828672, 139635091046399, +SNULL, 139635091181567, 139635158155263, +STORE, 139635091046400, 139635091181567, +STORE, 139635091181568, 139635158155263, +SNULL, 139635023937535, 139635091046399, +STORE, 139634956828672, 139635023937535, +STORE, 139635023937536, 139635091046399, +ERASE, 139635023937536, 139635091046399, +STORE, 139634956828672, 139635091046399, +SNULL, 139634956828672, 139635023937535, +STORE, 139635023937536, 139635091046399, +STORE, 139634956828672, 139635023937535, +SNULL, 139635024072703, 139635091046399, +STORE, 139635023937536, 139635024072703, +STORE, 139635024072704, 139635091046399, +STORE, 139635508883456, 139635517276159, +SNULL, 139635508887551, 139635517276159, +STORE, 139635508883456, 139635508887551, +STORE, 139635508887552, 139635517276159, +STORE, 139634822610944, 139635023937535, +SNULL, 139634822610944, 139634956828671, +STORE, 139634956828672, 139635023937535, +STORE, 139634822610944, 139634956828671, +SNULL, 139634956963839, 139635023937535, +STORE, 139634956828672, 139634956963839, +STORE, 139634956963840, 139635023937535, +STORE, 139635500490752, 139635508883455, +SNULL, 139634889719807, 139634956828671, +STORE, 139634822610944, 139634889719807, +STORE, 139634889719808, 139634956828671, +ERASE, 139634889719808, 139634956828671, +SNULL, 139635500494847, 139635508883455, +STORE, 139635500490752, 139635500494847, +STORE, 139635500494848, 139635508883455, +SNULL, 139634822746111, 139634889719807, +STORE, 139634822610944, 139634822746111, +STORE, 139634822746112, 139634889719807, +STORE, 139635409805312, 139635418198015, +STORE, 139634822746112, 139634956828671, +SNULL, 139634822746112, 139634889719807, +STORE, 139634889719808, 139634956828671, +STORE, 139634822746112, 139634889719807, +SNULL, 139634889854975, 139634956828671, +STORE, 139634889719808, 139634889854975, +STORE, 139634889854976, 139634956828671, +SNULL, 139635409809407, 139635418198015, +STORE, 139635409805312, 139635409809407, +STORE, 139635409809408, 139635418198015, +STORE, 139635401412608, 139635409805311, +STORE, 139634688393216, 139634822610943, +SNULL, 139634755502079, 139634822610943, +STORE, 139634688393216, 139634755502079, +STORE, 139634755502080, 139634822610943, +ERASE, 139634755502080, 139634822610943, +SNULL, 139635401416703, 139635409805311, +STORE, 139635401412608, 139635401416703, +STORE, 139635401416704, 139635409805311, +STORE, 139634554175488, 139634755502079, +SNULL, 139634554175488, 139634688393215, +STORE, 139634688393216, 139634755502079, +STORE, 139634554175488, 139634688393215, +SNULL, 139634688528383, 139634755502079, +STORE, 139634688393216, 139634688528383, +STORE, 139634688528384, 139634755502079, +STORE, 139635393019904, 139635401412607, +SNULL, 139634621284351, 139634688393215, +STORE, 139634554175488, 139634621284351, +STORE, 139634621284352, 139634688393215, +ERASE, 139634621284352, 139634688393215, +SNULL, 139634554310655, 139634621284351, +STORE, 139634554175488, 139634554310655, +STORE, 139634554310656, 139634621284351, +STORE, 139634554310656, 139634688393215, +SNULL, 139635393023999, 139635401412607, +STORE, 139635393019904, 139635393023999, +STORE, 139635393024000, 139635401412607, +SNULL, 139634554310656, 139634621284351, +STORE, 139634621284352, 139634688393215, +STORE, 139634554310656, 139634621284351, +SNULL, 139634621419519, 139634688393215, +STORE, 139634621284352, 139634621419519, +STORE, 139634621419520, 139634688393215, +STORE, 139635384627200, 139635393019903, +SNULL, 139635384631295, 139635393019903, +STORE, 139635384627200, 139635384631295, +STORE, 139635384631296, 139635393019903, +STORE, 139635376234496, 139635384627199, +SNULL, 139635376238591, 139635384627199, +STORE, 139635376234496, 139635376238591, +STORE, 139635376238592, 139635384627199, +STORE, 139635367841792, 139635376234495, +SNULL, 139635367845887, 139635376234495, +STORE, 139635367841792, 139635367845887, +STORE, 139635367845888, 139635376234495, +STORE, 139634419957760, 139634554175487, +SNULL, 139634487066623, 139634554175487, +STORE, 139634419957760, 139634487066623, +STORE, 139634487066624, 139634554175487, +ERASE, 139634487066624, 139634554175487, +STORE, 139635216871424, 139635225264127, +SNULL, 139635216875519, 139635225264127, +STORE, 139635216871424, 139635216875519, +STORE, 139635216875520, 139635225264127, +SNULL, 139634420092927, 139634487066623, +STORE, 139634419957760, 139634420092927, +STORE, 139634420092928, 139634487066623, +STORE, 139635208478720, 139635216871423, +SNULL, 139635208482815, 139635216871423, +STORE, 139635208478720, 139635208482815, +STORE, 139635208482816, 139635216871423, +STORE, 139635200086016, 139635208478719, +SNULL, 139635200090111, 139635208478719, +STORE, 139635200086016, 139635200090111, +STORE, 139635200090112, 139635208478719, +STORE, 139635191693312, 139635200086015, +SNULL, 139635191697407, 139635200086015, +STORE, 139635191693312, 139635191697407, +STORE, 139635191697408, 139635200086015, +STORE, 139635183300608, 139635191693311, +SNULL, 139635183304703, 139635191693311, +STORE, 139635183300608, 139635183304703, +STORE, 139635183304704, 139635191693311, +STORE, 139634420092928, 139634554175487, +SNULL, 139634420092928, 139634487066623, +STORE, 139634487066624, 139634554175487, +STORE, 139634420092928, 139634487066623, +SNULL, 139634487201791, 139634554175487, +STORE, 139634487066624, 139634487201791, +STORE, 139634487201792, 139634554175487, +ERASE, 139635559239680, 139635559243775, +ERASE, 139635559243776, 139635567632383, +ERASE, 139635550846976, 139635550851071, +ERASE, 139635550851072, 139635559239679, +ERASE, 139635542454272, 139635542458367, +ERASE, 139635542458368, 139635550846975, +ERASE, 139635418198016, 139635418202111, +ERASE, 139635418202112, 139635426590719, +ERASE, 139635534061568, 139635534065663, +ERASE, 139635534065664, 139635542454271, +ERASE, 139635525668864, 139635525672959, +ERASE, 139635525672960, 139635534061567, +ERASE, 139635517276160, 139635517280255, +ERASE, 139635517280256, 139635525668863, +ERASE, 139635508883456, 139635508887551, +ERASE, 139635508887552, 139635517276159, +ERASE, 139635500490752, 139635500494847, +ERASE, 139635500494848, 139635508883455, +ERASE, 139635409805312, 139635409809407, +ERASE, 139635409809408, 139635418198015, +ERASE, 139635401412608, 139635401416703, +ERASE, 139635401416704, 139635409805311, +ERASE, 139635393019904, 139635393023999, +ERASE, 139635393024000, 139635401412607, +ERASE, 139635384627200, 139635384631295, +ERASE, 139635384631296, 139635393019903, + }; + unsigned long set25[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140722547441664, 140737488351231, +SNULL, 140722547449855, 140737488351231, +STORE, 140722547441664, 140722547449855, +STORE, 140722547310592, 140722547449855, +STORE, 94827521732608, 94827523956735, +SNULL, 94827521843199, 94827523956735, +STORE, 94827521732608, 94827521843199, +STORE, 94827521843200, 94827523956735, +ERASE, 94827521843200, 94827523956735, +STORE, 94827523936256, 94827523948543, +STORE, 94827523948544, 94827523956735, +STORE, 139816136847360, 139816139100159, +SNULL, 139816136990719, 139816139100159, +STORE, 139816136847360, 139816136990719, +STORE, 139816136990720, 139816139100159, +ERASE, 139816136990720, 139816139100159, +STORE, 139816139087872, 139816139096063, +STORE, 139816139096064, 139816139100159, +STORE, 140722548142080, 140722548146175, +STORE, 140722548129792, 140722548142079, +STORE, 139816139059200, 139816139087871, +STORE, 139816139051008, 139816139059199, +STORE, 139816133050368, 139816136847359, +SNULL, 139816133050368, 139816134709247, +STORE, 139816134709248, 139816136847359, +STORE, 139816133050368, 139816134709247, +SNULL, 139816136806399, 139816136847359, +STORE, 139816134709248, 139816136806399, +STORE, 139816136806400, 139816136847359, +SNULL, 139816136806400, 139816136830975, +STORE, 139816136830976, 139816136847359, +STORE, 139816136806400, 139816136830975, +ERASE, 139816136806400, 139816136830975, +STORE, 139816136806400, 139816136830975, +ERASE, 139816136830976, 139816136847359, +STORE, 139816136830976, 139816136847359, +SNULL, 139816136822783, 139816136830975, +STORE, 139816136806400, 139816136822783, +STORE, 139816136822784, 139816136830975, +SNULL, 94827523944447, 94827523948543, +STORE, 94827523936256, 94827523944447, +STORE, 94827523944448, 94827523948543, +SNULL, 139816139091967, 139816139096063, +STORE, 139816139087872, 139816139091967, +STORE, 139816139091968, 139816139096063, +ERASE, 139816139059200, 139816139087871, +STORE, 94827534970880, 94827535106047, +STORE, 94114394132480, 94114394345471, +STORE, 94114396442624, 94114396446719, +STORE, 94114396446720, 94114396454911, +STORE, 94114396454912, 94114396467199, +STORE, 94114421575680, 94114427715583, +STORE, 139934313955328, 139934315614207, +STORE, 139934315614208, 139934317711359, +STORE, 139934317711360, 139934317727743, +STORE, 139934317727744, 139934317735935, +STORE, 139934317735936, 139934317752319, +STORE, 139934317752320, 139934317764607, +STORE, 139934317764608, 139934319857663, +STORE, 139934319857664, 139934319861759, +STORE, 139934319861760, 139934319865855, +STORE, 139934319865856, 139934320009215, +STORE, 139934320377856, 139934322061311, +STORE, 139934322061312, 139934322077695, +STORE, 139934322106368, 139934322110463, +STORE, 139934322110464, 139934322114559, +STORE, 139934322114560, 139934322118655, +STORE, 140731200376832, 140731200516095, +STORE, 140731200929792, 140731200942079, +STORE, 140731200942080, 140731200946175, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140734133174272, 140737488351231, +SNULL, 140734133182463, 140737488351231, +STORE, 140734133174272, 140734133182463, +STORE, 140734133043200, 140734133182463, +STORE, 94412675600384, 94412677824511, +SNULL, 94412675710975, 94412677824511, +STORE, 94412675600384, 94412675710975, +STORE, 94412675710976, 94412677824511, +ERASE, 94412675710976, 94412677824511, +STORE, 94412677804032, 94412677816319, +STORE, 94412677816320, 94412677824511, +STORE, 140320087945216, 140320090198015, +SNULL, 140320088088575, 140320090198015, +STORE, 140320087945216, 140320088088575, +STORE, 140320088088576, 140320090198015, +ERASE, 140320088088576, 140320090198015, +STORE, 140320090185728, 140320090193919, +STORE, 140320090193920, 140320090198015, +STORE, 140734134591488, 140734134595583, +STORE, 140734134579200, 140734134591487, +STORE, 140320090157056, 140320090185727, +STORE, 140320090148864, 140320090157055, +STORE, 140320084148224, 140320087945215, +SNULL, 140320084148224, 140320085807103, +STORE, 140320085807104, 140320087945215, +STORE, 140320084148224, 140320085807103, +SNULL, 140320087904255, 140320087945215, +STORE, 140320085807104, 140320087904255, +STORE, 140320087904256, 140320087945215, +SNULL, 140320087904256, 140320087928831, +STORE, 140320087928832, 140320087945215, +STORE, 140320087904256, 140320087928831, +ERASE, 140320087904256, 140320087928831, +STORE, 140320087904256, 140320087928831, +ERASE, 140320087928832, 140320087945215, +STORE, 140320087928832, 140320087945215, +SNULL, 140320087920639, 140320087928831, +STORE, 140320087904256, 140320087920639, +STORE, 140320087920640, 140320087928831, +SNULL, 94412677812223, 94412677816319, +STORE, 94412677804032, 94412677812223, +STORE, 94412677812224, 94412677816319, +SNULL, 140320090189823, 140320090193919, +STORE, 140320090185728, 140320090189823, +STORE, 140320090189824, 140320090193919, +ERASE, 140320090157056, 140320090185727, +STORE, 94412684546048, 94412684681215, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140723005485056, 140737488351231, +SNULL, 140723005493247, 140737488351231, +STORE, 140723005485056, 140723005493247, +STORE, 140723005353984, 140723005493247, +STORE, 94387431936000, 94387434160127, +SNULL, 94387432046591, 94387434160127, +STORE, 94387431936000, 94387432046591, +STORE, 94387432046592, 94387434160127, +ERASE, 94387432046592, 94387434160127, +STORE, 94387434139648, 94387434151935, +STORE, 94387434151936, 94387434160127, +STORE, 140151675392000, 140151677644799, +SNULL, 140151675535359, 140151677644799, +STORE, 140151675392000, 140151675535359, +STORE, 140151675535360, 140151677644799, +ERASE, 140151675535360, 140151677644799, +STORE, 140151677632512, 140151677640703, +STORE, 140151677640704, 140151677644799, +STORE, 140723005784064, 140723005788159, +STORE, 140723005771776, 140723005784063, +STORE, 140151677603840, 140151677632511, +STORE, 140151677595648, 140151677603839, +STORE, 140151671595008, 140151675391999, +SNULL, 140151671595008, 140151673253887, +STORE, 140151673253888, 140151675391999, +STORE, 140151671595008, 140151673253887, +SNULL, 140151675351039, 140151675391999, +STORE, 140151673253888, 140151675351039, +STORE, 140151675351040, 140151675391999, +SNULL, 140151675351040, 140151675375615, +STORE, 140151675375616, 140151675391999, +STORE, 140151675351040, 140151675375615, +ERASE, 140151675351040, 140151675375615, +STORE, 140151675351040, 140151675375615, +ERASE, 140151675375616, 140151675391999, +STORE, 140151675375616, 140151675391999, +SNULL, 140151675367423, 140151675375615, +STORE, 140151675351040, 140151675367423, +STORE, 140151675367424, 140151675375615, +SNULL, 94387434147839, 94387434151935, +STORE, 94387434139648, 94387434147839, +STORE, 94387434147840, 94387434151935, +SNULL, 140151677636607, 140151677640703, +STORE, 140151677632512, 140151677636607, +STORE, 140151677636608, 140151677640703, +ERASE, 140151677603840, 140151677632511, +STORE, 94387458818048, 94387458953215, +STORE, 94909010997248, 94909011210239, +STORE, 94909013307392, 94909013311487, +STORE, 94909013311488, 94909013319679, +STORE, 94909013319680, 94909013331967, +STORE, 94909014827008, 94909023371263, +STORE, 140712411975680, 140712413634559, +STORE, 140712413634560, 140712415731711, +STORE, 140712415731712, 140712415748095, +STORE, 140712415748096, 140712415756287, +STORE, 140712415756288, 140712415772671, +STORE, 140712415772672, 140712415784959, +STORE, 140712415784960, 140712417878015, +STORE, 140712417878016, 140712417882111, +STORE, 140712417882112, 140712417886207, +STORE, 140712417886208, 140712418029567, +STORE, 140712418398208, 140712420081663, +STORE, 140712420081664, 140712420098047, +STORE, 140712420126720, 140712420130815, +STORE, 140712420130816, 140712420134911, +STORE, 140712420134912, 140712420139007, +STORE, 140729293111296, 140729293250559, +STORE, 140729293307904, 140729293320191, +STORE, 140729293320192, 140729293324287, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140720541691904, 140737488351231, +SNULL, 140720541700095, 140737488351231, +STORE, 140720541691904, 140720541700095, +STORE, 140720541560832, 140720541700095, +STORE, 94203603419136, 94203605643263, +SNULL, 94203603529727, 94203605643263, +STORE, 94203603419136, 94203603529727, +STORE, 94203603529728, 94203605643263, +ERASE, 94203603529728, 94203605643263, +STORE, 94203605622784, 94203605635071, +STORE, 94203605635072, 94203605643263, +STORE, 139847623081984, 139847625334783, +SNULL, 139847623225343, 139847625334783, +STORE, 139847623081984, 139847623225343, +STORE, 139847623225344, 139847625334783, +ERASE, 139847623225344, 139847625334783, +STORE, 139847625322496, 139847625330687, +STORE, 139847625330688, 139847625334783, +STORE, 140720542547968, 140720542552063, +STORE, 140720542535680, 140720542547967, +STORE, 139847625293824, 139847625322495, +STORE, 139847625285632, 139847625293823, +STORE, 139847619284992, 139847623081983, +SNULL, 139847619284992, 139847620943871, +STORE, 139847620943872, 139847623081983, +STORE, 139847619284992, 139847620943871, +SNULL, 139847623041023, 139847623081983, +STORE, 139847620943872, 139847623041023, +STORE, 139847623041024, 139847623081983, +SNULL, 139847623041024, 139847623065599, +STORE, 139847623065600, 139847623081983, +STORE, 139847623041024, 139847623065599, +ERASE, 139847623041024, 139847623065599, +STORE, 139847623041024, 139847623065599, +ERASE, 139847623065600, 139847623081983, +STORE, 139847623065600, 139847623081983, +SNULL, 139847623057407, 139847623065599, +STORE, 139847623041024, 139847623057407, +STORE, 139847623057408, 139847623065599, +SNULL, 94203605630975, 94203605635071, +STORE, 94203605622784, 94203605630975, +STORE, 94203605630976, 94203605635071, +SNULL, 139847625326591, 139847625330687, +STORE, 139847625322496, 139847625326591, +STORE, 139847625326592, 139847625330687, +ERASE, 139847625293824, 139847625322495, +STORE, 94203634880512, 94203635015679, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140721428738048, 140737488351231, +SNULL, 140721428746239, 140737488351231, +STORE, 140721428738048, 140721428746239, +STORE, 140721428606976, 140721428746239, +STORE, 93968808378368, 93968810602495, +SNULL, 93968808488959, 93968810602495, +STORE, 93968808378368, 93968808488959, +STORE, 93968808488960, 93968810602495, +ERASE, 93968808488960, 93968810602495, +STORE, 93968810582016, 93968810594303, +STORE, 93968810594304, 93968810602495, +STORE, 140397757026304, 140397759279103, +SNULL, 140397757169663, 140397759279103, +STORE, 140397757026304, 140397757169663, +STORE, 140397757169664, 140397759279103, +ERASE, 140397757169664, 140397759279103, +STORE, 140397759266816, 140397759275007, +STORE, 140397759275008, 140397759279103, +STORE, 140721430368256, 140721430372351, +STORE, 140721430355968, 140721430368255, +STORE, 140397759238144, 140397759266815, +STORE, 140397759229952, 140397759238143, +STORE, 140397753229312, 140397757026303, +SNULL, 140397753229312, 140397754888191, +STORE, 140397754888192, 140397757026303, +STORE, 140397753229312, 140397754888191, +SNULL, 140397756985343, 140397757026303, +STORE, 140397754888192, 140397756985343, +STORE, 140397756985344, 140397757026303, +SNULL, 140397756985344, 140397757009919, +STORE, 140397757009920, 140397757026303, +STORE, 140397756985344, 140397757009919, +ERASE, 140397756985344, 140397757009919, +STORE, 140397756985344, 140397757009919, +ERASE, 140397757009920, 140397757026303, +STORE, 140397757009920, 140397757026303, +SNULL, 140397757001727, 140397757009919, +STORE, 140397756985344, 140397757001727, +STORE, 140397757001728, 140397757009919, +SNULL, 93968810590207, 93968810594303, +STORE, 93968810582016, 93968810590207, +STORE, 93968810590208, 93968810594303, +SNULL, 140397759270911, 140397759275007, +STORE, 140397759266816, 140397759270911, +STORE, 140397759270912, 140397759275007, +ERASE, 140397759238144, 140397759266815, +STORE, 93968837025792, 93968837160959, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140721751044096, 140737488351231, +SNULL, 140721751052287, 140737488351231, +STORE, 140721751044096, 140721751052287, +STORE, 140721750913024, 140721751052287, +STORE, 94426051657728, 94426053881855, +SNULL, 94426051768319, 94426053881855, +STORE, 94426051657728, 94426051768319, +STORE, 94426051768320, 94426053881855, +ERASE, 94426051768320, 94426053881855, +STORE, 94426053861376, 94426053873663, +STORE, 94426053873664, 94426053881855, +STORE, 140228456181760, 140228458434559, +SNULL, 140228456325119, 140228458434559, +STORE, 140228456181760, 140228456325119, +STORE, 140228456325120, 140228458434559, +ERASE, 140228456325120, 140228458434559, +STORE, 140228458422272, 140228458430463, +STORE, 140228458430464, 140228458434559, +STORE, 140721751117824, 140721751121919, +STORE, 140721751105536, 140721751117823, +STORE, 140228458393600, 140228458422271, +STORE, 140228458385408, 140228458393599, +STORE, 140228452384768, 140228456181759, +SNULL, 140228452384768, 140228454043647, +STORE, 140228454043648, 140228456181759, +STORE, 140228452384768, 140228454043647, +SNULL, 140228456140799, 140228456181759, +STORE, 140228454043648, 140228456140799, +STORE, 140228456140800, 140228456181759, +SNULL, 140228456140800, 140228456165375, +STORE, 140228456165376, 140228456181759, +STORE, 140228456140800, 140228456165375, +ERASE, 140228456140800, 140228456165375, +STORE, 140228456140800, 140228456165375, +ERASE, 140228456165376, 140228456181759, +STORE, 140228456165376, 140228456181759, +SNULL, 140228456157183, 140228456165375, +STORE, 140228456140800, 140228456157183, +STORE, 140228456157184, 140228456165375, +SNULL, 94426053869567, 94426053873663, +STORE, 94426053861376, 94426053869567, +STORE, 94426053869568, 94426053873663, +SNULL, 140228458426367, 140228458430463, +STORE, 140228458422272, 140228458426367, +STORE, 140228458426368, 140228458430463, +ERASE, 140228458393600, 140228458422271, +STORE, 94426073681920, 94426073817087, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140732727623680, 140737488351231, +SNULL, 140732727631871, 140737488351231, +STORE, 140732727623680, 140732727631871, +STORE, 140732727492608, 140732727631871, +STORE, 94537485996032, 94537488220159, +SNULL, 94537486106623, 94537488220159, +STORE, 94537485996032, 94537486106623, +STORE, 94537486106624, 94537488220159, +ERASE, 94537486106624, 94537488220159, +STORE, 94537488199680, 94537488211967, +STORE, 94537488211968, 94537488220159, +STORE, 140446578036736, 140446580289535, +SNULL, 140446578180095, 140446580289535, +STORE, 140446578036736, 140446578180095, +STORE, 140446578180096, 140446580289535, +ERASE, 140446578180096, 140446580289535, +STORE, 140446580277248, 140446580285439, +STORE, 140446580285440, 140446580289535, +STORE, 140732727758848, 140732727762943, +STORE, 140732727746560, 140732727758847, +STORE, 140446580248576, 140446580277247, +STORE, 140446580240384, 140446580248575, +STORE, 140446574239744, 140446578036735, +SNULL, 140446574239744, 140446575898623, +STORE, 140446575898624, 140446578036735, +STORE, 140446574239744, 140446575898623, +SNULL, 140446577995775, 140446578036735, +STORE, 140446575898624, 140446577995775, +STORE, 140446577995776, 140446578036735, +SNULL, 140446577995776, 140446578020351, +STORE, 140446578020352, 140446578036735, +STORE, 140446577995776, 140446578020351, +ERASE, 140446577995776, 140446578020351, +STORE, 140446577995776, 140446578020351, +ERASE, 140446578020352, 140446578036735, +STORE, 140446578020352, 140446578036735, +SNULL, 140446578012159, 140446578020351, +STORE, 140446577995776, 140446578012159, +STORE, 140446578012160, 140446578020351, +SNULL, 94537488207871, 94537488211967, +STORE, 94537488199680, 94537488207871, +STORE, 94537488207872, 94537488211967, +SNULL, 140446580281343, 140446580285439, +STORE, 140446580277248, 140446580281343, +STORE, 140446580281344, 140446580285439, +ERASE, 140446580248576, 140446580277247, +STORE, 94537489014784, 94537489149951, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140728766808064, 140737488351231, +SNULL, 140728766816255, 140737488351231, +STORE, 140728766808064, 140728766816255, +STORE, 140728766676992, 140728766816255, +STORE, 94418513866752, 94418516090879, +SNULL, 94418513977343, 94418516090879, +STORE, 94418513866752, 94418513977343, +STORE, 94418513977344, 94418516090879, +ERASE, 94418513977344, 94418516090879, +STORE, 94418516070400, 94418516082687, +STORE, 94418516082688, 94418516090879, +STORE, 140556479520768, 140556481773567, +SNULL, 140556479664127, 140556481773567, +STORE, 140556479520768, 140556479664127, +STORE, 140556479664128, 140556481773567, +ERASE, 140556479664128, 140556481773567, +STORE, 140556481761280, 140556481769471, +STORE, 140556481769472, 140556481773567, +STORE, 140728767148032, 140728767152127, +STORE, 140728767135744, 140728767148031, +STORE, 140556481732608, 140556481761279, +STORE, 140556481724416, 140556481732607, +STORE, 140556475723776, 140556479520767, +SNULL, 140556475723776, 140556477382655, +STORE, 140556477382656, 140556479520767, +STORE, 140556475723776, 140556477382655, +SNULL, 140556479479807, 140556479520767, +STORE, 140556477382656, 140556479479807, +STORE, 140556479479808, 140556479520767, +SNULL, 140556479479808, 140556479504383, +STORE, 140556479504384, 140556479520767, +STORE, 140556479479808, 140556479504383, +ERASE, 140556479479808, 140556479504383, +STORE, 140556479479808, 140556479504383, +ERASE, 140556479504384, 140556479520767, +STORE, 140556479504384, 140556479520767, +SNULL, 140556479496191, 140556479504383, +STORE, 140556479479808, 140556479496191, +STORE, 140556479496192, 140556479504383, +SNULL, 94418516078591, 94418516082687, +STORE, 94418516070400, 94418516078591, +STORE, 94418516078592, 94418516082687, +SNULL, 140556481765375, 140556481769471, +STORE, 140556481761280, 140556481765375, +STORE, 140556481765376, 140556481769471, +ERASE, 140556481732608, 140556481761279, +STORE, 94418541113344, 94418541248511, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140723945873408, 140737488351231, +SNULL, 140723945881599, 140737488351231, +STORE, 140723945873408, 140723945881599, +STORE, 140723945742336, 140723945881599, +STORE, 94543169773568, 94543171997695, +SNULL, 94543169884159, 94543171997695, +STORE, 94543169773568, 94543169884159, +STORE, 94543169884160, 94543171997695, +ERASE, 94543169884160, 94543171997695, +STORE, 94543171977216, 94543171989503, +STORE, 94543171989504, 94543171997695, +STORE, 139890420883456, 139890423136255, +SNULL, 139890421026815, 139890423136255, +STORE, 139890420883456, 139890421026815, +STORE, 139890421026816, 139890423136255, +ERASE, 139890421026816, 139890423136255, +STORE, 139890423123968, 139890423132159, +STORE, 139890423132160, 139890423136255, +STORE, 140723946102784, 140723946106879, +STORE, 140723946090496, 140723946102783, +STORE, 139890423095296, 139890423123967, +STORE, 139890423087104, 139890423095295, +STORE, 139890417086464, 139890420883455, +SNULL, 139890417086464, 139890418745343, +STORE, 139890418745344, 139890420883455, +STORE, 139890417086464, 139890418745343, +SNULL, 139890420842495, 139890420883455, +STORE, 139890418745344, 139890420842495, +STORE, 139890420842496, 139890420883455, +SNULL, 139890420842496, 139890420867071, +STORE, 139890420867072, 139890420883455, +STORE, 139890420842496, 139890420867071, +ERASE, 139890420842496, 139890420867071, +STORE, 139890420842496, 139890420867071, +ERASE, 139890420867072, 139890420883455, +STORE, 139890420867072, 139890420883455, +SNULL, 139890420858879, 139890420867071, +STORE, 139890420842496, 139890420858879, +STORE, 139890420858880, 139890420867071, +SNULL, 94543171985407, 94543171989503, +STORE, 94543171977216, 94543171985407, +STORE, 94543171985408, 94543171989503, +SNULL, 139890423128063, 139890423132159, +STORE, 139890423123968, 139890423128063, +STORE, 139890423128064, 139890423132159, +ERASE, 139890423095296, 139890423123967, +STORE, 94543197097984, 94543197233151, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140736205979648, 140737488351231, +SNULL, 140736205987839, 140737488351231, +STORE, 140736205979648, 140736205987839, +STORE, 140736205848576, 140736205987839, +STORE, 94913209913344, 94913212137471, +SNULL, 94913210023935, 94913212137471, +STORE, 94913209913344, 94913210023935, +STORE, 94913210023936, 94913212137471, +ERASE, 94913210023936, 94913212137471, +STORE, 94913212116992, 94913212129279, +STORE, 94913212129280, 94913212137471, +STORE, 140006323052544, 140006325305343, +SNULL, 140006323195903, 140006325305343, +STORE, 140006323052544, 140006323195903, +STORE, 140006323195904, 140006325305343, +ERASE, 140006323195904, 140006325305343, +STORE, 140006325293056, 140006325301247, +STORE, 140006325301248, 140006325305343, +STORE, 140736206716928, 140736206721023, +STORE, 140736206704640, 140736206716927, +STORE, 140006325264384, 140006325293055, +STORE, 140006325256192, 140006325264383, +STORE, 140006319255552, 140006323052543, +SNULL, 140006319255552, 140006320914431, +STORE, 140006320914432, 140006323052543, +STORE, 140006319255552, 140006320914431, +SNULL, 140006323011583, 140006323052543, +STORE, 140006320914432, 140006323011583, +STORE, 140006323011584, 140006323052543, +SNULL, 140006323011584, 140006323036159, +STORE, 140006323036160, 140006323052543, +STORE, 140006323011584, 140006323036159, +ERASE, 140006323011584, 140006323036159, +STORE, 140006323011584, 140006323036159, +ERASE, 140006323036160, 140006323052543, +STORE, 140006323036160, 140006323052543, +SNULL, 140006323027967, 140006323036159, +STORE, 140006323011584, 140006323027967, +STORE, 140006323027968, 140006323036159, +SNULL, 94913212125183, 94913212129279, +STORE, 94913212116992, 94913212125183, +STORE, 94913212125184, 94913212129279, +SNULL, 140006325297151, 140006325301247, +STORE, 140006325293056, 140006325297151, +STORE, 140006325297152, 140006325301247, +ERASE, 140006325264384, 140006325293055, +STORE, 94913239932928, 94913240068095, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140726926897152, 140737488351231, +SNULL, 140726926905343, 140737488351231, +STORE, 140726926897152, 140726926905343, +STORE, 140726926766080, 140726926905343, +STORE, 94213246820352, 94213249044479, +SNULL, 94213246930943, 94213249044479, +STORE, 94213246820352, 94213246930943, +STORE, 94213246930944, 94213249044479, +ERASE, 94213246930944, 94213249044479, +STORE, 94213249024000, 94213249036287, +STORE, 94213249036288, 94213249044479, +STORE, 140368830242816, 140368832495615, +SNULL, 140368830386175, 140368832495615, +STORE, 140368830242816, 140368830386175, +STORE, 140368830386176, 140368832495615, +ERASE, 140368830386176, 140368832495615, +STORE, 140368832483328, 140368832491519, +STORE, 140368832491520, 140368832495615, +STORE, 140726926999552, 140726927003647, +STORE, 140726926987264, 140726926999551, +STORE, 140368832454656, 140368832483327, +STORE, 140368832446464, 140368832454655, +STORE, 140368826445824, 140368830242815, +SNULL, 140368826445824, 140368828104703, +STORE, 140368828104704, 140368830242815, +STORE, 140368826445824, 140368828104703, +SNULL, 140368830201855, 140368830242815, +STORE, 140368828104704, 140368830201855, +STORE, 140368830201856, 140368830242815, +SNULL, 140368830201856, 140368830226431, +STORE, 140368830226432, 140368830242815, +STORE, 140368830201856, 140368830226431, +ERASE, 140368830201856, 140368830226431, +STORE, 140368830201856, 140368830226431, +ERASE, 140368830226432, 140368830242815, +STORE, 140368830226432, 140368830242815, +SNULL, 140368830218239, 140368830226431, +STORE, 140368830201856, 140368830218239, +STORE, 140368830218240, 140368830226431, +SNULL, 94213249032191, 94213249036287, +STORE, 94213249024000, 94213249032191, +STORE, 94213249032192, 94213249036287, +SNULL, 140368832487423, 140368832491519, +STORE, 140368832483328, 140368832487423, +STORE, 140368832487424, 140368832491519, +ERASE, 140368832454656, 140368832483327, +STORE, 94213267435520, 94213267570687, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140728954130432, 140737488351231, +SNULL, 140728954138623, 140737488351231, +STORE, 140728954130432, 140728954138623, +STORE, 140728953999360, 140728954138623, +STORE, 94672570966016, 94672573190143, +SNULL, 94672571076607, 94672573190143, +STORE, 94672570966016, 94672571076607, +STORE, 94672571076608, 94672573190143, +ERASE, 94672571076608, 94672573190143, +STORE, 94672573169664, 94672573181951, +STORE, 94672573181952, 94672573190143, +STORE, 140201696735232, 140201698988031, +SNULL, 140201696878591, 140201698988031, +STORE, 140201696735232, 140201696878591, +STORE, 140201696878592, 140201698988031, +ERASE, 140201696878592, 140201698988031, +STORE, 140201698975744, 140201698983935, +STORE, 140201698983936, 140201698988031, +STORE, 140728954163200, 140728954167295, +STORE, 140728954150912, 140728954163199, +STORE, 140201698947072, 140201698975743, +STORE, 140201698938880, 140201698947071, +STORE, 140201692938240, 140201696735231, +SNULL, 140201692938240, 140201694597119, +STORE, 140201694597120, 140201696735231, +STORE, 140201692938240, 140201694597119, +SNULL, 140201696694271, 140201696735231, +STORE, 140201694597120, 140201696694271, +STORE, 140201696694272, 140201696735231, +SNULL, 140201696694272, 140201696718847, +STORE, 140201696718848, 140201696735231, +STORE, 140201696694272, 140201696718847, +ERASE, 140201696694272, 140201696718847, +STORE, 140201696694272, 140201696718847, +ERASE, 140201696718848, 140201696735231, +STORE, 140201696718848, 140201696735231, +SNULL, 140201696710655, 140201696718847, +STORE, 140201696694272, 140201696710655, +STORE, 140201696710656, 140201696718847, +SNULL, 94672573177855, 94672573181951, +STORE, 94672573169664, 94672573177855, +STORE, 94672573177856, 94672573181951, +SNULL, 140201698979839, 140201698983935, +STORE, 140201698975744, 140201698979839, +STORE, 140201698979840, 140201698983935, +ERASE, 140201698947072, 140201698975743, +STORE, 94672595689472, 94672595824639, +STORE, 94114394132480, 94114394345471, +STORE, 94114396442624, 94114396446719, +STORE, 94114396446720, 94114396454911, +STORE, 94114396454912, 94114396467199, +STORE, 94114421575680, 94114428256255, +STORE, 139934313955328, 139934315614207, +STORE, 139934315614208, 139934317711359, +STORE, 139934317711360, 139934317727743, +STORE, 139934317727744, 139934317735935, +STORE, 139934317735936, 139934317752319, +STORE, 139934317752320, 139934317764607, +STORE, 139934317764608, 139934319857663, +STORE, 139934319857664, 139934319861759, +STORE, 139934319861760, 139934319865855, +STORE, 139934319865856, 139934320009215, +STORE, 139934320377856, 139934322061311, +STORE, 139934322061312, 139934322077695, +STORE, 139934322106368, 139934322110463, +STORE, 139934322110464, 139934322114559, +STORE, 139934322114560, 139934322118655, +STORE, 140731200376832, 140731200516095, +STORE, 140731200929792, 140731200942079, +STORE, 140731200942080, 140731200946175, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140721532362752, 140737488351231, +SNULL, 140721532370943, 140737488351231, +STORE, 140721532362752, 140721532370943, +STORE, 140721532231680, 140721532370943, +STORE, 94467222597632, 94467224821759, +SNULL, 94467222708223, 94467224821759, +STORE, 94467222597632, 94467222708223, +STORE, 94467222708224, 94467224821759, +ERASE, 94467222708224, 94467224821759, +STORE, 94467224801280, 94467224813567, +STORE, 94467224813568, 94467224821759, +STORE, 140191433543680, 140191435796479, +SNULL, 140191433687039, 140191435796479, +STORE, 140191433543680, 140191433687039, +STORE, 140191433687040, 140191435796479, +ERASE, 140191433687040, 140191435796479, +STORE, 140191435784192, 140191435792383, +STORE, 140191435792384, 140191435796479, +STORE, 140721533034496, 140721533038591, +STORE, 140721533022208, 140721533034495, +STORE, 140191435755520, 140191435784191, +STORE, 140191435747328, 140191435755519, +STORE, 140191429746688, 140191433543679, +SNULL, 140191429746688, 140191431405567, +STORE, 140191431405568, 140191433543679, +STORE, 140191429746688, 140191431405567, +SNULL, 140191433502719, 140191433543679, +STORE, 140191431405568, 140191433502719, +STORE, 140191433502720, 140191433543679, +SNULL, 140191433502720, 140191433527295, +STORE, 140191433527296, 140191433543679, +STORE, 140191433502720, 140191433527295, +ERASE, 140191433502720, 140191433527295, +STORE, 140191433502720, 140191433527295, +ERASE, 140191433527296, 140191433543679, +STORE, 140191433527296, 140191433543679, +SNULL, 140191433519103, 140191433527295, +STORE, 140191433502720, 140191433519103, +STORE, 140191433519104, 140191433527295, +SNULL, 94467224809471, 94467224813567, +STORE, 94467224801280, 94467224809471, +STORE, 94467224809472, 94467224813567, +SNULL, 140191435788287, 140191435792383, +STORE, 140191435784192, 140191435788287, +STORE, 140191435788288, 140191435792383, +ERASE, 140191435755520, 140191435784191, +STORE, 94467251847168, 94467251982335, +STORE, 94367895400448, 94367895613439, +STORE, 94367897710592, 94367897714687, +STORE, 94367897714688, 94367897722879, +STORE, 94367897722880, 94367897735167, +STORE, 94367925264384, 94367926861823, +STORE, 139801317548032, 139801319206911, +STORE, 139801319206912, 139801321304063, +STORE, 139801321304064, 139801321320447, +STORE, 139801321320448, 139801321328639, +STORE, 139801321328640, 139801321345023, +STORE, 139801321345024, 139801321357311, +STORE, 139801321357312, 139801323450367, +STORE, 139801323450368, 139801323454463, +STORE, 139801323454464, 139801323458559, +STORE, 139801323458560, 139801323601919, +STORE, 139801323970560, 139801325654015, +STORE, 139801325654016, 139801325670399, +STORE, 139801325699072, 139801325703167, +STORE, 139801325703168, 139801325707263, +STORE, 139801325707264, 139801325711359, +STORE, 140724442861568, 140724443000831, +STORE, 140724443611136, 140724443623423, +STORE, 140724443623424, 140724443627519, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140731353149440, 140737488351231, +SNULL, 140731353157631, 140737488351231, +STORE, 140731353149440, 140731353157631, +STORE, 140731353018368, 140731353157631, +STORE, 94310379503616, 94310381838335, +SNULL, 94310379716607, 94310381838335, +STORE, 94310379503616, 94310379716607, +STORE, 94310379716608, 94310381838335, +ERASE, 94310379716608, 94310381838335, +STORE, 94310381813760, 94310381826047, +STORE, 94310381826048, 94310381838335, +STORE, 140515434659840, 140515436912639, +SNULL, 140515434803199, 140515436912639, +STORE, 140515434659840, 140515434803199, +STORE, 140515434803200, 140515436912639, +ERASE, 140515434803200, 140515436912639, +STORE, 140515436900352, 140515436908543, +STORE, 140515436908544, 140515436912639, +STORE, 140731353886720, 140731353890815, +STORE, 140731353874432, 140731353886719, +STORE, 140515436871680, 140515436900351, +STORE, 140515436863488, 140515436871679, +STORE, 140515432546304, 140515434659839, +SNULL, 140515432546304, 140515432558591, +STORE, 140515432558592, 140515434659839, +STORE, 140515432546304, 140515432558591, +SNULL, 140515434651647, 140515434659839, +STORE, 140515432558592, 140515434651647, +STORE, 140515434651648, 140515434659839, +ERASE, 140515434651648, 140515434659839, +STORE, 140515434651648, 140515434659839, +STORE, 140515428749312, 140515432546303, +SNULL, 140515428749312, 140515430408191, +STORE, 140515430408192, 140515432546303, +STORE, 140515428749312, 140515430408191, +SNULL, 140515432505343, 140515432546303, +STORE, 140515430408192, 140515432505343, +STORE, 140515432505344, 140515432546303, +SNULL, 140515432505344, 140515432529919, +STORE, 140515432529920, 140515432546303, +STORE, 140515432505344, 140515432529919, +ERASE, 140515432505344, 140515432529919, +STORE, 140515432505344, 140515432529919, +ERASE, 140515432529920, 140515432546303, +STORE, 140515432529920, 140515432546303, +STORE, 140515436855296, 140515436871679, +SNULL, 140515432521727, 140515432529919, +STORE, 140515432505344, 140515432521727, +STORE, 140515432521728, 140515432529919, +SNULL, 140515434655743, 140515434659839, +STORE, 140515434651648, 140515434655743, +STORE, 140515434655744, 140515434659839, +SNULL, 94310381817855, 94310381826047, +STORE, 94310381813760, 94310381817855, +STORE, 94310381817856, 94310381826047, +SNULL, 140515436904447, 140515436908543, +STORE, 140515436900352, 140515436904447, +STORE, 140515436904448, 140515436908543, +ERASE, 140515436871680, 140515436900351, +STORE, 94310395457536, 94310395592703, +STORE, 140515435171840, 140515436855295, +STORE, 94310395457536, 94310395727871, +STORE, 94310395457536, 94310395863039, +STORE, 94310395457536, 94310396047359, +SNULL, 94310396022783, 94310396047359, +STORE, 94310395457536, 94310396022783, +STORE, 94310396022784, 94310396047359, +ERASE, 94310396022784, 94310396047359, +STORE, 94310395457536, 94310396157951, +STORE, 94310395457536, 94310396293119, +SNULL, 94310396276735, 94310396293119, +STORE, 94310395457536, 94310396276735, +STORE, 94310396276736, 94310396293119, +ERASE, 94310396276736, 94310396293119, +STORE, 94310395457536, 94310396411903, +SNULL, 94310396383231, 94310396411903, +STORE, 94310395457536, 94310396383231, +STORE, 94310396383232, 94310396411903, +ERASE, 94310396383232, 94310396411903, +STORE, 94310395457536, 94310396522495, +STORE, 94310395457536, 94310396674047, +SNULL, 94310396657663, 94310396674047, +STORE, 94310395457536, 94310396657663, +STORE, 94310396657664, 94310396674047, +ERASE, 94310396657664, 94310396674047, +SNULL, 94310396624895, 94310396657663, +STORE, 94310395457536, 94310396624895, +STORE, 94310396624896, 94310396657663, +ERASE, 94310396624896, 94310396657663, +STORE, 94310395457536, 94310396776447, +SNULL, 94310396764159, 94310396776447, +STORE, 94310395457536, 94310396764159, +STORE, 94310396764160, 94310396776447, +ERASE, 94310396764160, 94310396776447, +SNULL, 94310396739583, 94310396764159, +STORE, 94310395457536, 94310396739583, +STORE, 94310396739584, 94310396764159, +ERASE, 94310396739584, 94310396764159, +STORE, 94310395457536, 94310396882943, +STORE, 94310395457536, 94310397018111, +STORE, 94310395457536, 94310397161471, +STORE, 94310395457536, 94310397300735, +SNULL, 94310397292543, 94310397300735, +STORE, 94310395457536, 94310397292543, +STORE, 94310397292544, 94310397300735, +ERASE, 94310397292544, 94310397300735, +STORE, 94359222210560, 94359222423551, +STORE, 94359224520704, 94359224524799, +STORE, 94359224524800, 94359224532991, +STORE, 94359224532992, 94359224545279, +STORE, 94359238348800, 94359239385087, +STORE, 140675699838976, 140675701497855, +STORE, 140675701497856, 140675703595007, +STORE, 140675703595008, 140675703611391, +STORE, 140675703611392, 140675703619583, +STORE, 140675703619584, 140675703635967, +STORE, 140675703635968, 140675703648255, +STORE, 140675703648256, 140675705741311, +STORE, 140675705741312, 140675705745407, +STORE, 140675705745408, 140675705749503, +STORE, 140675705749504, 140675705892863, +STORE, 140675706261504, 140675707944959, +STORE, 140675707944960, 140675707961343, +STORE, 140675707990016, 140675707994111, +STORE, 140675707994112, 140675707998207, +STORE, 140675707998208, 140675708002303, +STORE, 140721324634112, 140721324773375, +STORE, 140721324810240, 140721324822527, +STORE, 140721324822528, 140721324826623, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140724099678208, 140737488351231, +SNULL, 140724099686399, 140737488351231, +STORE, 140724099678208, 140724099686399, +STORE, 140724099547136, 140724099686399, +STORE, 94586638516224, 94586640850943, +SNULL, 94586638729215, 94586640850943, +STORE, 94586638516224, 94586638729215, +STORE, 94586638729216, 94586640850943, +ERASE, 94586638729216, 94586640850943, +STORE, 94586640826368, 94586640838655, +STORE, 94586640838656, 94586640850943, +STORE, 140371033796608, 140371036049407, +SNULL, 140371033939967, 140371036049407, +STORE, 140371033796608, 140371033939967, +STORE, 140371033939968, 140371036049407, +ERASE, 140371033939968, 140371036049407, +STORE, 140371036037120, 140371036045311, +STORE, 140371036045312, 140371036049407, +STORE, 140724100001792, 140724100005887, +STORE, 140724099989504, 140724100001791, +STORE, 140371036008448, 140371036037119, +STORE, 140371036000256, 140371036008447, +STORE, 140371031683072, 140371033796607, +SNULL, 140371031683072, 140371031695359, +STORE, 140371031695360, 140371033796607, +STORE, 140371031683072, 140371031695359, +SNULL, 140371033788415, 140371033796607, +STORE, 140371031695360, 140371033788415, +STORE, 140371033788416, 140371033796607, +ERASE, 140371033788416, 140371033796607, +STORE, 140371033788416, 140371033796607, +STORE, 140371027886080, 140371031683071, +SNULL, 140371027886080, 140371029544959, +STORE, 140371029544960, 140371031683071, +STORE, 140371027886080, 140371029544959, +SNULL, 140371031642111, 140371031683071, +STORE, 140371029544960, 140371031642111, +STORE, 140371031642112, 140371031683071, +SNULL, 140371031642112, 140371031666687, +STORE, 140371031666688, 140371031683071, +STORE, 140371031642112, 140371031666687, +ERASE, 140371031642112, 140371031666687, +STORE, 140371031642112, 140371031666687, +ERASE, 140371031666688, 140371031683071, +STORE, 140371031666688, 140371031683071, +STORE, 140371035992064, 140371036008447, +SNULL, 140371031658495, 140371031666687, +STORE, 140371031642112, 140371031658495, +STORE, 140371031658496, 140371031666687, +SNULL, 140371033792511, 140371033796607, +STORE, 140371033788416, 140371033792511, +STORE, 140371033792512, 140371033796607, +SNULL, 94586640830463, 94586640838655, +STORE, 94586640826368, 94586640830463, +STORE, 94586640830464, 94586640838655, +SNULL, 140371036041215, 140371036045311, +STORE, 140371036037120, 140371036041215, +STORE, 140371036041216, 140371036045311, +ERASE, 140371036008448, 140371036037119, +STORE, 94586663849984, 94586663985151, +STORE, 140371034308608, 140371035992063, +STORE, 94586663849984, 94586664120319, +STORE, 94586663849984, 94586664255487, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140727532937216, 140737488351231, +SNULL, 140727532945407, 140737488351231, +STORE, 140727532937216, 140727532945407, +STORE, 140727532806144, 140727532945407, +STORE, 94849780191232, 94849782525951, +SNULL, 94849780404223, 94849782525951, +STORE, 94849780191232, 94849780404223, +STORE, 94849780404224, 94849782525951, +ERASE, 94849780404224, 94849782525951, +STORE, 94849782501376, 94849782513663, +STORE, 94849782513664, 94849782525951, +STORE, 140382070218752, 140382072471551, +SNULL, 140382070362111, 140382072471551, +STORE, 140382070218752, 140382070362111, +STORE, 140382070362112, 140382072471551, +ERASE, 140382070362112, 140382072471551, +STORE, 140382072459264, 140382072467455, +STORE, 140382072467456, 140382072471551, +STORE, 140727533092864, 140727533096959, +STORE, 140727533080576, 140727533092863, +STORE, 140382072430592, 140382072459263, +STORE, 140382072422400, 140382072430591, +STORE, 140382068105216, 140382070218751, +SNULL, 140382068105216, 140382068117503, +STORE, 140382068117504, 140382070218751, +STORE, 140382068105216, 140382068117503, +SNULL, 140382070210559, 140382070218751, +STORE, 140382068117504, 140382070210559, +STORE, 140382070210560, 140382070218751, +ERASE, 140382070210560, 140382070218751, +STORE, 140382070210560, 140382070218751, +STORE, 140382064308224, 140382068105215, +SNULL, 140382064308224, 140382065967103, +STORE, 140382065967104, 140382068105215, +STORE, 140382064308224, 140382065967103, +SNULL, 140382068064255, 140382068105215, +STORE, 140382065967104, 140382068064255, +STORE, 140382068064256, 140382068105215, +SNULL, 140382068064256, 140382068088831, +STORE, 140382068088832, 140382068105215, +STORE, 140382068064256, 140382068088831, +ERASE, 140382068064256, 140382068088831, +STORE, 140382068064256, 140382068088831, +ERASE, 140382068088832, 140382068105215, +STORE, 140382068088832, 140382068105215, +STORE, 140382072414208, 140382072430591, +SNULL, 140382068080639, 140382068088831, +STORE, 140382068064256, 140382068080639, +STORE, 140382068080640, 140382068088831, +SNULL, 140382070214655, 140382070218751, +STORE, 140382070210560, 140382070214655, +STORE, 140382070214656, 140382070218751, +SNULL, 94849782505471, 94849782513663, +STORE, 94849782501376, 94849782505471, +STORE, 94849782505472, 94849782513663, +SNULL, 140382072463359, 140382072467455, +STORE, 140382072459264, 140382072463359, +STORE, 140382072463360, 140382072467455, +ERASE, 140382072430592, 140382072459263, +STORE, 94849782845440, 94849782980607, +STORE, 140382070730752, 140382072414207, +STORE, 94849782845440, 94849783115775, +STORE, 94849782845440, 94849783250943, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140722594377728, 140737488351231, +SNULL, 140722594385919, 140737488351231, +STORE, 140722594377728, 140722594385919, +STORE, 140722594246656, 140722594385919, +STORE, 94421466353664, 94421468577791, +SNULL, 94421466464255, 94421468577791, +STORE, 94421466353664, 94421466464255, +STORE, 94421466464256, 94421468577791, +ERASE, 94421466464256, 94421468577791, +STORE, 94421468557312, 94421468569599, +STORE, 94421468569600, 94421468577791, +STORE, 140345458057216, 140345460310015, +SNULL, 140345458200575, 140345460310015, +STORE, 140345458057216, 140345458200575, +STORE, 140345458200576, 140345460310015, +ERASE, 140345458200576, 140345460310015, +STORE, 140345460297728, 140345460305919, +STORE, 140345460305920, 140345460310015, +STORE, 140722595557376, 140722595561471, +STORE, 140722595545088, 140722595557375, +STORE, 140345460269056, 140345460297727, +STORE, 140345460260864, 140345460269055, +STORE, 140345454260224, 140345458057215, +SNULL, 140345454260224, 140345455919103, +STORE, 140345455919104, 140345458057215, +STORE, 140345454260224, 140345455919103, +SNULL, 140345458016255, 140345458057215, +STORE, 140345455919104, 140345458016255, +STORE, 140345458016256, 140345458057215, +SNULL, 140345458016256, 140345458040831, +STORE, 140345458040832, 140345458057215, +STORE, 140345458016256, 140345458040831, +ERASE, 140345458016256, 140345458040831, +STORE, 140345458016256, 140345458040831, +ERASE, 140345458040832, 140345458057215, +STORE, 140345458040832, 140345458057215, +SNULL, 140345458032639, 140345458040831, +STORE, 140345458016256, 140345458032639, +STORE, 140345458032640, 140345458040831, +SNULL, 94421468565503, 94421468569599, +STORE, 94421468557312, 94421468565503, +STORE, 94421468565504, 94421468569599, +SNULL, 140345460301823, 140345460305919, +STORE, 140345460297728, 140345460301823, +STORE, 140345460301824, 140345460305919, +ERASE, 140345460269056, 140345460297727, +STORE, 94421496004608, 94421496139775, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140726096302080, 140737488351231, +SNULL, 140726096310271, 140737488351231, +STORE, 140726096302080, 140726096310271, +STORE, 140726096171008, 140726096310271, +STORE, 94101992124416, 94101994459135, +SNULL, 94101992337407, 94101994459135, +STORE, 94101992124416, 94101992337407, +STORE, 94101992337408, 94101994459135, +ERASE, 94101992337408, 94101994459135, +STORE, 94101994434560, 94101994446847, +STORE, 94101994446848, 94101994459135, +STORE, 140192085594112, 140192087846911, +SNULL, 140192085737471, 140192087846911, +STORE, 140192085594112, 140192085737471, +STORE, 140192085737472, 140192087846911, +ERASE, 140192085737472, 140192087846911, +STORE, 140192087834624, 140192087842815, +STORE, 140192087842816, 140192087846911, +STORE, 140726096375808, 140726096379903, +STORE, 140726096363520, 140726096375807, +STORE, 140192087805952, 140192087834623, +STORE, 140192087797760, 140192087805951, +STORE, 140192083480576, 140192085594111, +SNULL, 140192083480576, 140192083492863, +STORE, 140192083492864, 140192085594111, +STORE, 140192083480576, 140192083492863, +SNULL, 140192085585919, 140192085594111, +STORE, 140192083492864, 140192085585919, +STORE, 140192085585920, 140192085594111, +ERASE, 140192085585920, 140192085594111, +STORE, 140192085585920, 140192085594111, +STORE, 140192079683584, 140192083480575, +SNULL, 140192079683584, 140192081342463, +STORE, 140192081342464, 140192083480575, +STORE, 140192079683584, 140192081342463, +SNULL, 140192083439615, 140192083480575, +STORE, 140192081342464, 140192083439615, +STORE, 140192083439616, 140192083480575, +SNULL, 140192083439616, 140192083464191, +STORE, 140192083464192, 140192083480575, +STORE, 140192083439616, 140192083464191, +ERASE, 140192083439616, 140192083464191, +STORE, 140192083439616, 140192083464191, +ERASE, 140192083464192, 140192083480575, +STORE, 140192083464192, 140192083480575, +STORE, 140192087789568, 140192087805951, +SNULL, 140192083455999, 140192083464191, +STORE, 140192083439616, 140192083455999, +STORE, 140192083456000, 140192083464191, +SNULL, 140192085590015, 140192085594111, +STORE, 140192085585920, 140192085590015, +STORE, 140192085590016, 140192085594111, +SNULL, 94101994438655, 94101994446847, +STORE, 94101994434560, 94101994438655, +STORE, 94101994438656, 94101994446847, +SNULL, 140192087838719, 140192087842815, +STORE, 140192087834624, 140192087838719, +STORE, 140192087838720, 140192087842815, +ERASE, 140192087805952, 140192087834623, +STORE, 94102011887616, 94102012022783, +STORE, 140192086106112, 140192087789567, +STORE, 94102011887616, 94102012157951, +STORE, 94102011887616, 94102012293119, +STORE, 94102011887616, 94102012440575, +SNULL, 94102012428287, 94102012440575, +STORE, 94102011887616, 94102012428287, +STORE, 94102012428288, 94102012440575, +ERASE, 94102012428288, 94102012440575, +STORE, 94102011887616, 94102012579839, +STORE, 94102011887616, 94102012715007, +SNULL, 94102012694527, 94102012715007, +STORE, 94102011887616, 94102012694527, +STORE, 94102012694528, 94102012715007, +ERASE, 94102012694528, 94102012715007, +STORE, 94102011887616, 94102012833791, +STORE, 94102011887616, 94102012968959, +SNULL, 94102012927999, 94102012968959, +STORE, 94102011887616, 94102012927999, +STORE, 94102012928000, 94102012968959, +ERASE, 94102012928000, 94102012968959, +STORE, 94102011887616, 94102013091839, +SNULL, 94102013075455, 94102013091839, +STORE, 94102011887616, 94102013075455, +STORE, 94102013075456, 94102013091839, +ERASE, 94102013075456, 94102013091839, +STORE, 94102011887616, 94102013210623, +STORE, 94102011887616, 94102013345791, +STORE, 93968727965696, 93968728178687, +STORE, 93968730275840, 93968730279935, +STORE, 93968730279936, 93968730288127, +STORE, 93968730288128, 93968730300415, +STORE, 93968731140096, 93968732704767, +STORE, 140588443168768, 140588444827647, +STORE, 140588444827648, 140588446924799, +STORE, 140588446924800, 140588446941183, +STORE, 140588446941184, 140588446949375, +STORE, 140588446949376, 140588446965759, +STORE, 140588446965760, 140588446978047, +STORE, 140588446978048, 140588449071103, +STORE, 140588449071104, 140588449075199, +STORE, 140588449075200, 140588449079295, +STORE, 140588449079296, 140588449222655, +STORE, 140588449591296, 140588451274751, +STORE, 140588451274752, 140588451291135, +STORE, 140588451319808, 140588451323903, +STORE, 140588451323904, 140588451327999, +STORE, 140588451328000, 140588451332095, +STORE, 140733877239808, 140733877379071, +STORE, 140733878702080, 140733878714367, +STORE, 140733878714368, 140733878718463, +STORE, 93968727965696, 93968728178687, +STORE, 93968730275840, 93968730279935, +STORE, 93968730279936, 93968730288127, +STORE, 93968730288128, 93968730300415, +STORE, 93968731140096, 93968732991487, +STORE, 140588443168768, 140588444827647, +STORE, 140588444827648, 140588446924799, +STORE, 140588446924800, 140588446941183, +STORE, 140588446941184, 140588446949375, +STORE, 140588446949376, 140588446965759, +STORE, 140588446965760, 140588446978047, +STORE, 140588446978048, 140588449071103, +STORE, 140588449071104, 140588449075199, +STORE, 140588449075200, 140588449079295, +STORE, 140588449079296, 140588449222655, +STORE, 140588449591296, 140588451274751, +STORE, 140588451274752, 140588451291135, +STORE, 140588451319808, 140588451323903, +STORE, 140588451323904, 140588451327999, +STORE, 140588451328000, 140588451332095, +STORE, 140733877239808, 140733877379071, +STORE, 140733878702080, 140733878714367, +STORE, 140733878714368, 140733878718463, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140733054472192, 140737488351231, +SNULL, 140733054480383, 140737488351231, +STORE, 140733054472192, 140733054480383, +STORE, 140733054341120, 140733054480383, +STORE, 93992873623552, 93992875847679, +SNULL, 93992873734143, 93992875847679, +STORE, 93992873623552, 93992873734143, +STORE, 93992873734144, 93992875847679, +ERASE, 93992873734144, 93992875847679, +STORE, 93992875827200, 93992875839487, +STORE, 93992875839488, 93992875847679, +STORE, 139790881488896, 139790883741695, +SNULL, 139790881632255, 139790883741695, +STORE, 139790881488896, 139790881632255, +STORE, 139790881632256, 139790883741695, +ERASE, 139790881632256, 139790883741695, +STORE, 139790883729408, 139790883737599, +STORE, 139790883737600, 139790883741695, +STORE, 140733054754816, 140733054758911, +STORE, 140733054742528, 140733054754815, +STORE, 139790883700736, 139790883729407, +STORE, 139790883692544, 139790883700735, +STORE, 139790877691904, 139790881488895, +SNULL, 139790877691904, 139790879350783, +STORE, 139790879350784, 139790881488895, +STORE, 139790877691904, 139790879350783, +SNULL, 139790881447935, 139790881488895, +STORE, 139790879350784, 139790881447935, +STORE, 139790881447936, 139790881488895, +SNULL, 139790881447936, 139790881472511, +STORE, 139790881472512, 139790881488895, +STORE, 139790881447936, 139790881472511, +ERASE, 139790881447936, 139790881472511, +STORE, 139790881447936, 139790881472511, +ERASE, 139790881472512, 139790881488895, +STORE, 139790881472512, 139790881488895, +SNULL, 139790881464319, 139790881472511, +STORE, 139790881447936, 139790881464319, +STORE, 139790881464320, 139790881472511, +SNULL, 93992875835391, 93992875839487, +STORE, 93992875827200, 93992875835391, +STORE, 93992875835392, 93992875839487, +SNULL, 139790883733503, 139790883737599, +STORE, 139790883729408, 139790883733503, +STORE, 139790883733504, 139790883737599, +ERASE, 139790883700736, 139790883729407, +STORE, 93992877031424, 93992877166591, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140728550887424, 140737488351231, +SNULL, 140728550895615, 140737488351231, +STORE, 140728550887424, 140728550895615, +STORE, 140728550756352, 140728550895615, +STORE, 94707634077696, 94707636301823, +SNULL, 94707634188287, 94707636301823, +STORE, 94707634077696, 94707634188287, +STORE, 94707634188288, 94707636301823, +ERASE, 94707634188288, 94707636301823, +STORE, 94707636281344, 94707636293631, +STORE, 94707636293632, 94707636301823, +STORE, 140553545666560, 140553547919359, +SNULL, 140553545809919, 140553547919359, +STORE, 140553545666560, 140553545809919, +STORE, 140553545809920, 140553547919359, +ERASE, 140553545809920, 140553547919359, +STORE, 140553547907072, 140553547915263, +STORE, 140553547915264, 140553547919359, +STORE, 140728552374272, 140728552378367, +STORE, 140728552361984, 140728552374271, +STORE, 140553547878400, 140553547907071, +STORE, 140553547870208, 140553547878399, +STORE, 140553541869568, 140553545666559, +SNULL, 140553541869568, 140553543528447, +STORE, 140553543528448, 140553545666559, +STORE, 140553541869568, 140553543528447, +SNULL, 140553545625599, 140553545666559, +STORE, 140553543528448, 140553545625599, +STORE, 140553545625600, 140553545666559, +SNULL, 140553545625600, 140553545650175, +STORE, 140553545650176, 140553545666559, +STORE, 140553545625600, 140553545650175, +ERASE, 140553545625600, 140553545650175, +STORE, 140553545625600, 140553545650175, +ERASE, 140553545650176, 140553545666559, +STORE, 140553545650176, 140553545666559, +SNULL, 140553545641983, 140553545650175, +STORE, 140553545625600, 140553545641983, +STORE, 140553545641984, 140553545650175, +SNULL, 94707636289535, 94707636293631, +STORE, 94707636281344, 94707636289535, +STORE, 94707636289536, 94707636293631, +SNULL, 140553547911167, 140553547915263, +STORE, 140553547907072, 140553547911167, +STORE, 140553547911168, 140553547915263, +ERASE, 140553547878400, 140553547907071, +STORE, 94707651411968, 94707651547135, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140732168695808, 140737488351231, +SNULL, 140732168703999, 140737488351231, +STORE, 140732168695808, 140732168703999, +STORE, 140732168564736, 140732168703999, +STORE, 94454287859712, 94454290083839, +SNULL, 94454287970303, 94454290083839, +STORE, 94454287859712, 94454287970303, +STORE, 94454287970304, 94454290083839, +ERASE, 94454287970304, 94454290083839, +STORE, 94454290063360, 94454290075647, +STORE, 94454290075648, 94454290083839, +STORE, 140564947107840, 140564949360639, +SNULL, 140564947251199, 140564949360639, +STORE, 140564947107840, 140564947251199, +STORE, 140564947251200, 140564949360639, +ERASE, 140564947251200, 140564949360639, +STORE, 140564949348352, 140564949356543, +STORE, 140564949356544, 140564949360639, +STORE, 140732168843264, 140732168847359, +STORE, 140732168830976, 140732168843263, +STORE, 140564949319680, 140564949348351, +STORE, 140564949311488, 140564949319679, +STORE, 140564943310848, 140564947107839, +SNULL, 140564943310848, 140564944969727, +STORE, 140564944969728, 140564947107839, +STORE, 140564943310848, 140564944969727, +SNULL, 140564947066879, 140564947107839, +STORE, 140564944969728, 140564947066879, +STORE, 140564947066880, 140564947107839, +SNULL, 140564947066880, 140564947091455, +STORE, 140564947091456, 140564947107839, +STORE, 140564947066880, 140564947091455, +ERASE, 140564947066880, 140564947091455, +STORE, 140564947066880, 140564947091455, +ERASE, 140564947091456, 140564947107839, +STORE, 140564947091456, 140564947107839, +SNULL, 140564947083263, 140564947091455, +STORE, 140564947066880, 140564947083263, +STORE, 140564947083264, 140564947091455, +SNULL, 94454290071551, 94454290075647, +STORE, 94454290063360, 94454290071551, +STORE, 94454290071552, 94454290075647, +SNULL, 140564949352447, 140564949356543, +STORE, 140564949348352, 140564949352447, +STORE, 140564949352448, 140564949356543, +ERASE, 140564949319680, 140564949348351, +STORE, 94454316236800, 94454316371967, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140735155617792, 140737488351231, +SNULL, 140735155625983, 140737488351231, +STORE, 140735155617792, 140735155625983, +STORE, 140735155486720, 140735155625983, +STORE, 93915969556480, 93915971780607, +SNULL, 93915969667071, 93915971780607, +STORE, 93915969556480, 93915969667071, +STORE, 93915969667072, 93915971780607, +ERASE, 93915969667072, 93915971780607, +STORE, 93915971760128, 93915971772415, +STORE, 93915971772416, 93915971780607, +STORE, 140141164605440, 140141166858239, +SNULL, 140141164748799, 140141166858239, +STORE, 140141164605440, 140141164748799, +STORE, 140141164748800, 140141166858239, +ERASE, 140141164748800, 140141166858239, +STORE, 140141166845952, 140141166854143, +STORE, 140141166854144, 140141166858239, +STORE, 140735155691520, 140735155695615, +STORE, 140735155679232, 140735155691519, +STORE, 140141166817280, 140141166845951, +STORE, 140141166809088, 140141166817279, +STORE, 140141160808448, 140141164605439, +SNULL, 140141160808448, 140141162467327, +STORE, 140141162467328, 140141164605439, +STORE, 140141160808448, 140141162467327, +SNULL, 140141164564479, 140141164605439, +STORE, 140141162467328, 140141164564479, +STORE, 140141164564480, 140141164605439, +SNULL, 140141164564480, 140141164589055, +STORE, 140141164589056, 140141164605439, +STORE, 140141164564480, 140141164589055, +ERASE, 140141164564480, 140141164589055, +STORE, 140141164564480, 140141164589055, +ERASE, 140141164589056, 140141164605439, +STORE, 140141164589056, 140141164605439, +SNULL, 140141164580863, 140141164589055, +STORE, 140141164564480, 140141164580863, +STORE, 140141164580864, 140141164589055, +SNULL, 93915971768319, 93915971772415, +STORE, 93915971760128, 93915971768319, +STORE, 93915971768320, 93915971772415, +SNULL, 140141166850047, 140141166854143, +STORE, 140141166845952, 140141166850047, +STORE, 140141166850048, 140141166854143, +ERASE, 140141166817280, 140141166845951, +STORE, 93916002775040, 93916002910207, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140728988409856, 140737488351231, +SNULL, 140728988418047, 140737488351231, +STORE, 140728988409856, 140728988418047, +STORE, 140728988278784, 140728988418047, +STORE, 94021634813952, 94021637038079, +SNULL, 94021634924543, 94021637038079, +STORE, 94021634813952, 94021634924543, +STORE, 94021634924544, 94021637038079, +ERASE, 94021634924544, 94021637038079, +STORE, 94021637017600, 94021637029887, +STORE, 94021637029888, 94021637038079, +STORE, 140638014038016, 140638016290815, +SNULL, 140638014181375, 140638016290815, +STORE, 140638014038016, 140638014181375, +STORE, 140638014181376, 140638016290815, +ERASE, 140638014181376, 140638016290815, +STORE, 140638016278528, 140638016286719, +STORE, 140638016286720, 140638016290815, +STORE, 140728988536832, 140728988540927, +STORE, 140728988524544, 140728988536831, +STORE, 140638016249856, 140638016278527, +STORE, 140638016241664, 140638016249855, +STORE, 140638010241024, 140638014038015, +SNULL, 140638010241024, 140638011899903, +STORE, 140638011899904, 140638014038015, +STORE, 140638010241024, 140638011899903, +SNULL, 140638013997055, 140638014038015, +STORE, 140638011899904, 140638013997055, +STORE, 140638013997056, 140638014038015, +SNULL, 140638013997056, 140638014021631, +STORE, 140638014021632, 140638014038015, +STORE, 140638013997056, 140638014021631, +ERASE, 140638013997056, 140638014021631, +STORE, 140638013997056, 140638014021631, +ERASE, 140638014021632, 140638014038015, +STORE, 140638014021632, 140638014038015, +SNULL, 140638014013439, 140638014021631, +STORE, 140638013997056, 140638014013439, +STORE, 140638014013440, 140638014021631, +SNULL, 94021637025791, 94021637029887, +STORE, 94021637017600, 94021637025791, +STORE, 94021637025792, 94021637029887, +SNULL, 140638016282623, 140638016286719, +STORE, 140638016278528, 140638016282623, +STORE, 140638016282624, 140638016286719, +ERASE, 140638016249856, 140638016278527, +STORE, 94021643124736, 94021643259903, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140731219275776, 140737488351231, +SNULL, 140731219283967, 140737488351231, +STORE, 140731219275776, 140731219283967, +STORE, 140731219144704, 140731219283967, +STORE, 93888803647488, 93888805871615, +SNULL, 93888803758079, 93888805871615, +STORE, 93888803647488, 93888803758079, +STORE, 93888803758080, 93888805871615, +ERASE, 93888803758080, 93888805871615, +STORE, 93888805851136, 93888805863423, +STORE, 93888805863424, 93888805871615, +STORE, 139630576934912, 139630579187711, +SNULL, 139630577078271, 139630579187711, +STORE, 139630576934912, 139630577078271, +STORE, 139630577078272, 139630579187711, +ERASE, 139630577078272, 139630579187711, +STORE, 139630579175424, 139630579183615, +STORE, 139630579183616, 139630579187711, +STORE, 140731219718144, 140731219722239, +STORE, 140731219705856, 140731219718143, +STORE, 139630579146752, 139630579175423, +STORE, 139630579138560, 139630579146751, +STORE, 139630573137920, 139630576934911, +SNULL, 139630573137920, 139630574796799, +STORE, 139630574796800, 139630576934911, +STORE, 139630573137920, 139630574796799, +SNULL, 139630576893951, 139630576934911, +STORE, 139630574796800, 139630576893951, +STORE, 139630576893952, 139630576934911, +SNULL, 139630576893952, 139630576918527, +STORE, 139630576918528, 139630576934911, +STORE, 139630576893952, 139630576918527, +ERASE, 139630576893952, 139630576918527, +STORE, 139630576893952, 139630576918527, +ERASE, 139630576918528, 139630576934911, +STORE, 139630576918528, 139630576934911, +SNULL, 139630576910335, 139630576918527, +STORE, 139630576893952, 139630576910335, +STORE, 139630576910336, 139630576918527, +SNULL, 93888805859327, 93888805863423, +STORE, 93888805851136, 93888805859327, +STORE, 93888805859328, 93888805863423, +SNULL, 139630579179519, 139630579183615, +STORE, 139630579175424, 139630579179519, +STORE, 139630579179520, 139630579183615, +ERASE, 139630579146752, 139630579175423, +STORE, 93888822235136, 93888822370303, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140733391151104, 140737488351231, +SNULL, 140733391159295, 140737488351231, +STORE, 140733391151104, 140733391159295, +STORE, 140733391020032, 140733391159295, +STORE, 94393875324928, 94393877549055, +SNULL, 94393875435519, 94393877549055, +STORE, 94393875324928, 94393875435519, +STORE, 94393875435520, 94393877549055, +ERASE, 94393875435520, 94393877549055, +STORE, 94393877528576, 94393877540863, +STORE, 94393877540864, 94393877549055, +STORE, 140292111740928, 140292113993727, +SNULL, 140292111884287, 140292113993727, +STORE, 140292111740928, 140292111884287, +STORE, 140292111884288, 140292113993727, +ERASE, 140292111884288, 140292113993727, +STORE, 140292113981440, 140292113989631, +STORE, 140292113989632, 140292113993727, +STORE, 140733391532032, 140733391536127, +STORE, 140733391519744, 140733391532031, +STORE, 140292113952768, 140292113981439, +STORE, 140292113944576, 140292113952767, +STORE, 140292107943936, 140292111740927, +SNULL, 140292107943936, 140292109602815, +STORE, 140292109602816, 140292111740927, +STORE, 140292107943936, 140292109602815, +SNULL, 140292111699967, 140292111740927, +STORE, 140292109602816, 140292111699967, +STORE, 140292111699968, 140292111740927, +SNULL, 140292111699968, 140292111724543, +STORE, 140292111724544, 140292111740927, +STORE, 140292111699968, 140292111724543, +ERASE, 140292111699968, 140292111724543, +STORE, 140292111699968, 140292111724543, +ERASE, 140292111724544, 140292111740927, +STORE, 140292111724544, 140292111740927, +SNULL, 140292111716351, 140292111724543, +STORE, 140292111699968, 140292111716351, +STORE, 140292111716352, 140292111724543, +SNULL, 94393877536767, 94393877540863, +STORE, 94393877528576, 94393877536767, +STORE, 94393877536768, 94393877540863, +SNULL, 140292113985535, 140292113989631, +STORE, 140292113981440, 140292113985535, +STORE, 140292113985536, 140292113989631, +ERASE, 140292113952768, 140292113981439, +STORE, 94393909342208, 94393909477375, +STORE, 94458367512576, 94458367725567, +STORE, 94458369822720, 94458369826815, +STORE, 94458369826816, 94458369835007, +STORE, 94458369835008, 94458369847295, +STORE, 94458393292800, 94458399666175, +STORE, 140619773841408, 140619775500287, +STORE, 140619775500288, 140619777597439, +STORE, 140619777597440, 140619777613823, +STORE, 140619777613824, 140619777622015, +STORE, 140619777622016, 140619777638399, +STORE, 140619777638400, 140619777650687, +STORE, 140619777650688, 140619779743743, +STORE, 140619779743744, 140619779747839, +STORE, 140619779747840, 140619779751935, +STORE, 140619779751936, 140619779895295, +STORE, 140619780263936, 140619781947391, +STORE, 140619781947392, 140619781963775, +STORE, 140619781992448, 140619781996543, +STORE, 140619781996544, 140619782000639, +STORE, 140619782000640, 140619782004735, +STORE, 140725811675136, 140725811814399, +STORE, 140725812813824, 140725812826111, +STORE, 140725812826112, 140725812830207, +STORE, 94458367512576, 94458367725567, +STORE, 94458369822720, 94458369826815, +STORE, 94458369826816, 94458369835007, +STORE, 94458369835008, 94458369847295, +STORE, 94458393292800, 94458400366591, +STORE, 140619773841408, 140619775500287, +STORE, 140619775500288, 140619777597439, +STORE, 140619777597440, 140619777613823, +STORE, 140619777613824, 140619777622015, +STORE, 140619777622016, 140619777638399, +STORE, 140619777638400, 140619777650687, +STORE, 140619777650688, 140619779743743, +STORE, 140619779743744, 140619779747839, +STORE, 140619779747840, 140619779751935, +STORE, 140619779751936, 140619779895295, +STORE, 140619780263936, 140619781947391, +STORE, 140619781947392, 140619781963775, +STORE, 140619781992448, 140619781996543, +STORE, 140619781996544, 140619782000639, +STORE, 140619782000640, 140619782004735, +STORE, 140725811675136, 140725811814399, +STORE, 140725812813824, 140725812826111, +STORE, 140725812826112, 140725812830207, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140728740679680, 140737488351231, +SNULL, 140728740687871, 140737488351231, +STORE, 140728740679680, 140728740687871, +STORE, 140728740548608, 140728740687871, +STORE, 94764075249664, 94764077473791, +SNULL, 94764075360255, 94764077473791, +STORE, 94764075249664, 94764075360255, +STORE, 94764075360256, 94764077473791, +ERASE, 94764075360256, 94764077473791, +STORE, 94764077453312, 94764077465599, +STORE, 94764077465600, 94764077473791, +STORE, 139766406791168, 139766409043967, +SNULL, 139766406934527, 139766409043967, +STORE, 139766406791168, 139766406934527, +STORE, 139766406934528, 139766409043967, +ERASE, 139766406934528, 139766409043967, +STORE, 139766409031680, 139766409039871, +STORE, 139766409039872, 139766409043967, +STORE, 140728740913152, 140728740917247, +STORE, 140728740900864, 140728740913151, +STORE, 139766409003008, 139766409031679, +STORE, 139766408994816, 139766409003007, +STORE, 139766402994176, 139766406791167, +SNULL, 139766402994176, 139766404653055, +STORE, 139766404653056, 139766406791167, +STORE, 139766402994176, 139766404653055, +SNULL, 139766406750207, 139766406791167, +STORE, 139766404653056, 139766406750207, +STORE, 139766406750208, 139766406791167, +SNULL, 139766406750208, 139766406774783, +STORE, 139766406774784, 139766406791167, +STORE, 139766406750208, 139766406774783, +ERASE, 139766406750208, 139766406774783, +STORE, 139766406750208, 139766406774783, +ERASE, 139766406774784, 139766406791167, +STORE, 139766406774784, 139766406791167, +SNULL, 139766406766591, 139766406774783, +STORE, 139766406750208, 139766406766591, +STORE, 139766406766592, 139766406774783, +SNULL, 94764077461503, 94764077465599, +STORE, 94764077453312, 94764077461503, +STORE, 94764077461504, 94764077465599, +SNULL, 139766409035775, 139766409039871, +STORE, 139766409031680, 139766409035775, +STORE, 139766409035776, 139766409039871, +ERASE, 139766409003008, 139766409031679, +STORE, 94764090458112, 94764090593279, +STORE, 94758057480192, 94758057590783, +STORE, 94758059683840, 94758059692031, +STORE, 94758059692032, 94758059696127, +STORE, 94758059696128, 94758059704319, +STORE, 94758083215360, 94758083350527, +STORE, 139951456772096, 139951458430975, +STORE, 139951458430976, 139951460528127, +STORE, 139951460528128, 139951460544511, +STORE, 139951460544512, 139951460552703, +STORE, 139951460552704, 139951460569087, +STORE, 139951460569088, 139951460712447, +STORE, 139951462772736, 139951462780927, +STORE, 139951462809600, 139951462813695, +STORE, 139951462813696, 139951462817791, +STORE, 139951462817792, 139951462821887, +STORE, 140734098313216, 140734098452479, +STORE, 140734098911232, 140734098923519, +STORE, 140734098923520, 140734098927615, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140724904095744, 140737488351231, +SNULL, 140724904103935, 140737488351231, +STORE, 140724904095744, 140724904103935, +STORE, 140724903964672, 140724904103935, +STORE, 4194304, 5128191, +STORE, 7221248, 7241727, +STORE, 7241728, 7249919, +STORE, 140408497864704, 140408500117503, +SNULL, 140408498008063, 140408500117503, +STORE, 140408497864704, 140408498008063, +STORE, 140408498008064, 140408500117503, +ERASE, 140408498008064, 140408500117503, +STORE, 140408500105216, 140408500113407, +STORE, 140408500113408, 140408500117503, +STORE, 140724905369600, 140724905373695, +STORE, 140724905357312, 140724905369599, +STORE, 140408500076544, 140408500105215, +STORE, 140408500068352, 140408500076543, +STORE, 140408494702592, 140408497864703, +SNULL, 140408494702592, 140408495763455, +STORE, 140408495763456, 140408497864703, +STORE, 140408494702592, 140408495763455, +SNULL, 140408497856511, 140408497864703, +STORE, 140408495763456, 140408497856511, +STORE, 140408497856512, 140408497864703, +ERASE, 140408497856512, 140408497864703, +STORE, 140408497856512, 140408497864703, +STORE, 140408490905600, 140408494702591, +SNULL, 140408490905600, 140408492564479, +STORE, 140408492564480, 140408494702591, +STORE, 140408490905600, 140408492564479, +SNULL, 140408494661631, 140408494702591, +STORE, 140408492564480, 140408494661631, +STORE, 140408494661632, 140408494702591, +SNULL, 140408494661632, 140408494686207, +STORE, 140408494686208, 140408494702591, +STORE, 140408494661632, 140408494686207, +ERASE, 140408494661632, 140408494686207, +STORE, 140408494661632, 140408494686207, +ERASE, 140408494686208, 140408494702591, +STORE, 140408494686208, 140408494702591, +STORE, 140408500056064, 140408500076543, +SNULL, 140408494678015, 140408494686207, +STORE, 140408494661632, 140408494678015, +STORE, 140408494678016, 140408494686207, +SNULL, 140408497860607, 140408497864703, +STORE, 140408497856512, 140408497860607, +STORE, 140408497860608, 140408497864703, +SNULL, 7233535, 7241727, +STORE, 7221248, 7233535, +STORE, 7233536, 7241727, +SNULL, 140408500109311, 140408500113407, +STORE, 140408500105216, 140408500109311, +STORE, 140408500109312, 140408500113407, +ERASE, 140408500076544, 140408500105215, +STORE, 25235456, 25370623, +STORE, 25235456, 25518079, +STORE, 140408498372608, 140408500056063, +STORE, 94543937388544, 94543937499135, +STORE, 94543939592192, 94543939600383, +STORE, 94543939600384, 94543939604479, +STORE, 94543939604480, 94543939612671, +STORE, 94543941447680, 94543941582847, +STORE, 140282621947904, 140282623606783, +STORE, 140282623606784, 140282625703935, +STORE, 140282625703936, 140282625720319, +STORE, 140282625720320, 140282625728511, +STORE, 140282625728512, 140282625744895, +STORE, 140282625744896, 140282625888255, +STORE, 140282627948544, 140282627956735, +STORE, 140282627985408, 140282627989503, +STORE, 140282627989504, 140282627993599, +STORE, 140282627993600, 140282627997695, +STORE, 140728295723008, 140728295862271, +STORE, 140728296476672, 140728296488959, +STORE, 140728296488960, 140728296493055, +STORE, 94431504838656, 94431505051647, +STORE, 94431507148800, 94431507152895, +STORE, 94431507152896, 94431507161087, +STORE, 94431507161088, 94431507173375, +STORE, 94431510286336, 94431510691839, +STORE, 139818797948928, 139818799607807, +STORE, 139818799607808, 139818801704959, +STORE, 139818801704960, 139818801721343, +STORE, 139818801721344, 139818801729535, +STORE, 139818801729536, 139818801745919, +STORE, 139818801745920, 139818801758207, +STORE, 139818801758208, 139818803851263, +STORE, 139818803851264, 139818803855359, +STORE, 139818803855360, 139818803859455, +STORE, 139818803859456, 139818804002815, +STORE, 139818804371456, 139818806054911, +STORE, 139818806054912, 139818806071295, +STORE, 139818806099968, 139818806104063, +STORE, 139818806104064, 139818806108159, +STORE, 139818806108160, 139818806112255, +STORE, 140731430457344, 140731430596607, +STORE, 140731431227392, 140731431239679, +STORE, 140731431239680, 140731431243775, +STORE, 94431504838656, 94431505051647, +STORE, 94431507148800, 94431507152895, +STORE, 94431507152896, 94431507161087, +STORE, 94431507161088, 94431507173375, +STORE, 94431510286336, 94431510691839, +STORE, 139818797948928, 139818799607807, +STORE, 139818799607808, 139818801704959, +STORE, 139818801704960, 139818801721343, +STORE, 139818801721344, 139818801729535, +STORE, 139818801729536, 139818801745919, +STORE, 139818801745920, 139818801758207, +STORE, 139818801758208, 139818803851263, +STORE, 139818803851264, 139818803855359, +STORE, 139818803855360, 139818803859455, +STORE, 139818803859456, 139818804002815, +STORE, 139818804371456, 139818806054911, +STORE, 139818806054912, 139818806071295, +STORE, 139818806099968, 139818806104063, +STORE, 139818806104064, 139818806108159, +STORE, 139818806108160, 139818806112255, +STORE, 140731430457344, 140731430596607, +STORE, 140731431227392, 140731431239679, +STORE, 140731431239680, 140731431243775, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140737488338944, 140737488351231, +STORE, 140736944451584, 140737488351231, +SNULL, 140736944463871, 140737488351231, +STORE, 140736944451584, 140736944463871, +STORE, 140736944320512, 140736944463871, +STORE, 4194304, 26279935, +STORE, 28372992, 28454911, +STORE, 28454912, 29806591, +STORE, 139693609893888, 139693612146687, +SNULL, 139693610037247, 139693612146687, +STORE, 139693609893888, 139693610037247, +STORE, 139693610037248, 139693612146687, +ERASE, 139693610037248, 139693612146687, +STORE, 139693612134400, 139693612142591, +STORE, 139693612142592, 139693612146687, +STORE, 140736945152000, 140736945156095, +STORE, 140736945139712, 140736945151999, +STORE, 139693612105728, 139693612134399, +STORE, 139693612097536, 139693612105727, +STORE, 139693606060032, 139693609893887, +SNULL, 139693606060032, 139693607768063, +STORE, 139693607768064, 139693609893887, +STORE, 139693606060032, 139693607768063, +SNULL, 139693609861119, 139693609893887, +STORE, 139693607768064, 139693609861119, +STORE, 139693609861120, 139693609893887, +ERASE, 139693609861120, 139693609893887, +STORE, 139693609861120, 139693609893887, +STORE, 139693603864576, 139693606060031, +SNULL, 139693603864576, 139693603958783, +STORE, 139693603958784, 139693606060031, +STORE, 139693603864576, 139693603958783, +SNULL, 139693606051839, 139693606060031, +STORE, 139693603958784, 139693606051839, +STORE, 139693606051840, 139693606060031, +ERASE, 139693606051840, 139693606060031, +STORE, 139693606051840, 139693606060031, +STORE, 139693601345536, 139693603864575, +SNULL, 139693601345536, 139693601759231, +STORE, 139693601759232, 139693603864575, +STORE, 139693601345536, 139693601759231, +SNULL, 139693603852287, 139693603864575, +STORE, 139693601759232, 139693603852287, +STORE, 139693603852288, 139693603864575, +ERASE, 139693603852288, 139693603864575, +STORE, 139693603852288, 139693603864575, +STORE, 139693598711808, 139693601345535, +SNULL, 139693598711808, 139693599240191, +STORE, 139693599240192, 139693601345535, +STORE, 139693598711808, 139693599240191, +SNULL, 139693601337343, 139693601345535, +STORE, 139693599240192, 139693601337343, +STORE, 139693601337344, 139693601345535, +ERASE, 139693601337344, 139693601345535, +STORE, 139693601337344, 139693601345535, +STORE, 139693596598272, 139693598711807, +SNULL, 139693596598272, 139693596610559, +STORE, 139693596610560, 139693598711807, +STORE, 139693596598272, 139693596610559, +SNULL, 139693598703615, 139693598711807, +STORE, 139693596610560, 139693598703615, +STORE, 139693598703616, 139693598711807, +ERASE, 139693598703616, 139693598711807, +STORE, 139693598703616, 139693598711807, +STORE, 139693594394624, 139693596598271, +SNULL, 139693594394624, 139693594497023, +STORE, 139693594497024, 139693596598271, +STORE, 139693594394624, 139693594497023, +SNULL, 139693596590079, 139693596598271, +STORE, 139693594497024, 139693596590079, +STORE, 139693596590080, 139693596598271, +ERASE, 139693596590080, 139693596598271, +STORE, 139693596590080, 139693596598271, +STORE, 139693612089344, 139693612105727, +STORE, 139693591232512, 139693594394623, +SNULL, 139693591232512, 139693592293375, +STORE, 139693592293376, 139693594394623, +STORE, 139693591232512, 139693592293375, +SNULL, 139693594386431, 139693594394623, +STORE, 139693592293376, 139693594386431, +STORE, 139693594386432, 139693594394623, +ERASE, 139693594386432, 139693594394623, +STORE, 139693594386432, 139693594394623, +STORE, 139693587435520, 139693591232511, +SNULL, 139693587435520, 139693589094399, +STORE, 139693589094400, 139693591232511, +STORE, 139693587435520, 139693589094399, +SNULL, 139693591191551, 139693591232511, +STORE, 139693589094400, 139693591191551, +STORE, 139693591191552, 139693591232511, +SNULL, 139693591191552, 139693591216127, +STORE, 139693591216128, 139693591232511, +STORE, 139693591191552, 139693591216127, +ERASE, 139693591191552, 139693591216127, +STORE, 139693591191552, 139693591216127, +ERASE, 139693591216128, 139693591232511, +STORE, 139693591216128, 139693591232511, +STORE, 139693612077056, 139693612105727, +SNULL, 139693591207935, 139693591216127, +STORE, 139693591191552, 139693591207935, +STORE, 139693591207936, 139693591216127, +SNULL, 139693594390527, 139693594394623, +STORE, 139693594386432, 139693594390527, +STORE, 139693594390528, 139693594394623, +SNULL, 139693596594175, 139693596598271, +STORE, 139693596590080, 139693596594175, +STORE, 139693596594176, 139693596598271, +SNULL, 139693598707711, 139693598711807, +STORE, 139693598703616, 139693598707711, +STORE, 139693598707712, 139693598711807, +SNULL, 139693601341439, 139693601345535, +STORE, 139693601337344, 139693601341439, +STORE, 139693601341440, 139693601345535, +SNULL, 139693603860479, 139693603864575, +STORE, 139693603852288, 139693603860479, +STORE, 139693603860480, 139693603864575, +SNULL, 139693606055935, 139693606060031, +STORE, 139693606051840, 139693606055935, +STORE, 139693606055936, 139693606060031, +SNULL, 139693609865215, 139693609893887, +STORE, 139693609861120, 139693609865215, +STORE, 139693609865216, 139693609893887, +SNULL, 28405759, 28454911, +STORE, 28372992, 28405759, +STORE, 28405760, 28454911, +SNULL, 139693612138495, 139693612142591, +STORE, 139693612134400, 139693612138495, +STORE, 139693612138496, 139693612142591, +ERASE, 139693612105728, 139693612134399, +STORE, 39976960, 40112127, +STORE, 139693610393600, 139693612077055, +STORE, 139693612130304, 139693612134399, +STORE, 139693610258432, 139693610393599, +STORE, 39976960, 40255487, +STORE, 139693585338368, 139693587435519, +STORE, 139693612122112, 139693612134399, +STORE, 139693612113920, 139693612134399, +STORE, 139693612077056, 139693612113919, +STORE, 139693610242048, 139693610393599, +STORE, 39976960, 40390655, +STORE, 39976960, 40546303, +STORE, 139693610233856, 139693610393599, +STORE, 139693610225664, 139693610393599, +STORE, 39976960, 40714239, +STORE, 139693610209280, 139693610393599, +STORE, 39976960, 40861695, +STORE, 94431504838656, 94431505051647, +STORE, 94431507148800, 94431507152895, +STORE, 94431507152896, 94431507161087, +STORE, 94431507161088, 94431507173375, +STORE, 94431510286336, 94431528759295, +STORE, 139818797948928, 139818799607807, +STORE, 139818799607808, 139818801704959, +STORE, 139818801704960, 139818801721343, +STORE, 139818801721344, 139818801729535, +STORE, 139818801729536, 139818801745919, +STORE, 139818801745920, 139818801758207, +STORE, 139818801758208, 139818803851263, +STORE, 139818803851264, 139818803855359, +STORE, 139818803855360, 139818803859455, +STORE, 139818803859456, 139818804002815, +STORE, 139818804371456, 139818806054911, +STORE, 139818806054912, 139818806071295, +STORE, 139818806099968, 139818806104063, +STORE, 139818806104064, 139818806108159, +STORE, 139818806108160, 139818806112255, +STORE, 140731430457344, 140731430596607, +STORE, 140731431227392, 140731431239679, +STORE, 140731431239680, 140731431243775, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140729993904128, 140737488351231, +SNULL, 140729993912319, 140737488351231, +STORE, 140729993904128, 140729993912319, +STORE, 140729993773056, 140729993912319, +STORE, 93926271991808, 93926274215935, +SNULL, 93926272102399, 93926274215935, +STORE, 93926271991808, 93926272102399, +STORE, 93926272102400, 93926274215935, +ERASE, 93926272102400, 93926274215935, +STORE, 93926274195456, 93926274207743, +STORE, 93926274207744, 93926274215935, +STORE, 139962167296000, 139962169548799, +SNULL, 139962167439359, 139962169548799, +STORE, 139962167296000, 139962167439359, +STORE, 139962167439360, 139962169548799, +ERASE, 139962167439360, 139962169548799, +STORE, 139962169536512, 139962169544703, +STORE, 139962169544704, 139962169548799, +STORE, 140729995096064, 140729995100159, +STORE, 140729995083776, 140729995096063, +STORE, 139962169507840, 139962169536511, +STORE, 139962169499648, 139962169507839, +STORE, 139962163499008, 139962167295999, +SNULL, 139962163499008, 139962165157887, +STORE, 139962165157888, 139962167295999, +STORE, 139962163499008, 139962165157887, +SNULL, 139962167255039, 139962167295999, +STORE, 139962165157888, 139962167255039, +STORE, 139962167255040, 139962167295999, +SNULL, 139962167255040, 139962167279615, +STORE, 139962167279616, 139962167295999, +STORE, 139962167255040, 139962167279615, +ERASE, 139962167255040, 139962167279615, +STORE, 139962167255040, 139962167279615, +ERASE, 139962167279616, 139962167295999, +STORE, 139962167279616, 139962167295999, +SNULL, 139962167271423, 139962167279615, +STORE, 139962167255040, 139962167271423, +STORE, 139962167271424, 139962167279615, +SNULL, 93926274203647, 93926274207743, +STORE, 93926274195456, 93926274203647, +STORE, 93926274203648, 93926274207743, +SNULL, 139962169540607, 139962169544703, +STORE, 139962169536512, 139962169540607, +STORE, 139962169540608, 139962169544703, +ERASE, 139962169507840, 139962169536511, +STORE, 93926291120128, 93926291255295, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140724960579584, 140737488351231, +SNULL, 140724960587775, 140737488351231, +STORE, 140724960579584, 140724960587775, +STORE, 140724960448512, 140724960587775, +STORE, 94246489489408, 94246491713535, +SNULL, 94246489599999, 94246491713535, +STORE, 94246489489408, 94246489599999, +STORE, 94246489600000, 94246491713535, +ERASE, 94246489600000, 94246491713535, +STORE, 94246491693056, 94246491705343, +STORE, 94246491705344, 94246491713535, +STORE, 140098174926848, 140098177179647, +SNULL, 140098175070207, 140098177179647, +STORE, 140098174926848, 140098175070207, +STORE, 140098175070208, 140098177179647, +ERASE, 140098175070208, 140098177179647, +STORE, 140098177167360, 140098177175551, +STORE, 140098177175552, 140098177179647, +STORE, 140724961439744, 140724961443839, +STORE, 140724961427456, 140724961439743, +STORE, 140098177138688, 140098177167359, +STORE, 140098177130496, 140098177138687, +STORE, 140098171129856, 140098174926847, +SNULL, 140098171129856, 140098172788735, +STORE, 140098172788736, 140098174926847, +STORE, 140098171129856, 140098172788735, +SNULL, 140098174885887, 140098174926847, +STORE, 140098172788736, 140098174885887, +STORE, 140098174885888, 140098174926847, +SNULL, 140098174885888, 140098174910463, +STORE, 140098174910464, 140098174926847, +STORE, 140098174885888, 140098174910463, +ERASE, 140098174885888, 140098174910463, +STORE, 140098174885888, 140098174910463, +ERASE, 140098174910464, 140098174926847, +STORE, 140098174910464, 140098174926847, +SNULL, 140098174902271, 140098174910463, +STORE, 140098174885888, 140098174902271, +STORE, 140098174902272, 140098174910463, +SNULL, 94246491701247, 94246491705343, +STORE, 94246491693056, 94246491701247, +STORE, 94246491701248, 94246491705343, +SNULL, 140098177171455, 140098177175551, +STORE, 140098177167360, 140098177171455, +STORE, 140098177171456, 140098177175551, +ERASE, 140098177138688, 140098177167359, +STORE, 94246516998144, 94246517133311, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140730522918912, 140737488351231, +SNULL, 140730522927103, 140737488351231, +STORE, 140730522918912, 140730522927103, +STORE, 140730522787840, 140730522927103, +STORE, 94196043120640, 94196045344767, +SNULL, 94196043231231, 94196045344767, +STORE, 94196043120640, 94196043231231, +STORE, 94196043231232, 94196045344767, +ERASE, 94196043231232, 94196045344767, +STORE, 94196045324288, 94196045336575, +STORE, 94196045336576, 94196045344767, +STORE, 139815918940160, 139815921192959, +SNULL, 139815919083519, 139815921192959, +STORE, 139815918940160, 139815919083519, +STORE, 139815919083520, 139815921192959, +ERASE, 139815919083520, 139815921192959, +STORE, 139815921180672, 139815921188863, +STORE, 139815921188864, 139815921192959, +STORE, 140730523344896, 140730523348991, +STORE, 140730523332608, 140730523344895, +STORE, 139815921152000, 139815921180671, +STORE, 139815921143808, 139815921151999, +STORE, 139815915143168, 139815918940159, +SNULL, 139815915143168, 139815916802047, +STORE, 139815916802048, 139815918940159, +STORE, 139815915143168, 139815916802047, +SNULL, 139815918899199, 139815918940159, +STORE, 139815916802048, 139815918899199, +STORE, 139815918899200, 139815918940159, +SNULL, 139815918899200, 139815918923775, +STORE, 139815918923776, 139815918940159, +STORE, 139815918899200, 139815918923775, +ERASE, 139815918899200, 139815918923775, +STORE, 139815918899200, 139815918923775, +ERASE, 139815918923776, 139815918940159, +STORE, 139815918923776, 139815918940159, +SNULL, 139815918915583, 139815918923775, +STORE, 139815918899200, 139815918915583, +STORE, 139815918915584, 139815918923775, +SNULL, 94196045332479, 94196045336575, +STORE, 94196045324288, 94196045332479, +STORE, 94196045332480, 94196045336575, +SNULL, 139815921184767, 139815921188863, +STORE, 139815921180672, 139815921184767, +STORE, 139815921184768, 139815921188863, +ERASE, 139815921152000, 139815921180671, +STORE, 94196076183552, 94196076318719, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140722460393472, 140737488351231, +SNULL, 140722460401663, 140737488351231, +STORE, 140722460393472, 140722460401663, +STORE, 140722460262400, 140722460401663, +STORE, 94569810399232, 94569812623359, +SNULL, 94569810509823, 94569812623359, +STORE, 94569810399232, 94569810509823, +STORE, 94569810509824, 94569812623359, +ERASE, 94569810509824, 94569812623359, +STORE, 94569812602880, 94569812615167, +STORE, 94569812615168, 94569812623359, +STORE, 139681565450240, 139681567703039, +SNULL, 139681565593599, 139681567703039, +STORE, 139681565450240, 139681565593599, +STORE, 139681565593600, 139681567703039, +ERASE, 139681565593600, 139681567703039, +STORE, 139681567690752, 139681567698943, +STORE, 139681567698944, 139681567703039, +STORE, 140722460569600, 140722460573695, +STORE, 140722460557312, 140722460569599, +STORE, 139681567662080, 139681567690751, +STORE, 139681567653888, 139681567662079, +STORE, 139681561653248, 139681565450239, +SNULL, 139681561653248, 139681563312127, +STORE, 139681563312128, 139681565450239, +STORE, 139681561653248, 139681563312127, +SNULL, 139681565409279, 139681565450239, +STORE, 139681563312128, 139681565409279, +STORE, 139681565409280, 139681565450239, +SNULL, 139681565409280, 139681565433855, +STORE, 139681565433856, 139681565450239, +STORE, 139681565409280, 139681565433855, +ERASE, 139681565409280, 139681565433855, +STORE, 139681565409280, 139681565433855, +ERASE, 139681565433856, 139681565450239, +STORE, 139681565433856, 139681565450239, +SNULL, 139681565425663, 139681565433855, +STORE, 139681565409280, 139681565425663, +STORE, 139681565425664, 139681565433855, +SNULL, 94569812611071, 94569812615167, +STORE, 94569812602880, 94569812611071, +STORE, 94569812611072, 94569812615167, +SNULL, 139681567694847, 139681567698943, +STORE, 139681567690752, 139681567694847, +STORE, 139681567694848, 139681567698943, +ERASE, 139681567662080, 139681567690751, +STORE, 94569818066944, 94569818202111, +STORE, 94431504838656, 94431505051647, +STORE, 94431507148800, 94431507152895, +STORE, 94431507152896, 94431507161087, +STORE, 94431507161088, 94431507173375, +STORE, 94431510286336, 94431534280703, +STORE, 139818797948928, 139818799607807, +STORE, 139818799607808, 139818801704959, +STORE, 139818801704960, 139818801721343, +STORE, 139818801721344, 139818801729535, +STORE, 139818801729536, 139818801745919, +STORE, 139818801745920, 139818801758207, +STORE, 139818801758208, 139818803851263, +STORE, 139818803851264, 139818803855359, +STORE, 139818803855360, 139818803859455, +STORE, 139818803859456, 139818804002815, +STORE, 139818804371456, 139818806054911, +STORE, 139818806054912, 139818806071295, +STORE, 139818806099968, 139818806104063, +STORE, 139818806104064, 139818806108159, +STORE, 139818806108160, 139818806112255, +STORE, 140731430457344, 140731430596607, +STORE, 140731431227392, 140731431239679, +STORE, 140731431239680, 140731431243775, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140725452365824, 140737488351231, +SNULL, 140725452374015, 140737488351231, +STORE, 140725452365824, 140725452374015, +STORE, 140725452234752, 140725452374015, +STORE, 94395067465728, 94395069689855, +SNULL, 94395067576319, 94395069689855, +STORE, 94395067465728, 94395067576319, +STORE, 94395067576320, 94395069689855, +ERASE, 94395067576320, 94395069689855, +STORE, 94395069669376, 94395069681663, +STORE, 94395069681664, 94395069689855, +STORE, 140269941211136, 140269943463935, +SNULL, 140269941354495, 140269943463935, +STORE, 140269941211136, 140269941354495, +STORE, 140269941354496, 140269943463935, +ERASE, 140269941354496, 140269943463935, +STORE, 140269943451648, 140269943459839, +STORE, 140269943459840, 140269943463935, +STORE, 140725452558336, 140725452562431, +STORE, 140725452546048, 140725452558335, +STORE, 140269943422976, 140269943451647, +STORE, 140269943414784, 140269943422975, +STORE, 140269937414144, 140269941211135, +SNULL, 140269937414144, 140269939073023, +STORE, 140269939073024, 140269941211135, +STORE, 140269937414144, 140269939073023, +SNULL, 140269941170175, 140269941211135, +STORE, 140269939073024, 140269941170175, +STORE, 140269941170176, 140269941211135, +SNULL, 140269941170176, 140269941194751, +STORE, 140269941194752, 140269941211135, +STORE, 140269941170176, 140269941194751, +ERASE, 140269941170176, 140269941194751, +STORE, 140269941170176, 140269941194751, +ERASE, 140269941194752, 140269941211135, +STORE, 140269941194752, 140269941211135, +SNULL, 140269941186559, 140269941194751, +STORE, 140269941170176, 140269941186559, +STORE, 140269941186560, 140269941194751, +SNULL, 94395069677567, 94395069681663, +STORE, 94395069669376, 94395069677567, +STORE, 94395069677568, 94395069681663, +SNULL, 140269943455743, 140269943459839, +STORE, 140269943451648, 140269943455743, +STORE, 140269943455744, 140269943459839, +ERASE, 140269943422976, 140269943451647, +STORE, 94395101691904, 94395101827071, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140733860118528, 140737488351231, +SNULL, 140733860126719, 140737488351231, +STORE, 140733860118528, 140733860126719, +STORE, 140733859987456, 140733860126719, +STORE, 94484752990208, 94484755214335, +SNULL, 94484753100799, 94484755214335, +STORE, 94484752990208, 94484753100799, +STORE, 94484753100800, 94484755214335, +ERASE, 94484753100800, 94484755214335, +STORE, 94484755193856, 94484755206143, +STORE, 94484755206144, 94484755214335, +STORE, 139958922309632, 139958924562431, +SNULL, 139958922452991, 139958924562431, +STORE, 139958922309632, 139958922452991, +STORE, 139958922452992, 139958924562431, +ERASE, 139958922452992, 139958924562431, +STORE, 139958924550144, 139958924558335, +STORE, 139958924558336, 139958924562431, +STORE, 140733860253696, 140733860257791, +STORE, 140733860241408, 140733860253695, +STORE, 139958924521472, 139958924550143, +STORE, 139958924513280, 139958924521471, +STORE, 139958918512640, 139958922309631, +SNULL, 139958918512640, 139958920171519, +STORE, 139958920171520, 139958922309631, +STORE, 139958918512640, 139958920171519, +SNULL, 139958922268671, 139958922309631, +STORE, 139958920171520, 139958922268671, +STORE, 139958922268672, 139958922309631, +SNULL, 139958922268672, 139958922293247, +STORE, 139958922293248, 139958922309631, +STORE, 139958922268672, 139958922293247, +ERASE, 139958922268672, 139958922293247, +STORE, 139958922268672, 139958922293247, +ERASE, 139958922293248, 139958922309631, +STORE, 139958922293248, 139958922309631, +SNULL, 139958922285055, 139958922293247, +STORE, 139958922268672, 139958922285055, +STORE, 139958922285056, 139958922293247, +SNULL, 94484755202047, 94484755206143, +STORE, 94484755193856, 94484755202047, +STORE, 94484755202048, 94484755206143, +SNULL, 139958924554239, 139958924558335, +STORE, 139958924550144, 139958924554239, +STORE, 139958924554240, 139958924558335, +ERASE, 139958924521472, 139958924550143, +STORE, 94484777615360, 94484777750527, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140731051036672, 140737488351231, +SNULL, 140731051044863, 140737488351231, +STORE, 140731051036672, 140731051044863, +STORE, 140731050905600, 140731051044863, +STORE, 93945822998528, 93945825222655, +SNULL, 93945823109119, 93945825222655, +STORE, 93945822998528, 93945823109119, +STORE, 93945823109120, 93945825222655, +ERASE, 93945823109120, 93945825222655, +STORE, 93945825202176, 93945825214463, +STORE, 93945825214464, 93945825222655, +STORE, 140153503997952, 140153506250751, +SNULL, 140153504141311, 140153506250751, +STORE, 140153503997952, 140153504141311, +STORE, 140153504141312, 140153506250751, +ERASE, 140153504141312, 140153506250751, +STORE, 140153506238464, 140153506246655, +STORE, 140153506246656, 140153506250751, +STORE, 140731051331584, 140731051335679, +STORE, 140731051319296, 140731051331583, +STORE, 140153506209792, 140153506238463, +STORE, 140153506201600, 140153506209791, +STORE, 140153500200960, 140153503997951, +SNULL, 140153500200960, 140153501859839, +STORE, 140153501859840, 140153503997951, +STORE, 140153500200960, 140153501859839, +SNULL, 140153503956991, 140153503997951, +STORE, 140153501859840, 140153503956991, +STORE, 140153503956992, 140153503997951, +SNULL, 140153503956992, 140153503981567, +STORE, 140153503981568, 140153503997951, +STORE, 140153503956992, 140153503981567, +ERASE, 140153503956992, 140153503981567, +STORE, 140153503956992, 140153503981567, +ERASE, 140153503981568, 140153503997951, +STORE, 140153503981568, 140153503997951, +SNULL, 140153503973375, 140153503981567, +STORE, 140153503956992, 140153503973375, +STORE, 140153503973376, 140153503981567, +SNULL, 93945825210367, 93945825214463, +STORE, 93945825202176, 93945825210367, +STORE, 93945825210368, 93945825214463, +SNULL, 140153506242559, 140153506246655, +STORE, 140153506238464, 140153506242559, +STORE, 140153506242560, 140153506246655, +ERASE, 140153506209792, 140153506238463, +STORE, 93945854537728, 93945854672895, +STORE, 94431504838656, 94431505051647, +STORE, 94431507148800, 94431507152895, +STORE, 94431507152896, 94431507161087, +STORE, 94431507161088, 94431507173375, +STORE, 94431510286336, 94431537885183, +STORE, 139818797948928, 139818799607807, +STORE, 139818799607808, 139818801704959, +STORE, 139818801704960, 139818801721343, +STORE, 139818801721344, 139818801729535, +STORE, 139818801729536, 139818801745919, +STORE, 139818801745920, 139818801758207, +STORE, 139818801758208, 139818803851263, +STORE, 139818803851264, 139818803855359, +STORE, 139818803855360, 139818803859455, +STORE, 139818803859456, 139818804002815, +STORE, 139818804371456, 139818806054911, +STORE, 139818806054912, 139818806071295, +STORE, 139818806099968, 139818806104063, +STORE, 139818806104064, 139818806108159, +STORE, 139818806108160, 139818806112255, +STORE, 140731430457344, 140731430596607, +STORE, 140731431227392, 140731431239679, +STORE, 140731431239680, 140731431243775, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140736025325568, 140737488351231, +SNULL, 140736025333759, 140737488351231, +STORE, 140736025325568, 140736025333759, +STORE, 140736025194496, 140736025333759, +STORE, 94809095172096, 94809097396223, +SNULL, 94809095282687, 94809097396223, +STORE, 94809095172096, 94809095282687, +STORE, 94809095282688, 94809097396223, +ERASE, 94809095282688, 94809097396223, +STORE, 94809097375744, 94809097388031, +STORE, 94809097388032, 94809097396223, +STORE, 140194992517120, 140194994769919, +SNULL, 140194992660479, 140194994769919, +STORE, 140194992517120, 140194992660479, +STORE, 140194992660480, 140194994769919, +ERASE, 140194992660480, 140194994769919, +STORE, 140194994757632, 140194994765823, +STORE, 140194994765824, 140194994769919, +STORE, 140736026173440, 140736026177535, +STORE, 140736026161152, 140736026173439, +STORE, 140194994728960, 140194994757631, +STORE, 140194994720768, 140194994728959, +STORE, 140194988720128, 140194992517119, +SNULL, 140194988720128, 140194990379007, +STORE, 140194990379008, 140194992517119, +STORE, 140194988720128, 140194990379007, +SNULL, 140194992476159, 140194992517119, +STORE, 140194990379008, 140194992476159, +STORE, 140194992476160, 140194992517119, +SNULL, 140194992476160, 140194992500735, +STORE, 140194992500736, 140194992517119, +STORE, 140194992476160, 140194992500735, +ERASE, 140194992476160, 140194992500735, +STORE, 140194992476160, 140194992500735, +ERASE, 140194992500736, 140194992517119, +STORE, 140194992500736, 140194992517119, +SNULL, 140194992492543, 140194992500735, +STORE, 140194992476160, 140194992492543, +STORE, 140194992492544, 140194992500735, +SNULL, 94809097383935, 94809097388031, +STORE, 94809097375744, 94809097383935, +STORE, 94809097383936, 94809097388031, +SNULL, 140194994761727, 140194994765823, +STORE, 140194994757632, 140194994761727, +STORE, 140194994761728, 140194994765823, +ERASE, 140194994728960, 140194994757631, +STORE, 94809124286464, 94809124421631, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140726342660096, 140737488351231, +SNULL, 140726342668287, 140737488351231, +STORE, 140726342660096, 140726342668287, +STORE, 140726342529024, 140726342668287, +STORE, 94140331462656, 94140333686783, +SNULL, 94140331573247, 94140333686783, +STORE, 94140331462656, 94140331573247, +STORE, 94140331573248, 94140333686783, +ERASE, 94140331573248, 94140333686783, +STORE, 94140333666304, 94140333678591, +STORE, 94140333678592, 94140333686783, +STORE, 140714077208576, 140714079461375, +SNULL, 140714077351935, 140714079461375, +STORE, 140714077208576, 140714077351935, +STORE, 140714077351936, 140714079461375, +ERASE, 140714077351936, 140714079461375, +STORE, 140714079449088, 140714079457279, +STORE, 140714079457280, 140714079461375, +STORE, 140726343933952, 140726343938047, +STORE, 140726343921664, 140726343933951, +STORE, 140714079420416, 140714079449087, +STORE, 140714079412224, 140714079420415, +STORE, 140714073411584, 140714077208575, +SNULL, 140714073411584, 140714075070463, +STORE, 140714075070464, 140714077208575, +STORE, 140714073411584, 140714075070463, +SNULL, 140714077167615, 140714077208575, +STORE, 140714075070464, 140714077167615, +STORE, 140714077167616, 140714077208575, +SNULL, 140714077167616, 140714077192191, +STORE, 140714077192192, 140714077208575, +STORE, 140714077167616, 140714077192191, +ERASE, 140714077167616, 140714077192191, +STORE, 140714077167616, 140714077192191, +ERASE, 140714077192192, 140714077208575, +STORE, 140714077192192, 140714077208575, +SNULL, 140714077183999, 140714077192191, +STORE, 140714077167616, 140714077183999, +STORE, 140714077184000, 140714077192191, +SNULL, 94140333674495, 94140333678591, +STORE, 94140333666304, 94140333674495, +STORE, 94140333674496, 94140333678591, +SNULL, 140714079453183, 140714079457279, +STORE, 140714079449088, 140714079453183, +STORE, 140714079453184, 140714079457279, +ERASE, 140714079420416, 140714079449087, +STORE, 94140341432320, 94140341567487, +STORE, 94431504838656, 94431505051647, +STORE, 94431507148800, 94431507152895, +STORE, 94431507152896, 94431507161087, +STORE, 94431507161088, 94431507173375, +STORE, 94431510286336, 94431539601407, +STORE, 139818797948928, 139818799607807, +STORE, 139818799607808, 139818801704959, +STORE, 139818801704960, 139818801721343, +STORE, 139818801721344, 139818801729535, +STORE, 139818801729536, 139818801745919, +STORE, 139818801745920, 139818801758207, +STORE, 139818801758208, 139818803851263, +STORE, 139818803851264, 139818803855359, +STORE, 139818803855360, 139818803859455, +STORE, 139818803859456, 139818804002815, +STORE, 139818804371456, 139818806054911, +STORE, 139818806054912, 139818806071295, +STORE, 139818806099968, 139818806104063, +STORE, 139818806104064, 139818806108159, +STORE, 139818806108160, 139818806112255, +STORE, 140731430457344, 140731430596607, +STORE, 140731431227392, 140731431239679, +STORE, 140731431239680, 140731431243775, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140725843607552, 140737488351231, +SNULL, 140725843615743, 140737488351231, +STORE, 140725843607552, 140725843615743, +STORE, 140725843476480, 140725843615743, +STORE, 94889043505152, 94889045839871, +SNULL, 94889043718143, 94889045839871, +STORE, 94889043505152, 94889043718143, +STORE, 94889043718144, 94889045839871, +ERASE, 94889043718144, 94889045839871, +STORE, 94889045815296, 94889045827583, +STORE, 94889045827584, 94889045839871, +STORE, 140250965946368, 140250968199167, +SNULL, 140250966089727, 140250968199167, +STORE, 140250965946368, 140250966089727, +STORE, 140250966089728, 140250968199167, +ERASE, 140250966089728, 140250968199167, +STORE, 140250968186880, 140250968195071, +STORE, 140250968195072, 140250968199167, +STORE, 140725844500480, 140725844504575, +STORE, 140725844488192, 140725844500479, +STORE, 140250968158208, 140250968186879, +STORE, 140250968150016, 140250968158207, +STORE, 140250963832832, 140250965946367, +SNULL, 140250963832832, 140250963845119, +STORE, 140250963845120, 140250965946367, +STORE, 140250963832832, 140250963845119, +SNULL, 140250965938175, 140250965946367, +STORE, 140250963845120, 140250965938175, +STORE, 140250965938176, 140250965946367, +ERASE, 140250965938176, 140250965946367, +STORE, 140250965938176, 140250965946367, +STORE, 140250960035840, 140250963832831, +SNULL, 140250960035840, 140250961694719, +STORE, 140250961694720, 140250963832831, +STORE, 140250960035840, 140250961694719, +SNULL, 140250963791871, 140250963832831, +STORE, 140250961694720, 140250963791871, +STORE, 140250963791872, 140250963832831, +SNULL, 140250963791872, 140250963816447, +STORE, 140250963816448, 140250963832831, +STORE, 140250963791872, 140250963816447, +ERASE, 140250963791872, 140250963816447, +STORE, 140250963791872, 140250963816447, +ERASE, 140250963816448, 140250963832831, +STORE, 140250963816448, 140250963832831, +STORE, 140250968141824, 140250968158207, +SNULL, 140250963808255, 140250963816447, +STORE, 140250963791872, 140250963808255, +STORE, 140250963808256, 140250963816447, +SNULL, 140250965942271, 140250965946367, +STORE, 140250965938176, 140250965942271, +STORE, 140250965942272, 140250965946367, +SNULL, 94889045819391, 94889045827583, +STORE, 94889045815296, 94889045819391, +STORE, 94889045819392, 94889045827583, +SNULL, 140250968190975, 140250968195071, +STORE, 140250968186880, 140250968190975, +STORE, 140250968190976, 140250968195071, +ERASE, 140250968158208, 140250968186879, +STORE, 94889052213248, 94889052348415, +STORE, 140250966458368, 140250968141823, +STORE, 94889052213248, 94889052483583, +STORE, 94889052213248, 94889052618751, +STORE, 94170851819520, 94170852032511, +STORE, 94170854129664, 94170854133759, +STORE, 94170854133760, 94170854141951, +STORE, 94170854141952, 94170854154239, +STORE, 94170866515968, 94170867740671, +STORE, 140062030422016, 140062032080895, +STORE, 140062032080896, 140062034178047, +STORE, 140062034178048, 140062034194431, +STORE, 140062034194432, 140062034202623, +STORE, 140062034202624, 140062034219007, +STORE, 140062034219008, 140062034231295, +STORE, 140062034231296, 140062036324351, +STORE, 140062036324352, 140062036328447, +STORE, 140062036328448, 140062036332543, +STORE, 140062036332544, 140062036475903, +STORE, 140062036844544, 140062038527999, +STORE, 140062038528000, 140062038544383, +STORE, 140062038573056, 140062038577151, +STORE, 140062038577152, 140062038581247, +STORE, 140062038581248, 140062038585343, +STORE, 140736210550784, 140736210690047, +STORE, 140736210759680, 140736210771967, +STORE, 140736210771968, 140736210776063, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140724272365568, 140737488351231, +SNULL, 140724272373759, 140737488351231, +STORE, 140724272365568, 140724272373759, +STORE, 140724272234496, 140724272373759, +STORE, 94607711965184, 94607714189311, +SNULL, 94607712075775, 94607714189311, +STORE, 94607711965184, 94607712075775, +STORE, 94607712075776, 94607714189311, +ERASE, 94607712075776, 94607714189311, +STORE, 94607714168832, 94607714181119, +STORE, 94607714181120, 94607714189311, +STORE, 140054949253120, 140054951505919, +SNULL, 140054949396479, 140054951505919, +STORE, 140054949253120, 140054949396479, +STORE, 140054949396480, 140054951505919, +ERASE, 140054949396480, 140054951505919, +STORE, 140054951493632, 140054951501823, +STORE, 140054951501824, 140054951505919, +STORE, 140724272992256, 140724272996351, +STORE, 140724272979968, 140724272992255, +STORE, 140054951464960, 140054951493631, +STORE, 140054951456768, 140054951464959, +STORE, 140054945456128, 140054949253119, +SNULL, 140054945456128, 140054947115007, +STORE, 140054947115008, 140054949253119, +STORE, 140054945456128, 140054947115007, +SNULL, 140054949212159, 140054949253119, +STORE, 140054947115008, 140054949212159, +STORE, 140054949212160, 140054949253119, +SNULL, 140054949212160, 140054949236735, +STORE, 140054949236736, 140054949253119, +STORE, 140054949212160, 140054949236735, +ERASE, 140054949212160, 140054949236735, +STORE, 140054949212160, 140054949236735, +ERASE, 140054949236736, 140054949253119, +STORE, 140054949236736, 140054949253119, +SNULL, 140054949228543, 140054949236735, +STORE, 140054949212160, 140054949228543, +STORE, 140054949228544, 140054949236735, +SNULL, 94607714177023, 94607714181119, +STORE, 94607714168832, 94607714177023, +STORE, 94607714177024, 94607714181119, +SNULL, 140054951497727, 140054951501823, +STORE, 140054951493632, 140054951497727, +STORE, 140054951497728, 140054951501823, +ERASE, 140054951464960, 140054951493631, +STORE, 94607733374976, 94607733510143, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140733586923520, 140737488351231, +SNULL, 140733586931711, 140737488351231, +STORE, 140733586923520, 140733586931711, +STORE, 140733586792448, 140733586931711, +STORE, 93901634904064, 93901637128191, +SNULL, 93901635014655, 93901637128191, +STORE, 93901634904064, 93901635014655, +STORE, 93901635014656, 93901637128191, +ERASE, 93901635014656, 93901637128191, +STORE, 93901637107712, 93901637119999, +STORE, 93901637120000, 93901637128191, +STORE, 140086104784896, 140086107037695, +SNULL, 140086104928255, 140086107037695, +STORE, 140086104784896, 140086104928255, +STORE, 140086104928256, 140086107037695, +ERASE, 140086104928256, 140086107037695, +STORE, 140086107025408, 140086107033599, +STORE, 140086107033600, 140086107037695, +STORE, 140733587263488, 140733587267583, +STORE, 140733587251200, 140733587263487, +STORE, 140086106996736, 140086107025407, +STORE, 140086106988544, 140086106996735, +STORE, 140086100987904, 140086104784895, +SNULL, 140086100987904, 140086102646783, +STORE, 140086102646784, 140086104784895, +STORE, 140086100987904, 140086102646783, +SNULL, 140086104743935, 140086104784895, +STORE, 140086102646784, 140086104743935, +STORE, 140086104743936, 140086104784895, +SNULL, 140086104743936, 140086104768511, +STORE, 140086104768512, 140086104784895, +STORE, 140086104743936, 140086104768511, +ERASE, 140086104743936, 140086104768511, +STORE, 140086104743936, 140086104768511, +ERASE, 140086104768512, 140086104784895, +STORE, 140086104768512, 140086104784895, +SNULL, 140086104760319, 140086104768511, +STORE, 140086104743936, 140086104760319, +STORE, 140086104760320, 140086104768511, +SNULL, 93901637115903, 93901637119999, +STORE, 93901637107712, 93901637115903, +STORE, 93901637115904, 93901637119999, +SNULL, 140086107029503, 140086107033599, +STORE, 140086107025408, 140086107029503, +STORE, 140086107029504, 140086107033599, +ERASE, 140086106996736, 140086107025407, +STORE, 93901662715904, 93901662851071, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140723365613568, 140737488351231, +SNULL, 140723365621759, 140737488351231, +STORE, 140723365613568, 140723365621759, +STORE, 140723365482496, 140723365621759, +STORE, 94759193546752, 94759195770879, +SNULL, 94759193657343, 94759195770879, +STORE, 94759193546752, 94759193657343, +STORE, 94759193657344, 94759195770879, +ERASE, 94759193657344, 94759195770879, +STORE, 94759195750400, 94759195762687, +STORE, 94759195762688, 94759195770879, +STORE, 140607636246528, 140607638499327, +SNULL, 140607636389887, 140607638499327, +STORE, 140607636246528, 140607636389887, +STORE, 140607636389888, 140607638499327, +ERASE, 140607636389888, 140607638499327, +STORE, 140607638487040, 140607638495231, +STORE, 140607638495232, 140607638499327, +STORE, 140723365900288, 140723365904383, +STORE, 140723365888000, 140723365900287, +STORE, 140607638458368, 140607638487039, +STORE, 140607638450176, 140607638458367, +STORE, 140607632449536, 140607636246527, +SNULL, 140607632449536, 140607634108415, +STORE, 140607634108416, 140607636246527, +STORE, 140607632449536, 140607634108415, +SNULL, 140607636205567, 140607636246527, +STORE, 140607634108416, 140607636205567, +STORE, 140607636205568, 140607636246527, +SNULL, 140607636205568, 140607636230143, +STORE, 140607636230144, 140607636246527, +STORE, 140607636205568, 140607636230143, +ERASE, 140607636205568, 140607636230143, +STORE, 140607636205568, 140607636230143, +ERASE, 140607636230144, 140607636246527, +STORE, 140607636230144, 140607636246527, +SNULL, 140607636221951, 140607636230143, +STORE, 140607636205568, 140607636221951, +STORE, 140607636221952, 140607636230143, +SNULL, 94759195758591, 94759195762687, +STORE, 94759195750400, 94759195758591, +STORE, 94759195758592, 94759195762687, +SNULL, 140607638491135, 140607638495231, +STORE, 140607638487040, 140607638491135, +STORE, 140607638491136, 140607638495231, +ERASE, 140607638458368, 140607638487039, +STORE, 94759204995072, 94759205130239, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140732503789568, 140737488351231, +SNULL, 140732503797759, 140737488351231, +STORE, 140732503789568, 140732503797759, +STORE, 140732503658496, 140732503797759, +STORE, 94077792956416, 94077795180543, +SNULL, 94077793067007, 94077795180543, +STORE, 94077792956416, 94077793067007, +STORE, 94077793067008, 94077795180543, +ERASE, 94077793067008, 94077795180543, +STORE, 94077795160064, 94077795172351, +STORE, 94077795172352, 94077795180543, +STORE, 140359874252800, 140359876505599, +SNULL, 140359874396159, 140359876505599, +STORE, 140359874252800, 140359874396159, +STORE, 140359874396160, 140359876505599, +ERASE, 140359874396160, 140359876505599, +STORE, 140359876493312, 140359876501503, +STORE, 140359876501504, 140359876505599, +STORE, 140732504465408, 140732504469503, +STORE, 140732504453120, 140732504465407, +STORE, 140359876464640, 140359876493311, +STORE, 140359876456448, 140359876464639, +STORE, 140359870455808, 140359874252799, +SNULL, 140359870455808, 140359872114687, +STORE, 140359872114688, 140359874252799, +STORE, 140359870455808, 140359872114687, +SNULL, 140359874211839, 140359874252799, +STORE, 140359872114688, 140359874211839, +STORE, 140359874211840, 140359874252799, +SNULL, 140359874211840, 140359874236415, +STORE, 140359874236416, 140359874252799, +STORE, 140359874211840, 140359874236415, +ERASE, 140359874211840, 140359874236415, +STORE, 140359874211840, 140359874236415, +ERASE, 140359874236416, 140359874252799, +STORE, 140359874236416, 140359874252799, +SNULL, 140359874228223, 140359874236415, +STORE, 140359874211840, 140359874228223, +STORE, 140359874228224, 140359874236415, +SNULL, 94077795168255, 94077795172351, +STORE, 94077795160064, 94077795168255, +STORE, 94077795168256, 94077795172351, +SNULL, 140359876497407, 140359876501503, +STORE, 140359876493312, 140359876497407, +STORE, 140359876497408, 140359876501503, +ERASE, 140359876464640, 140359876493311, +STORE, 94077808717824, 94077808852991, +STORE, 94549486252032, 94549486465023, +STORE, 94549488562176, 94549488566271, +STORE, 94549488566272, 94549488574463, +STORE, 94549488574464, 94549488586751, +STORE, 94549503492096, 94549506121727, +STORE, 140085800894464, 140085802553343, +STORE, 140085802553344, 140085804650495, +STORE, 140085804650496, 140085804666879, +STORE, 140085804666880, 140085804675071, +STORE, 140085804675072, 140085804691455, +STORE, 140085804691456, 140085804703743, +STORE, 140085804703744, 140085806796799, +STORE, 140085806796800, 140085806800895, +STORE, 140085806800896, 140085806804991, +STORE, 140085806804992, 140085806948351, +STORE, 140085807316992, 140085809000447, +STORE, 140085809000448, 140085809016831, +STORE, 140085809045504, 140085809049599, +STORE, 140085809049600, 140085809053695, +STORE, 140085809053696, 140085809057791, +STORE, 140731810545664, 140731810684927, +STORE, 140731810967552, 140731810979839, +STORE, 140731810979840, 140731810983935, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140724752330752, 140737488351231, +SNULL, 140724752338943, 140737488351231, +STORE, 140724752330752, 140724752338943, +STORE, 140724752199680, 140724752338943, +STORE, 94656357539840, 94656359874559, +SNULL, 94656357752831, 94656359874559, +STORE, 94656357539840, 94656357752831, +STORE, 94656357752832, 94656359874559, +ERASE, 94656357752832, 94656359874559, +STORE, 94656359849984, 94656359862271, +STORE, 94656359862272, 94656359874559, +STORE, 139632585203712, 139632587456511, +SNULL, 139632585347071, 139632587456511, +STORE, 139632585203712, 139632585347071, +STORE, 139632585347072, 139632587456511, +ERASE, 139632585347072, 139632587456511, +STORE, 139632587444224, 139632587452415, +STORE, 139632587452416, 139632587456511, +STORE, 139632587440128, 139632587444223, +STORE, 139632587427840, 139632587440127, +STORE, 139632587399168, 139632587427839, +STORE, 139632587390976, 139632587399167, +STORE, 139632583090176, 139632585203711, +SNULL, 139632583090176, 139632583102463, +STORE, 139632583102464, 139632585203711, +STORE, 139632583090176, 139632583102463, +SNULL, 139632585195519, 139632585203711, +STORE, 139632583102464, 139632585195519, +STORE, 139632585195520, 139632585203711, +ERASE, 139632585195520, 139632585203711, +STORE, 139632585195520, 139632585203711, +STORE, 139632579293184, 139632583090175, +SNULL, 139632579293184, 139632580952063, +STORE, 139632580952064, 139632583090175, +STORE, 139632579293184, 139632580952063, +SNULL, 139632583049215, 139632583090175, +STORE, 139632580952064, 139632583049215, +STORE, 139632583049216, 139632583090175, +SNULL, 139632583049216, 139632583073791, +STORE, 139632583073792, 139632583090175, +STORE, 139632583049216, 139632583073791, +ERASE, 139632583049216, 139632583073791, +STORE, 139632583049216, 139632583073791, +ERASE, 139632583073792, 139632583090175, +STORE, 139632583073792, 139632583090175, +STORE, 139632587382784, 139632587399167, +SNULL, 139632583065599, 139632583073791, +STORE, 139632583049216, 139632583065599, +STORE, 139632583065600, 139632583073791, +SNULL, 139632585199615, 139632585203711, +STORE, 139632585195520, 139632585199615, +STORE, 139632585199616, 139632585203711, +SNULL, 94656359854079, 94656359862271, +STORE, 94656359849984, 94656359854079, +STORE, 94656359854080, 94656359862271, +SNULL, 139632587448319, 139632587452415, +STORE, 139632587444224, 139632587448319, +STORE, 139632587448320, 139632587452415, +ERASE, 139632587399168, 139632587427839, +STORE, 94656378912768, 94656379047935, +STORE, 139632585699328, 139632587382783, +STORE, 94656378912768, 94656379183103, +STORE, 94656378912768, 94656379318271, +STORE, 94656378912768, 94656379494399, +SNULL, 94656379469823, 94656379494399, +STORE, 94656378912768, 94656379469823, +STORE, 94656379469824, 94656379494399, +ERASE, 94656379469824, 94656379494399, +STORE, 94656378912768, 94656379621375, +STORE, 94656378912768, 94656379756543, +STORE, 94656378912768, 94656379912191, +STORE, 94656378912768, 94656380055551, +STORE, 94656378912768, 94656380190719, +STORE, 94656378912768, 94656380338175, +SNULL, 94656380313599, 94656380338175, +STORE, 94656378912768, 94656380313599, +STORE, 94656380313600, 94656380338175, +ERASE, 94656380313600, 94656380338175, +STORE, 94656378912768, 94656380448767, +SNULL, 94656380432383, 94656380448767, +STORE, 94656378912768, 94656380432383, +STORE, 94656380432384, 94656380448767, +ERASE, 94656380432384, 94656380448767, +STORE, 94656378912768, 94656380567551, +STORE, 94656378912768, 94656380719103, +STORE, 94656378912768, 94656380858367, +STORE, 94656378912768, 94656380997631, +STORE, 94656378912768, 94656381132799, +SNULL, 94656381124607, 94656381132799, +STORE, 94656378912768, 94656381124607, +STORE, 94656381124608, 94656381132799, +ERASE, 94656381124608, 94656381132799, +STORE, 94656378912768, 94656381276159, +STORE, 94656378912768, 94656381427711, +STORE, 94604087611392, 94604087824383, +STORE, 94604089921536, 94604089925631, +STORE, 94604089925632, 94604089933823, +STORE, 94604089933824, 94604089946111, +STORE, 94604105125888, 94604106424319, +STORE, 140454937694208, 140454939353087, +STORE, 140454939353088, 140454941450239, +STORE, 140454941450240, 140454941466623, +STORE, 140454941466624, 140454941474815, +STORE, 140454941474816, 140454941491199, +STORE, 140454941491200, 140454941503487, +STORE, 140454941503488, 140454943596543, +STORE, 140454943596544, 140454943600639, +STORE, 140454943600640, 140454943604735, +STORE, 140454943604736, 140454943748095, +STORE, 140454944116736, 140454945800191, +STORE, 140454945800192, 140454945816575, +STORE, 140454945845248, 140454945849343, +STORE, 140454945849344, 140454945853439, +STORE, 140454945853440, 140454945857535, +STORE, 140728438214656, 140728438353919, +STORE, 140728439095296, 140728439107583, +STORE, 140728439107584, 140728439111679, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140727821099008, 140737488351231, +SNULL, 140727821107199, 140737488351231, +STORE, 140727821099008, 140727821107199, +STORE, 140727820967936, 140727821107199, +STORE, 94088457240576, 94088459575295, +SNULL, 94088457453567, 94088459575295, +STORE, 94088457240576, 94088457453567, +STORE, 94088457453568, 94088459575295, +ERASE, 94088457453568, 94088459575295, +STORE, 94088459550720, 94088459563007, +STORE, 94088459563008, 94088459575295, +STORE, 140234378989568, 140234381242367, +SNULL, 140234379132927, 140234381242367, +STORE, 140234378989568, 140234379132927, +STORE, 140234379132928, 140234381242367, +ERASE, 140234379132928, 140234381242367, +STORE, 140234381230080, 140234381238271, +STORE, 140234381238272, 140234381242367, +STORE, 140727822077952, 140727822082047, +STORE, 140727822065664, 140727822077951, +STORE, 140234381201408, 140234381230079, +STORE, 140234381193216, 140234381201407, +STORE, 140234376876032, 140234378989567, +SNULL, 140234376876032, 140234376888319, +STORE, 140234376888320, 140234378989567, +STORE, 140234376876032, 140234376888319, +SNULL, 140234378981375, 140234378989567, +STORE, 140234376888320, 140234378981375, +STORE, 140234378981376, 140234378989567, +ERASE, 140234378981376, 140234378989567, +STORE, 140234378981376, 140234378989567, +STORE, 140234373079040, 140234376876031, +SNULL, 140234373079040, 140234374737919, +STORE, 140234374737920, 140234376876031, +STORE, 140234373079040, 140234374737919, +SNULL, 140234376835071, 140234376876031, +STORE, 140234374737920, 140234376835071, +STORE, 140234376835072, 140234376876031, +SNULL, 140234376835072, 140234376859647, +STORE, 140234376859648, 140234376876031, +STORE, 140234376835072, 140234376859647, +ERASE, 140234376835072, 140234376859647, +STORE, 140234376835072, 140234376859647, +ERASE, 140234376859648, 140234376876031, +STORE, 140234376859648, 140234376876031, +STORE, 140234381185024, 140234381201407, +SNULL, 140234376851455, 140234376859647, +STORE, 140234376835072, 140234376851455, +STORE, 140234376851456, 140234376859647, +SNULL, 140234378985471, 140234378989567, +STORE, 140234378981376, 140234378985471, +STORE, 140234378985472, 140234378989567, +SNULL, 94088459554815, 94088459563007, +STORE, 94088459550720, 94088459554815, +STORE, 94088459554816, 94088459563007, +SNULL, 140234381234175, 140234381238271, +STORE, 140234381230080, 140234381234175, +STORE, 140234381234176, 140234381238271, +ERASE, 140234381201408, 140234381230079, +STORE, 94088468852736, 94088468987903, +STORE, 140234379501568, 140234381185023, +STORE, 94088468852736, 94088469123071, +STORE, 94088468852736, 94088469258239, +STORE, 94110050402304, 94110050615295, +STORE, 94110052712448, 94110052716543, +STORE, 94110052716544, 94110052724735, +STORE, 94110052724736, 94110052737023, +STORE, 94110061875200, 94110062415871, +STORE, 140139439357952, 140139441016831, +STORE, 140139441016832, 140139443113983, +STORE, 140139443113984, 140139443130367, +STORE, 140139443130368, 140139443138559, +STORE, 140139443138560, 140139443154943, +STORE, 140139443154944, 140139443167231, +STORE, 140139443167232, 140139445260287, +STORE, 140139445260288, 140139445264383, +STORE, 140139445264384, 140139445268479, +STORE, 140139445268480, 140139445411839, +STORE, 140139445780480, 140139447463935, +STORE, 140139447463936, 140139447480319, +STORE, 140139447508992, 140139447513087, +STORE, 140139447513088, 140139447517183, +STORE, 140139447517184, 140139447521279, +STORE, 140731901427712, 140731901566975, +STORE, 140731902259200, 140731902271487, +STORE, 140731902271488, 140731902275583, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140727282622464, 140737488351231, +SNULL, 140727282630655, 140737488351231, +STORE, 140727282622464, 140727282630655, +STORE, 140727282491392, 140727282630655, +STORE, 94266649866240, 94266652200959, +SNULL, 94266650079231, 94266652200959, +STORE, 94266649866240, 94266650079231, +STORE, 94266650079232, 94266652200959, +ERASE, 94266650079232, 94266652200959, +STORE, 94266652176384, 94266652188671, +STORE, 94266652188672, 94266652200959, +STORE, 139888497991680, 139888500244479, +SNULL, 139888498135039, 139888500244479, +STORE, 139888497991680, 139888498135039, +STORE, 139888498135040, 139888500244479, +ERASE, 139888498135040, 139888500244479, +STORE, 139888500232192, 139888500240383, +STORE, 139888500240384, 139888500244479, +STORE, 140727283113984, 140727283118079, +STORE, 140727283101696, 140727283113983, +STORE, 139888500203520, 139888500232191, +STORE, 139888500195328, 139888500203519, +STORE, 139888495878144, 139888497991679, +SNULL, 139888495878144, 139888495890431, +STORE, 139888495890432, 139888497991679, +STORE, 139888495878144, 139888495890431, +SNULL, 139888497983487, 139888497991679, +STORE, 139888495890432, 139888497983487, +STORE, 139888497983488, 139888497991679, +ERASE, 139888497983488, 139888497991679, +STORE, 139888497983488, 139888497991679, +STORE, 139888492081152, 139888495878143, +SNULL, 139888492081152, 139888493740031, +STORE, 139888493740032, 139888495878143, +STORE, 139888492081152, 139888493740031, +SNULL, 139888495837183, 139888495878143, +STORE, 139888493740032, 139888495837183, +STORE, 139888495837184, 139888495878143, +SNULL, 139888495837184, 139888495861759, +STORE, 139888495861760, 139888495878143, +STORE, 139888495837184, 139888495861759, +ERASE, 139888495837184, 139888495861759, +STORE, 139888495837184, 139888495861759, +ERASE, 139888495861760, 139888495878143, +STORE, 139888495861760, 139888495878143, +STORE, 139888500187136, 139888500203519, +SNULL, 139888495853567, 139888495861759, +STORE, 139888495837184, 139888495853567, +STORE, 139888495853568, 139888495861759, +SNULL, 139888497987583, 139888497991679, +STORE, 139888497983488, 139888497987583, +STORE, 139888497987584, 139888497991679, +SNULL, 94266652180479, 94266652188671, +STORE, 94266652176384, 94266652180479, +STORE, 94266652180480, 94266652188671, +SNULL, 139888500236287, 139888500240383, +STORE, 139888500232192, 139888500236287, +STORE, 139888500236288, 139888500240383, +ERASE, 139888500203520, 139888500232191, +STORE, 94266678542336, 94266678677503, +STORE, 139888498503680, 139888500187135, +STORE, 94266678542336, 94266678812671, +STORE, 94266678542336, 94266678947839, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140722507702272, 140737488351231, +SNULL, 140722507710463, 140737488351231, +STORE, 140722507702272, 140722507710463, +STORE, 140722507571200, 140722507710463, +STORE, 94313981394944, 94313983729663, +SNULL, 94313981607935, 94313983729663, +STORE, 94313981394944, 94313981607935, +STORE, 94313981607936, 94313983729663, +ERASE, 94313981607936, 94313983729663, +STORE, 94313983705088, 94313983717375, +STORE, 94313983717376, 94313983729663, +STORE, 140456286076928, 140456288329727, +SNULL, 140456286220287, 140456288329727, +STORE, 140456286076928, 140456286220287, +STORE, 140456286220288, 140456288329727, +ERASE, 140456286220288, 140456288329727, +STORE, 140456288317440, 140456288325631, +STORE, 140456288325632, 140456288329727, +STORE, 140722507997184, 140722508001279, +STORE, 140722507984896, 140722507997183, +STORE, 140456288288768, 140456288317439, +STORE, 140456288280576, 140456288288767, +STORE, 140456283963392, 140456286076927, +SNULL, 140456283963392, 140456283975679, +STORE, 140456283975680, 140456286076927, +STORE, 140456283963392, 140456283975679, +SNULL, 140456286068735, 140456286076927, +STORE, 140456283975680, 140456286068735, +STORE, 140456286068736, 140456286076927, +ERASE, 140456286068736, 140456286076927, +STORE, 140456286068736, 140456286076927, +STORE, 140456280166400, 140456283963391, +SNULL, 140456280166400, 140456281825279, +STORE, 140456281825280, 140456283963391, +STORE, 140456280166400, 140456281825279, +SNULL, 140456283922431, 140456283963391, +STORE, 140456281825280, 140456283922431, +STORE, 140456283922432, 140456283963391, +SNULL, 140456283922432, 140456283947007, +STORE, 140456283947008, 140456283963391, +STORE, 140456283922432, 140456283947007, +ERASE, 140456283922432, 140456283947007, +STORE, 140456283922432, 140456283947007, +ERASE, 140456283947008, 140456283963391, +STORE, 140456283947008, 140456283963391, +STORE, 140456288272384, 140456288288767, +SNULL, 140456283938815, 140456283947007, +STORE, 140456283922432, 140456283938815, +STORE, 140456283938816, 140456283947007, +SNULL, 140456286072831, 140456286076927, +STORE, 140456286068736, 140456286072831, +STORE, 140456286072832, 140456286076927, +SNULL, 94313983709183, 94313983717375, +STORE, 94313983705088, 94313983709183, +STORE, 94313983709184, 94313983717375, +SNULL, 140456288321535, 140456288325631, +STORE, 140456288317440, 140456288321535, +STORE, 140456288321536, 140456288325631, +ERASE, 140456288288768, 140456288317439, +STORE, 94314006716416, 94314006851583, +STORE, 140456286588928, 140456288272383, +STORE, 94314006716416, 94314006986751, +STORE, 94314006716416, 94314007121919, +STORE, 93948644454400, 93948644667391, +STORE, 93948646764544, 93948646768639, +STORE, 93948646768640, 93948646776831, +STORE, 93948646776832, 93948646789119, +STORE, 93948664999936, 93948667142143, +STORE, 140187350659072, 140187352317951, +STORE, 140187352317952, 140187354415103, +STORE, 140187354415104, 140187354431487, +STORE, 140187354431488, 140187354439679, +STORE, 140187354439680, 140187354456063, +STORE, 140187354456064, 140187354468351, +STORE, 140187354468352, 140187356561407, +STORE, 140187356561408, 140187356565503, +STORE, 140187356565504, 140187356569599, +STORE, 140187356569600, 140187356712959, +STORE, 140187357081600, 140187358765055, +STORE, 140187358765056, 140187358781439, +STORE, 140187358810112, 140187358814207, +STORE, 140187358814208, 140187358818303, +STORE, 140187358818304, 140187358822399, +STORE, 140730484518912, 140730484658175, +STORE, 140730485690368, 140730485702655, +STORE, 140730485702656, 140730485706751, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140721211551744, 140737488351231, +SNULL, 140721211559935, 140737488351231, +STORE, 140721211551744, 140721211559935, +STORE, 140721211420672, 140721211559935, +STORE, 94105221423104, 94105223757823, +SNULL, 94105221636095, 94105223757823, +STORE, 94105221423104, 94105221636095, +STORE, 94105221636096, 94105223757823, +ERASE, 94105221636096, 94105223757823, +STORE, 94105223733248, 94105223745535, +STORE, 94105223745536, 94105223757823, +STORE, 140474453676032, 140474455928831, +SNULL, 140474453819391, 140474455928831, +STORE, 140474453676032, 140474453819391, +STORE, 140474453819392, 140474455928831, +ERASE, 140474453819392, 140474455928831, +STORE, 140474455916544, 140474455924735, +STORE, 140474455924736, 140474455928831, +STORE, 140721211703296, 140721211707391, +STORE, 140721211691008, 140721211703295, +STORE, 140474455887872, 140474455916543, +STORE, 140474455879680, 140474455887871, +STORE, 140474451562496, 140474453676031, +SNULL, 140474451562496, 140474451574783, +STORE, 140474451574784, 140474453676031, +STORE, 140474451562496, 140474451574783, +SNULL, 140474453667839, 140474453676031, +STORE, 140474451574784, 140474453667839, +STORE, 140474453667840, 140474453676031, +ERASE, 140474453667840, 140474453676031, +STORE, 140474453667840, 140474453676031, +STORE, 140474447765504, 140474451562495, +SNULL, 140474447765504, 140474449424383, +STORE, 140474449424384, 140474451562495, +STORE, 140474447765504, 140474449424383, +SNULL, 140474451521535, 140474451562495, +STORE, 140474449424384, 140474451521535, +STORE, 140474451521536, 140474451562495, +SNULL, 140474451521536, 140474451546111, +STORE, 140474451546112, 140474451562495, +STORE, 140474451521536, 140474451546111, +ERASE, 140474451521536, 140474451546111, +STORE, 140474451521536, 140474451546111, +ERASE, 140474451546112, 140474451562495, +STORE, 140474451546112, 140474451562495, +STORE, 140474455871488, 140474455887871, +SNULL, 140474451537919, 140474451546111, +STORE, 140474451521536, 140474451537919, +STORE, 140474451537920, 140474451546111, +SNULL, 140474453671935, 140474453676031, +STORE, 140474453667840, 140474453671935, +STORE, 140474453671936, 140474453676031, +SNULL, 94105223737343, 94105223745535, +STORE, 94105223733248, 94105223737343, +STORE, 94105223737344, 94105223745535, +SNULL, 140474455920639, 140474455924735, +STORE, 140474455916544, 140474455920639, +STORE, 140474455920640, 140474455924735, +ERASE, 140474455887872, 140474455916543, +STORE, 94105238712320, 94105238847487, +STORE, 140474454188032, 140474455871487, +STORE, 94105238712320, 94105238982655, +STORE, 94105238712320, 94105239117823, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140732356354048, 140737488351231, +SNULL, 140732356362239, 140737488351231, +STORE, 140732356354048, 140732356362239, +STORE, 140732356222976, 140732356362239, +STORE, 94461165989888, 94461168324607, +SNULL, 94461166202879, 94461168324607, +STORE, 94461165989888, 94461166202879, +STORE, 94461166202880, 94461168324607, +ERASE, 94461166202880, 94461168324607, +STORE, 94461168300032, 94461168312319, +STORE, 94461168312320, 94461168324607, +STORE, 140317255110656, 140317257363455, +SNULL, 140317255254015, 140317257363455, +STORE, 140317255110656, 140317255254015, +STORE, 140317255254016, 140317257363455, +ERASE, 140317255254016, 140317257363455, +STORE, 140317257351168, 140317257359359, +STORE, 140317257359360, 140317257363455, +STORE, 140732356583424, 140732356587519, +STORE, 140732356571136, 140732356583423, +STORE, 140317257322496, 140317257351167, +STORE, 140317257314304, 140317257322495, +STORE, 140317252997120, 140317255110655, +SNULL, 140317252997120, 140317253009407, +STORE, 140317253009408, 140317255110655, +STORE, 140317252997120, 140317253009407, +SNULL, 140317255102463, 140317255110655, +STORE, 140317253009408, 140317255102463, +STORE, 140317255102464, 140317255110655, +ERASE, 140317255102464, 140317255110655, +STORE, 140317255102464, 140317255110655, +STORE, 140317249200128, 140317252997119, +SNULL, 140317249200128, 140317250859007, +STORE, 140317250859008, 140317252997119, +STORE, 140317249200128, 140317250859007, +SNULL, 140317252956159, 140317252997119, +STORE, 140317250859008, 140317252956159, +STORE, 140317252956160, 140317252997119, +SNULL, 140317252956160, 140317252980735, +STORE, 140317252980736, 140317252997119, +STORE, 140317252956160, 140317252980735, +ERASE, 140317252956160, 140317252980735, +STORE, 140317252956160, 140317252980735, +ERASE, 140317252980736, 140317252997119, +STORE, 140317252980736, 140317252997119, +STORE, 140317257306112, 140317257322495, +SNULL, 140317252972543, 140317252980735, +STORE, 140317252956160, 140317252972543, +STORE, 140317252972544, 140317252980735, +SNULL, 140317255106559, 140317255110655, +STORE, 140317255102464, 140317255106559, +STORE, 140317255106560, 140317255110655, +SNULL, 94461168304127, 94461168312319, +STORE, 94461168300032, 94461168304127, +STORE, 94461168304128, 94461168312319, +SNULL, 140317257355263, 140317257359359, +STORE, 140317257351168, 140317257355263, +STORE, 140317257355264, 140317257359359, +ERASE, 140317257322496, 140317257351167, +STORE, 94461195268096, 94461195403263, +STORE, 140317255622656, 140317257306111, +STORE, 94461195268096, 94461195538431, +STORE, 94461195268096, 94461195673599, +STORE, 94110050402304, 94110050615295, +STORE, 94110052712448, 94110052716543, +STORE, 94110052716544, 94110052724735, +STORE, 94110052724736, 94110052737023, +STORE, 94110061875200, 94110062415871, +STORE, 140139439357952, 140139441016831, +STORE, 140139441016832, 140139443113983, +STORE, 140139443113984, 140139443130367, +STORE, 140139443130368, 140139443138559, +STORE, 140139443138560, 140139443154943, +STORE, 140139443154944, 140139443167231, +STORE, 140139443167232, 140139445260287, +STORE, 140139445260288, 140139445264383, +STORE, 140139445264384, 140139445268479, +STORE, 140139445268480, 140139445411839, +STORE, 140139445780480, 140139447463935, +STORE, 140139447463936, 140139447480319, +STORE, 140139447508992, 140139447513087, +STORE, 140139447513088, 140139447517183, +STORE, 140139447517184, 140139447521279, +STORE, 140731901427712, 140731901566975, +STORE, 140731902259200, 140731902271487, +STORE, 140731902271488, 140731902275583, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140720941613056, 140737488351231, +SNULL, 140720941621247, 140737488351231, +STORE, 140720941613056, 140720941621247, +STORE, 140720941481984, 140720941621247, +STORE, 93902377721856, 93902379945983, +SNULL, 93902377832447, 93902379945983, +STORE, 93902377721856, 93902377832447, +STORE, 93902377832448, 93902379945983, +ERASE, 93902377832448, 93902379945983, +STORE, 93902379925504, 93902379937791, +STORE, 93902379937792, 93902379945983, +STORE, 139836543635456, 139836545888255, +SNULL, 139836543778815, 139836545888255, +STORE, 139836543635456, 139836543778815, +STORE, 139836543778816, 139836545888255, +ERASE, 139836543778816, 139836545888255, +STORE, 139836545875968, 139836545884159, +STORE, 139836545884160, 139836545888255, +STORE, 140720941711360, 140720941715455, +STORE, 140720941699072, 140720941711359, +STORE, 139836545847296, 139836545875967, +STORE, 139836545839104, 139836545847295, +STORE, 139836539838464, 139836543635455, +SNULL, 139836539838464, 139836541497343, +STORE, 139836541497344, 139836543635455, +STORE, 139836539838464, 139836541497343, +SNULL, 139836543594495, 139836543635455, +STORE, 139836541497344, 139836543594495, +STORE, 139836543594496, 139836543635455, +SNULL, 139836543594496, 139836543619071, +STORE, 139836543619072, 139836543635455, +STORE, 139836543594496, 139836543619071, +ERASE, 139836543594496, 139836543619071, +STORE, 139836543594496, 139836543619071, +ERASE, 139836543619072, 139836543635455, +STORE, 139836543619072, 139836543635455, +SNULL, 139836543610879, 139836543619071, +STORE, 139836543594496, 139836543610879, +STORE, 139836543610880, 139836543619071, +SNULL, 93902379933695, 93902379937791, +STORE, 93902379925504, 93902379933695, +STORE, 93902379933696, 93902379937791, +SNULL, 139836545880063, 139836545884159, +STORE, 139836545875968, 139836545880063, +STORE, 139836545880064, 139836545884159, +ERASE, 139836545847296, 139836545875967, +STORE, 93902396891136, 93902397026303, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140736538206208, 140737488351231, +SNULL, 140736538214399, 140737488351231, +STORE, 140736538206208, 140736538214399, +STORE, 140736538075136, 140736538214399, +STORE, 94173471399936, 94173473734655, +SNULL, 94173471612927, 94173473734655, +STORE, 94173471399936, 94173471612927, +STORE, 94173471612928, 94173473734655, +ERASE, 94173471612928, 94173473734655, +STORE, 94173473710080, 94173473722367, +STORE, 94173473722368, 94173473734655, +STORE, 140035513556992, 140035515809791, +SNULL, 140035513700351, 140035515809791, +STORE, 140035513556992, 140035513700351, +STORE, 140035513700352, 140035515809791, +ERASE, 140035513700352, 140035515809791, +STORE, 140035515797504, 140035515805695, +STORE, 140035515805696, 140035515809791, +STORE, 140736538329088, 140736538333183, +STORE, 140736538316800, 140736538329087, +STORE, 140035515768832, 140035515797503, +STORE, 140035515760640, 140035515768831, +STORE, 140035511443456, 140035513556991, +SNULL, 140035511443456, 140035511455743, +STORE, 140035511455744, 140035513556991, +STORE, 140035511443456, 140035511455743, +SNULL, 140035513548799, 140035513556991, +STORE, 140035511455744, 140035513548799, +STORE, 140035513548800, 140035513556991, +ERASE, 140035513548800, 140035513556991, +STORE, 140035513548800, 140035513556991, +STORE, 140035507646464, 140035511443455, +SNULL, 140035507646464, 140035509305343, +STORE, 140035509305344, 140035511443455, +STORE, 140035507646464, 140035509305343, +SNULL, 140035511402495, 140035511443455, +STORE, 140035509305344, 140035511402495, +STORE, 140035511402496, 140035511443455, +SNULL, 140035511402496, 140035511427071, +STORE, 140035511427072, 140035511443455, +STORE, 140035511402496, 140035511427071, +ERASE, 140035511402496, 140035511427071, +STORE, 140035511402496, 140035511427071, +ERASE, 140035511427072, 140035511443455, +STORE, 140035511427072, 140035511443455, +STORE, 140035515752448, 140035515768831, +SNULL, 140035511418879, 140035511427071, +STORE, 140035511402496, 140035511418879, +STORE, 140035511418880, 140035511427071, +SNULL, 140035513552895, 140035513556991, +STORE, 140035513548800, 140035513552895, +STORE, 140035513552896, 140035513556991, +SNULL, 94173473714175, 94173473722367, +STORE, 94173473710080, 94173473714175, +STORE, 94173473714176, 94173473722367, +SNULL, 140035515801599, 140035515805695, +STORE, 140035515797504, 140035515801599, +STORE, 140035515801600, 140035515805695, +ERASE, 140035515768832, 140035515797503, +STORE, 94173478645760, 94173478780927, +STORE, 140035514068992, 140035515752447, +STORE, 94173478645760, 94173478916095, +STORE, 94173478645760, 94173479051263, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140724216176640, 140737488351231, +SNULL, 140724216184831, 140737488351231, +STORE, 140724216176640, 140724216184831, +STORE, 140724216045568, 140724216184831, +STORE, 94870930628608, 94870932963327, +SNULL, 94870930841599, 94870932963327, +STORE, 94870930628608, 94870930841599, +STORE, 94870930841600, 94870932963327, +ERASE, 94870930841600, 94870932963327, +STORE, 94870932938752, 94870932951039, +STORE, 94870932951040, 94870932963327, +STORE, 140453683736576, 140453685989375, +SNULL, 140453683879935, 140453685989375, +STORE, 140453683736576, 140453683879935, +STORE, 140453683879936, 140453685989375, +ERASE, 140453683879936, 140453685989375, +STORE, 140453685977088, 140453685985279, +STORE, 140453685985280, 140453685989375, +STORE, 140724216832000, 140724216836095, +STORE, 140724216819712, 140724216831999, +STORE, 140453685948416, 140453685977087, +STORE, 140453685940224, 140453685948415, +STORE, 140453681623040, 140453683736575, +SNULL, 140453681623040, 140453681635327, +STORE, 140453681635328, 140453683736575, +STORE, 140453681623040, 140453681635327, +SNULL, 140453683728383, 140453683736575, +STORE, 140453681635328, 140453683728383, +STORE, 140453683728384, 140453683736575, +ERASE, 140453683728384, 140453683736575, +STORE, 140453683728384, 140453683736575, +STORE, 140453677826048, 140453681623039, +SNULL, 140453677826048, 140453679484927, +STORE, 140453679484928, 140453681623039, +STORE, 140453677826048, 140453679484927, +SNULL, 140453681582079, 140453681623039, +STORE, 140453679484928, 140453681582079, +STORE, 140453681582080, 140453681623039, +SNULL, 140453681582080, 140453681606655, +STORE, 140453681606656, 140453681623039, +STORE, 140453681582080, 140453681606655, +ERASE, 140453681582080, 140453681606655, +STORE, 140453681582080, 140453681606655, +ERASE, 140453681606656, 140453681623039, +STORE, 140453681606656, 140453681623039, +STORE, 140453685932032, 140453685948415, +SNULL, 140453681598463, 140453681606655, +STORE, 140453681582080, 140453681598463, +STORE, 140453681598464, 140453681606655, +SNULL, 140453683732479, 140453683736575, +STORE, 140453683728384, 140453683732479, +STORE, 140453683732480, 140453683736575, +SNULL, 94870932942847, 94870932951039, +STORE, 94870932938752, 94870932942847, +STORE, 94870932942848, 94870932951039, +SNULL, 140453685981183, 140453685985279, +STORE, 140453685977088, 140453685981183, +STORE, 140453685981184, 140453685985279, +ERASE, 140453685948416, 140453685977087, +STORE, 94870940565504, 94870940700671, +STORE, 140453684248576, 140453685932031, +STORE, 94870940565504, 94870940835839, +STORE, 94870940565504, 94870940971007, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140731275661312, 140737488351231, +SNULL, 140731275669503, 140737488351231, +STORE, 140731275661312, 140731275669503, +STORE, 140731275530240, 140731275669503, +STORE, 94642788548608, 94642790883327, +SNULL, 94642788761599, 94642790883327, +STORE, 94642788548608, 94642788761599, +STORE, 94642788761600, 94642790883327, +ERASE, 94642788761600, 94642790883327, +STORE, 94642790858752, 94642790871039, +STORE, 94642790871040, 94642790883327, +STORE, 140228458749952, 140228461002751, +SNULL, 140228458893311, 140228461002751, +STORE, 140228458749952, 140228458893311, +STORE, 140228458893312, 140228461002751, +ERASE, 140228458893312, 140228461002751, +STORE, 140228460990464, 140228460998655, +STORE, 140228460998656, 140228461002751, +STORE, 140731276349440, 140731276353535, +STORE, 140731276337152, 140731276349439, +STORE, 140228460961792, 140228460990463, +STORE, 140228460953600, 140228460961791, +STORE, 140228456636416, 140228458749951, +SNULL, 140228456636416, 140228456648703, +STORE, 140228456648704, 140228458749951, +STORE, 140228456636416, 140228456648703, +SNULL, 140228458741759, 140228458749951, +STORE, 140228456648704, 140228458741759, +STORE, 140228458741760, 140228458749951, +ERASE, 140228458741760, 140228458749951, +STORE, 140228458741760, 140228458749951, +STORE, 140228452839424, 140228456636415, +SNULL, 140228452839424, 140228454498303, +STORE, 140228454498304, 140228456636415, +STORE, 140228452839424, 140228454498303, +SNULL, 140228456595455, 140228456636415, +STORE, 140228454498304, 140228456595455, +STORE, 140228456595456, 140228456636415, +SNULL, 140228456595456, 140228456620031, +STORE, 140228456620032, 140228456636415, +STORE, 140228456595456, 140228456620031, +ERASE, 140228456595456, 140228456620031, +STORE, 140228456595456, 140228456620031, +ERASE, 140228456620032, 140228456636415, +STORE, 140228456620032, 140228456636415, +STORE, 140228460945408, 140228460961791, +SNULL, 140228456611839, 140228456620031, +STORE, 140228456595456, 140228456611839, +STORE, 140228456611840, 140228456620031, +SNULL, 140228458745855, 140228458749951, +STORE, 140228458741760, 140228458745855, +STORE, 140228458745856, 140228458749951, +SNULL, 94642790862847, 94642790871039, +STORE, 94642790858752, 94642790862847, +STORE, 94642790862848, 94642790871039, +SNULL, 140228460994559, 140228460998655, +STORE, 140228460990464, 140228460994559, +STORE, 140228460994560, 140228460998655, +ERASE, 140228460961792, 140228460990463, +STORE, 94642801549312, 94642801684479, +STORE, 140228459261952, 140228460945407, +STORE, 94642801549312, 94642801819647, +STORE, 94642801549312, 94642801954815, +STORE, 94604087611392, 94604087824383, +STORE, 94604089921536, 94604089925631, +STORE, 94604089925632, 94604089933823, +STORE, 94604089933824, 94604089946111, +STORE, 94604105125888, 94604106424319, +STORE, 140454937694208, 140454939353087, +STORE, 140454939353088, 140454941450239, +STORE, 140454941450240, 140454941466623, +STORE, 140454941466624, 140454941474815, +STORE, 140454941474816, 140454941491199, +STORE, 140454941491200, 140454941503487, +STORE, 140454941503488, 140454943596543, +STORE, 140454943596544, 140454943600639, +STORE, 140454943600640, 140454943604735, +STORE, 140454943604736, 140454943748095, +STORE, 140454944116736, 140454945800191, +STORE, 140454945800192, 140454945816575, +STORE, 140454945845248, 140454945849343, +STORE, 140454945849344, 140454945853439, +STORE, 140454945853440, 140454945857535, +STORE, 140728438214656, 140728438353919, +STORE, 140728439095296, 140728439107583, +STORE, 140728439107584, 140728439111679, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140721843453952, 140737488351231, +SNULL, 140721843462143, 140737488351231, +STORE, 140721843453952, 140721843462143, +STORE, 140721843322880, 140721843462143, +STORE, 94465962455040, 94465964789759, +SNULL, 94465962668031, 94465964789759, +STORE, 94465962455040, 94465962668031, +STORE, 94465962668032, 94465964789759, +ERASE, 94465962668032, 94465964789759, +STORE, 94465964765184, 94465964777471, +STORE, 94465964777472, 94465964789759, +STORE, 139913488314368, 139913490567167, +SNULL, 139913488457727, 139913490567167, +STORE, 139913488314368, 139913488457727, +STORE, 139913488457728, 139913490567167, +ERASE, 139913488457728, 139913490567167, +STORE, 139913490554880, 139913490563071, +STORE, 139913490563072, 139913490567167, +STORE, 140721843503104, 140721843507199, +STORE, 140721843490816, 140721843503103, +STORE, 139913490526208, 139913490554879, +STORE, 139913490518016, 139913490526207, +STORE, 139913486200832, 139913488314367, +SNULL, 139913486200832, 139913486213119, +STORE, 139913486213120, 139913488314367, +STORE, 139913486200832, 139913486213119, +SNULL, 139913488306175, 139913488314367, +STORE, 139913486213120, 139913488306175, +STORE, 139913488306176, 139913488314367, +ERASE, 139913488306176, 139913488314367, +STORE, 139913488306176, 139913488314367, +STORE, 139913482403840, 139913486200831, +SNULL, 139913482403840, 139913484062719, +STORE, 139913484062720, 139913486200831, +STORE, 139913482403840, 139913484062719, +SNULL, 139913486159871, 139913486200831, +STORE, 139913484062720, 139913486159871, +STORE, 139913486159872, 139913486200831, +SNULL, 139913486159872, 139913486184447, +STORE, 139913486184448, 139913486200831, +STORE, 139913486159872, 139913486184447, +ERASE, 139913486159872, 139913486184447, +STORE, 139913486159872, 139913486184447, +ERASE, 139913486184448, 139913486200831, +STORE, 139913486184448, 139913486200831, +STORE, 139913490509824, 139913490526207, +SNULL, 139913486176255, 139913486184447, +STORE, 139913486159872, 139913486176255, +STORE, 139913486176256, 139913486184447, +SNULL, 139913488310271, 139913488314367, +STORE, 139913488306176, 139913488310271, +STORE, 139913488310272, 139913488314367, +SNULL, 94465964769279, 94465964777471, +STORE, 94465964765184, 94465964769279, +STORE, 94465964769280, 94465964777471, +SNULL, 139913490558975, 139913490563071, +STORE, 139913490554880, 139913490558975, +STORE, 139913490558976, 139913490563071, +ERASE, 139913490526208, 139913490554879, +STORE, 94465970024448, 94465970159615, +STORE, 139913488826368, 139913490509823, +STORE, 94465970024448, 94465970294783, +STORE, 94465970024448, 94465970429951, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140720583307264, 140737488351231, +SNULL, 140720583315455, 140737488351231, +STORE, 140720583307264, 140720583315455, +STORE, 140720583176192, 140720583315455, +STORE, 94212322082816, 94212324417535, +SNULL, 94212322295807, 94212324417535, +STORE, 94212322082816, 94212322295807, +STORE, 94212322295808, 94212324417535, +ERASE, 94212322295808, 94212324417535, +STORE, 94212324392960, 94212324405247, +STORE, 94212324405248, 94212324417535, +STORE, 139659688538112, 139659690790911, +SNULL, 139659688681471, 139659690790911, +STORE, 139659688538112, 139659688681471, +STORE, 139659688681472, 139659690790911, +ERASE, 139659688681472, 139659690790911, +STORE, 139659690778624, 139659690786815, +STORE, 139659690786816, 139659690790911, +STORE, 140720584781824, 140720584785919, +STORE, 140720584769536, 140720584781823, +STORE, 139659690749952, 139659690778623, +STORE, 139659690741760, 139659690749951, +STORE, 139659686424576, 139659688538111, +SNULL, 139659686424576, 139659686436863, +STORE, 139659686436864, 139659688538111, +STORE, 139659686424576, 139659686436863, +SNULL, 139659688529919, 139659688538111, +STORE, 139659686436864, 139659688529919, +STORE, 139659688529920, 139659688538111, +ERASE, 139659688529920, 139659688538111, +STORE, 139659688529920, 139659688538111, +STORE, 139659682627584, 139659686424575, +SNULL, 139659682627584, 139659684286463, +STORE, 139659684286464, 139659686424575, +STORE, 139659682627584, 139659684286463, +SNULL, 139659686383615, 139659686424575, +STORE, 139659684286464, 139659686383615, +STORE, 139659686383616, 139659686424575, +SNULL, 139659686383616, 139659686408191, +STORE, 139659686408192, 139659686424575, +STORE, 139659686383616, 139659686408191, +ERASE, 139659686383616, 139659686408191, +STORE, 139659686383616, 139659686408191, +ERASE, 139659686408192, 139659686424575, +STORE, 139659686408192, 139659686424575, +STORE, 139659690733568, 139659690749951, +SNULL, 139659686399999, 139659686408191, +STORE, 139659686383616, 139659686399999, +STORE, 139659686400000, 139659686408191, +SNULL, 139659688534015, 139659688538111, +STORE, 139659688529920, 139659688534015, +STORE, 139659688534016, 139659688538111, +SNULL, 94212324397055, 94212324405247, +STORE, 94212324392960, 94212324397055, +STORE, 94212324397056, 94212324405247, +SNULL, 139659690782719, 139659690786815, +STORE, 139659690778624, 139659690782719, +STORE, 139659690782720, 139659690786815, +ERASE, 139659690749952, 139659690778623, +STORE, 94212355014656, 94212355149823, +STORE, 139659689050112, 139659690733567, +STORE, 94212355014656, 94212355284991, +STORE, 94212355014656, 94212355420159, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140727689830400, 140737488351231, +SNULL, 140727689838591, 140737488351231, +STORE, 140727689830400, 140727689838591, +STORE, 140727689699328, 140727689838591, +STORE, 94572390281216, 94572392615935, +SNULL, 94572390494207, 94572392615935, +STORE, 94572390281216, 94572390494207, +STORE, 94572390494208, 94572392615935, +ERASE, 94572390494208, 94572392615935, +STORE, 94572392591360, 94572392603647, +STORE, 94572392603648, 94572392615935, +STORE, 140575923769344, 140575926022143, +SNULL, 140575923912703, 140575926022143, +STORE, 140575923769344, 140575923912703, +STORE, 140575923912704, 140575926022143, +ERASE, 140575923912704, 140575926022143, +STORE, 140575926009856, 140575926018047, +STORE, 140575926018048, 140575926022143, +STORE, 140727689871360, 140727689875455, +STORE, 140727689859072, 140727689871359, +STORE, 140575925981184, 140575926009855, +STORE, 140575925972992, 140575925981183, +STORE, 140575921655808, 140575923769343, +SNULL, 140575921655808, 140575921668095, +STORE, 140575921668096, 140575923769343, +STORE, 140575921655808, 140575921668095, +SNULL, 140575923761151, 140575923769343, +STORE, 140575921668096, 140575923761151, +STORE, 140575923761152, 140575923769343, +ERASE, 140575923761152, 140575923769343, +STORE, 140575923761152, 140575923769343, +STORE, 140575917858816, 140575921655807, +SNULL, 140575917858816, 140575919517695, +STORE, 140575919517696, 140575921655807, +STORE, 140575917858816, 140575919517695, +SNULL, 140575921614847, 140575921655807, +STORE, 140575919517696, 140575921614847, +STORE, 140575921614848, 140575921655807, +SNULL, 140575921614848, 140575921639423, +STORE, 140575921639424, 140575921655807, +STORE, 140575921614848, 140575921639423, +ERASE, 140575921614848, 140575921639423, +STORE, 140575921614848, 140575921639423, +ERASE, 140575921639424, 140575921655807, +STORE, 140575921639424, 140575921655807, +STORE, 140575925964800, 140575925981183, +SNULL, 140575921631231, 140575921639423, +STORE, 140575921614848, 140575921631231, +STORE, 140575921631232, 140575921639423, +SNULL, 140575923765247, 140575923769343, +STORE, 140575923761152, 140575923765247, +STORE, 140575923765248, 140575923769343, +SNULL, 94572392595455, 94572392603647, +STORE, 94572392591360, 94572392595455, +STORE, 94572392595456, 94572392603647, +SNULL, 140575926013951, 140575926018047, +STORE, 140575926009856, 140575926013951, +STORE, 140575926013952, 140575926018047, +ERASE, 140575925981184, 140575926009855, +STORE, 94572402278400, 94572402413567, +STORE, 140575924281344, 140575925964799, +STORE, 94572402278400, 94572402548735, +STORE, 94572402278400, 94572402683903, +STORE, 94572402278400, 94572402851839, +SNULL, 94572402827263, 94572402851839, +STORE, 94572402278400, 94572402827263, +STORE, 94572402827264, 94572402851839, +ERASE, 94572402827264, 94572402851839, +STORE, 94572402278400, 94572402966527, +STORE, 94572402278400, 94572403109887, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140725520506880, 140737488351231, +SNULL, 140725520515071, 140737488351231, +STORE, 140725520506880, 140725520515071, +STORE, 140725520375808, 140725520515071, +STORE, 93829948788736, 93829951012863, +SNULL, 93829948899327, 93829951012863, +STORE, 93829948788736, 93829948899327, +STORE, 93829948899328, 93829951012863, +ERASE, 93829948899328, 93829951012863, +STORE, 93829950992384, 93829951004671, +STORE, 93829951004672, 93829951012863, +STORE, 140133696794624, 140133699047423, +SNULL, 140133696937983, 140133699047423, +STORE, 140133696794624, 140133696937983, +STORE, 140133696937984, 140133699047423, +ERASE, 140133696937984, 140133699047423, +STORE, 140133699035136, 140133699043327, +STORE, 140133699043328, 140133699047423, +STORE, 140725520875520, 140725520879615, +STORE, 140725520863232, 140725520875519, +STORE, 140133699006464, 140133699035135, +STORE, 140133698998272, 140133699006463, +STORE, 140133692997632, 140133696794623, +SNULL, 140133692997632, 140133694656511, +STORE, 140133694656512, 140133696794623, +STORE, 140133692997632, 140133694656511, +SNULL, 140133696753663, 140133696794623, +STORE, 140133694656512, 140133696753663, +STORE, 140133696753664, 140133696794623, +SNULL, 140133696753664, 140133696778239, +STORE, 140133696778240, 140133696794623, +STORE, 140133696753664, 140133696778239, +ERASE, 140133696753664, 140133696778239, +STORE, 140133696753664, 140133696778239, +ERASE, 140133696778240, 140133696794623, +STORE, 140133696778240, 140133696794623, +SNULL, 140133696770047, 140133696778239, +STORE, 140133696753664, 140133696770047, +STORE, 140133696770048, 140133696778239, +SNULL, 93829951000575, 93829951004671, +STORE, 93829950992384, 93829951000575, +STORE, 93829951000576, 93829951004671, +SNULL, 140133699039231, 140133699043327, +STORE, 140133699035136, 140133699039231, +STORE, 140133699039232, 140133699043327, +ERASE, 140133699006464, 140133699035135, +STORE, 93829978693632, 93829978828799, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140736118022144, 140737488351231, +SNULL, 140736118030335, 140737488351231, +STORE, 140736118022144, 140736118030335, +STORE, 140736117891072, 140736118030335, +STORE, 94467663982592, 94467666206719, +SNULL, 94467664093183, 94467666206719, +STORE, 94467663982592, 94467664093183, +STORE, 94467664093184, 94467666206719, +ERASE, 94467664093184, 94467666206719, +STORE, 94467666186240, 94467666198527, +STORE, 94467666198528, 94467666206719, +STORE, 140525377327104, 140525379579903, +SNULL, 140525377470463, 140525379579903, +STORE, 140525377327104, 140525377470463, +STORE, 140525377470464, 140525379579903, +ERASE, 140525377470464, 140525379579903, +STORE, 140525379567616, 140525379575807, +STORE, 140525379575808, 140525379579903, +STORE, 140736118771712, 140736118775807, +STORE, 140736118759424, 140736118771711, +STORE, 140525379538944, 140525379567615, +STORE, 140525379530752, 140525379538943, +STORE, 140525373530112, 140525377327103, +SNULL, 140525373530112, 140525375188991, +STORE, 140525375188992, 140525377327103, +STORE, 140525373530112, 140525375188991, +SNULL, 140525377286143, 140525377327103, +STORE, 140525375188992, 140525377286143, +STORE, 140525377286144, 140525377327103, +SNULL, 140525377286144, 140525377310719, +STORE, 140525377310720, 140525377327103, +STORE, 140525377286144, 140525377310719, +ERASE, 140525377286144, 140525377310719, +STORE, 140525377286144, 140525377310719, +ERASE, 140525377310720, 140525377327103, +STORE, 140525377310720, 140525377327103, +SNULL, 140525377302527, 140525377310719, +STORE, 140525377286144, 140525377302527, +STORE, 140525377302528, 140525377310719, +SNULL, 94467666194431, 94467666198527, +STORE, 94467666186240, 94467666194431, +STORE, 94467666194432, 94467666198527, +SNULL, 140525379571711, 140525379575807, +STORE, 140525379567616, 140525379571711, +STORE, 140525379571712, 140525379575807, +ERASE, 140525379538944, 140525379567615, +STORE, 94467693379584, 94467693514751, +STORE, 94200172744704, 94200172957695, +STORE, 94200175054848, 94200175058943, +STORE, 94200175058944, 94200175067135, +STORE, 94200175067136, 94200175079423, +STORE, 94200196673536, 94200198905855, +STORE, 140053867720704, 140053869379583, +STORE, 140053869379584, 140053871476735, +STORE, 140053871476736, 140053871493119, +STORE, 140053871493120, 140053871501311, +STORE, 140053871501312, 140053871517695, +STORE, 140053871517696, 140053871529983, +STORE, 140053871529984, 140053873623039, +STORE, 140053873623040, 140053873627135, +STORE, 140053873627136, 140053873631231, +STORE, 140053873631232, 140053873774591, +STORE, 140053874143232, 140053875826687, +STORE, 140053875826688, 140053875843071, +STORE, 140053875871744, 140053875875839, +STORE, 140053875875840, 140053875879935, +STORE, 140053875879936, 140053875884031, +STORE, 140728538484736, 140728538623999, +STORE, 140728538652672, 140728538664959, +STORE, 140728538664960, 140728538669055, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140732307775488, 140737488351231, +SNULL, 140732307783679, 140737488351231, +STORE, 140732307775488, 140732307783679, +STORE, 140732307644416, 140732307783679, +STORE, 93831417630720, 93831419965439, +SNULL, 93831417843711, 93831419965439, +STORE, 93831417630720, 93831417843711, +STORE, 93831417843712, 93831419965439, +ERASE, 93831417843712, 93831419965439, +STORE, 93831419940864, 93831419953151, +STORE, 93831419953152, 93831419965439, +STORE, 140241062088704, 140241064341503, +SNULL, 140241062232063, 140241064341503, +STORE, 140241062088704, 140241062232063, +STORE, 140241062232064, 140241064341503, +ERASE, 140241062232064, 140241064341503, +STORE, 140241064329216, 140241064337407, +STORE, 140241064337408, 140241064341503, +STORE, 140732308140032, 140732308144127, +STORE, 140732308127744, 140732308140031, +STORE, 140241064300544, 140241064329215, +STORE, 140241064292352, 140241064300543, +STORE, 140241059975168, 140241062088703, +SNULL, 140241059975168, 140241059987455, +STORE, 140241059987456, 140241062088703, +STORE, 140241059975168, 140241059987455, +SNULL, 140241062080511, 140241062088703, +STORE, 140241059987456, 140241062080511, +STORE, 140241062080512, 140241062088703, +ERASE, 140241062080512, 140241062088703, +STORE, 140241062080512, 140241062088703, +STORE, 140241056178176, 140241059975167, +SNULL, 140241056178176, 140241057837055, +STORE, 140241057837056, 140241059975167, +STORE, 140241056178176, 140241057837055, +SNULL, 140241059934207, 140241059975167, +STORE, 140241057837056, 140241059934207, +STORE, 140241059934208, 140241059975167, +SNULL, 140241059934208, 140241059958783, +STORE, 140241059958784, 140241059975167, +STORE, 140241059934208, 140241059958783, +ERASE, 140241059934208, 140241059958783, +STORE, 140241059934208, 140241059958783, +ERASE, 140241059958784, 140241059975167, +STORE, 140241059958784, 140241059975167, +STORE, 140241064284160, 140241064300543, +SNULL, 140241059950591, 140241059958783, +STORE, 140241059934208, 140241059950591, +STORE, 140241059950592, 140241059958783, +SNULL, 140241062084607, 140241062088703, +STORE, 140241062080512, 140241062084607, +STORE, 140241062084608, 140241062088703, +SNULL, 93831419944959, 93831419953151, +STORE, 93831419940864, 93831419944959, +STORE, 93831419944960, 93831419953151, +SNULL, 140241064333311, 140241064337407, +STORE, 140241064329216, 140241064333311, +STORE, 140241064333312, 140241064337407, +ERASE, 140241064300544, 140241064329215, +STORE, 93831435284480, 93831435419647, +STORE, 140241062600704, 140241064284159, +STORE, 93831435284480, 93831435554815, +STORE, 93831435284480, 93831435689983, +STORE, 93831435284480, 93831435862015, +SNULL, 93831435837439, 93831435862015, +STORE, 93831435284480, 93831435837439, +STORE, 93831435837440, 93831435862015, +ERASE, 93831435837440, 93831435862015, +STORE, 93831435284480, 93831435972607, +STORE, 93831435284480, 93831436107775, +SNULL, 93831436091391, 93831436107775, +STORE, 93831435284480, 93831436091391, +STORE, 93831436091392, 93831436107775, +ERASE, 93831436091392, 93831436107775, +STORE, 93831435284480, 93831436226559, +STORE, 93831435284480, 93831436361727, +STORE, 93831435284480, 93831436505087, +STORE, 93831435284480, 93831436652543, +STORE, 93831435284480, 93831436787711, +STORE, 93831435284480, 93831436926975, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140728546775040, 140737488351231, +SNULL, 140728546783231, 140737488351231, +STORE, 140728546775040, 140728546783231, +STORE, 140728546643968, 140728546783231, +STORE, 94456178786304, 94456181010431, +SNULL, 94456178896895, 94456181010431, +STORE, 94456178786304, 94456178896895, +STORE, 94456178896896, 94456181010431, +ERASE, 94456178896896, 94456181010431, +STORE, 94456180989952, 94456181002239, +STORE, 94456181002240, 94456181010431, +STORE, 140221893091328, 140221895344127, +SNULL, 140221893234687, 140221895344127, +STORE, 140221893091328, 140221893234687, +STORE, 140221893234688, 140221895344127, +ERASE, 140221893234688, 140221895344127, +STORE, 140221895331840, 140221895340031, +STORE, 140221895340032, 140221895344127, +STORE, 140728547803136, 140728547807231, +STORE, 140728547790848, 140728547803135, +STORE, 140221895303168, 140221895331839, +STORE, 140221895294976, 140221895303167, +STORE, 140221889294336, 140221893091327, +SNULL, 140221889294336, 140221890953215, +STORE, 140221890953216, 140221893091327, +STORE, 140221889294336, 140221890953215, +SNULL, 140221893050367, 140221893091327, +STORE, 140221890953216, 140221893050367, +STORE, 140221893050368, 140221893091327, +SNULL, 140221893050368, 140221893074943, +STORE, 140221893074944, 140221893091327, +STORE, 140221893050368, 140221893074943, +ERASE, 140221893050368, 140221893074943, +STORE, 140221893050368, 140221893074943, +ERASE, 140221893074944, 140221893091327, +STORE, 140221893074944, 140221893091327, +SNULL, 140221893066751, 140221893074943, +STORE, 140221893050368, 140221893066751, +STORE, 140221893066752, 140221893074943, +SNULL, 94456180998143, 94456181002239, +STORE, 94456180989952, 94456180998143, +STORE, 94456180998144, 94456181002239, +SNULL, 140221895335935, 140221895340031, +STORE, 140221895331840, 140221895335935, +STORE, 140221895335936, 140221895340031, +ERASE, 140221895303168, 140221895331839, +STORE, 94456203730944, 94456203866111, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140734438637568, 140737488351231, +SNULL, 140734438645759, 140737488351231, +STORE, 140734438637568, 140734438645759, +STORE, 140734438506496, 140734438645759, +STORE, 94652233351168, 94652235575295, +SNULL, 94652233461759, 94652235575295, +STORE, 94652233351168, 94652233461759, +STORE, 94652233461760, 94652235575295, +ERASE, 94652233461760, 94652235575295, +STORE, 94652235554816, 94652235567103, +STORE, 94652235567104, 94652235575295, +STORE, 140536493195264, 140536495448063, +SNULL, 140536493338623, 140536495448063, +STORE, 140536493195264, 140536493338623, +STORE, 140536493338624, 140536495448063, +ERASE, 140536493338624, 140536495448063, +STORE, 140536495435776, 140536495443967, +STORE, 140536495443968, 140536495448063, +STORE, 140734439002112, 140734439006207, +STORE, 140734438989824, 140734439002111, +STORE, 140536495407104, 140536495435775, +STORE, 140536495398912, 140536495407103, +STORE, 140536489398272, 140536493195263, +SNULL, 140536489398272, 140536491057151, +STORE, 140536491057152, 140536493195263, +STORE, 140536489398272, 140536491057151, +SNULL, 140536493154303, 140536493195263, +STORE, 140536491057152, 140536493154303, +STORE, 140536493154304, 140536493195263, +SNULL, 140536493154304, 140536493178879, +STORE, 140536493178880, 140536493195263, +STORE, 140536493154304, 140536493178879, +ERASE, 140536493154304, 140536493178879, +STORE, 140536493154304, 140536493178879, +ERASE, 140536493178880, 140536493195263, +STORE, 140536493178880, 140536493195263, +SNULL, 140536493170687, 140536493178879, +STORE, 140536493154304, 140536493170687, +STORE, 140536493170688, 140536493178879, +SNULL, 94652235563007, 94652235567103, +STORE, 94652235554816, 94652235563007, +STORE, 94652235563008, 94652235567103, +SNULL, 140536495439871, 140536495443967, +STORE, 140536495435776, 140536495439871, +STORE, 140536495439872, 140536495443967, +ERASE, 140536495407104, 140536495435775, +STORE, 94652265619456, 94652265754623, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140721814200320, 140737488351231, +SNULL, 140721814208511, 140737488351231, +STORE, 140721814200320, 140721814208511, +STORE, 140721814069248, 140721814208511, +STORE, 94062800691200, 94062802915327, +SNULL, 94062800801791, 94062802915327, +STORE, 94062800691200, 94062800801791, +STORE, 94062800801792, 94062802915327, +ERASE, 94062800801792, 94062802915327, +STORE, 94062802894848, 94062802907135, +STORE, 94062802907136, 94062802915327, +STORE, 139717739700224, 139717741953023, +SNULL, 139717739843583, 139717741953023, +STORE, 139717739700224, 139717739843583, +STORE, 139717739843584, 139717741953023, +ERASE, 139717739843584, 139717741953023, +STORE, 139717741940736, 139717741948927, +STORE, 139717741948928, 139717741953023, +STORE, 140721814224896, 140721814228991, +STORE, 140721814212608, 140721814224895, +STORE, 139717741912064, 139717741940735, +STORE, 139717741903872, 139717741912063, +STORE, 139717735903232, 139717739700223, +SNULL, 139717735903232, 139717737562111, +STORE, 139717737562112, 139717739700223, +STORE, 139717735903232, 139717737562111, +SNULL, 139717739659263, 139717739700223, +STORE, 139717737562112, 139717739659263, +STORE, 139717739659264, 139717739700223, +SNULL, 139717739659264, 139717739683839, +STORE, 139717739683840, 139717739700223, +STORE, 139717739659264, 139717739683839, +ERASE, 139717739659264, 139717739683839, +STORE, 139717739659264, 139717739683839, +ERASE, 139717739683840, 139717739700223, +STORE, 139717739683840, 139717739700223, +SNULL, 139717739675647, 139717739683839, +STORE, 139717739659264, 139717739675647, +STORE, 139717739675648, 139717739683839, +SNULL, 94062802903039, 94062802907135, +STORE, 94062802894848, 94062802903039, +STORE, 94062802903040, 94062802907135, +SNULL, 139717741944831, 139717741948927, +STORE, 139717741940736, 139717741944831, +STORE, 139717741944832, 139717741948927, +ERASE, 139717741912064, 139717741940735, +STORE, 94062814060544, 94062814195711, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140723945754624, 140737488351231, +SNULL, 140723945762815, 140737488351231, +STORE, 140723945754624, 140723945762815, +STORE, 140723945623552, 140723945762815, +STORE, 94886119305216, 94886121639935, +SNULL, 94886119518207, 94886121639935, +STORE, 94886119305216, 94886119518207, +STORE, 94886119518208, 94886121639935, +ERASE, 94886119518208, 94886121639935, +STORE, 94886121615360, 94886121627647, +STORE, 94886121627648, 94886121639935, +STORE, 140152532131840, 140152534384639, +SNULL, 140152532275199, 140152534384639, +STORE, 140152532131840, 140152532275199, +STORE, 140152532275200, 140152534384639, +ERASE, 140152532275200, 140152534384639, +STORE, 140152534372352, 140152534380543, +STORE, 140152534380544, 140152534384639, +STORE, 140723946213376, 140723946217471, +STORE, 140723946201088, 140723946213375, +STORE, 140152534343680, 140152534372351, +STORE, 140152534335488, 140152534343679, +STORE, 140152530018304, 140152532131839, +SNULL, 140152530018304, 140152530030591, +STORE, 140152530030592, 140152532131839, +STORE, 140152530018304, 140152530030591, +SNULL, 140152532123647, 140152532131839, +STORE, 140152530030592, 140152532123647, +STORE, 140152532123648, 140152532131839, +ERASE, 140152532123648, 140152532131839, +STORE, 140152532123648, 140152532131839, +STORE, 140152526221312, 140152530018303, +SNULL, 140152526221312, 140152527880191, +STORE, 140152527880192, 140152530018303, +STORE, 140152526221312, 140152527880191, +SNULL, 140152529977343, 140152530018303, +STORE, 140152527880192, 140152529977343, +STORE, 140152529977344, 140152530018303, +SNULL, 140152529977344, 140152530001919, +STORE, 140152530001920, 140152530018303, +STORE, 140152529977344, 140152530001919, +ERASE, 140152529977344, 140152530001919, +STORE, 140152529977344, 140152530001919, +ERASE, 140152530001920, 140152530018303, +STORE, 140152530001920, 140152530018303, +STORE, 140152534327296, 140152534343679, +SNULL, 140152529993727, 140152530001919, +STORE, 140152529977344, 140152529993727, +STORE, 140152529993728, 140152530001919, +SNULL, 140152532127743, 140152532131839, +STORE, 140152532123648, 140152532127743, +STORE, 140152532127744, 140152532131839, +SNULL, 94886121619455, 94886121627647, +STORE, 94886121615360, 94886121619455, +STORE, 94886121619456, 94886121627647, +SNULL, 140152534376447, 140152534380543, +STORE, 140152534372352, 140152534376447, +STORE, 140152534376448, 140152534380543, +ERASE, 140152534343680, 140152534372351, +STORE, 94886129770496, 94886129905663, +STORE, 140152532643840, 140152534327295, +STORE, 94886129770496, 94886130040831, +STORE, 94886129770496, 94886130175999, +STORE, 94886129770496, 94886130348031, +SNULL, 94886130323455, 94886130348031, +STORE, 94886129770496, 94886130323455, +STORE, 94886130323456, 94886130348031, +ERASE, 94886130323456, 94886130348031, +STORE, 94886129770496, 94886130458623, +STORE, 94886129770496, 94886130606079, +SNULL, 94886130573311, 94886130606079, +STORE, 94886129770496, 94886130573311, +STORE, 94886130573312, 94886130606079, +ERASE, 94886130573312, 94886130606079, +STORE, 94886129770496, 94886130724863, +STORE, 94886129770496, 94886130876415, +STORE, 94886129770496, 94886131023871, +STORE, 94886129770496, 94886131175423, +STORE, 94886129770496, 94886131318783, +STORE, 94886129770496, 94886131453951, +SNULL, 94886131449855, 94886131453951, +STORE, 94886129770496, 94886131449855, +STORE, 94886131449856, 94886131453951, +ERASE, 94886131449856, 94886131453951, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140735450779648, 140737488351231, +SNULL, 140735450787839, 140737488351231, +STORE, 140735450779648, 140735450787839, +STORE, 140735450648576, 140735450787839, +STORE, 93947794079744, 93947796414463, +SNULL, 93947794292735, 93947796414463, +STORE, 93947794079744, 93947794292735, +STORE, 93947794292736, 93947796414463, +ERASE, 93947794292736, 93947796414463, +STORE, 93947796389888, 93947796402175, +STORE, 93947796402176, 93947796414463, +STORE, 139841993433088, 139841995685887, +SNULL, 139841993576447, 139841995685887, +STORE, 139841993433088, 139841993576447, +STORE, 139841993576448, 139841995685887, +ERASE, 139841993576448, 139841995685887, +STORE, 139841995673600, 139841995681791, +STORE, 139841995681792, 139841995685887, +STORE, 140735451308032, 140735451312127, +STORE, 140735451295744, 140735451308031, +STORE, 139841995644928, 139841995673599, +STORE, 139841995636736, 139841995644927, +STORE, 139841991319552, 139841993433087, +SNULL, 139841991319552, 139841991331839, +STORE, 139841991331840, 139841993433087, +STORE, 139841991319552, 139841991331839, +SNULL, 139841993424895, 139841993433087, +STORE, 139841991331840, 139841993424895, +STORE, 139841993424896, 139841993433087, +ERASE, 139841993424896, 139841993433087, +STORE, 139841993424896, 139841993433087, +STORE, 139841987522560, 139841991319551, +SNULL, 139841987522560, 139841989181439, +STORE, 139841989181440, 139841991319551, +STORE, 139841987522560, 139841989181439, +SNULL, 139841991278591, 139841991319551, +STORE, 139841989181440, 139841991278591, +STORE, 139841991278592, 139841991319551, +SNULL, 139841991278592, 139841991303167, +STORE, 139841991303168, 139841991319551, +STORE, 139841991278592, 139841991303167, +ERASE, 139841991278592, 139841991303167, +STORE, 139841991278592, 139841991303167, +ERASE, 139841991303168, 139841991319551, +STORE, 139841991303168, 139841991319551, +STORE, 139841995628544, 139841995644927, +SNULL, 139841991294975, 139841991303167, +STORE, 139841991278592, 139841991294975, +STORE, 139841991294976, 139841991303167, +SNULL, 139841993428991, 139841993433087, +STORE, 139841993424896, 139841993428991, +STORE, 139841993428992, 139841993433087, +SNULL, 93947796393983, 93947796402175, +STORE, 93947796389888, 93947796393983, +STORE, 93947796393984, 93947796402175, +SNULL, 139841995677695, 139841995681791, +STORE, 139841995673600, 139841995677695, +STORE, 139841995677696, 139841995681791, +ERASE, 139841995644928, 139841995673599, +STORE, 93947829739520, 93947829874687, +STORE, 139841993945088, 139841995628543, +STORE, 93947829739520, 93947830009855, +STORE, 93947829739520, 93947830145023, +STORE, 94659351814144, 94659352027135, +STORE, 94659354124288, 94659354128383, +STORE, 94659354128384, 94659354136575, +STORE, 94659354136576, 94659354148863, +STORE, 94659383476224, 94659385057279, +STORE, 139959054557184, 139959056216063, +STORE, 139959056216064, 139959058313215, +STORE, 139959058313216, 139959058329599, +STORE, 139959058329600, 139959058337791, +STORE, 139959058337792, 139959058354175, +STORE, 139959058354176, 139959058366463, +STORE, 139959058366464, 139959060459519, +STORE, 139959060459520, 139959060463615, +STORE, 139959060463616, 139959060467711, +STORE, 139959060467712, 139959060611071, +STORE, 139959060979712, 139959062663167, +STORE, 139959062663168, 139959062679551, +STORE, 139959062708224, 139959062712319, +STORE, 139959062712320, 139959062716415, +STORE, 139959062716416, 139959062720511, +STORE, 140735532539904, 140735532679167, +STORE, 140735532830720, 140735532843007, +STORE, 140735532843008, 140735532847103, +STORE, 93894361829376, 93894362042367, +STORE, 93894364139520, 93894364143615, +STORE, 93894364143616, 93894364151807, +STORE, 93894364151808, 93894364164095, +STORE, 93894396944384, 93894397624319, +STORE, 140075612573696, 140075614232575, +STORE, 140075614232576, 140075616329727, +STORE, 140075616329728, 140075616346111, +STORE, 140075616346112, 140075616354303, +STORE, 140075616354304, 140075616370687, +STORE, 140075616370688, 140075616382975, +STORE, 140075616382976, 140075618476031, +STORE, 140075618476032, 140075618480127, +STORE, 140075618480128, 140075618484223, +STORE, 140075618484224, 140075618627583, +STORE, 140075618996224, 140075620679679, +STORE, 140075620679680, 140075620696063, +STORE, 140075620724736, 140075620728831, +STORE, 140075620728832, 140075620732927, +STORE, 140075620732928, 140075620737023, +STORE, 140720830312448, 140720830451711, +STORE, 140720830631936, 140720830644223, +STORE, 140720830644224, 140720830648319, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140735116226560, 140737488351231, +SNULL, 140735116234751, 140737488351231, +STORE, 140735116226560, 140735116234751, +STORE, 140735116095488, 140735116234751, +STORE, 94873398054912, 94873400279039, +SNULL, 94873398165503, 94873400279039, +STORE, 94873398054912, 94873398165503, +STORE, 94873398165504, 94873400279039, +ERASE, 94873398165504, 94873400279039, +STORE, 94873400258560, 94873400270847, +STORE, 94873400270848, 94873400279039, +STORE, 140303828606976, 140303830859775, +SNULL, 140303828750335, 140303830859775, +STORE, 140303828606976, 140303828750335, +STORE, 140303828750336, 140303830859775, +ERASE, 140303828750336, 140303830859775, +STORE, 140303830847488, 140303830855679, +STORE, 140303830855680, 140303830859775, +STORE, 140735116251136, 140735116255231, +STORE, 140735116238848, 140735116251135, +STORE, 140303830818816, 140303830847487, +STORE, 140303830810624, 140303830818815, +STORE, 140303824809984, 140303828606975, +SNULL, 140303824809984, 140303826468863, +STORE, 140303826468864, 140303828606975, +STORE, 140303824809984, 140303826468863, +SNULL, 140303828566015, 140303828606975, +STORE, 140303826468864, 140303828566015, +STORE, 140303828566016, 140303828606975, +SNULL, 140303828566016, 140303828590591, +STORE, 140303828590592, 140303828606975, +STORE, 140303828566016, 140303828590591, +ERASE, 140303828566016, 140303828590591, +STORE, 140303828566016, 140303828590591, +ERASE, 140303828590592, 140303828606975, +STORE, 140303828590592, 140303828606975, +SNULL, 140303828582399, 140303828590591, +STORE, 140303828566016, 140303828582399, +STORE, 140303828582400, 140303828590591, +SNULL, 94873400266751, 94873400270847, +STORE, 94873400258560, 94873400266751, +STORE, 94873400266752, 94873400270847, +SNULL, 140303830851583, 140303830855679, +STORE, 140303830847488, 140303830851583, +STORE, 140303830851584, 140303830855679, +ERASE, 140303830818816, 140303830847487, +STORE, 94873413713920, 94873413849087, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140732349956096, 140737488351231, +SNULL, 140732349964287, 140737488351231, +STORE, 140732349956096, 140732349964287, +STORE, 140732349825024, 140732349964287, +STORE, 94009652736000, 94009655070719, +SNULL, 94009652948991, 94009655070719, +STORE, 94009652736000, 94009652948991, +STORE, 94009652948992, 94009655070719, +ERASE, 94009652948992, 94009655070719, +STORE, 94009655046144, 94009655058431, +STORE, 94009655058432, 94009655070719, +STORE, 140295688531968, 140295690784767, +SNULL, 140295688675327, 140295690784767, +STORE, 140295688531968, 140295688675327, +STORE, 140295688675328, 140295690784767, +ERASE, 140295688675328, 140295690784767, +STORE, 140295690772480, 140295690780671, +STORE, 140295690780672, 140295690784767, +STORE, 140732350005248, 140732350009343, +STORE, 140732349992960, 140732350005247, +STORE, 140295690743808, 140295690772479, +STORE, 140295690735616, 140295690743807, +STORE, 140295686418432, 140295688531967, +SNULL, 140295686418432, 140295686430719, +STORE, 140295686430720, 140295688531967, +STORE, 140295686418432, 140295686430719, +SNULL, 140295688523775, 140295688531967, +STORE, 140295686430720, 140295688523775, +STORE, 140295688523776, 140295688531967, +ERASE, 140295688523776, 140295688531967, +STORE, 140295688523776, 140295688531967, +STORE, 140295682621440, 140295686418431, +SNULL, 140295682621440, 140295684280319, +STORE, 140295684280320, 140295686418431, +STORE, 140295682621440, 140295684280319, +SNULL, 140295686377471, 140295686418431, +STORE, 140295684280320, 140295686377471, +STORE, 140295686377472, 140295686418431, +SNULL, 140295686377472, 140295686402047, +STORE, 140295686402048, 140295686418431, +STORE, 140295686377472, 140295686402047, +ERASE, 140295686377472, 140295686402047, +STORE, 140295686377472, 140295686402047, +ERASE, 140295686402048, 140295686418431, +STORE, 140295686402048, 140295686418431, +STORE, 140295690727424, 140295690743807, +SNULL, 140295686393855, 140295686402047, +STORE, 140295686377472, 140295686393855, +STORE, 140295686393856, 140295686402047, +SNULL, 140295688527871, 140295688531967, +STORE, 140295688523776, 140295688527871, +STORE, 140295688527872, 140295688531967, +SNULL, 94009655050239, 94009655058431, +STORE, 94009655046144, 94009655050239, +STORE, 94009655050240, 94009655058431, +SNULL, 140295690776575, 140295690780671, +STORE, 140295690772480, 140295690776575, +STORE, 140295690776576, 140295690780671, +ERASE, 140295690743808, 140295690772479, +STORE, 94009672114176, 94009672249343, +STORE, 140295689043968, 140295690727423, +STORE, 94009672114176, 94009672384511, +STORE, 94009672114176, 94009672519679, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140722376515584, 140737488351231, +SNULL, 140722376523775, 140737488351231, +STORE, 140722376515584, 140722376523775, +STORE, 140722376384512, 140722376523775, +STORE, 94089815773184, 94089818107903, +SNULL, 94089815986175, 94089818107903, +STORE, 94089815773184, 94089815986175, +STORE, 94089815986176, 94089818107903, +ERASE, 94089815986176, 94089818107903, +STORE, 94089818083328, 94089818095615, +STORE, 94089818095616, 94089818107903, +STORE, 140265595711488, 140265597964287, +SNULL, 140265595854847, 140265597964287, +STORE, 140265595711488, 140265595854847, +STORE, 140265595854848, 140265597964287, +ERASE, 140265595854848, 140265597964287, +STORE, 140265597952000, 140265597960191, +STORE, 140265597960192, 140265597964287, +STORE, 140722378297344, 140722378301439, +STORE, 140722378285056, 140722378297343, +STORE, 140265597923328, 140265597951999, +STORE, 140265597915136, 140265597923327, +STORE, 140265593597952, 140265595711487, +SNULL, 140265593597952, 140265593610239, +STORE, 140265593610240, 140265595711487, +STORE, 140265593597952, 140265593610239, +SNULL, 140265595703295, 140265595711487, +STORE, 140265593610240, 140265595703295, +STORE, 140265595703296, 140265595711487, +ERASE, 140265595703296, 140265595711487, +STORE, 140265595703296, 140265595711487, +STORE, 140265589800960, 140265593597951, +SNULL, 140265589800960, 140265591459839, +STORE, 140265591459840, 140265593597951, +STORE, 140265589800960, 140265591459839, +SNULL, 140265593556991, 140265593597951, +STORE, 140265591459840, 140265593556991, +STORE, 140265593556992, 140265593597951, +SNULL, 140265593556992, 140265593581567, +STORE, 140265593581568, 140265593597951, +STORE, 140265593556992, 140265593581567, +ERASE, 140265593556992, 140265593581567, +STORE, 140265593556992, 140265593581567, +ERASE, 140265593581568, 140265593597951, +STORE, 140265593581568, 140265593597951, +STORE, 140265597906944, 140265597923327, +SNULL, 140265593573375, 140265593581567, +STORE, 140265593556992, 140265593573375, +STORE, 140265593573376, 140265593581567, +SNULL, 140265595707391, 140265595711487, +STORE, 140265595703296, 140265595707391, +STORE, 140265595707392, 140265595711487, +SNULL, 94089818087423, 94089818095615, +STORE, 94089818083328, 94089818087423, +STORE, 94089818087424, 94089818095615, +SNULL, 140265597956095, 140265597960191, +STORE, 140265597952000, 140265597956095, +STORE, 140265597956096, 140265597960191, +ERASE, 140265597923328, 140265597951999, +STORE, 94089837146112, 94089837281279, +STORE, 140265596223488, 140265597906943, +STORE, 94089837146112, 94089837416447, +STORE, 94089837146112, 94089837551615, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140735265218560, 140737488351231, +SNULL, 140735265226751, 140737488351231, +STORE, 140735265218560, 140735265226751, +STORE, 140735265087488, 140735265226751, +STORE, 94250422370304, 94250424705023, +SNULL, 94250422583295, 94250424705023, +STORE, 94250422370304, 94250422583295, +STORE, 94250422583296, 94250424705023, +ERASE, 94250422583296, 94250424705023, +STORE, 94250424680448, 94250424692735, +STORE, 94250424692736, 94250424705023, +STORE, 140344442474496, 140344444727295, +SNULL, 140344442617855, 140344444727295, +STORE, 140344442474496, 140344442617855, +STORE, 140344442617856, 140344444727295, +ERASE, 140344442617856, 140344444727295, +STORE, 140344444715008, 140344444723199, +STORE, 140344444723200, 140344444727295, +STORE, 140735265341440, 140735265345535, +STORE, 140735265329152, 140735265341439, +STORE, 140344444686336, 140344444715007, +STORE, 140344444678144, 140344444686335, +STORE, 140344440360960, 140344442474495, +SNULL, 140344440360960, 140344440373247, +STORE, 140344440373248, 140344442474495, +STORE, 140344440360960, 140344440373247, +SNULL, 140344442466303, 140344442474495, +STORE, 140344440373248, 140344442466303, +STORE, 140344442466304, 140344442474495, +ERASE, 140344442466304, 140344442474495, +STORE, 140344442466304, 140344442474495, +STORE, 140344436563968, 140344440360959, +SNULL, 140344436563968, 140344438222847, +STORE, 140344438222848, 140344440360959, +STORE, 140344436563968, 140344438222847, +SNULL, 140344440319999, 140344440360959, +STORE, 140344438222848, 140344440319999, +STORE, 140344440320000, 140344440360959, +SNULL, 140344440320000, 140344440344575, +STORE, 140344440344576, 140344440360959, +STORE, 140344440320000, 140344440344575, +ERASE, 140344440320000, 140344440344575, +STORE, 140344440320000, 140344440344575, +ERASE, 140344440344576, 140344440360959, +STORE, 140344440344576, 140344440360959, +STORE, 140344444669952, 140344444686335, +SNULL, 140344440336383, 140344440344575, +STORE, 140344440320000, 140344440336383, +STORE, 140344440336384, 140344440344575, +SNULL, 140344442470399, 140344442474495, +STORE, 140344442466304, 140344442470399, +STORE, 140344442470400, 140344442474495, +SNULL, 94250424684543, 94250424692735, +STORE, 94250424680448, 94250424684543, +STORE, 94250424684544, 94250424692735, +SNULL, 140344444719103, 140344444723199, +STORE, 140344444715008, 140344444719103, +STORE, 140344444719104, 140344444723199, +ERASE, 140344444686336, 140344444715007, +STORE, 94250445512704, 94250445647871, +STORE, 140344442986496, 140344444669951, +STORE, 94250445512704, 94250445783039, +STORE, 94250445512704, 94250445918207, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140725762719744, 140737488351231, +SNULL, 140725762727935, 140737488351231, +STORE, 140725762719744, 140725762727935, +STORE, 140725762588672, 140725762727935, +STORE, 94819009097728, 94819011432447, +SNULL, 94819009310719, 94819011432447, +STORE, 94819009097728, 94819009310719, +STORE, 94819009310720, 94819011432447, +ERASE, 94819009310720, 94819011432447, +STORE, 94819011407872, 94819011420159, +STORE, 94819011420160, 94819011432447, +STORE, 139987985596416, 139987987849215, +SNULL, 139987985739775, 139987987849215, +STORE, 139987985596416, 139987985739775, +STORE, 139987985739776, 139987987849215, +ERASE, 139987985739776, 139987987849215, +STORE, 139987987836928, 139987987845119, +STORE, 139987987845120, 139987987849215, +STORE, 140725763072000, 140725763076095, +STORE, 140725763059712, 140725763071999, +STORE, 139987987808256, 139987987836927, +STORE, 139987987800064, 139987987808255, +STORE, 139987983482880, 139987985596415, +SNULL, 139987983482880, 139987983495167, +STORE, 139987983495168, 139987985596415, +STORE, 139987983482880, 139987983495167, +SNULL, 139987985588223, 139987985596415, +STORE, 139987983495168, 139987985588223, +STORE, 139987985588224, 139987985596415, +ERASE, 139987985588224, 139987985596415, +STORE, 139987985588224, 139987985596415, +STORE, 139987979685888, 139987983482879, +SNULL, 139987979685888, 139987981344767, +STORE, 139987981344768, 139987983482879, +STORE, 139987979685888, 139987981344767, +SNULL, 139987983441919, 139987983482879, +STORE, 139987981344768, 139987983441919, +STORE, 139987983441920, 139987983482879, +SNULL, 139987983441920, 139987983466495, +STORE, 139987983466496, 139987983482879, +STORE, 139987983441920, 139987983466495, +ERASE, 139987983441920, 139987983466495, +STORE, 139987983441920, 139987983466495, +ERASE, 139987983466496, 139987983482879, +STORE, 139987983466496, 139987983482879, +STORE, 139987987791872, 139987987808255, +SNULL, 139987983458303, 139987983466495, +STORE, 139987983441920, 139987983458303, +STORE, 139987983458304, 139987983466495, +SNULL, 139987985592319, 139987985596415, +STORE, 139987985588224, 139987985592319, +STORE, 139987985592320, 139987985596415, +SNULL, 94819011411967, 94819011420159, +STORE, 94819011407872, 94819011411967, +STORE, 94819011411968, 94819011420159, +SNULL, 139987987841023, 139987987845119, +STORE, 139987987836928, 139987987841023, +STORE, 139987987841024, 139987987845119, +ERASE, 139987987808256, 139987987836927, +STORE, 94819028176896, 94819028312063, +STORE, 139987986108416, 139987987791871, +STORE, 94819028176896, 94819028447231, +STORE, 94819028176896, 94819028582399, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140722475413504, 140737488351231, +SNULL, 140722475421695, 140737488351231, +STORE, 140722475413504, 140722475421695, +STORE, 140722475282432, 140722475421695, +STORE, 94620599119872, 94620601343999, +SNULL, 94620599230463, 94620601343999, +STORE, 94620599119872, 94620599230463, +STORE, 94620599230464, 94620601343999, +ERASE, 94620599230464, 94620601343999, +STORE, 94620601323520, 94620601335807, +STORE, 94620601335808, 94620601343999, +STORE, 139891763060736, 139891765313535, +SNULL, 139891763204095, 139891765313535, +STORE, 139891763060736, 139891763204095, +STORE, 139891763204096, 139891765313535, +ERASE, 139891763204096, 139891765313535, +STORE, 139891765301248, 139891765309439, +STORE, 139891765309440, 139891765313535, +STORE, 140722475700224, 140722475704319, +STORE, 140722475687936, 140722475700223, +STORE, 139891765272576, 139891765301247, +STORE, 139891765264384, 139891765272575, +STORE, 139891759263744, 139891763060735, +SNULL, 139891759263744, 139891760922623, +STORE, 139891760922624, 139891763060735, +STORE, 139891759263744, 139891760922623, +SNULL, 139891763019775, 139891763060735, +STORE, 139891760922624, 139891763019775, +STORE, 139891763019776, 139891763060735, +SNULL, 139891763019776, 139891763044351, +STORE, 139891763044352, 139891763060735, +STORE, 139891763019776, 139891763044351, +ERASE, 139891763019776, 139891763044351, +STORE, 139891763019776, 139891763044351, +ERASE, 139891763044352, 139891763060735, +STORE, 139891763044352, 139891763060735, +SNULL, 139891763036159, 139891763044351, +STORE, 139891763019776, 139891763036159, +STORE, 139891763036160, 139891763044351, +SNULL, 94620601331711, 94620601335807, +STORE, 94620601323520, 94620601331711, +STORE, 94620601331712, 94620601335807, +SNULL, 139891765305343, 139891765309439, +STORE, 139891765301248, 139891765305343, +STORE, 139891765305344, 139891765309439, +ERASE, 139891765272576, 139891765301247, +STORE, 94620610027520, 94620610162687, +STORE, 94031976210432, 94031976423423, +STORE, 94031978520576, 94031978524671, +STORE, 94031978524672, 94031978532863, +STORE, 94031978532864, 94031978545151, +STORE, 94031990398976, 94031992565759, +STORE, 140336240640000, 140336242298879, +STORE, 140336242298880, 140336244396031, +STORE, 140336244396032, 140336244412415, +STORE, 140336244412416, 140336244420607, +STORE, 140336244420608, 140336244436991, +STORE, 140336244436992, 140336244449279, +STORE, 140336244449280, 140336246542335, +STORE, 140336246542336, 140336246546431, +STORE, 140336246546432, 140336246550527, +STORE, 140336246550528, 140336246693887, +STORE, 140336247062528, 140336248745983, +STORE, 140336248745984, 140336248762367, +STORE, 140336248791040, 140336248795135, +STORE, 140336248795136, 140336248799231, +STORE, 140336248799232, 140336248803327, +STORE, 140728500064256, 140728500203519, +STORE, 140728501501952, 140728501514239, +STORE, 140728501514240, 140728501518335, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140730503987200, 140737488351231, +SNULL, 140730503995391, 140737488351231, +STORE, 140730503987200, 140730503995391, +STORE, 140730503856128, 140730503995391, +STORE, 93866544205824, 93866546429951, +SNULL, 93866544316415, 93866546429951, +STORE, 93866544205824, 93866544316415, +STORE, 93866544316416, 93866546429951, +ERASE, 93866544316416, 93866546429951, +STORE, 93866546409472, 93866546421759, +STORE, 93866546421760, 93866546429951, +STORE, 140216311959552, 140216314212351, +SNULL, 140216312102911, 140216314212351, +STORE, 140216311959552, 140216312102911, +STORE, 140216312102912, 140216314212351, +ERASE, 140216312102912, 140216314212351, +STORE, 140216314200064, 140216314208255, +STORE, 140216314208256, 140216314212351, +STORE, 140730504626176, 140730504630271, +STORE, 140730504613888, 140730504626175, +STORE, 140216314171392, 140216314200063, +STORE, 140216314163200, 140216314171391, +STORE, 140216308162560, 140216311959551, +SNULL, 140216308162560, 140216309821439, +STORE, 140216309821440, 140216311959551, +STORE, 140216308162560, 140216309821439, +SNULL, 140216311918591, 140216311959551, +STORE, 140216309821440, 140216311918591, +STORE, 140216311918592, 140216311959551, +SNULL, 140216311918592, 140216311943167, +STORE, 140216311943168, 140216311959551, +STORE, 140216311918592, 140216311943167, +ERASE, 140216311918592, 140216311943167, +STORE, 140216311918592, 140216311943167, +ERASE, 140216311943168, 140216311959551, +STORE, 140216311943168, 140216311959551, +SNULL, 140216311934975, 140216311943167, +STORE, 140216311918592, 140216311934975, +STORE, 140216311934976, 140216311943167, +SNULL, 93866546417663, 93866546421759, +STORE, 93866546409472, 93866546417663, +STORE, 93866546417664, 93866546421759, +SNULL, 140216314204159, 140216314208255, +STORE, 140216314200064, 140216314204159, +STORE, 140216314204160, 140216314208255, +ERASE, 140216314171392, 140216314200063, +STORE, 93866550386688, 93866550521855, +STORE, 94074292674560, 94074292887551, +STORE, 94074294984704, 94074294988799, +STORE, 94074294988800, 94074294996991, +STORE, 94074294996992, 94074295009279, +STORE, 94074300219392, 94074301378559, +STORE, 139781563256832, 139781564915711, +STORE, 139781564915712, 139781567012863, +STORE, 139781567012864, 139781567029247, +STORE, 139781567029248, 139781567037439, +STORE, 139781567037440, 139781567053823, +STORE, 139781567053824, 139781567066111, +STORE, 139781567066112, 139781569159167, +STORE, 139781569159168, 139781569163263, +STORE, 139781569163264, 139781569167359, +STORE, 139781569167360, 139781569310719, +STORE, 139781569679360, 139781571362815, +STORE, 139781571362816, 139781571379199, +STORE, 139781571407872, 139781571411967, +STORE, 139781571411968, 139781571416063, +STORE, 139781571416064, 139781571420159, +STORE, 140723688488960, 140723688628223, +STORE, 140723689005056, 140723689017343, +STORE, 140723689017344, 140723689021439, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140735189745664, 140737488351231, +SNULL, 140735189753855, 140737488351231, +STORE, 140735189745664, 140735189753855, +STORE, 140735189614592, 140735189753855, +STORE, 94172072177664, 94172074512383, +SNULL, 94172072390655, 94172074512383, +STORE, 94172072177664, 94172072390655, +STORE, 94172072390656, 94172074512383, +ERASE, 94172072390656, 94172074512383, +STORE, 94172074487808, 94172074500095, +STORE, 94172074500096, 94172074512383, +STORE, 140687827263488, 140687829516287, +SNULL, 140687827406847, 140687829516287, +STORE, 140687827263488, 140687827406847, +STORE, 140687827406848, 140687829516287, +ERASE, 140687827406848, 140687829516287, +STORE, 140687829504000, 140687829512191, +STORE, 140687829512192, 140687829516287, +STORE, 140735189766144, 140735189770239, +STORE, 140735189753856, 140735189766143, +STORE, 140687829475328, 140687829503999, +STORE, 140687829467136, 140687829475327, +STORE, 140687825149952, 140687827263487, +SNULL, 140687825149952, 140687825162239, +STORE, 140687825162240, 140687827263487, +STORE, 140687825149952, 140687825162239, +SNULL, 140687827255295, 140687827263487, +STORE, 140687825162240, 140687827255295, +STORE, 140687827255296, 140687827263487, +ERASE, 140687827255296, 140687827263487, +STORE, 140687827255296, 140687827263487, +STORE, 140687821352960, 140687825149951, +SNULL, 140687821352960, 140687823011839, +STORE, 140687823011840, 140687825149951, +STORE, 140687821352960, 140687823011839, +SNULL, 140687825108991, 140687825149951, +STORE, 140687823011840, 140687825108991, +STORE, 140687825108992, 140687825149951, +SNULL, 140687825108992, 140687825133567, +STORE, 140687825133568, 140687825149951, +STORE, 140687825108992, 140687825133567, +ERASE, 140687825108992, 140687825133567, +STORE, 140687825108992, 140687825133567, +ERASE, 140687825133568, 140687825149951, +STORE, 140687825133568, 140687825149951, +STORE, 140687829458944, 140687829475327, +SNULL, 140687825125375, 140687825133567, +STORE, 140687825108992, 140687825125375, +STORE, 140687825125376, 140687825133567, +SNULL, 140687827259391, 140687827263487, +STORE, 140687827255296, 140687827259391, +STORE, 140687827259392, 140687827263487, +SNULL, 94172074491903, 94172074500095, +STORE, 94172074487808, 94172074491903, +STORE, 94172074491904, 94172074500095, +SNULL, 140687829508095, 140687829512191, +STORE, 140687829504000, 140687829508095, +STORE, 140687829508096, 140687829512191, +ERASE, 140687829475328, 140687829503999, +STORE, 94172092432384, 94172092567551, +STORE, 140687827775488, 140687829458943, +STORE, 94172092432384, 94172092702719, +STORE, 94172092432384, 94172092837887, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140737229504512, 140737488351231, +SNULL, 140737229512703, 140737488351231, +STORE, 140737229504512, 140737229512703, +STORE, 140737229373440, 140737229512703, +STORE, 94155246866432, 94155249090559, +SNULL, 94155246977023, 94155249090559, +STORE, 94155246866432, 94155246977023, +STORE, 94155246977024, 94155249090559, +ERASE, 94155246977024, 94155249090559, +STORE, 94155249070080, 94155249082367, +STORE, 94155249082368, 94155249090559, +STORE, 140640993693696, 140640995946495, +SNULL, 140640993837055, 140640995946495, +STORE, 140640993693696, 140640993837055, +STORE, 140640993837056, 140640995946495, +ERASE, 140640993837056, 140640995946495, +STORE, 140640995934208, 140640995942399, +STORE, 140640995942400, 140640995946495, +STORE, 140737230004224, 140737230008319, +STORE, 140737229991936, 140737230004223, +STORE, 140640995905536, 140640995934207, +STORE, 140640995897344, 140640995905535, +STORE, 140640989896704, 140640993693695, +SNULL, 140640989896704, 140640991555583, +STORE, 140640991555584, 140640993693695, +STORE, 140640989896704, 140640991555583, +SNULL, 140640993652735, 140640993693695, +STORE, 140640991555584, 140640993652735, +STORE, 140640993652736, 140640993693695, +SNULL, 140640993652736, 140640993677311, +STORE, 140640993677312, 140640993693695, +STORE, 140640993652736, 140640993677311, +ERASE, 140640993652736, 140640993677311, +STORE, 140640993652736, 140640993677311, +ERASE, 140640993677312, 140640993693695, +STORE, 140640993677312, 140640993693695, +SNULL, 140640993669119, 140640993677311, +STORE, 140640993652736, 140640993669119, +STORE, 140640993669120, 140640993677311, +SNULL, 94155249078271, 94155249082367, +STORE, 94155249070080, 94155249078271, +STORE, 94155249078272, 94155249082367, +SNULL, 140640995938303, 140640995942399, +STORE, 140640995934208, 140640995938303, +STORE, 140640995938304, 140640995942399, +ERASE, 140640995905536, 140640995934207, +STORE, 94155281035264, 94155281170431, +STORE, 94088066453504, 94088066564095, +STORE, 94088068657152, 94088068665343, +STORE, 94088068665344, 94088068669439, +STORE, 94088068669440, 94088068677631, +STORE, 94088090214400, 94088090349567, +STORE, 140503024627712, 140503026286591, +STORE, 140503026286592, 140503028383743, +STORE, 140503028383744, 140503028400127, +STORE, 140503028400128, 140503028408319, +STORE, 140503028408320, 140503028424703, +STORE, 140503028424704, 140503028568063, +STORE, 140503030628352, 140503030636543, +STORE, 140503030665216, 140503030669311, +STORE, 140503030669312, 140503030673407, +STORE, 140503030673408, 140503030677503, +STORE, 140730894725120, 140730894864383, +STORE, 140730894880768, 140730894893055, +STORE, 140730894893056, 140730894897151, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140730434342912, 140737488351231, +SNULL, 140730434351103, 140737488351231, +STORE, 140730434342912, 140730434351103, +STORE, 140730434211840, 140730434351103, +STORE, 4194304, 5128191, +STORE, 7221248, 7241727, +STORE, 7241728, 7249919, +STORE, 140109041938432, 140109044191231, +SNULL, 140109042081791, 140109044191231, +STORE, 140109041938432, 140109042081791, +STORE, 140109042081792, 140109044191231, +ERASE, 140109042081792, 140109044191231, +STORE, 140109044178944, 140109044187135, +STORE, 140109044187136, 140109044191231, +STORE, 140730434850816, 140730434854911, +STORE, 140730434838528, 140730434850815, +STORE, 140109044150272, 140109044178943, +STORE, 140109044142080, 140109044150271, +STORE, 140109038776320, 140109041938431, +SNULL, 140109038776320, 140109039837183, +STORE, 140109039837184, 140109041938431, +STORE, 140109038776320, 140109039837183, +SNULL, 140109041930239, 140109041938431, +STORE, 140109039837184, 140109041930239, +STORE, 140109041930240, 140109041938431, +ERASE, 140109041930240, 140109041938431, +STORE, 140109041930240, 140109041938431, +STORE, 140109034979328, 140109038776319, +SNULL, 140109034979328, 140109036638207, +STORE, 140109036638208, 140109038776319, +STORE, 140109034979328, 140109036638207, +SNULL, 140109038735359, 140109038776319, +STORE, 140109036638208, 140109038735359, +STORE, 140109038735360, 140109038776319, +SNULL, 140109038735360, 140109038759935, +STORE, 140109038759936, 140109038776319, +STORE, 140109038735360, 140109038759935, +ERASE, 140109038735360, 140109038759935, +STORE, 140109038735360, 140109038759935, +ERASE, 140109038759936, 140109038776319, +STORE, 140109038759936, 140109038776319, +STORE, 140109044129792, 140109044150271, +SNULL, 140109038751743, 140109038759935, +STORE, 140109038735360, 140109038751743, +STORE, 140109038751744, 140109038759935, +SNULL, 140109041934335, 140109041938431, +STORE, 140109041930240, 140109041934335, +STORE, 140109041934336, 140109041938431, +SNULL, 7233535, 7241727, +STORE, 7221248, 7233535, +STORE, 7233536, 7241727, +SNULL, 140109044183039, 140109044187135, +STORE, 140109044178944, 140109044183039, +STORE, 140109044183040, 140109044187135, +ERASE, 140109044150272, 140109044178943, +STORE, 20000768, 20135935, +STORE, 20000768, 20283391, +STORE, 140109042446336, 140109044129791, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140730853408768, 140737488351231, +SNULL, 140730853416959, 140737488351231, +STORE, 140730853408768, 140730853416959, +STORE, 140730853277696, 140730853416959, +STORE, 94865902977024, 94865905311743, +SNULL, 94865903190015, 94865905311743, +STORE, 94865902977024, 94865903190015, +STORE, 94865903190016, 94865905311743, +ERASE, 94865903190016, 94865905311743, +STORE, 94865905287168, 94865905299455, +STORE, 94865905299456, 94865905311743, +STORE, 139768865738752, 139768867991551, +SNULL, 139768865882111, 139768867991551, +STORE, 139768865738752, 139768865882111, +STORE, 139768865882112, 139768867991551, +ERASE, 139768865882112, 139768867991551, +STORE, 139768867979264, 139768867987455, +STORE, 139768867987456, 139768867991551, +STORE, 140730853957632, 140730853961727, +STORE, 140730853945344, 140730853957631, +STORE, 139768867950592, 139768867979263, +STORE, 139768867942400, 139768867950591, +STORE, 139768863625216, 139768865738751, +SNULL, 139768863625216, 139768863637503, +STORE, 139768863637504, 139768865738751, +STORE, 139768863625216, 139768863637503, +SNULL, 139768865730559, 139768865738751, +STORE, 139768863637504, 139768865730559, +STORE, 139768865730560, 139768865738751, +ERASE, 139768865730560, 139768865738751, +STORE, 139768865730560, 139768865738751, +STORE, 139768859828224, 139768863625215, +SNULL, 139768859828224, 139768861487103, +STORE, 139768861487104, 139768863625215, +STORE, 139768859828224, 139768861487103, +SNULL, 139768863584255, 139768863625215, +STORE, 139768861487104, 139768863584255, +STORE, 139768863584256, 139768863625215, +SNULL, 139768863584256, 139768863608831, +STORE, 139768863608832, 139768863625215, +STORE, 139768863584256, 139768863608831, +ERASE, 139768863584256, 139768863608831, +STORE, 139768863584256, 139768863608831, +ERASE, 139768863608832, 139768863625215, +STORE, 139768863608832, 139768863625215, +STORE, 139768867934208, 139768867950591, +SNULL, 139768863600639, 139768863608831, +STORE, 139768863584256, 139768863600639, +STORE, 139768863600640, 139768863608831, +SNULL, 139768865734655, 139768865738751, +STORE, 139768865730560, 139768865734655, +STORE, 139768865734656, 139768865738751, +SNULL, 94865905291263, 94865905299455, +STORE, 94865905287168, 94865905291263, +STORE, 94865905291264, 94865905299455, +SNULL, 139768867983359, 139768867987455, +STORE, 139768867979264, 139768867983359, +STORE, 139768867983360, 139768867987455, +ERASE, 139768867950592, 139768867979263, +STORE, 94865923670016, 94865923805183, +STORE, 139768866250752, 139768867934207, +STORE, 94865923670016, 94865923940351, +STORE, 94865923670016, 94865924075519, +STORE, 94865923670016, 94865924222975, +SNULL, 94865924210687, 94865924222975, +STORE, 94865923670016, 94865924210687, +STORE, 94865924210688, 94865924222975, +ERASE, 94865924210688, 94865924222975, +STORE, 94865923670016, 94865924349951, +STORE, 94865923670016, 94865924493311, +STORE, 94865923670016, 94865924640767, +SNULL, 94865924603903, 94865924640767, +STORE, 94865923670016, 94865924603903, +STORE, 94865924603904, 94865924640767, +ERASE, 94865924603904, 94865924640767, +STORE, 94865923670016, 94865924747263, +STORE, 94865923670016, 94865924898815, +SNULL, 94865924874239, 94865924898815, +STORE, 94865923670016, 94865924874239, +STORE, 94865924874240, 94865924898815, +ERASE, 94865924874240, 94865924898815, +STORE, 94865923670016, 94865925025791, +SNULL, 94865925013503, 94865925025791, +STORE, 94865923670016, 94865925013503, +STORE, 94865925013504, 94865925025791, +ERASE, 94865925013504, 94865925025791, +SNULL, 94865924988927, 94865925013503, +STORE, 94865923670016, 94865924988927, +STORE, 94865924988928, 94865925013503, +ERASE, 94865924988928, 94865925013503, +STORE, 94865923670016, 94865925152767, +SNULL, 94865925136383, 94865925152767, +STORE, 94865923670016, 94865925136383, +STORE, 94865925136384, 94865925152767, +ERASE, 94865925136384, 94865925152767, +STORE, 94865923670016, 94865925292031, +SNULL, 94865925279743, 94865925292031, +STORE, 94865923670016, 94865925279743, +STORE, 94865925279744, 94865925292031, +ERASE, 94865925279744, 94865925292031, +SNULL, 94865925255167, 94865925279743, +STORE, 94865923670016, 94865925255167, +STORE, 94865925255168, 94865925279743, +ERASE, 94865925255168, 94865925279743, +STORE, 94865923670016, 94865925406719, +SNULL, 94865925394431, 94865925406719, +STORE, 94865923670016, 94865925394431, +STORE, 94865925394432, 94865925406719, +ERASE, 94865925394432, 94865925406719, +STORE, 94865923670016, 94865925545983, +SNULL, 94865925533695, 94865925545983, +STORE, 94865923670016, 94865925533695, +STORE, 94865925533696, 94865925545983, +ERASE, 94865925533696, 94865925545983, +SNULL, 94865925492735, 94865925533695, +STORE, 94865923670016, 94865925492735, +STORE, 94865925492736, 94865925533695, +ERASE, 94865925492736, 94865925533695, +STORE, 94865923670016, 94865925627903, +SNULL, 94865925599231, 94865925627903, +STORE, 94865923670016, 94865925599231, +STORE, 94865925599232, 94865925627903, +ERASE, 94865925599232, 94865925627903, +STORE, 94865923670016, 94865925738495, +SNULL, 94865925726207, 94865925738495, +STORE, 94865923670016, 94865925726207, +STORE, 94865925726208, 94865925738495, +ERASE, 94865925726208, 94865925738495, +STORE, 94865923670016, 94865925877759, +SNULL, 94865925865471, 94865925877759, +STORE, 94865923670016, 94865925865471, +STORE, 94865925865472, 94865925877759, +ERASE, 94865925865472, 94865925877759, +STORE, 94865923670016, 94865926021119, +SNULL, 94865926008831, 94865926021119, +STORE, 94865923670016, 94865926008831, +STORE, 94865926008832, 94865926021119, +ERASE, 94865926008832, 94865926021119, +SNULL, 94865925971967, 94865926008831, +STORE, 94865923670016, 94865925971967, +STORE, 94865925971968, 94865926008831, +ERASE, 94865925971968, 94865926008831, +STORE, 94865923670016, 94865926115327, +STORE, 94865923670016, 94865926254591, +SNULL, 94865926246399, 94865926254591, +STORE, 94865923670016, 94865926246399, +STORE, 94865926246400, 94865926254591, +ERASE, 94865926246400, 94865926254591, +STORE, 94865923670016, 94865926385663, +STORE, 94865923670016, 94865926537215, +STORE, 94865923670016, 94865926672383, +STORE, 94865923670016, 94865926815743, +STORE, 94865923670016, 94865926955007, +STORE, 94865923670016, 94865927094271, +STORE, 94865923670016, 94865927233535, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140731148435456, 140737488351231, +SNULL, 140731148443647, 140737488351231, +STORE, 140731148435456, 140731148443647, +STORE, 140731148304384, 140731148443647, +STORE, 94090775400448, 94090777735167, +SNULL, 94090775613439, 94090777735167, +STORE, 94090775400448, 94090775613439, +STORE, 94090775613440, 94090777735167, +ERASE, 94090775613440, 94090777735167, +STORE, 94090777710592, 94090777722879, +STORE, 94090777722880, 94090777735167, +STORE, 140301090283520, 140301092536319, +SNULL, 140301090426879, 140301092536319, +STORE, 140301090283520, 140301090426879, +STORE, 140301090426880, 140301092536319, +ERASE, 140301090426880, 140301092536319, +STORE, 140301092524032, 140301092532223, +STORE, 140301092532224, 140301092536319, +STORE, 140731148570624, 140731148574719, +STORE, 140731148558336, 140731148570623, +STORE, 140301092495360, 140301092524031, +STORE, 140301092487168, 140301092495359, +STORE, 140301088169984, 140301090283519, +SNULL, 140301088169984, 140301088182271, +STORE, 140301088182272, 140301090283519, +STORE, 140301088169984, 140301088182271, +SNULL, 140301090275327, 140301090283519, +STORE, 140301088182272, 140301090275327, +STORE, 140301090275328, 140301090283519, +ERASE, 140301090275328, 140301090283519, +STORE, 140301090275328, 140301090283519, +STORE, 140301084372992, 140301088169983, +SNULL, 140301084372992, 140301086031871, +STORE, 140301086031872, 140301088169983, +STORE, 140301084372992, 140301086031871, +SNULL, 140301088129023, 140301088169983, +STORE, 140301086031872, 140301088129023, +STORE, 140301088129024, 140301088169983, +SNULL, 140301088129024, 140301088153599, +STORE, 140301088153600, 140301088169983, +STORE, 140301088129024, 140301088153599, +ERASE, 140301088129024, 140301088153599, +STORE, 140301088129024, 140301088153599, +ERASE, 140301088153600, 140301088169983, +STORE, 140301088153600, 140301088169983, +STORE, 140301092478976, 140301092495359, +SNULL, 140301088145407, 140301088153599, +STORE, 140301088129024, 140301088145407, +STORE, 140301088145408, 140301088153599, +SNULL, 140301090279423, 140301090283519, +STORE, 140301090275328, 140301090279423, +STORE, 140301090279424, 140301090283519, +SNULL, 94090777714687, 94090777722879, +STORE, 94090777710592, 94090777714687, +STORE, 94090777714688, 94090777722879, +SNULL, 140301092528127, 140301092532223, +STORE, 140301092524032, 140301092528127, +STORE, 140301092528128, 140301092532223, +ERASE, 140301092495360, 140301092524031, +STORE, 94090794590208, 94090794725375, +STORE, 140301090795520, 140301092478975, +STORE, 94090794590208, 94090794860543, +STORE, 94090794590208, 94090794995711, +STORE, 94090794590208, 94090795163647, +SNULL, 94090795139071, 94090795163647, +STORE, 94090794590208, 94090795139071, +STORE, 94090795139072, 94090795163647, +ERASE, 94090795139072, 94090795163647, +STORE, 94090794590208, 94090795278335, +STORE, 94090794590208, 94090795425791, +SNULL, 94090795388927, 94090795425791, +STORE, 94090794590208, 94090795388927, +STORE, 94090795388928, 94090795425791, +ERASE, 94090795388928, 94090795425791, +STORE, 94090794590208, 94090795528191, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140733084430336, 140737488351231, +SNULL, 140733084438527, 140737488351231, +STORE, 140733084430336, 140733084438527, +STORE, 140733084299264, 140733084438527, +STORE, 94116169183232, 94116171517951, +SNULL, 94116169396223, 94116171517951, +STORE, 94116169183232, 94116169396223, +STORE, 94116169396224, 94116171517951, +ERASE, 94116169396224, 94116171517951, +STORE, 94116171493376, 94116171505663, +STORE, 94116171505664, 94116171517951, +STORE, 139772214128640, 139772216381439, +SNULL, 139772214271999, 139772216381439, +STORE, 139772214128640, 139772214271999, +STORE, 139772214272000, 139772216381439, +ERASE, 139772214272000, 139772216381439, +STORE, 139772216369152, 139772216377343, +STORE, 139772216377344, 139772216381439, +STORE, 140733085270016, 140733085274111, +STORE, 140733085257728, 140733085270015, +STORE, 139772216340480, 139772216369151, +STORE, 139772216332288, 139772216340479, +STORE, 139772212015104, 139772214128639, +SNULL, 139772212015104, 139772212027391, +STORE, 139772212027392, 139772214128639, +STORE, 139772212015104, 139772212027391, +SNULL, 139772214120447, 139772214128639, +STORE, 139772212027392, 139772214120447, +STORE, 139772214120448, 139772214128639, +ERASE, 139772214120448, 139772214128639, +STORE, 139772214120448, 139772214128639, +STORE, 139772208218112, 139772212015103, +SNULL, 139772208218112, 139772209876991, +STORE, 139772209876992, 139772212015103, +STORE, 139772208218112, 139772209876991, +SNULL, 139772211974143, 139772212015103, +STORE, 139772209876992, 139772211974143, +STORE, 139772211974144, 139772212015103, +SNULL, 139772211974144, 139772211998719, +STORE, 139772211998720, 139772212015103, +STORE, 139772211974144, 139772211998719, +ERASE, 139772211974144, 139772211998719, +STORE, 139772211974144, 139772211998719, +ERASE, 139772211998720, 139772212015103, +STORE, 139772211998720, 139772212015103, +STORE, 139772216324096, 139772216340479, +SNULL, 139772211990527, 139772211998719, +STORE, 139772211974144, 139772211990527, +STORE, 139772211990528, 139772211998719, +SNULL, 139772214124543, 139772214128639, +STORE, 139772214120448, 139772214124543, +STORE, 139772214124544, 139772214128639, +SNULL, 94116171497471, 94116171505663, +STORE, 94116171493376, 94116171497471, +STORE, 94116171497472, 94116171505663, +SNULL, 139772216373247, 139772216377343, +STORE, 139772216369152, 139772216373247, +STORE, 139772216373248, 139772216377343, +ERASE, 139772216340480, 139772216369151, +STORE, 94116199383040, 94116199518207, +STORE, 139772214640640, 139772216324095, +STORE, 94116199383040, 94116199653375, +STORE, 94116199383040, 94116199788543, +STORE, 140737488347136, 140737488351231, +STORE, 140726067826688, 140737488351231, +SNULL, 140726067830783, 140737488351231, +STORE, 140726067826688, 140726067830783, +STORE, 140726067695616, 140726067830783, +STORE, 94535150673920, 94535152898047, +SNULL, 94535150784511, 94535152898047, +STORE, 94535150673920, 94535150784511, +STORE, 94535150784512, 94535152898047, +ERASE, 94535150784512, 94535152898047, +STORE, 94535152877568, 94535152889855, +STORE, 94535152889856, 94535152898047, +STORE, 140381257314304, 140381259567103, +SNULL, 140381257457663, 140381259567103, +STORE, 140381257314304, 140381257457663, +STORE, 140381257457664, 140381259567103, +ERASE, 140381257457664, 140381259567103, +STORE, 140381259554816, 140381259563007, +STORE, 140381259563008, 140381259567103, +STORE, 140726068060160, 140726068064255, +STORE, 140726068047872, 140726068060159, +STORE, 140381259526144, 140381259554815, +STORE, 140381259517952, 140381259526143, +STORE, 140381253517312, 140381257314303, +SNULL, 140381253517312, 140381255176191, +STORE, 140381255176192, 140381257314303, +STORE, 140381253517312, 140381255176191, +SNULL, 140381257273343, 140381257314303, +STORE, 140381255176192, 140381257273343, +STORE, 140381257273344, 140381257314303, +SNULL, 140381257273344, 140381257297919, +STORE, 140381257297920, 140381257314303, +STORE, 140381257273344, 140381257297919, +ERASE, 140381257273344, 140381257297919, +STORE, 140381257273344, 140381257297919, +ERASE, 140381257297920, 140381257314303, +STORE, 140381257297920, 140381257314303, +SNULL, 140381257289727, 140381257297919, +STORE, 140381257273344, 140381257289727, +STORE, 140381257289728, 140381257297919, +SNULL, 94535152885759, 94535152889855, +STORE, 94535152877568, 94535152885759, +STORE, 94535152885760, 94535152889855, +SNULL, 140381259558911, 140381259563007, +STORE, 140381259554816, 140381259558911, +STORE, 140381259558912, 140381259563007, +ERASE, 140381259526144, 140381259554815, +STORE, 94535186296832, 94535186431999, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140729189425152, 140737488351231, +SNULL, 140729189433343, 140737488351231, +STORE, 140729189425152, 140729189433343, +STORE, 140729189294080, 140729189433343, +STORE, 94428200128512, 94428202352639, +SNULL, 94428200239103, 94428202352639, +STORE, 94428200128512, 94428200239103, +STORE, 94428200239104, 94428202352639, +ERASE, 94428200239104, 94428202352639, +STORE, 94428202332160, 94428202344447, +STORE, 94428202344448, 94428202352639, +STORE, 139707216986112, 139707219238911, +SNULL, 139707217129471, 139707219238911, +STORE, 139707216986112, 139707217129471, +STORE, 139707217129472, 139707219238911, +ERASE, 139707217129472, 139707219238911, +STORE, 139707219226624, 139707219234815, +STORE, 139707219234816, 139707219238911, +STORE, 140729189785600, 140729189789695, +STORE, 140729189773312, 140729189785599, +STORE, 139707219197952, 139707219226623, +STORE, 139707219189760, 139707219197951, +STORE, 139707213189120, 139707216986111, +SNULL, 139707213189120, 139707214847999, +STORE, 139707214848000, 139707216986111, +STORE, 139707213189120, 139707214847999, +SNULL, 139707216945151, 139707216986111, +STORE, 139707214848000, 139707216945151, +STORE, 139707216945152, 139707216986111, +SNULL, 139707216945152, 139707216969727, +STORE, 139707216969728, 139707216986111, +STORE, 139707216945152, 139707216969727, +ERASE, 139707216945152, 139707216969727, +STORE, 139707216945152, 139707216969727, +ERASE, 139707216969728, 139707216986111, +STORE, 139707216969728, 139707216986111, +SNULL, 139707216961535, 139707216969727, +STORE, 139707216945152, 139707216961535, +STORE, 139707216961536, 139707216969727, +SNULL, 94428202340351, 94428202344447, +STORE, 94428202332160, 94428202340351, +STORE, 94428202340352, 94428202344447, +SNULL, 139707219230719, 139707219234815, +STORE, 139707219226624, 139707219230719, +STORE, 139707219230720, 139707219234815, +ERASE, 139707219197952, 139707219226623, +STORE, 94428208599040, 94428208734207, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140722000953344, 140737488351231, +SNULL, 140722000961535, 140737488351231, +STORE, 140722000953344, 140722000961535, +STORE, 140722000822272, 140722000961535, +STORE, 94636494757888, 94636496982015, +SNULL, 94636494868479, 94636496982015, +STORE, 94636494757888, 94636494868479, +STORE, 94636494868480, 94636496982015, +ERASE, 94636494868480, 94636496982015, +STORE, 94636496961536, 94636496973823, +STORE, 94636496973824, 94636496982015, +STORE, 140142275100672, 140142277353471, +SNULL, 140142275244031, 140142277353471, +STORE, 140142275100672, 140142275244031, +STORE, 140142275244032, 140142277353471, +ERASE, 140142275244032, 140142277353471, +STORE, 140142277341184, 140142277349375, +STORE, 140142277349376, 140142277353471, +STORE, 140722002747392, 140722002751487, +STORE, 140722002735104, 140722002747391, +STORE, 140142277312512, 140142277341183, +STORE, 140142277304320, 140142277312511, +STORE, 140142271303680, 140142275100671, +SNULL, 140142271303680, 140142272962559, +STORE, 140142272962560, 140142275100671, +STORE, 140142271303680, 140142272962559, +SNULL, 140142275059711, 140142275100671, +STORE, 140142272962560, 140142275059711, +STORE, 140142275059712, 140142275100671, +SNULL, 140142275059712, 140142275084287, +STORE, 140142275084288, 140142275100671, +STORE, 140142275059712, 140142275084287, +ERASE, 140142275059712, 140142275084287, +STORE, 140142275059712, 140142275084287, +ERASE, 140142275084288, 140142275100671, +STORE, 140142275084288, 140142275100671, +SNULL, 140142275076095, 140142275084287, +STORE, 140142275059712, 140142275076095, +STORE, 140142275076096, 140142275084287, +SNULL, 94636496969727, 94636496973823, +STORE, 94636496961536, 94636496969727, +STORE, 94636496969728, 94636496973823, +SNULL, 140142277345279, 140142277349375, +STORE, 140142277341184, 140142277345279, +STORE, 140142277345280, 140142277349375, +ERASE, 140142277312512, 140142277341183, +STORE, 94636516286464, 94636516421631, +STORE, 94071103692800, 94071103905791, +STORE, 94071106002944, 94071106007039, +STORE, 94071106007040, 94071106015231, +STORE, 94071106015232, 94071106027519, +STORE, 94071138521088, 94071140368383, +STORE, 140145668190208, 140145669849087, +STORE, 140145669849088, 140145671946239, +STORE, 140145671946240, 140145671962623, +STORE, 140145671962624, 140145671970815, +STORE, 140145671970816, 140145671987199, +STORE, 140145671987200, 140145671999487, +STORE, 140145671999488, 140145674092543, +STORE, 140145674092544, 140145674096639, +STORE, 140145674096640, 140145674100735, +STORE, 140145674100736, 140145674244095, +STORE, 140145674612736, 140145676296191, +STORE, 140145676296192, 140145676312575, +STORE, 140145676341248, 140145676345343, +STORE, 140145676345344, 140145676349439, +STORE, 140145676349440, 140145676353535, +STORE, 140734927740928, 140734927880191, +STORE, 140734928842752, 140734928855039, +STORE, 140734928855040, 140734928859135, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140722342535168, 140737488351231, +SNULL, 140722342543359, 140737488351231, +STORE, 140722342535168, 140722342543359, +STORE, 140722342404096, 140722342543359, +STORE, 94399699714048, 94399702048767, +SNULL, 94399699927039, 94399702048767, +STORE, 94399699714048, 94399699927039, +STORE, 94399699927040, 94399702048767, +ERASE, 94399699927040, 94399702048767, +STORE, 94399702024192, 94399702036479, +STORE, 94399702036480, 94399702048767, +STORE, 139811024748544, 139811027001343, +SNULL, 139811024891903, 139811027001343, +STORE, 139811024748544, 139811024891903, +STORE, 139811024891904, 139811027001343, +ERASE, 139811024891904, 139811027001343, +STORE, 139811026989056, 139811026997247, +STORE, 139811026997248, 139811027001343, +STORE, 140722342707200, 140722342711295, +STORE, 140722342694912, 140722342707199, +STORE, 139811026960384, 139811026989055, +STORE, 139811026952192, 139811026960383, +STORE, 139811022635008, 139811024748543, +SNULL, 139811022635008, 139811022647295, +STORE, 139811022647296, 139811024748543, +STORE, 139811022635008, 139811022647295, +SNULL, 139811024740351, 139811024748543, +STORE, 139811022647296, 139811024740351, +STORE, 139811024740352, 139811024748543, +ERASE, 139811024740352, 139811024748543, +STORE, 139811024740352, 139811024748543, +STORE, 139811018838016, 139811022635007, +SNULL, 139811018838016, 139811020496895, +STORE, 139811020496896, 139811022635007, +STORE, 139811018838016, 139811020496895, +SNULL, 139811022594047, 139811022635007, +STORE, 139811020496896, 139811022594047, +STORE, 139811022594048, 139811022635007, +SNULL, 139811022594048, 139811022618623, +STORE, 139811022618624, 139811022635007, +STORE, 139811022594048, 139811022618623, +ERASE, 139811022594048, 139811022618623, +STORE, 139811022594048, 139811022618623, +ERASE, 139811022618624, 139811022635007, +STORE, 139811022618624, 139811022635007, +STORE, 139811026944000, 139811026960383, +SNULL, 139811022610431, 139811022618623, +STORE, 139811022594048, 139811022610431, +STORE, 139811022610432, 139811022618623, +SNULL, 139811024744447, 139811024748543, +STORE, 139811024740352, 139811024744447, +STORE, 139811024744448, 139811024748543, +SNULL, 94399702028287, 94399702036479, +STORE, 94399702024192, 94399702028287, +STORE, 94399702028288, 94399702036479, +SNULL, 139811026993151, 139811026997247, +STORE, 139811026989056, 139811026993151, +STORE, 139811026993152, 139811026997247, +ERASE, 139811026960384, 139811026989055, +STORE, 94399723880448, 94399724015615, +STORE, 139811025260544, 139811026943999, +STORE, 94399723880448, 94399724150783, +STORE, 94399723880448, 94399724285951, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140735364939776, 140737488351231, +SNULL, 140735364947967, 140737488351231, +STORE, 140735364939776, 140735364947967, +STORE, 140735364808704, 140735364947967, +STORE, 94421528674304, 94421531009023, +SNULL, 94421528887295, 94421531009023, +STORE, 94421528674304, 94421528887295, +STORE, 94421528887296, 94421531009023, +ERASE, 94421528887296, 94421531009023, +STORE, 94421530984448, 94421530996735, +STORE, 94421530996736, 94421531009023, +STORE, 140162004742144, 140162006994943, +SNULL, 140162004885503, 140162006994943, +STORE, 140162004742144, 140162004885503, +STORE, 140162004885504, 140162006994943, +ERASE, 140162004885504, 140162006994943, +STORE, 140162006982656, 140162006990847, +STORE, 140162006990848, 140162006994943, +STORE, 140735365402624, 140735365406719, +STORE, 140735365390336, 140735365402623, +STORE, 140162006953984, 140162006982655, +STORE, 140162006945792, 140162006953983, +STORE, 140162002628608, 140162004742143, +SNULL, 140162002628608, 140162002640895, +STORE, 140162002640896, 140162004742143, +STORE, 140162002628608, 140162002640895, +SNULL, 140162004733951, 140162004742143, +STORE, 140162002640896, 140162004733951, +STORE, 140162004733952, 140162004742143, +ERASE, 140162004733952, 140162004742143, +STORE, 140162004733952, 140162004742143, +STORE, 140161998831616, 140162002628607, +SNULL, 140161998831616, 140162000490495, +STORE, 140162000490496, 140162002628607, +STORE, 140161998831616, 140162000490495, +SNULL, 140162002587647, 140162002628607, +STORE, 140162000490496, 140162002587647, +STORE, 140162002587648, 140162002628607, +SNULL, 140162002587648, 140162002612223, +STORE, 140162002612224, 140162002628607, +STORE, 140162002587648, 140162002612223, +ERASE, 140162002587648, 140162002612223, +STORE, 140162002587648, 140162002612223, +ERASE, 140162002612224, 140162002628607, +STORE, 140162002612224, 140162002628607, +STORE, 140162006937600, 140162006953983, +SNULL, 140162002604031, 140162002612223, +STORE, 140162002587648, 140162002604031, +STORE, 140162002604032, 140162002612223, +SNULL, 140162004738047, 140162004742143, +STORE, 140162004733952, 140162004738047, +STORE, 140162004738048, 140162004742143, +SNULL, 94421530988543, 94421530996735, +STORE, 94421530984448, 94421530988543, +STORE, 94421530988544, 94421530996735, +SNULL, 140162006986751, 140162006990847, +STORE, 140162006982656, 140162006986751, +STORE, 140162006986752, 140162006990847, +ERASE, 140162006953984, 140162006982655, +STORE, 94421551697920, 94421551833087, +STORE, 140162005254144, 140162006937599, +STORE, 94421551697920, 94421551968255, +STORE, 94421551697920, 94421552103423, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140733498486784, 140737488351231, +SNULL, 140733498494975, 140737488351231, +STORE, 140733498486784, 140733498494975, +STORE, 140733498355712, 140733498494975, +STORE, 94567985836032, 94567988170751, +SNULL, 94567986049023, 94567988170751, +STORE, 94567985836032, 94567986049023, +STORE, 94567986049024, 94567988170751, +ERASE, 94567986049024, 94567988170751, +STORE, 94567988146176, 94567988158463, +STORE, 94567988158464, 94567988170751, +STORE, 139634278572032, 139634280824831, +SNULL, 139634278715391, 139634280824831, +STORE, 139634278572032, 139634278715391, +STORE, 139634278715392, 139634280824831, +ERASE, 139634278715392, 139634280824831, +STORE, 139634280812544, 139634280820735, +STORE, 139634280820736, 139634280824831, +STORE, 140733498544128, 140733498548223, +STORE, 140733498531840, 140733498544127, +STORE, 139634280783872, 139634280812543, +STORE, 139634280775680, 139634280783871, +STORE, 139634276458496, 139634278572031, +SNULL, 139634276458496, 139634276470783, +STORE, 139634276470784, 139634278572031, +STORE, 139634276458496, 139634276470783, +SNULL, 139634278563839, 139634278572031, +STORE, 139634276470784, 139634278563839, +STORE, 139634278563840, 139634278572031, +ERASE, 139634278563840, 139634278572031, +STORE, 139634278563840, 139634278572031, +STORE, 139634272661504, 139634276458495, +SNULL, 139634272661504, 139634274320383, +STORE, 139634274320384, 139634276458495, +STORE, 139634272661504, 139634274320383, +SNULL, 139634276417535, 139634276458495, +STORE, 139634274320384, 139634276417535, +STORE, 139634276417536, 139634276458495, +SNULL, 139634276417536, 139634276442111, +STORE, 139634276442112, 139634276458495, +STORE, 139634276417536, 139634276442111, +ERASE, 139634276417536, 139634276442111, +STORE, 139634276417536, 139634276442111, +ERASE, 139634276442112, 139634276458495, +STORE, 139634276442112, 139634276458495, +STORE, 139634280767488, 139634280783871, +SNULL, 139634276433919, 139634276442111, +STORE, 139634276417536, 139634276433919, +STORE, 139634276433920, 139634276442111, +SNULL, 139634278567935, 139634278572031, +STORE, 139634278563840, 139634278567935, +STORE, 139634278567936, 139634278572031, +SNULL, 94567988150271, 94567988158463, +STORE, 94567988146176, 94567988150271, +STORE, 94567988150272, 94567988158463, +SNULL, 139634280816639, 139634280820735, +STORE, 139634280812544, 139634280816639, +STORE, 139634280816640, 139634280820735, +ERASE, 139634280783872, 139634280812543, +STORE, 94567996379136, 94567996514303, +STORE, 139634279084032, 139634280767487, +STORE, 94567996379136, 94567996649471, +STORE, 94567996379136, 94567996784639, +STORE, 94567996379136, 94567996960767, +SNULL, 94567996932095, 94567996960767, +STORE, 94567996379136, 94567996932095, +STORE, 94567996932096, 94567996960767, +ERASE, 94567996932096, 94567996960767, +STORE, 94567996379136, 94567997071359, +STORE, 94567996379136, 94567997206527, +SNULL, 94567997186047, 94567997206527, +STORE, 94567996379136, 94567997186047, +STORE, 94567997186048, 94567997206527, +ERASE, 94567997186048, 94567997206527, +STORE, 94567996379136, 94567997358079, +STORE, 94567996379136, 94567997493247, +SNULL, 94567997476863, 94567997493247, +STORE, 94567996379136, 94567997476863, +STORE, 94567997476864, 94567997493247, +ERASE, 94567997476864, 94567997493247, +STORE, 94567996379136, 94567997612031, +STORE, 94567996379136, 94567997767679, +SNULL, 94567997739007, 94567997767679, +STORE, 94567996379136, 94567997739007, +STORE, 94567997739008, 94567997767679, +ERASE, 94567997739008, 94567997767679, +SNULL, 94567997698047, 94567997739007, +STORE, 94567996379136, 94567997698047, +STORE, 94567997698048, 94567997739007, +ERASE, 94567997698048, 94567997739007, +STORE, 94567996379136, 94567997853695, +STORE, 94567996379136, 94567997988863, +STORE, 94567996379136, 94567998132223, +STORE, 94567996379136, 94567998275583, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140723667759104, 140737488351231, +SNULL, 140723667767295, 140737488351231, +STORE, 140723667759104, 140723667767295, +STORE, 140723667628032, 140723667767295, +STORE, 94231598800896, 94231601135615, +SNULL, 94231599013887, 94231601135615, +STORE, 94231598800896, 94231599013887, +STORE, 94231599013888, 94231601135615, +ERASE, 94231599013888, 94231601135615, +STORE, 94231601111040, 94231601123327, +STORE, 94231601123328, 94231601135615, +STORE, 140269472649216, 140269474902015, +SNULL, 140269472792575, 140269474902015, +STORE, 140269472649216, 140269472792575, +STORE, 140269472792576, 140269474902015, +ERASE, 140269472792576, 140269474902015, +STORE, 140269474889728, 140269474897919, +STORE, 140269474897920, 140269474902015, +STORE, 140723667836928, 140723667841023, +STORE, 140723667824640, 140723667836927, +STORE, 140269474861056, 140269474889727, +STORE, 140269474852864, 140269474861055, +STORE, 140269470535680, 140269472649215, +SNULL, 140269470535680, 140269470547967, +STORE, 140269470547968, 140269472649215, +STORE, 140269470535680, 140269470547967, +SNULL, 140269472641023, 140269472649215, +STORE, 140269470547968, 140269472641023, +STORE, 140269472641024, 140269472649215, +ERASE, 140269472641024, 140269472649215, +STORE, 140269472641024, 140269472649215, +STORE, 140269466738688, 140269470535679, +SNULL, 140269466738688, 140269468397567, +STORE, 140269468397568, 140269470535679, +STORE, 140269466738688, 140269468397567, +SNULL, 140269470494719, 140269470535679, +STORE, 140269468397568, 140269470494719, +STORE, 140269470494720, 140269470535679, +SNULL, 140269470494720, 140269470519295, +STORE, 140269470519296, 140269470535679, +STORE, 140269470494720, 140269470519295, +ERASE, 140269470494720, 140269470519295, +STORE, 140269470494720, 140269470519295, +ERASE, 140269470519296, 140269470535679, +STORE, 140269470519296, 140269470535679, +STORE, 140269474844672, 140269474861055, +SNULL, 140269470511103, 140269470519295, +STORE, 140269470494720, 140269470511103, +STORE, 140269470511104, 140269470519295, +SNULL, 140269472645119, 140269472649215, +STORE, 140269472641024, 140269472645119, +STORE, 140269472645120, 140269472649215, +SNULL, 94231601115135, 94231601123327, +STORE, 94231601111040, 94231601115135, +STORE, 94231601115136, 94231601123327, +SNULL, 140269474893823, 140269474897919, +STORE, 140269474889728, 140269474893823, +STORE, 140269474893824, 140269474897919, +ERASE, 140269474861056, 140269474889727, +STORE, 94231626592256, 94231626727423, +STORE, 140269473161216, 140269474844671, +STORE, 94231626592256, 94231626862591, +STORE, 94231626592256, 94231626997759, +STORE, 94327178862592, 94327179075583, +STORE, 94327181172736, 94327181176831, +STORE, 94327181176832, 94327181185023, +STORE, 94327181185024, 94327181197311, +STORE, 94327185715200, 94327186685951, +STORE, 140172071755776, 140172073414655, +STORE, 140172073414656, 140172075511807, +STORE, 140172075511808, 140172075528191, +STORE, 140172075528192, 140172075536383, +STORE, 140172075536384, 140172075552767, +STORE, 140172075552768, 140172075565055, +STORE, 140172075565056, 140172077658111, +STORE, 140172077658112, 140172077662207, +STORE, 140172077662208, 140172077666303, +STORE, 140172077666304, 140172077809663, +STORE, 140172078178304, 140172079861759, +STORE, 140172079861760, 140172079878143, +STORE, 140172079878144, 140172079906815, +STORE, 140172079906816, 140172079910911, +STORE, 140172079910912, 140172079915007, +STORE, 140172079915008, 140172079919103, +STORE, 140720358359040, 140720358494207, +STORE, 140720358498304, 140720358510591, +STORE, 140720358510592, 140720358514687, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140722548621312, 140737488351231, +SNULL, 140722548629503, 140737488351231, +STORE, 140722548621312, 140722548629503, +STORE, 140722548490240, 140722548629503, +STORE, 93949289504768, 93949291728895, +SNULL, 93949289615359, 93949291728895, +STORE, 93949289504768, 93949289615359, +STORE, 93949289615360, 93949291728895, +ERASE, 93949289615360, 93949291728895, +STORE, 93949291708416, 93949291720703, +STORE, 93949291720704, 93949291728895, +STORE, 140305861902336, 140305864155135, +SNULL, 140305862045695, 140305864155135, +STORE, 140305861902336, 140305862045695, +STORE, 140305862045696, 140305864155135, +ERASE, 140305862045696, 140305864155135, +STORE, 140305864142848, 140305864151039, +STORE, 140305864151040, 140305864155135, +STORE, 140722549821440, 140722549825535, +STORE, 140722549809152, 140722549821439, +STORE, 140305864114176, 140305864142847, +STORE, 140305864105984, 140305864114175, +STORE, 140305858105344, 140305861902335, +SNULL, 140305858105344, 140305859764223, +STORE, 140305859764224, 140305861902335, +STORE, 140305858105344, 140305859764223, +SNULL, 140305861861375, 140305861902335, +STORE, 140305859764224, 140305861861375, +STORE, 140305861861376, 140305861902335, +SNULL, 140305861861376, 140305861885951, +STORE, 140305861885952, 140305861902335, +STORE, 140305861861376, 140305861885951, +ERASE, 140305861861376, 140305861885951, +STORE, 140305861861376, 140305861885951, +ERASE, 140305861885952, 140305861902335, +STORE, 140305861885952, 140305861902335, +SNULL, 140305861877759, 140305861885951, +STORE, 140305861861376, 140305861877759, +STORE, 140305861877760, 140305861885951, +SNULL, 93949291716607, 93949291720703, +STORE, 93949291708416, 93949291716607, +STORE, 93949291716608, 93949291720703, +SNULL, 140305864146943, 140305864151039, +STORE, 140305864142848, 140305864146943, +STORE, 140305864146944, 140305864151039, +ERASE, 140305864114176, 140305864142847, +STORE, 93949324136448, 93949324271615, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140725754908672, 140737488351231, +SNULL, 140725754916863, 140737488351231, +STORE, 140725754908672, 140725754916863, +STORE, 140725754777600, 140725754916863, +STORE, 94831184375808, 94831186599935, +SNULL, 94831184486399, 94831186599935, +STORE, 94831184375808, 94831184486399, +STORE, 94831184486400, 94831186599935, +ERASE, 94831184486400, 94831186599935, +STORE, 94831186579456, 94831186591743, +STORE, 94831186591744, 94831186599935, +STORE, 140605482479616, 140605484732415, +SNULL, 140605482622975, 140605484732415, +STORE, 140605482479616, 140605482622975, +STORE, 140605482622976, 140605484732415, +ERASE, 140605482622976, 140605484732415, +STORE, 140605484720128, 140605484728319, +STORE, 140605484728320, 140605484732415, +STORE, 140725755670528, 140725755674623, +STORE, 140725755658240, 140725755670527, +STORE, 140605484691456, 140605484720127, +STORE, 140605484683264, 140605484691455, +STORE, 140605478682624, 140605482479615, +SNULL, 140605478682624, 140605480341503, +STORE, 140605480341504, 140605482479615, +STORE, 140605478682624, 140605480341503, +SNULL, 140605482438655, 140605482479615, +STORE, 140605480341504, 140605482438655, +STORE, 140605482438656, 140605482479615, +SNULL, 140605482438656, 140605482463231, +STORE, 140605482463232, 140605482479615, +STORE, 140605482438656, 140605482463231, +ERASE, 140605482438656, 140605482463231, +STORE, 140605482438656, 140605482463231, +ERASE, 140605482463232, 140605482479615, +STORE, 140605482463232, 140605482479615, +SNULL, 140605482455039, 140605482463231, +STORE, 140605482438656, 140605482455039, +STORE, 140605482455040, 140605482463231, +SNULL, 94831186587647, 94831186591743, +STORE, 94831186579456, 94831186587647, +STORE, 94831186587648, 94831186591743, +SNULL, 140605484724223, 140605484728319, +STORE, 140605484720128, 140605484724223, +STORE, 140605484724224, 140605484728319, +ERASE, 140605484691456, 140605484720127, +STORE, 94831217156096, 94831217291263, +STORE, 94327178862592, 94327179075583, +STORE, 94327181172736, 94327181176831, +STORE, 94327181176832, 94327181185023, +STORE, 94327181185024, 94327181197311, +STORE, 94327185715200, 94327186685951, +STORE, 140172071755776, 140172073414655, +STORE, 140172073414656, 140172075511807, +STORE, 140172075511808, 140172075528191, +STORE, 140172075528192, 140172075536383, +STORE, 140172075536384, 140172075552767, +STORE, 140172075552768, 140172075565055, +STORE, 140172075565056, 140172077658111, +STORE, 140172077658112, 140172077662207, +STORE, 140172077662208, 140172077666303, +STORE, 140172077666304, 140172077809663, +STORE, 140172078178304, 140172079861759, +STORE, 140172079861760, 140172079878143, +STORE, 140172079878144, 140172079906815, +STORE, 140172079906816, 140172079910911, +STORE, 140172079910912, 140172079915007, +STORE, 140172079915008, 140172079919103, +STORE, 140720358359040, 140720358494207, +STORE, 140720358498304, 140720358510591, +STORE, 140720358510592, 140720358514687, +STORE, 140737488347136, 140737488351231, +STORE, 140737488343040, 140737488351231, +STORE, 140737488338944, 140737488351231, +STORE, 140734529933312, 140737488351231, +SNULL, 140734529945599, 140737488351231, +STORE, 140734529933312, 140734529945599, +STORE, 140734529802240, 140734529945599, +STORE, 4194304, 26279935, +STORE, 28372992, 28454911, +STORE, 28454912, 29806591, +STORE, 140249744060416, 140249746313215, +SNULL, 140249744203775, 140249746313215, +STORE, 140249744060416, 140249744203775, +STORE, 140249744203776, 140249746313215, +ERASE, 140249744203776, 140249746313215, +STORE, 140249746300928, 140249746309119, +STORE, 140249746309120, 140249746313215, +STORE, 140734530174976, 140734530179071, +STORE, 140734530162688, 140734530174975, +STORE, 140249746272256, 140249746300927, +STORE, 140249746264064, 140249746272255, +STORE, 140249740226560, 140249744060415, +SNULL, 140249740226560, 140249741934591, +STORE, 140249741934592, 140249744060415, +STORE, 140249740226560, 140249741934591, +SNULL, 140249744027647, 140249744060415, +STORE, 140249741934592, 140249744027647, +STORE, 140249744027648, 140249744060415, +ERASE, 140249744027648, 140249744060415, +STORE, 140249744027648, 140249744060415, +STORE, 140249738031104, 140249740226559, +SNULL, 140249738031104, 140249738125311, +STORE, 140249738125312, 140249740226559, +STORE, 140249738031104, 140249738125311, +SNULL, 140249740218367, 140249740226559, +STORE, 140249738125312, 140249740218367, +STORE, 140249740218368, 140249740226559, +ERASE, 140249740218368, 140249740226559, +STORE, 140249740218368, 140249740226559, +STORE, 140249735512064, 140249738031103, +SNULL, 140249735512064, 140249735925759, +STORE, 140249735925760, 140249738031103, +STORE, 140249735512064, 140249735925759, +SNULL, 140249738018815, 140249738031103, +STORE, 140249735925760, 140249738018815, +STORE, 140249738018816, 140249738031103, +ERASE, 140249738018816, 140249738031103, +STORE, 140249738018816, 140249738031103, +STORE, 140249732878336, 140249735512063, +SNULL, 140249732878336, 140249733406719, +STORE, 140249733406720, 140249735512063, +STORE, 140249732878336, 140249733406719, +SNULL, 140249735503871, 140249735512063, +STORE, 140249733406720, 140249735503871, +STORE, 140249735503872, 140249735512063, +ERASE, 140249735503872, 140249735512063, +STORE, 140249735503872, 140249735512063, +STORE, 140249730764800, 140249732878335, +SNULL, 140249730764800, 140249730777087, +STORE, 140249730777088, 140249732878335, +STORE, 140249730764800, 140249730777087, +SNULL, 140249732870143, 140249732878335, +STORE, 140249730777088, 140249732870143, +STORE, 140249732870144, 140249732878335, +ERASE, 140249732870144, 140249732878335, +STORE, 140249732870144, 140249732878335, +STORE, 140249728561152, 140249730764799, +SNULL, 140249728561152, 140249728663551, +STORE, 140249728663552, 140249730764799, +STORE, 140249728561152, 140249728663551, +SNULL, 140249730756607, 140249730764799, +STORE, 140249728663552, 140249730756607, +STORE, 140249730756608, 140249730764799, +ERASE, 140249730756608, 140249730764799, +STORE, 140249730756608, 140249730764799, +STORE, 140249746255872, 140249746272255, +STORE, 140249725399040, 140249728561151, +SNULL, 140249725399040, 140249726459903, +STORE, 140249726459904, 140249728561151, +STORE, 140249725399040, 140249726459903, +SNULL, 140249728552959, 140249728561151, +STORE, 140249726459904, 140249728552959, +STORE, 140249728552960, 140249728561151, +ERASE, 140249728552960, 140249728561151, +STORE, 140249728552960, 140249728561151, +STORE, 140249721602048, 140249725399039, +SNULL, 140249721602048, 140249723260927, +STORE, 140249723260928, 140249725399039, +STORE, 140249721602048, 140249723260927, +SNULL, 140249725358079, 140249725399039, +STORE, 140249723260928, 140249725358079, +STORE, 140249725358080, 140249725399039, +SNULL, 140249725358080, 140249725382655, +STORE, 140249725382656, 140249725399039, +STORE, 140249725358080, 140249725382655, +ERASE, 140249725358080, 140249725382655, +STORE, 140249725358080, 140249725382655, +ERASE, 140249725382656, 140249725399039, +STORE, 140249725382656, 140249725399039, +STORE, 140249746243584, 140249746272255, +SNULL, 140249725374463, 140249725382655, +STORE, 140249725358080, 140249725374463, +STORE, 140249725374464, 140249725382655, +SNULL, 140249728557055, 140249728561151, +STORE, 140249728552960, 140249728557055, +STORE, 140249728557056, 140249728561151, +SNULL, 140249730760703, 140249730764799, +STORE, 140249730756608, 140249730760703, +STORE, 140249730760704, 140249730764799, +SNULL, 140249732874239, 140249732878335, +STORE, 140249732870144, 140249732874239, +STORE, 140249732874240, 140249732878335, +SNULL, 140249735507967, 140249735512063, +STORE, 140249735503872, 140249735507967, +STORE, 140249735507968, 140249735512063, +SNULL, 140249738027007, 140249738031103, +STORE, 140249738018816, 140249738027007, +STORE, 140249738027008, 140249738031103, +SNULL, 140249740222463, 140249740226559, +STORE, 140249740218368, 140249740222463, +STORE, 140249740222464, 140249740226559, +SNULL, 140249744031743, 140249744060415, +STORE, 140249744027648, 140249744031743, +STORE, 140249744031744, 140249744060415, +SNULL, 28405759, 28454911, +STORE, 28372992, 28405759, +STORE, 28405760, 28454911, +SNULL, 140249746305023, 140249746309119, +STORE, 140249746300928, 140249746305023, +STORE, 140249746305024, 140249746309119, +ERASE, 140249746272256, 140249746300927, +STORE, 33853440, 33988607, +STORE, 140249744560128, 140249746243583, +STORE, 140249746296832, 140249746300927, +STORE, 140249744424960, 140249744560127, +STORE, 33853440, 34131967, +STORE, 140249719504896, 140249721602047, +STORE, 140249746288640, 140249746300927, +STORE, 140249746280448, 140249746300927, +STORE, 140249746243584, 140249746280447, +STORE, 140249744408576, 140249744560127, +STORE, 33853440, 34267135, +STORE, 33853440, 34422783, +STORE, 140249744400384, 140249744560127, +STORE, 140249744392192, 140249744560127, +STORE, 33853440, 34557951, +STORE, 33853440, 34693119, +STORE, 140249744375808, 140249744560127, +STORE, 140249744367616, 140249744560127, +STORE, 33853440, 34832383, +STORE, 140249719230464, 140249721602047, +STORE, 140249744207872, 140249744560127, +STORE, 33853440, 34971647, +SNULL, 34963455, 34971647, +STORE, 33853440, 34963455, +STORE, 34963456, 34971647, +ERASE, 34963456, 34971647, +SNULL, 34955263, 34963455, +STORE, 33853440, 34955263, +STORE, 34955264, 34963455, +ERASE, 34955264, 34963455, +SNULL, 34947071, 34955263, +STORE, 33853440, 34947071, +STORE, 34947072, 34955263, +ERASE, 34947072, 34955263, +SNULL, 34938879, 34947071, +STORE, 33853440, 34938879, +STORE, 34938880, 34947071, +ERASE, 34938880, 34947071, +STORE, 140249719214080, 140249721602047, +STORE, 140249719148544, 140249721602047, +STORE, 140249719115776, 140249721602047, +STORE, 140249717018624, 140249721602047, +STORE, 140249716953088, 140249721602047, +STORE, 33853440, 35086335, +STORE, 140249716822016, 140249721602047, +STORE, 140249716559872, 140249721602047, +STORE, 140249716551680, 140249721602047, +STORE, 140249716535296, 140249721602047, +STORE, 140249716527104, 140249721602047, +STORE, 140249716518912, 140249721602047, +STORE, 33853440, 35221503, +SNULL, 35213311, 35221503, +STORE, 33853440, 35213311, +STORE, 35213312, 35221503, +ERASE, 35213312, 35221503, +SNULL, 35205119, 35213311, +STORE, 33853440, 35205119, +STORE, 35205120, 35213311, +ERASE, 35205120, 35213311, +SNULL, 35192831, 35205119, +STORE, 33853440, 35192831, +STORE, 35192832, 35205119, +ERASE, 35192832, 35205119, +SNULL, 35176447, 35192831, +STORE, 33853440, 35176447, +STORE, 35176448, 35192831, +ERASE, 35176448, 35192831, +STORE, 140249716502528, 140249721602047, +STORE, 33853440, 35311615, +SNULL, 35307519, 35311615, +STORE, 33853440, 35307519, +STORE, 35307520, 35311615, +ERASE, 35307520, 35311615, +SNULL, 35303423, 35307519, +STORE, 33853440, 35303423, +STORE, 35303424, 35307519, +ERASE, 35303424, 35307519, +SNULL, 35299327, 35303423, +STORE, 33853440, 35299327, +STORE, 35299328, 35303423, +ERASE, 35299328, 35303423, +SNULL, 35295231, 35299327, +STORE, 33853440, 35295231, +STORE, 35295232, 35299327, +ERASE, 35295232, 35299327, +SNULL, 35291135, 35295231, +STORE, 33853440, 35291135, +STORE, 35291136, 35295231, +ERASE, 35291136, 35295231, +SNULL, 35287039, 35291135, +STORE, 33853440, 35287039, +STORE, 35287040, 35291135, +ERASE, 35287040, 35291135, +SNULL, 35282943, 35287039, +STORE, 33853440, 35282943, +STORE, 35282944, 35287039, +ERASE, 35282944, 35287039, +STORE, 140249716486144, 140249721602047, +STORE, 140249716453376, 140249721602047, +STORE, 33853440, 35418111, +SNULL, 35401727, 35418111, +STORE, 33853440, 35401727, +STORE, 35401728, 35418111, +ERASE, 35401728, 35418111, +SNULL, 35389439, 35401727, +STORE, 33853440, 35389439, +STORE, 35389440, 35401727, +ERASE, 35389440, 35401727, +STORE, 140249714356224, 140249721602047, +STORE, 33853440, 35540991, +STORE, 140249714339840, 140249721602047, +STORE, 140249714077696, 140249721602047, +STORE, 140249714069504, 140249721602047, +STORE, 140249714061312, 140249721602047, +STORE, 33853440, 35680255, +SNULL, 35672063, 35680255, +STORE, 33853440, 35672063, +STORE, 35672064, 35680255, +ERASE, 35672064, 35680255, +SNULL, 35627007, 35672063, +STORE, 33853440, 35627007, +STORE, 35627008, 35672063, +ERASE, 35627008, 35672063, +STORE, 140249711964160, 140249721602047, +STORE, 33853440, 35762175, +SNULL, 35753983, 35762175, +STORE, 33853440, 35753983, +STORE, 35753984, 35762175, +ERASE, 35753984, 35762175, +SNULL, 35745791, 35753983, +STORE, 33853440, 35745791, +STORE, 35745792, 35753983, +ERASE, 35745792, 35753983, +STORE, 140249711955968, 140249721602047, +STORE, 140249711947776, 140249721602047, +STORE, 140249710899200, 140249721602047, +STORE, 140249710866432, 140249721602047, +STORE, 140249710600192, 140249721602047, +SNULL, 140249744424959, 140249744560127, +STORE, 140249744207872, 140249744424959, +STORE, 140249744424960, 140249744560127, +ERASE, 140249744424960, 140249744560127, +STORE, 140249708503040, 140249721602047, +STORE, 33853440, 35885055, +STORE, 140249707978752, 140249721602047, +STORE, 140249705881600, 140249721602047, +STORE, 33853440, 36036607, +STORE, 33853440, 36175871, +STORE, 140249744551936, 140249744560127, +STORE, 140249744543744, 140249744560127, +STORE, 140249744535552, 140249744560127, +STORE, 140249744527360, 140249744560127, +STORE, 140249744519168, 140249744560127, +STORE, 140249705619456, 140249721602047, +STORE, 140249744510976, 140249744560127, +STORE, 140249744502784, 140249744560127, +STORE, 140249744494592, 140249744560127, +STORE, 140249744486400, 140249744560127, +STORE, 140249744478208, 140249744560127, +STORE, 140249744470016, 140249744560127, +STORE, 140249744461824, 140249744560127, +STORE, 140249744453632, 140249744560127, +STORE, 140249744445440, 140249744560127, +STORE, 140249744437248, 140249744560127, +STORE, 140249744429056, 140249744560127, +STORE, 140249703522304, 140249721602047, +STORE, 33853440, 36311039, +STORE, 140249703489536, 140249721602047, +STORE, 33853440, 36474879, +STORE, 140249703456768, 140249721602047, +STORE, 33853440, 36622335, +STORE, 140249703424000, 140249721602047, +STORE, 140249703391232, 140249721602047, +STORE, 33853440, 36810751, +STORE, 140249703358464, 140249721602047, +STORE, 140249703325696, 140249721602047, +SNULL, 36655103, 36810751, +STORE, 33853440, 36655103, +STORE, 36655104, 36810751, +ERASE, 36655104, 36810751, +SNULL, 36438015, 36655103, +STORE, 33853440, 36438015, +STORE, 36438016, 36655103, +ERASE, 36438016, 36655103, +STORE, 140249703317504, 140249721602047, +STORE, 140249701220352, 140249721602047, +STORE, 33853440, 36585471, +STORE, 33853440, 36782079, +STORE, 140249701212160, 140249721602047, +STORE, 140249701203968, 140249721602047, +STORE, 140249701195776, 140249721602047, +STORE, 140249701187584, 140249721602047, +STORE, 140249701179392, 140249721602047, +STORE, 140249701171200, 140249721602047, +STORE, 140249701163008, 140249721602047, +STORE, 140249701154816, 140249721602047, +STORE, 140249701146624, 140249721602047, +STORE, 140249701138432, 140249721602047, +STORE, 140249701130240, 140249721602047, +STORE, 140249700081664, 140249721602047, +STORE, 140249700073472, 140249721602047, +STORE, 33853440, 36978687, +STORE, 140249697976320, 140249721602047, +STORE, 33853440, 37240831, +STORE, 140249695879168, 140249721602047, +STORE, 140249695870976, 140249721602047, +STORE, 140249695862784, 140249721602047, +STORE, 140249695854592, 140249721602047, +STORE, 140249695326208, 140249721602047, +SNULL, 140249710600191, 140249721602047, +STORE, 140249695326208, 140249710600191, +STORE, 140249710600192, 140249721602047, +SNULL, 140249710600192, 140249710866431, +STORE, 140249710866432, 140249721602047, +STORE, 140249710600192, 140249710866431, +ERASE, 140249710600192, 140249710866431, +STORE, 140249691131904, 140249710600191, +STORE, 33853440, 37474303, +STORE, 140249710858240, 140249721602047, +STORE, 140249710850048, 140249721602047, +STORE, 140249710841856, 140249721602047, +STORE, 140249710833664, 140249721602047, +STORE, 140249710825472, 140249721602047, +STORE, 140249710817280, 140249721602047, +STORE, 140249710809088, 140249721602047, +STORE, 140249710800896, 140249721602047, +STORE, 140249710792704, 140249721602047, +STORE, 140249710784512, 140249721602047, +STORE, 140249710776320, 140249721602047, +STORE, 140249710768128, 140249721602047, +STORE, 140249710759936, 140249721602047, +STORE, 140249710751744, 140249721602047, +STORE, 140249710743552, 140249721602047, +STORE, 140249710735360, 140249721602047, +STORE, 140249689034752, 140249710600191, +STORE, 140249710727168, 140249721602047, +STORE, 140249686937600, 140249710600191, +STORE, 33853440, 37867519, +STORE, 140249684840448, 140249710600191, +STORE, 140249710718976, 140249721602047, +STORE, 140249682743296, 140249710600191, +STORE, 140249710710784, 140249721602047, +STORE, 140249710702592, 140249721602047, +STORE, 140249710694400, 140249721602047, +STORE, 140249710686208, 140249721602047, +STORE, 140249710678016, 140249721602047, +STORE, 140249682612224, 140249710600191, +STORE, 140249682087936, 140249710600191, +SNULL, 140249705619455, 140249710600191, +STORE, 140249682087936, 140249705619455, +STORE, 140249705619456, 140249710600191, +SNULL, 140249705619456, 140249705881599, +STORE, 140249705881600, 140249710600191, +STORE, 140249705619456, 140249705881599, +ERASE, 140249705619456, 140249705881599, +STORE, 140249679990784, 140249705619455, +STORE, 140249710669824, 140249721602047, +STORE, 140249677893632, 140249705619455, +STORE, 140249710653440, 140249721602047, +STORE, 140249710645248, 140249721602047, +STORE, 140249710637056, 140249721602047, +STORE, 140249710628864, 140249721602047, +STORE, 140249710620672, 140249721602047, +STORE, 140249710612480, 140249721602047, +STORE, 140249710604288, 140249721602047, +STORE, 140249705873408, 140249710600191, +STORE, 140249705865216, 140249710600191, +STORE, 140249705857024, 140249710600191, +STORE, 140249705848832, 140249710600191, +STORE, 140249705840640, 140249710600191, +STORE, 140249705832448, 140249710600191, +STORE, 140249705824256, 140249710600191, +STORE, 140249705816064, 140249710600191, +STORE, 140249705807872, 140249710600191, +STORE, 140249705799680, 140249710600191, +STORE, 33853440, 38129663, +SNULL, 140249744207872, 140249744367615, +STORE, 140249744367616, 140249744424959, +STORE, 140249744207872, 140249744367615, +ERASE, 140249744207872, 140249744367615, +STORE, 140249677606912, 140249705619455, +STORE, 140249675509760, 140249705619455, +SNULL, 140249677606911, 140249705619455, +STORE, 140249675509760, 140249677606911, +STORE, 140249677606912, 140249705619455, +SNULL, 140249677606912, 140249677893631, +STORE, 140249677893632, 140249705619455, +STORE, 140249677606912, 140249677893631, +ERASE, 140249677606912, 140249677893631, +STORE, 140249744359424, 140249744424959, +STORE, 33853440, 38391807, +STORE, 140249674981376, 140249677606911, +STORE, 140249672884224, 140249677606911, +SNULL, 140249719230463, 140249721602047, +STORE, 140249710604288, 140249719230463, +STORE, 140249719230464, 140249721602047, +SNULL, 140249719230464, 140249719504895, +STORE, 140249719504896, 140249721602047, +STORE, 140249719230464, 140249719504895, +ERASE, 140249719230464, 140249719504895, +STORE, 140249744351232, 140249744424959, +STORE, 140249744343040, 140249744424959, +STORE, 140249744334848, 140249744424959, +STORE, 140249744326656, 140249744424959, +STORE, 140249744310272, 140249744424959, +STORE, 140249744302080, 140249744424959, +STORE, 140249744285696, 140249744424959, +STORE, 140249744277504, 140249744424959, +STORE, 140249744261120, 140249744424959, +STORE, 140249744252928, 140249744424959, +STORE, 140249744220160, 140249744424959, +STORE, 140249744211968, 140249744424959, +STORE, 140249719488512, 140249721602047, +STORE, 140249744203776, 140249744424959, +STORE, 140249719472128, 140249721602047, +STORE, 140249719463936, 140249721602047, +STORE, 140249719447552, 140249721602047, +STORE, 140249719439360, 140249721602047, +STORE, 140249719406592, 140249721602047, +STORE, 140249719398400, 140249721602047, +STORE, 140249719382016, 140249721602047, +STORE, 140249719373824, 140249721602047, +STORE, 140249719357440, 140249721602047, +STORE, 140249719349248, 140249721602047, +STORE, 140249719332864, 140249721602047, +STORE, 140249719324672, 140249721602047, +STORE, 140249719291904, 140249721602047, +STORE, 140249719283712, 140249721602047, +STORE, 140249719267328, 140249721602047, +STORE, 140249719259136, 140249721602047, +STORE, 140249719242752, 140249721602047, +STORE, 140249719234560, 140249721602047, +STORE, 140249705783296, 140249710600191, +STORE, 140249705775104, 140249710600191, +STORE, 140249705742336, 140249710600191, +STORE, 140249705734144, 140249710600191, +STORE, 140249705717760, 140249710600191, +STORE, 140249670787072, 140249677606911, +STORE, 140249705709568, 140249710600191, +STORE, 140249705693184, 140249710600191, +STORE, 140249705684992, 140249710600191, +STORE, 140249705668608, 140249710600191, +STORE, 140249705660416, 140249710600191, +STORE, 140249705627648, 140249710600191, +STORE, 140249677893632, 140249710600191, +STORE, 140249677877248, 140249710600191, +STORE, 140249677869056, 140249710600191, +STORE, 140249677852672, 140249710600191, +STORE, 140249677844480, 140249710600191, +STORE, 140249677828096, 140249710600191, +STORE, 140249668689920, 140249677606911, +STORE, 140249677819904, 140249710600191, +STORE, 140249677787136, 140249710600191, +STORE, 140249677778944, 140249710600191, +STORE, 140249677762560, 140249710600191, +STORE, 140249677754368, 140249710600191, +STORE, 140249677737984, 140249710600191, +STORE, 140249677729792, 140249710600191, +STORE, 140249677713408, 140249710600191, +STORE, 140249677705216, 140249710600191, +STORE, 140249677672448, 140249710600191, +STORE, 140249677664256, 140249710600191, +STORE, 140249677647872, 140249710600191, +STORE, 140249677639680, 140249710600191, +STORE, 140249677623296, 140249710600191, +STORE, 140249677615104, 140249710600191, +STORE, 140249668673536, 140249677606911, +STORE, 140249668673536, 140249710600191, +STORE, 140249668640768, 140249710600191, +STORE, 140249668632576, 140249710600191, +STORE, 140249668616192, 140249710600191, +STORE, 140249668608000, 140249710600191, +STORE, 140249668591616, 140249710600191, +STORE, 140249668583424, 140249710600191, +STORE, 140249668567040, 140249710600191, +STORE, 140249668558848, 140249710600191, +STORE, 140249668526080, 140249710600191, +STORE, 140249668517888, 140249710600191, +STORE, 140249668501504, 140249710600191, +STORE, 140249668493312, 140249710600191, +STORE, 140249668476928, 140249710600191, +STORE, 140249668468736, 140249710600191, +STORE, 140249668452352, 140249710600191, +STORE, 140249668444160, 140249710600191, +STORE, 140249668411392, 140249710600191, +STORE, 140249668403200, 140249710600191, +STORE, 140249668386816, 140249710600191, +STORE, 140249668378624, 140249710600191, +STORE, 140249668362240, 140249710600191, +STORE, 140249668354048, 140249710600191, +STORE, 140249668337664, 140249710600191, +STORE, 140249668329472, 140249710600191, +STORE, 140249668296704, 140249710600191, +STORE, 140249668288512, 140249710600191, +STORE, 140249668272128, 140249710600191, +STORE, 140249668263936, 140249710600191, +STORE, 140249668247552, 140249710600191, +STORE, 140249668239360, 140249710600191, +STORE, 140249668222976, 140249710600191, +STORE, 140249668214784, 140249710600191, +STORE, 140249668182016, 140249710600191, +STORE, 140249668173824, 140249710600191, +STORE, 140249668157440, 140249710600191, +STORE, 140249668149248, 140249710600191, +STORE, 140249668132864, 140249710600191, +STORE, 140249668124672, 140249710600191, +STORE, 140249668108288, 140249710600191, +STORE, 140249668100096, 140249710600191, +STORE, 140249668067328, 140249710600191, +STORE, 140249668059136, 140249710600191, +STORE, 140249668042752, 140249710600191, +STORE, 140249668034560, 140249710600191, +STORE, 140249668018176, 140249710600191, +STORE, 140249668009984, 140249710600191, +STORE, 140249667993600, 140249710600191, +STORE, 140249667985408, 140249710600191, +STORE, 140249667952640, 140249710600191, +STORE, 140249667944448, 140249710600191, +STORE, 140249667928064, 140249710600191, +STORE, 140249667919872, 140249710600191, +STORE, 140249667903488, 140249710600191, +STORE, 140249667895296, 140249710600191, +STORE, 140249667878912, 140249710600191, +STORE, 140249667870720, 140249710600191, +STORE, 140249667837952, 140249710600191, +STORE, 140249667829760, 140249710600191, +STORE, 140249667813376, 140249710600191, +STORE, 140249667805184, 140249710600191, +STORE, 140249667788800, 140249710600191, +STORE, 140249667780608, 140249710600191, +STORE, 140249667764224, 140249710600191, +STORE, 140249667756032, 140249710600191, +STORE, 140249667723264, 140249710600191, +STORE, 140249667715072, 140249710600191, +STORE, 140249667698688, 140249710600191, +STORE, 140249667690496, 140249710600191, +STORE, 140249667674112, 140249710600191, +STORE, 140249667665920, 140249710600191, +STORE, 140249667649536, 140249710600191, +STORE, 140249667641344, 140249710600191, +STORE, 140249667608576, 140249710600191, +STORE, 140249667600384, 140249710600191, +STORE, 140249667584000, 140249710600191, +STORE, 140249667575808, 140249710600191, +STORE, 140249667559424, 140249710600191, +STORE, 140249667551232, 140249710600191, +STORE, 140249667534848, 140249710600191, +STORE, 140249667526656, 140249710600191, +STORE, 140249667493888, 140249710600191, +STORE, 140249667485696, 140249710600191, +STORE, 140249667469312, 140249710600191, +STORE, 140249667461120, 140249710600191, +STORE, 140249667444736, 140249710600191, +STORE, 140249667436544, 140249710600191, +STORE, 140249667420160, 140249710600191, +STORE, 140249665323008, 140249710600191, +STORE, 140249665314816, 140249710600191, +STORE, 140249665282048, 140249710600191, +STORE, 140249665273856, 140249710600191, +STORE, 140249665257472, 140249710600191, +STORE, 140249665249280, 140249710600191, +STORE, 140249665232896, 140249710600191, +STORE, 140249665224704, 140249710600191, +STORE, 140249665208320, 140249710600191, +STORE, 140249665200128, 140249710600191, +STORE, 140249665167360, 140249710600191, +STORE, 140249665159168, 140249710600191, +STORE, 140249665142784, 140249710600191, +STORE, 140249665134592, 140249710600191, +STORE, 140249665118208, 140249710600191, +STORE, 140249665110016, 140249710600191, +STORE, 140249665093632, 140249710600191, +STORE, 140249665085440, 140249710600191, +STORE, 140249665052672, 140249710600191, +STORE, 140249665044480, 140249710600191, +STORE, 140249665028096, 140249710600191, +STORE, 140249665019904, 140249710600191, +STORE, 140249665003520, 140249710600191, +STORE, 140249664995328, 140249710600191, +STORE, 140249664978944, 140249710600191, +STORE, 140249664970752, 140249710600191, +STORE, 140249664937984, 140249710600191, +STORE, 140249664929792, 140249710600191, +STORE, 140249664913408, 140249710600191, +STORE, 140249664905216, 140249710600191, +STORE, 140249664888832, 140249710600191, +STORE, 140249664880640, 140249710600191, +STORE, 140249664864256, 140249710600191, +STORE, 140249664856064, 140249710600191, +STORE, 140249664823296, 140249710600191, +STORE, 140249664815104, 140249710600191, +STORE, 140249664798720, 140249710600191, +STORE, 140249664790528, 140249710600191, +STORE, 140249664774144, 140249710600191, +STORE, 140249664765952, 140249710600191, +STORE, 140249664749568, 140249710600191, +STORE, 140249664741376, 140249710600191, +STORE, 140249664708608, 140249710600191, +STORE, 140249664700416, 140249710600191, +STORE, 140249664684032, 140249710600191, +STORE, 140249664675840, 140249710600191, +STORE, 140249664659456, 140249710600191, +STORE, 140249664651264, 140249710600191, +STORE, 140249664634880, 140249710600191, +STORE, 140249664626688, 140249710600191, +STORE, 140249664593920, 140249710600191, +STORE, 140249664585728, 140249710600191, +STORE, 140249664569344, 140249710600191, +STORE, 140249664561152, 140249710600191, +STORE, 140249664544768, 140249710600191, +STORE, 140249664536576, 140249710600191, +STORE, 140249664520192, 140249710600191, +STORE, 140249664512000, 140249710600191, +STORE, 140249664479232, 140249710600191, +STORE, 140249664471040, 140249710600191, +STORE, 140249664454656, 140249710600191, +STORE, 140249664446464, 140249710600191, +STORE, 140249664430080, 140249710600191, +STORE, 140249664421888, 140249710600191, +STORE, 140249664405504, 140249710600191, +STORE, 140249664397312, 140249710600191, +STORE, 140249664364544, 140249710600191, +STORE, 140249664356352, 140249710600191, +STORE, 140249664339968, 140249710600191, +STORE, 140249664331776, 140249710600191, +STORE, 140249664315392, 140249710600191, +STORE, 140249664307200, 140249710600191, +STORE, 140249664290816, 140249710600191, +STORE, 140249664282624, 140249710600191, +STORE, 140249664249856, 140249710600191, +STORE, 140249664241664, 140249710600191, +STORE, 140249664225280, 140249710600191, +STORE, 140249664217088, 140249710600191, +STORE, 140249664200704, 140249710600191, +STORE, 140249664192512, 140249710600191, +STORE, 140249664176128, 140249710600191, +STORE, 140249664167936, 140249710600191, +STORE, 140249664135168, 140249710600191, +STORE, 140249664126976, 140249710600191, +STORE, 140249664110592, 140249710600191, +STORE, 140249664102400, 140249710600191, +STORE, 140249664086016, 140249710600191, +STORE, 140249664077824, 140249710600191, +STORE, 140249664061440, 140249710600191, +STORE, 140249664053248, 140249710600191, +STORE, 140249664020480, 140249710600191, +STORE, 140249664012288, 140249710600191, +STORE, 140249663995904, 140249710600191, +STORE, 140249663987712, 140249710600191, +STORE, 140249663971328, 140249710600191, +STORE, 140249663963136, 140249710600191, +STORE, 140249663946752, 140249710600191, +STORE, 140249663938560, 140249710600191, +STORE, 140249663905792, 140249710600191, +STORE, 140249663897600, 140249710600191, +STORE, 140249663881216, 140249710600191, +STORE, 140249663873024, 140249710600191, +STORE, 140249663856640, 140249710600191, +STORE, 140249663848448, 140249710600191, +STORE, 140249663832064, 140249710600191, +STORE, 140249663823872, 140249710600191, +STORE, 140249663791104, 140249710600191, +STORE, 140249663782912, 140249710600191, +STORE, 140249663766528, 140249710600191, +STORE, 140249663758336, 140249710600191, +STORE, 140249663741952, 140249710600191, +STORE, 140249663733760, 140249710600191, +STORE, 140249663717376, 140249710600191, +STORE, 140249663709184, 140249710600191, +STORE, 140249663676416, 140249710600191, +STORE, 140249663668224, 140249710600191, +STORE, 140249663651840, 140249710600191, +STORE, 140249663643648, 140249710600191, +STORE, 140249663627264, 140249710600191, +STORE, 33853440, 38526975, +STORE, 140249663619072, 140249710600191, +STORE, 140249663602688, 140249710600191, +STORE, 140249661505536, 140249710600191, +STORE, 140249661497344, 140249710600191, +STORE, 140249661464576, 140249710600191, +STORE, 140249661456384, 140249710600191, +STORE, 140249661440000, 140249710600191, +STORE, 140249661431808, 140249710600191, +STORE, 140249661415424, 140249710600191, +STORE, 140249661407232, 140249710600191, +STORE, 140249661390848, 140249710600191, +STORE, 140249661382656, 140249710600191, +STORE, 140249661349888, 140249710600191, +STORE, 140249661341696, 140249710600191, +STORE, 140249661325312, 140249710600191, +STORE, 140249661317120, 140249710600191, +STORE, 140249661300736, 140249710600191, +STORE, 140249661292544, 140249710600191, +STORE, 140249661276160, 140249710600191, +STORE, 140249661267968, 140249710600191, +STORE, 140249661235200, 140249710600191, +STORE, 140249661227008, 140249710600191, +STORE, 140249661210624, 140249710600191, +STORE, 140249661202432, 140249710600191, +STORE, 140249661186048, 140249710600191, +STORE, 140249661177856, 140249710600191, +STORE, 140249661161472, 140249710600191, +STORE, 140249661153280, 140249710600191, +STORE, 140249661120512, 140249710600191, +STORE, 140249661112320, 140249710600191, +STORE, 140249661095936, 140249710600191, +STORE, 140249661087744, 140249710600191, +STORE, 140249661071360, 140249710600191, +STORE, 140249661063168, 140249710600191, +STORE, 140249661046784, 140249710600191, +STORE, 140249661038592, 140249710600191, +STORE, 140249661005824, 140249710600191, +STORE, 140249660997632, 140249710600191, +STORE, 140249660981248, 140249710600191, +STORE, 140249660973056, 140249710600191, +STORE, 140249660956672, 140249710600191, +STORE, 140249660948480, 140249710600191, +STORE, 140249660932096, 140249710600191, +STORE, 140249660923904, 140249710600191, +STORE, 140249660891136, 140249710600191, +STORE, 140249660882944, 140249710600191, +STORE, 140249660866560, 140249710600191, +STORE, 140249660858368, 140249710600191, +STORE, 140249660841984, 140249710600191, +STORE, 140249660833792, 140249710600191, +STORE, 140249660817408, 140249710600191, +STORE, 140249660809216, 140249710600191, +STORE, 140249660776448, 140249710600191, +STORE, 140249660768256, 140249710600191, +STORE, 140249660751872, 140249710600191, +STORE, 140249660743680, 140249710600191, +STORE, 140249660727296, 140249710600191, +STORE, 140249660719104, 140249710600191, +STORE, 140249660702720, 140249710600191, +STORE, 140249660694528, 140249710600191, +STORE, 140249660661760, 140249710600191, +STORE, 140249660653568, 140249710600191, +STORE, 140249660637184, 140249710600191, +STORE, 140249660628992, 140249710600191, +STORE, 140249660612608, 140249710600191, +STORE, 140249660604416, 140249710600191, +STORE, 140249660588032, 140249710600191, +STORE, 140249660579840, 140249710600191, +STORE, 140249660547072, 140249710600191, +STORE, 140249660538880, 140249710600191, +STORE, 140249660522496, 140249710600191, +STORE, 140249660514304, 140249710600191, +STORE, 140249660497920, 140249710600191, +STORE, 140249660489728, 140249710600191, +STORE, 140249660473344, 140249710600191, +STORE, 140249660465152, 140249710600191, +STORE, 140249660432384, 140249710600191, +STORE, 140249660424192, 140249710600191, +STORE, 140249660407808, 140249710600191, +STORE, 140249660399616, 140249710600191, +STORE, 140249660383232, 140249710600191, +STORE, 140249660375040, 140249710600191, +STORE, 140249660358656, 140249710600191, +STORE, 140249660350464, 140249710600191, +STORE, 140249660317696, 140249710600191, +STORE, 140249660309504, 140249710600191, +STORE, 140249660293120, 140249710600191, +STORE, 140249660284928, 140249710600191, +STORE, 140249660268544, 140249710600191, +STORE, 140249660260352, 140249710600191, +STORE, 140249660243968, 140249710600191, +STORE, 140249660235776, 140249710600191, +STORE, 140249660203008, 140249710600191, +STORE, 140249660194816, 140249710600191, +STORE, 140249660178432, 140249710600191, +STORE, 140249660170240, 140249710600191, +STORE, 140249660153856, 140249710600191, +STORE, 140249660145664, 140249710600191, +STORE, 140249660129280, 140249710600191, +STORE, 140249660121088, 140249710600191, +STORE, 140249660088320, 140249710600191, +STORE, 140249660080128, 140249710600191, +STORE, 140249660063744, 140249710600191, +STORE, 140249660055552, 140249710600191, +STORE, 140249660039168, 140249710600191, +STORE, 140249660030976, 140249710600191, +STORE, 140249660014592, 140249710600191, +STORE, 140249660006400, 140249710600191, +STORE, 140249659973632, 140249710600191, +STORE, 140249659965440, 140249710600191, +STORE, 140249659949056, 140249710600191, +STORE, 140249659940864, 140249710600191, +STORE, 140249659924480, 140249710600191, +STORE, 140249659916288, 140249710600191, +STORE, 140249659899904, 140249710600191, +STORE, 140249659891712, 140249710600191, +STORE, 140249659858944, 140249710600191, +STORE, 140249659850752, 140249710600191, +STORE, 140249659834368, 140249710600191, +STORE, 140249659826176, 140249710600191, +STORE, 140249659809792, 140249710600191, +STORE, 140249659801600, 140249710600191, +STORE, 140249659785216, 140249710600191, +STORE, 140249657688064, 140249710600191, +STORE, 140249657679872, 140249710600191, +STORE, 140249657647104, 140249710600191, +STORE, 140249657638912, 140249710600191, +STORE, 140249657622528, 140249710600191, +STORE, 140249657614336, 140249710600191, +STORE, 140249657597952, 140249710600191, +STORE, 140249657589760, 140249710600191, +STORE, 140249657573376, 140249710600191, +STORE, 140249657565184, 140249710600191, +STORE, 140249657532416, 140249710600191, +STORE, 140249657524224, 140249710600191, +STORE, 140249657507840, 140249710600191, +STORE, 140249657499648, 140249710600191, +STORE, 140249657483264, 140249710600191, +STORE, 140249657475072, 140249710600191, +STORE, 140249657458688, 140249710600191, +STORE, 140249657450496, 140249710600191, +STORE, 140249657417728, 140249710600191, +STORE, 140249657409536, 140249710600191, +STORE, 140249657393152, 140249710600191, +STORE, 140249657384960, 140249710600191, +STORE, 140249657368576, 140249710600191, +STORE, 140249657360384, 140249710600191, +STORE, 140249657344000, 140249710600191, +STORE, 140249657335808, 140249710600191, +STORE, 140249657303040, 140249710600191, +STORE, 140249657294848, 140249710600191, +STORE, 140249657278464, 140249710600191, +STORE, 140249657270272, 140249710600191, +STORE, 140249657253888, 140249710600191, +STORE, 140249657245696, 140249710600191, +STORE, 140249657229312, 140249710600191, +STORE, 140249657221120, 140249710600191, +STORE, 140249657188352, 140249710600191, +STORE, 140249657180160, 140249710600191, +STORE, 140249657163776, 140249710600191, +STORE, 140249657155584, 140249710600191, +STORE, 140249657139200, 140249710600191, +STORE, 140249657131008, 140249710600191, +STORE, 140249657114624, 140249710600191, +STORE, 140249657106432, 140249710600191, +STORE, 140249657073664, 140249710600191, +STORE, 140249657065472, 140249710600191, +STORE, 140249657049088, 140249710600191, +STORE, 140249657040896, 140249710600191, +STORE, 140249657024512, 140249710600191, +STORE, 140249657016320, 140249710600191, +STORE, 140249656999936, 140249710600191, +STORE, 140249656991744, 140249710600191, +STORE, 140249656958976, 140249710600191, +STORE, 140249656950784, 140249710600191, +STORE, 140249656934400, 140249710600191, +STORE, 140249656926208, 140249710600191, +STORE, 140249656909824, 140249710600191, +STORE, 140249656901632, 140249710600191, +STORE, 140249656885248, 140249710600191, +STORE, 140249656877056, 140249710600191, +STORE, 140249656844288, 140249710600191, +STORE, 140249656836096, 140249710600191, +STORE, 140249656819712, 140249710600191, +STORE, 140249656811520, 140249710600191, +STORE, 140249656795136, 140249710600191, +STORE, 33853440, 38662143, +STORE, 140249656786944, 140249710600191, +STORE, 140249656770560, 140249710600191, +STORE, 140249656762368, 140249710600191, +STORE, 140249656729600, 140249710600191, +STORE, 140249656721408, 140249710600191, +STORE, 140249656705024, 140249710600191, +STORE, 140249656696832, 140249710600191, +STORE, 140249656680448, 140249710600191, +STORE, 140249656672256, 140249710600191, +STORE, 140249656655872, 140249710600191, +STORE, 140249656647680, 140249710600191, +STORE, 140249656614912, 140249710600191, +STORE, 140249656606720, 140249710600191, +STORE, 140249656590336, 140249710600191, +STORE, 140249656582144, 140249710600191, +STORE, 140249656565760, 140249710600191, +STORE, 140249656557568, 140249710600191, +STORE, 140249656541184, 140249710600191, +STORE, 140249656532992, 140249710600191, +STORE, 140249656500224, 140249710600191, +STORE, 140249656492032, 140249710600191, +STORE, 140249656475648, 140249710600191, +STORE, 140249656467456, 140249710600191, +STORE, 140249656451072, 140249710600191, +STORE, 140249656442880, 140249710600191, +STORE, 140249656426496, 140249710600191, +STORE, 140249656418304, 140249710600191, +STORE, 140249656385536, 140249710600191, +STORE, 140249656377344, 140249710600191, +STORE, 140249656360960, 140249710600191, +STORE, 140249656352768, 140249710600191, +STORE, 140249656336384, 140249710600191, +STORE, 140249656328192, 140249710600191, +STORE, 140249656311808, 140249710600191, +STORE, 140249656303616, 140249710600191, +STORE, 140249656270848, 140249710600191, +STORE, 140249656262656, 140249710600191, +STORE, 140249656246272, 140249710600191, +STORE, 140249656238080, 140249710600191, +STORE, 140249656221696, 140249710600191, +STORE, 140249656213504, 140249710600191, +STORE, 140249656197120, 140249710600191, +STORE, 140249656188928, 140249710600191, +STORE, 140249656156160, 140249710600191, +STORE, 140249656147968, 140249710600191, +STORE, 140249656131584, 140249710600191, +STORE, 140249656123392, 140249710600191, +STORE, 140249656107008, 140249710600191, +STORE, 140249656098816, 140249710600191, +STORE, 140249656082432, 140249710600191, +STORE, 140249656074240, 140249710600191, +STORE, 140249656041472, 140249710600191, +STORE, 140249656033280, 140249710600191, +STORE, 140249656016896, 140249710600191, +STORE, 140249656008704, 140249710600191, +STORE, 140249655992320, 140249710600191, +STORE, 140249655984128, 140249710600191, +STORE, 140249655967744, 140249710600191, +STORE, 140249653870592, 140249710600191, +STORE, 140249653862400, 140249710600191, +STORE, 140249653829632, 140249710600191, +STORE, 140249653821440, 140249710600191, +STORE, 140249653805056, 140249710600191, +STORE, 140249653796864, 140249710600191, +STORE, 140249653780480, 140249710600191, +STORE, 140249653772288, 140249710600191, +STORE, 140249653755904, 140249710600191, +STORE, 140249652703232, 140249710600191, +SNULL, 140249682087935, 140249710600191, +STORE, 140249652703232, 140249682087935, +STORE, 140249682087936, 140249710600191, + }; + + unsigned long set26[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140729464770560, 140737488351231, +SNULL, 140729464774655, 140737488351231, +STORE, 140729464770560, 140729464774655, +STORE, 140729464639488, 140729464774655, +STORE, 4194304, 5066751, +STORE, 7159808, 7172095, +STORE, 7172096, 7180287, +STORE, 140729465114624, 140729465118719, +STORE, 140729465102336, 140729465114623, +STORE, 30867456, 30875647, +STORE, 30867456, 31010815, +STORE, 140109040988160, 140109042671615, +STORE, 140109040959488, 140109040988159, +STORE, 140109040943104, 140109040959487, +ERASE, 140109040943104, 140109040959487, +STORE, 140109040840704, 140109040959487, +ERASE, 140109040840704, 140109040959487, +STORE, 140109040951296, 140109040959487, +ERASE, 140109040951296, 140109040959487, +STORE, 140109040955392, 140109040959487, +ERASE, 140109040955392, 140109040959487, + }; + unsigned long set27[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140726128070656, 140737488351231, +SNULL, 140726128074751, 140737488351231, +STORE, 140726128070656, 140726128074751, +STORE, 140726127939584, 140726128074751, +STORE, 94478497189888, 94478499303423, +SNULL, 94478497202175, 94478499303423, +STORE, 94478497189888, 94478497202175, +STORE, 94478497202176, 94478499303423, +ERASE, 94478497202176, 94478499303423, +STORE, 94478499295232, 94478499303423, +STORE, 140415605723136, 140415607975935, +SNULL, 140415605866495, 140415607975935, +STORE, 140415605723136, 140415605866495, +STORE, 140415605866496, 140415607975935, +ERASE, 140415605866496, 140415607975935, +STORE, 140415607963648, 140415607971839, +STORE, 140415607971840, 140415607975935, +STORE, 140726130024448, 140726130028543, +STORE, 140726130012160, 140726130024447, +STORE, 140415607934976, 140415607963647, +STORE, 140415607926784, 140415607934975, +STORE, 140415603245056, 140415605723135, +SNULL, 140415603245056, 140415603613695, +STORE, 140415603613696, 140415605723135, +STORE, 140415603245056, 140415603613695, +SNULL, 140415605710847, 140415605723135, +STORE, 140415603613696, 140415605710847, +STORE, 140415605710848, 140415605723135, +ERASE, 140415605710848, 140415605723135, +STORE, 140415605710848, 140415605723135, +STORE, 140415599370240, 140415603245055, +SNULL, 140415599370240, 140415601111039, +STORE, 140415601111040, 140415603245055, +STORE, 140415599370240, 140415601111039, +SNULL, 140415603208191, 140415603245055, +STORE, 140415601111040, 140415603208191, +STORE, 140415603208192, 140415603245055, +ERASE, 140415603208192, 140415603245055, +STORE, 140415603208192, 140415603245055, +STORE, 140415595692032, 140415599370239, +SNULL, 140415595692032, 140415597207551, +STORE, 140415597207552, 140415599370239, +STORE, 140415595692032, 140415597207551, +SNULL, 140415599304703, 140415599370239, +STORE, 140415597207552, 140415599304703, +STORE, 140415599304704, 140415599370239, +SNULL, 140415599304704, 140415599353855, +STORE, 140415599353856, 140415599370239, +STORE, 140415599304704, 140415599353855, +ERASE, 140415599304704, 140415599353855, +STORE, 140415599304704, 140415599353855, +ERASE, 140415599353856, 140415599370239, +STORE, 140415599353856, 140415599370239, +STORE, 140415593500672, 140415595692031, +SNULL, 140415593500672, 140415593590783, +STORE, 140415593590784, 140415595692031, +STORE, 140415593500672, 140415593590783, +SNULL, 140415595683839, 140415595692031, +STORE, 140415593590784, 140415595683839, +STORE, 140415595683840, 140415595692031, +ERASE, 140415595683840, 140415595692031, +STORE, 140415595683840, 140415595692031, +STORE, 140415589703680, 140415593500671, +SNULL, 140415589703680, 140415591362559, +STORE, 140415591362560, 140415593500671, +STORE, 140415589703680, 140415591362559, +SNULL, 140415593459711, 140415593500671, +STORE, 140415591362560, 140415593459711, +STORE, 140415593459712, 140415593500671, +SNULL, 140415593459712, 140415593484287, +STORE, 140415593484288, 140415593500671, +STORE, 140415593459712, 140415593484287, +ERASE, 140415593459712, 140415593484287, +STORE, 140415593459712, 140415593484287, +ERASE, 140415593484288, 140415593500671, +STORE, 140415593484288, 140415593500671, +STORE, 140415587590144, 140415589703679, +SNULL, 140415587590144, 140415587602431, +STORE, 140415587602432, 140415589703679, +STORE, 140415587590144, 140415587602431, +SNULL, 140415589695487, 140415589703679, +STORE, 140415587602432, 140415589695487, +STORE, 140415589695488, 140415589703679, +ERASE, 140415589695488, 140415589703679, +STORE, 140415589695488, 140415589703679, +STORE, 140415607918592, 140415607934975, +STORE, 140415585398784, 140415587590143, +SNULL, 140415585398784, 140415585480703, +STORE, 140415585480704, 140415587590143, +STORE, 140415585398784, 140415585480703, +SNULL, 140415587573759, 140415587590143, +STORE, 140415585480704, 140415587573759, +STORE, 140415587573760, 140415587590143, +SNULL, 140415587573760, 140415587581951, +STORE, 140415587581952, 140415587590143, +STORE, 140415587573760, 140415587581951, +ERASE, 140415587573760, 140415587581951, +STORE, 140415587573760, 140415587581951, +ERASE, 140415587581952, 140415587590143, +STORE, 140415587581952, 140415587590143, +STORE, 140415583182848, 140415585398783, +SNULL, 140415583182848, 140415583281151, +STORE, 140415583281152, 140415585398783, +STORE, 140415583182848, 140415583281151, +SNULL, 140415585374207, 140415585398783, +STORE, 140415583281152, 140415585374207, +STORE, 140415585374208, 140415585398783, +SNULL, 140415585374208, 140415585382399, +STORE, 140415585382400, 140415585398783, +STORE, 140415585374208, 140415585382399, +ERASE, 140415585374208, 140415585382399, +STORE, 140415585374208, 140415585382399, +ERASE, 140415585382400, 140415585398783, +STORE, 140415585382400, 140415585398783, +STORE, 140415580979200, 140415583182847, +SNULL, 140415580979200, 140415581081599, +STORE, 140415581081600, 140415583182847, +STORE, 140415580979200, 140415581081599, +SNULL, 140415583174655, 140415583182847, +STORE, 140415581081600, 140415583174655, +STORE, 140415583174656, 140415583182847, +ERASE, 140415583174656, 140415583182847, +STORE, 140415583174656, 140415583182847, +STORE, 140415578816512, 140415580979199, +SNULL, 140415578816512, 140415578877951, +STORE, 140415578877952, 140415580979199, +STORE, 140415578816512, 140415578877951, +SNULL, 140415580971007, 140415580979199, +STORE, 140415578877952, 140415580971007, +STORE, 140415580971008, 140415580979199, +ERASE, 140415580971008, 140415580979199, +STORE, 140415580971008, 140415580979199, +STORE, 140415576563712, 140415578816511, +SNULL, 140415576563712, 140415576715263, +STORE, 140415576715264, 140415578816511, +STORE, 140415576563712, 140415576715263, +SNULL, 140415578808319, 140415578816511, +STORE, 140415576715264, 140415578808319, +STORE, 140415578808320, 140415578816511, +ERASE, 140415578808320, 140415578816511, +STORE, 140415578808320, 140415578816511, +STORE, 140415574392832, 140415576563711, +SNULL, 140415574392832, 140415574462463, +STORE, 140415574462464, 140415576563711, +STORE, 140415574392832, 140415574462463, +SNULL, 140415576555519, 140415576563711, +STORE, 140415574462464, 140415576555519, +STORE, 140415576555520, 140415576563711, +ERASE, 140415576555520, 140415576563711, +STORE, 140415576555520, 140415576563711, +STORE, 140415607910400, 140415607934975, +STORE, 140415571230720, 140415574392831, +SNULL, 140415571230720, 140415572291583, +STORE, 140415572291584, 140415574392831, +STORE, 140415571230720, 140415572291583, +SNULL, 140415574384639, 140415574392831, +STORE, 140415572291584, 140415574384639, +STORE, 140415574384640, 140415574392831, +ERASE, 140415574384640, 140415574392831, +STORE, 140415574384640, 140415574392831, +STORE, 140415607902208, 140415607934975, +SNULL, 140415593476095, 140415593484287, +STORE, 140415593459712, 140415593476095, +STORE, 140415593476096, 140415593484287, +SNULL, 140415574388735, 140415574392831, +STORE, 140415574384640, 140415574388735, +STORE, 140415574388736, 140415574392831, +SNULL, 140415576559615, 140415576563711, +STORE, 140415576555520, 140415576559615, +STORE, 140415576559616, 140415576563711, +SNULL, 140415589699583, 140415589703679, +STORE, 140415589695488, 140415589699583, +STORE, 140415589699584, 140415589703679, +SNULL, 140415585378303, 140415585382399, +STORE, 140415585374208, 140415585378303, +STORE, 140415585378304, 140415585382399, +SNULL, 140415578812415, 140415578816511, +STORE, 140415578808320, 140415578812415, +STORE, 140415578812416, 140415578816511, +SNULL, 140415580975103, 140415580979199, +STORE, 140415580971008, 140415580975103, +STORE, 140415580975104, 140415580979199, +SNULL, 140415583178751, 140415583182847, +STORE, 140415583174656, 140415583178751, +STORE, 140415583178752, 140415583182847, +SNULL, 140415587577855, 140415587581951, +STORE, 140415587573760, 140415587577855, +STORE, 140415587577856, 140415587581951, +SNULL, 140415595687935, 140415595692031, +STORE, 140415595683840, 140415595687935, +STORE, 140415595687936, 140415595692031, +STORE, 140415607894016, 140415607934975, +SNULL, 140415599345663, 140415599353855, +STORE, 140415599304704, 140415599345663, +STORE, 140415599345664, 140415599353855, +SNULL, 140415603240959, 140415603245055, +STORE, 140415603208192, 140415603240959, +STORE, 140415603240960, 140415603245055, +SNULL, 140415605719039, 140415605723135, +STORE, 140415605710848, 140415605719039, +STORE, 140415605719040, 140415605723135, +SNULL, 94478499299327, 94478499303423, +STORE, 94478499295232, 94478499299327, +STORE, 94478499299328, 94478499303423, +SNULL, 140415607967743, 140415607971839, +STORE, 140415607963648, 140415607967743, +STORE, 140415607967744, 140415607971839, +ERASE, 140415607934976, 140415607963647, +STORE, 94478511173632, 94478511378431, +STORE, 140415606210560, 140415607894015, +STORE, 140415607934976, 140415607963647, +STORE, 94478511173632, 94478511513599, +STORE, 94478511173632, 94478511648767, +SNULL, 94478511615999, 94478511648767, +STORE, 94478511173632, 94478511615999, +STORE, 94478511616000, 94478511648767, +ERASE, 94478511616000, 94478511648767, +STORE, 94478511173632, 94478511751167, +SNULL, 94478511747071, 94478511751167, +STORE, 94478511173632, 94478511747071, +STORE, 94478511747072, 94478511751167, +ERASE, 94478511747072, 94478511751167, +STORE, 94478511173632, 94478511882239, +SNULL, 94478511878143, 94478511882239, +STORE, 94478511173632, 94478511878143, +STORE, 94478511878144, 94478511882239, +ERASE, 94478511878144, 94478511882239, +STORE, 94478511173632, 94478512013311, +SNULL, 94478512009215, 94478512013311, +STORE, 94478511173632, 94478512009215, +STORE, 94478512009216, 94478512013311, +ERASE, 94478512009216, 94478512013311, +STORE, 94478511173632, 94478512144383, +STORE, 94478511173632, 94478512279551, +STORE, 140415606181888, 140415606210559, +STORE, 140415569100800, 140415571230719, +SNULL, 140415569100800, 140415569129471, +STORE, 140415569129472, 140415571230719, +STORE, 140415569100800, 140415569129471, +SNULL, 140415571222527, 140415571230719, +STORE, 140415569129472, 140415571222527, +STORE, 140415571222528, 140415571230719, +ERASE, 140415571222528, 140415571230719, +STORE, 140415571222528, 140415571230719, +STORE, 140415566905344, 140415569100799, +SNULL, 140415566905344, 140415566987263, +STORE, 140415566987264, 140415569100799, +STORE, 140415566905344, 140415566987263, +SNULL, 140415569084415, 140415569100799, +STORE, 140415566987264, 140415569084415, +STORE, 140415569084416, 140415569100799, +SNULL, 140415569084416, 140415569092607, +STORE, 140415569092608, 140415569100799, +STORE, 140415569084416, 140415569092607, +ERASE, 140415569084416, 140415569092607, +STORE, 140415569084416, 140415569092607, +ERASE, 140415569092608, 140415569100799, +STORE, 140415569092608, 140415569100799, +SNULL, 140415569088511, 140415569092607, +STORE, 140415569084416, 140415569088511, +STORE, 140415569088512, 140415569092607, +SNULL, 140415571226623, 140415571230719, +STORE, 140415571222528, 140415571226623, +STORE, 140415571226624, 140415571230719, +ERASE, 140415606181888, 140415606210559, +STORE, 140415606181888, 140415606210559, +STORE, 140415564759040, 140415566905343, +SNULL, 140415564759040, 140415564804095, +STORE, 140415564804096, 140415566905343, +STORE, 140415564759040, 140415564804095, +SNULL, 140415566897151, 140415566905343, +STORE, 140415564804096, 140415566897151, +STORE, 140415566897152, 140415566905343, +ERASE, 140415566897152, 140415566905343, +STORE, 140415566897152, 140415566905343, +STORE, 140415562588160, 140415564759039, +SNULL, 140415562588160, 140415562629119, +STORE, 140415562629120, 140415564759039, +STORE, 140415562588160, 140415562629119, +SNULL, 140415564726271, 140415564759039, +STORE, 140415562629120, 140415564726271, +STORE, 140415564726272, 140415564759039, +SNULL, 140415564726272, 140415564734463, +STORE, 140415564734464, 140415564759039, +STORE, 140415564726272, 140415564734463, +ERASE, 140415564726272, 140415564734463, +STORE, 140415564726272, 140415564734463, +ERASE, 140415564734464, 140415564759039, +STORE, 140415564734464, 140415564759039, +SNULL, 140415564730367, 140415564734463, +STORE, 140415564726272, 140415564730367, +STORE, 140415564730368, 140415564734463, +SNULL, 140415566901247, 140415566905343, +STORE, 140415566897152, 140415566901247, +STORE, 140415566901248, 140415566905343, +ERASE, 140415606181888, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415605944320, 140415606210559, +ERASE, 140415605944320, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 94478511173632, 94478512414719, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 140415606206464, 140415606210559, +ERASE, 140415606206464, 140415606210559, +STORE, 94478511173632, 94478512652287, +STORE, 94478511173632, 94478512787455, +STORE, 94478511173632, 94478512922623, +STORE, 94478511173632, 94478513057791, +STORE, 140415537422336, 140415562588159, +STORE, 94478511173632, 94478513192959, +STORE, 94478511173632, 94478513356799, +STORE, 94478511173632, 94478513491967, +STORE, 94478511173632, 94478513627135, +STORE, 94478511173632, 94478513790975, +STORE, 94478511173632, 94478513926143, +STORE, 94478511173632, 94478514061311, +STORE, 94478511173632, 94478514196479, +STORE, 94478511173632, 94478514331647, +STORE, 94478511173632, 94478514606079, +STORE, 94478511173632, 94478514741247, +STORE, 94478511173632, 94478514876415, +STORE, 94478511173632, 94478515011583, +STORE, 94478511173632, 94478515146751, +STORE, 94478511173632, 94478515281919, +STORE, 94478511173632, 94478515474431, +STORE, 94478511173632, 94478515609599, +STORE, 94478511173632, 94478515744767, +STORE, 140415536922624, 140415562588159, +STORE, 94478511173632, 94478515879935, +STORE, 94478511173632, 94478516015103, +STORE, 94478511173632, 94478516150271, +STORE, 94478511173632, 94478516285439, +STORE, 94478511173632, 94478516420607, +STORE, 94478511173632, 94478516555775, +STORE, 94478511173632, 94478516690943, +STORE, 94478511173632, 94478516826111, +STORE, 94478511173632, 94478516961279, +STORE, 94478511173632, 94478517231615, +STORE, 94478511173632, 94478517366783, +STORE, 94478511173632, 94478517501951, +STORE, 94478511173632, 94478517637119, +STORE, 94478511173632, 94478517772287, +STORE, 94478511173632, 94478517907455, +STORE, 94478511173632, 94478518042623, +STORE, 94478511173632, 94478518177791, +STORE, 94478511173632, 94478518312959, +STORE, 94478511173632, 94478518448127, +STORE, 140415535910912, 140415562588159, +SNULL, 140415536922623, 140415562588159, +STORE, 140415535910912, 140415536922623, +STORE, 140415536922624, 140415562588159, +SNULL, 140415536922624, 140415537422335, +STORE, 140415537422336, 140415562588159, +STORE, 140415536922624, 140415537422335, +ERASE, 140415536922624, 140415537422335, +STORE, 94478511173632, 94478518583295, +STORE, 94478511173632, 94478518718463, +STORE, 94478511173632, 94478518853631, +STORE, 94478511173632, 94478518988799, +STORE, 94478511173632, 94478519123967, +STORE, 94478511173632, 94478519259135, +STORE, 140415509696512, 140415535910911, +ERASE, 140415537422336, 140415562588159, +STORE, 140415482433536, 140415509696511, + }; + unsigned long set28[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140722475622400, 140737488351231, +SNULL, 140722475626495, 140737488351231, +STORE, 140722475622400, 140722475626495, +STORE, 140722475491328, 140722475626495, +STORE, 93865834291200, 93865836548095, +SNULL, 93865834422271, 93865836548095, +STORE, 93865834291200, 93865834422271, +STORE, 93865834422272, 93865836548095, +ERASE, 93865834422272, 93865836548095, +STORE, 93865836519424, 93865836527615, +STORE, 93865836527616, 93865836548095, +STORE, 139918411104256, 139918413357055, +SNULL, 139918411247615, 139918413357055, +STORE, 139918411104256, 139918411247615, +STORE, 139918411247616, 139918413357055, +ERASE, 139918411247616, 139918413357055, +STORE, 139918413344768, 139918413352959, +STORE, 139918413352960, 139918413357055, +STORE, 140722476642304, 140722476646399, +STORE, 140722476630016, 140722476642303, +STORE, 139918413316096, 139918413344767, +STORE, 139918413307904, 139918413316095, +STORE, 139918408888320, 139918411104255, +SNULL, 139918408888320, 139918408986623, +STORE, 139918408986624, 139918411104255, +STORE, 139918408888320, 139918408986623, +SNULL, 139918411079679, 139918411104255, +STORE, 139918408986624, 139918411079679, +STORE, 139918411079680, 139918411104255, +SNULL, 139918411079680, 139918411087871, +STORE, 139918411087872, 139918411104255, +STORE, 139918411079680, 139918411087871, +ERASE, 139918411079680, 139918411087871, +STORE, 139918411079680, 139918411087871, +ERASE, 139918411087872, 139918411104255, +STORE, 139918411087872, 139918411104255, +STORE, 139918405091328, 139918408888319, +SNULL, 139918405091328, 139918406750207, +STORE, 139918406750208, 139918408888319, +STORE, 139918405091328, 139918406750207, +SNULL, 139918408847359, 139918408888319, +STORE, 139918406750208, 139918408847359, +STORE, 139918408847360, 139918408888319, +SNULL, 139918408847360, 139918408871935, +STORE, 139918408871936, 139918408888319, +STORE, 139918408847360, 139918408871935, +ERASE, 139918408847360, 139918408871935, +STORE, 139918408847360, 139918408871935, +ERASE, 139918408871936, 139918408888319, +STORE, 139918408871936, 139918408888319, +STORE, 139918413299712, 139918413316095, +SNULL, 139918408863743, 139918408871935, +STORE, 139918408847360, 139918408863743, +STORE, 139918408863744, 139918408871935, +SNULL, 139918411083775, 139918411087871, +STORE, 139918411079680, 139918411083775, +STORE, 139918411083776, 139918411087871, +SNULL, 93865836523519, 93865836527615, +STORE, 93865836519424, 93865836523519, +STORE, 93865836523520, 93865836527615, +SNULL, 139918413348863, 139918413352959, +STORE, 139918413344768, 139918413348863, +STORE, 139918413348864, 139918413352959, +ERASE, 139918413316096, 139918413344767, +STORE, 93865848528896, 93865848664063, + }; + unsigned long set29[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140734467944448, 140737488351231, +SNULL, 140734467948543, 140737488351231, +STORE, 140734467944448, 140734467948543, +STORE, 140734467813376, 140734467948543, +STORE, 94880407924736, 94880410177535, +SNULL, 94880408055807, 94880410177535, +STORE, 94880407924736, 94880408055807, +STORE, 94880408055808, 94880410177535, +ERASE, 94880408055808, 94880410177535, +STORE, 94880410148864, 94880410157055, +STORE, 94880410157056, 94880410177535, +STORE, 140143367815168, 140143370067967, +SNULL, 140143367958527, 140143370067967, +STORE, 140143367815168, 140143367958527, +STORE, 140143367958528, 140143370067967, +ERASE, 140143367958528, 140143370067967, +STORE, 140143370055680, 140143370063871, +STORE, 140143370063872, 140143370067967, +STORE, 140734468329472, 140734468333567, +STORE, 140734468317184, 140734468329471, +STORE, 140143370027008, 140143370055679, +STORE, 140143370018816, 140143370027007, +STORE, 140143365599232, 140143367815167, +SNULL, 140143365599232, 140143365697535, +STORE, 140143365697536, 140143367815167, +STORE, 140143365599232, 140143365697535, +SNULL, 140143367790591, 140143367815167, +STORE, 140143365697536, 140143367790591, +STORE, 140143367790592, 140143367815167, +SNULL, 140143367790592, 140143367798783, +STORE, 140143367798784, 140143367815167, +STORE, 140143367790592, 140143367798783, +ERASE, 140143367790592, 140143367798783, +STORE, 140143367790592, 140143367798783, +ERASE, 140143367798784, 140143367815167, +STORE, 140143367798784, 140143367815167, +STORE, 140143361802240, 140143365599231, +SNULL, 140143361802240, 140143363461119, +STORE, 140143363461120, 140143365599231, +STORE, 140143361802240, 140143363461119, +SNULL, 140143365558271, 140143365599231, +STORE, 140143363461120, 140143365558271, +STORE, 140143365558272, 140143365599231, +SNULL, 140143365558272, 140143365582847, +STORE, 140143365582848, 140143365599231, +STORE, 140143365558272, 140143365582847, +ERASE, 140143365558272, 140143365582847, +STORE, 140143365558272, 140143365582847, +ERASE, 140143365582848, 140143365599231, +STORE, 140143365582848, 140143365599231, +STORE, 140143370010624, 140143370027007, +SNULL, 140143365574655, 140143365582847, +STORE, 140143365558272, 140143365574655, +STORE, 140143365574656, 140143365582847, +SNULL, 140143367794687, 140143367798783, +STORE, 140143367790592, 140143367794687, +STORE, 140143367794688, 140143367798783, +SNULL, 94880410152959, 94880410157055, +STORE, 94880410148864, 94880410152959, +STORE, 94880410152960, 94880410157055, +SNULL, 140143370059775, 140143370063871, +STORE, 140143370055680, 140143370059775, +STORE, 140143370059776, 140143370063871, +ERASE, 140143370027008, 140143370055679, +STORE, 94880442400768, 94880442535935, +STORE, 140143353409536, 140143361802239, +SNULL, 140143353413631, 140143361802239, +STORE, 140143353409536, 140143353413631, +STORE, 140143353413632, 140143361802239, +STORE, 140143345016832, 140143353409535, +STORE, 140143210799104, 140143345016831, +SNULL, 140143210799104, 140143239364607, +STORE, 140143239364608, 140143345016831, +STORE, 140143210799104, 140143239364607, +ERASE, 140143210799104, 140143239364607, +SNULL, 140143306473471, 140143345016831, +STORE, 140143239364608, 140143306473471, +STORE, 140143306473472, 140143345016831, +ERASE, 140143306473472, 140143345016831, +SNULL, 140143239499775, 140143306473471, +STORE, 140143239364608, 140143239499775, +STORE, 140143239499776, 140143306473471, +SNULL, 140143345020927, 140143353409535, +STORE, 140143345016832, 140143345020927, +STORE, 140143345020928, 140143353409535, +STORE, 140143336624128, 140143345016831, +SNULL, 140143336628223, 140143345016831, +STORE, 140143336624128, 140143336628223, +STORE, 140143336628224, 140143345016831, +STORE, 140143328231424, 140143336624127, +SNULL, 140143328235519, 140143336624127, +STORE, 140143328231424, 140143328235519, +STORE, 140143328235520, 140143336624127, +STORE, 140143319838720, 140143328231423, +SNULL, 140143319842815, 140143328231423, +STORE, 140143319838720, 140143319842815, +STORE, 140143319842816, 140143328231423, +STORE, 140143311446016, 140143319838719, +STORE, 140143105146880, 140143239364607, +STORE, 140143096754176, 140143105146879, +STORE, 140143029645312, 140143096754175, +ERASE, 140143029645312, 140143096754175, +STORE, 140142962536448, 140143096754175, +SNULL, 140142962536448, 140142970929151, +STORE, 140142970929152, 140143096754175, +STORE, 140142962536448, 140142970929151, +ERASE, 140142962536448, 140142970929151, +STORE, 140142962536448, 140142970929151, +STORE, 140142828318720, 140142962536447, +STORE, 140142819926016, 140142828318719, +SNULL, 140142828318720, 140142836711423, +STORE, 140142836711424, 140142962536447, +STORE, 140142828318720, 140142836711423, +ERASE, 140142828318720, 140142836711423, +SNULL, 140143172255743, 140143239364607, +STORE, 140143105146880, 140143172255743, +STORE, 140143172255744, 140143239364607, +ERASE, 140143172255744, 140143239364607, +SNULL, 140143105282047, 140143172255743, +STORE, 140143105146880, 140143105282047, +STORE, 140143105282048, 140143172255743, +SNULL, 140143038038015, 140143096754175, +STORE, 140142970929152, 140143038038015, +STORE, 140143038038016, 140143096754175, +ERASE, 140143038038016, 140143096754175, +SNULL, 140142971064319, 140143038038015, +STORE, 140142970929152, 140142971064319, +STORE, 140142971064320, 140143038038015, +SNULL, 140142903820287, 140142962536447, +STORE, 140142836711424, 140142903820287, +STORE, 140142903820288, 140142962536447, +ERASE, 140142903820288, 140142962536447, +SNULL, 140142836846591, 140142903820287, +STORE, 140142836711424, 140142836846591, +STORE, 140142836846592, 140142903820287, +STORE, 140142685708288, 140142819926015, +SNULL, 140143311450111, 140143319838719, +STORE, 140143311446016, 140143311450111, +STORE, 140143311450112, 140143319838719, +SNULL, 140142962540543, 140142970929151, +STORE, 140142962536448, 140142962540543, +STORE, 140142962540544, 140142970929151, +SNULL, 140142685708288, 140142702493695, +STORE, 140142702493696, 140142819926015, +STORE, 140142685708288, 140142702493695, +ERASE, 140142685708288, 140142702493695, +SNULL, 140142769602559, 140142819926015, +STORE, 140142702493696, 140142769602559, +STORE, 140142769602560, 140142819926015, +ERASE, 140142769602560, 140142819926015, +SNULL, 140142702628863, 140142769602559, +STORE, 140142702493696, 140142702628863, +STORE, 140142702628864, 140142769602559, +STORE, 140143230971904, 140143239364607, +SNULL, 140143230975999, 140143239364607, +STORE, 140143230971904, 140143230975999, +STORE, 140143230976000, 140143239364607, +SNULL, 140143096758271, 140143105146879, +STORE, 140143096754176, 140143096758271, +STORE, 140143096758272, 140143105146879, +STORE, 140143222579200, 140143230971903, +SNULL, 140143222583295, 140143230971903, +STORE, 140143222579200, 140143222583295, +STORE, 140143222583296, 140143230971903, +STORE, 140143214186496, 140143222579199, +SNULL, 140142819930111, 140142828318719, +STORE, 140142819926016, 140142819930111, +STORE, 140142819930112, 140142828318719, +STORE, 140143205793792, 140143222579199, +SNULL, 140143205793792, 140143214186495, +STORE, 140143214186496, 140143222579199, +STORE, 140143205793792, 140143214186495, +SNULL, 140143214190591, 140143222579199, +STORE, 140143214186496, 140143214190591, +STORE, 140143214190592, 140143222579199, +SNULL, 140143205797887, 140143214186495, +STORE, 140143205793792, 140143205797887, +STORE, 140143205797888, 140143214186495, +STORE, 140143197401088, 140143205793791, +SNULL, 140143197405183, 140143205793791, +STORE, 140143197401088, 140143197405183, +STORE, 140143197405184, 140143205793791, +STORE, 140143189008384, 140143197401087, +STORE, 140143180615680, 140143197401087, +STORE, 140143088361472, 140143096754175, +SNULL, 140143180619775, 140143197401087, +STORE, 140143180615680, 140143180619775, +STORE, 140143180619776, 140143197401087, +SNULL, 140143180619776, 140143189008383, +STORE, 140143189008384, 140143197401087, +STORE, 140143180619776, 140143189008383, +SNULL, 140143189012479, 140143197401087, +STORE, 140143189008384, 140143189012479, +STORE, 140143189012480, 140143197401087, +SNULL, 140143088365567, 140143096754175, +STORE, 140143088361472, 140143088365567, +STORE, 140143088365568, 140143096754175, +STORE, 140143079968768, 140143088361471, +SNULL, 140143079972863, 140143088361471, +STORE, 140143079968768, 140143079972863, +STORE, 140143079972864, 140143088361471, +STORE, 140143071576064, 140143079968767, +SNULL, 140143071580159, 140143079968767, +STORE, 140143071576064, 140143071580159, +STORE, 140143071580160, 140143079968767, +STORE, 140143063183360, 140143071576063, +STORE, 140143054790656, 140143071576063, +SNULL, 140143054794751, 140143071576063, +STORE, 140143054790656, 140143054794751, +STORE, 140143054794752, 140143071576063, +SNULL, 140143054794752, 140143063183359, +STORE, 140143063183360, 140143071576063, +STORE, 140143054794752, 140143063183359, +SNULL, 140143063187455, 140143071576063, +STORE, 140143063183360, 140143063187455, +STORE, 140143063187456, 140143071576063, +STORE, 140143046397952, 140143054790655, +STORE, 140142954143744, 140142962536447, +STORE, 140142945751040, 140142962536447, +STORE, 140142937358336, 140142962536447, +STORE, 140142928965632, 140142962536447, +STORE, 140142568275968, 140142702493695, +SNULL, 140142635384831, 140142702493695, +STORE, 140142568275968, 140142635384831, +STORE, 140142635384832, 140142702493695, +ERASE, 140142635384832, 140142702493695, +STORE, 140142920572928, 140142962536447, +STORE, 140142912180224, 140142962536447, +STORE, 140142568275968, 140142702493695, +SNULL, 140142568275968, 140142635384831, +STORE, 140142635384832, 140142702493695, +STORE, 140142568275968, 140142635384831, +SNULL, 140142635519999, 140142702493695, +STORE, 140142635384832, 140142635519999, +STORE, 140142635520000, 140142702493695, +STORE, 140142819930112, 140142836711423, +STORE, 140142811533312, 140142819926015, +STORE, 140142434058240, 140142635384831, +SNULL, 140142501167103, 140142635384831, +STORE, 140142434058240, 140142501167103, +STORE, 140142501167104, 140142635384831, +SNULL, 140142501167104, 140142568275967, +STORE, 140142568275968, 140142635384831, +STORE, 140142501167104, 140142568275967, +ERASE, 140142501167104, 140142568275967, +STORE, 140142299840512, 140142501167103, +STORE, 140142803140608, 140142819926015, +SNULL, 140142366949375, 140142501167103, +STORE, 140142299840512, 140142366949375, +STORE, 140142366949376, 140142501167103, +SNULL, 140142366949376, 140142434058239, +STORE, 140142434058240, 140142501167103, +STORE, 140142366949376, 140142434058239, +ERASE, 140142366949376, 140142434058239, +STORE, 140142794747904, 140142819926015, +STORE, 140142786355200, 140142819926015, +STORE, 140142299840512, 140142501167103, +STORE, 140142777962496, 140142819926015, +STORE, 140142559883264, 140142568275967, +STORE, 140142232731648, 140142501167103, +STORE, 140142551490560, 140142568275967, +SNULL, 140142777962496, 140142803140607, +STORE, 140142803140608, 140142819926015, +STORE, 140142777962496, 140142803140607, +SNULL, 140142803144703, 140142819926015, +STORE, 140142803140608, 140142803144703, +STORE, 140142803144704, 140142819926015, +STORE, 140142543097856, 140142568275967, +STORE, 140142098513920, 140142501167103, +SNULL, 140142165622783, 140142501167103, +STORE, 140142098513920, 140142165622783, +STORE, 140142165622784, 140142501167103, +SNULL, 140142165622784, 140142232731647, +STORE, 140142232731648, 140142501167103, +STORE, 140142165622784, 140142232731647, +ERASE, 140142165622784, 140142232731647, +SNULL, 140142568411135, 140142635384831, +STORE, 140142568275968, 140142568411135, +STORE, 140142568411136, 140142635384831, +STORE, 140141964296192, 140142165622783, +SNULL, 140142912180224, 140142928965631, +STORE, 140142928965632, 140142962536447, +STORE, 140142912180224, 140142928965631, +SNULL, 140142928969727, 140142962536447, +STORE, 140142928965632, 140142928969727, +STORE, 140142928969728, 140142962536447, +STORE, 140141830078464, 140142165622783, +SNULL, 140142912184319, 140142928965631, +STORE, 140142912180224, 140142912184319, +STORE, 140142912184320, 140142928965631, +SNULL, 140142232731648, 140142434058239, +STORE, 140142434058240, 140142501167103, +STORE, 140142232731648, 140142434058239, +SNULL, 140142434193407, 140142501167103, +STORE, 140142434058240, 140142434193407, +STORE, 140142434193408, 140142501167103, +SNULL, 140142232731648, 140142299840511, +STORE, 140142299840512, 140142434058239, +STORE, 140142232731648, 140142299840511, +SNULL, 140142299975679, 140142434058239, +STORE, 140142299840512, 140142299975679, +STORE, 140142299975680, 140142434058239, +SNULL, 140142928969728, 140142954143743, +STORE, 140142954143744, 140142962536447, +STORE, 140142928969728, 140142954143743, +SNULL, 140142954147839, 140142962536447, +STORE, 140142954143744, 140142954147839, +STORE, 140142954147840, 140142962536447, +STORE, 140141830078464, 140142299840511, +SNULL, 140142543097856, 140142559883263, +STORE, 140142559883264, 140142568275967, +STORE, 140142543097856, 140142559883263, +SNULL, 140142559887359, 140142568275967, +STORE, 140142559883264, 140142559887359, +STORE, 140142559887360, 140142568275967, +STORE, 140142534705152, 140142559883263, +SNULL, 140142928969728, 140142945751039, +STORE, 140142945751040, 140142954143743, +STORE, 140142928969728, 140142945751039, +SNULL, 140142945755135, 140142954143743, +STORE, 140142945751040, 140142945755135, +STORE, 140142945755136, 140142954143743, +SNULL, 140142299975680, 140142366949375, +STORE, 140142366949376, 140142434058239, +STORE, 140142299975680, 140142366949375, +SNULL, 140142367084543, 140142434058239, +STORE, 140142366949376, 140142367084543, +STORE, 140142367084544, 140142434058239, +SNULL, 140142928969728, 140142937358335, +STORE, 140142937358336, 140142945751039, +STORE, 140142928969728, 140142937358335, +SNULL, 140142937362431, 140142945751039, +STORE, 140142937358336, 140142937362431, +STORE, 140142937362432, 140142945751039, +SNULL, 140141830078464, 140142232731647, +STORE, 140142232731648, 140142299840511, +STORE, 140141830078464, 140142232731647, +SNULL, 140142232866815, 140142299840511, +STORE, 140142232731648, 140142232866815, +STORE, 140142232866816, 140142299840511, +SNULL, 140142534705152, 140142543097855, +STORE, 140142543097856, 140142559883263, +STORE, 140142534705152, 140142543097855, +SNULL, 140142543101951, 140142559883263, +STORE, 140142543097856, 140142543101951, +STORE, 140142543101952, 140142559883263, +STORE, 140142526312448, 140142543097855, +STORE, 140142517919744, 140142543097855, +SNULL, 140141830078464, 140142098513919, +STORE, 140142098513920, 140142232731647, +STORE, 140141830078464, 140142098513919, +SNULL, 140142098649087, 140142232731647, +STORE, 140142098513920, 140142098649087, +STORE, 140142098649088, 140142232731647, +SNULL, 140142031405055, 140142098513919, +STORE, 140141830078464, 140142031405055, +STORE, 140142031405056, 140142098513919, +ERASE, 140142031405056, 140142098513919, +SNULL, 140141830078464, 140141964296191, +STORE, 140141964296192, 140142031405055, +STORE, 140141830078464, 140141964296191, +SNULL, 140141964431359, 140142031405055, +STORE, 140141964296192, 140141964431359, +STORE, 140141964431360, 140142031405055, +STORE, 140142509527040, 140142543097855, +SNULL, 140141897187327, 140141964296191, +STORE, 140141830078464, 140141897187327, +STORE, 140141897187328, 140141964296191, +ERASE, 140141897187328, 140141964296191, +SNULL, 140141830213631, 140141897187327, +STORE, 140141830078464, 140141830213631, +STORE, 140141830213632, 140141897187327, +SNULL, 140142803144704, 140142811533311, +STORE, 140142811533312, 140142819926015, +STORE, 140142803144704, 140142811533311, +SNULL, 140142811537407, 140142819926015, +STORE, 140142811533312, 140142811537407, +STORE, 140142811537408, 140142819926015, +SNULL, 140142098649088, 140142165622783, +STORE, 140142165622784, 140142232731647, +STORE, 140142098649088, 140142165622783, +SNULL, 140142165757951, 140142232731647, +STORE, 140142165622784, 140142165757951, +STORE, 140142165757952, 140142232731647, +STORE, 140142090121216, 140142098513919, +SNULL, 140142777962496, 140142786355199, +STORE, 140142786355200, 140142803140607, +STORE, 140142777962496, 140142786355199, +SNULL, 140142786359295, 140142803140607, +STORE, 140142786355200, 140142786359295, +STORE, 140142786359296, 140142803140607, +SNULL, 140142509527040, 140142534705151, +STORE, 140142534705152, 140142543097855, +STORE, 140142509527040, 140142534705151, +SNULL, 140142534709247, 140142543097855, +STORE, 140142534705152, 140142534709247, +STORE, 140142534709248, 140142543097855, +STORE, 140142081728512, 140142098513919, +SNULL, 140142786359296, 140142794747903, +STORE, 140142794747904, 140142803140607, +STORE, 140142786359296, 140142794747903, +SNULL, 140142794751999, 140142803140607, +STORE, 140142794747904, 140142794751999, +STORE, 140142794752000, 140142803140607, +STORE, 140142073335808, 140142098513919, +SNULL, 140142073339903, 140142098513919, +STORE, 140142073335808, 140142073339903, +STORE, 140142073339904, 140142098513919, +SNULL, 140142543101952, 140142551490559, +STORE, 140142551490560, 140142559883263, +STORE, 140142543101952, 140142551490559, +SNULL, 140142551494655, 140142559883263, +STORE, 140142551490560, 140142551494655, +STORE, 140142551494656, 140142559883263, +SNULL, 140142509527040, 140142517919743, +STORE, 140142517919744, 140142534705151, +STORE, 140142509527040, 140142517919743, +SNULL, 140142517923839, 140142534705151, +STORE, 140142517919744, 140142517923839, +STORE, 140142517923840, 140142534705151, +STORE, 140142064943104, 140142073335807, +SNULL, 140142073339904, 140142090121215, +STORE, 140142090121216, 140142098513919, +STORE, 140142073339904, 140142090121215, +SNULL, 140142090125311, 140142098513919, +STORE, 140142090121216, 140142090125311, +STORE, 140142090125312, 140142098513919, +STORE, 140142056550400, 140142073335807, +SNULL, 140142056554495, 140142073335807, +STORE, 140142056550400, 140142056554495, +STORE, 140142056554496, 140142073335807, +STORE, 140142048157696, 140142056550399, +SNULL, 140142509531135, 140142517919743, +STORE, 140142509527040, 140142509531135, +STORE, 140142509531136, 140142517919743, +SNULL, 140142777966591, 140142786355199, +STORE, 140142777962496, 140142777966591, +STORE, 140142777966592, 140142786355199, +SNULL, 140143046402047, 140143054790655, +STORE, 140143046397952, 140143046402047, +STORE, 140143046402048, 140143054790655, +SNULL, 140142912184320, 140142920572927, +STORE, 140142920572928, 140142928965631, +STORE, 140142912184320, 140142920572927, +SNULL, 140142920577023, 140142928965631, +STORE, 140142920572928, 140142920577023, +STORE, 140142920577024, 140142928965631, +STORE, 140142039764992, 140142056550399, +STORE, 140141955903488, 140141964296191, +SNULL, 140142819930112, 140142828318719, +STORE, 140142828318720, 140142836711423, +STORE, 140142819930112, 140142828318719, +SNULL, 140142828322815, 140142836711423, +STORE, 140142828318720, 140142828322815, +STORE, 140142828322816, 140142836711423, +SNULL, 140142517923840, 140142526312447, +STORE, 140142526312448, 140142534705151, +STORE, 140142517923840, 140142526312447, +SNULL, 140142526316543, 140142534705151, +STORE, 140142526312448, 140142526316543, +STORE, 140142526316544, 140142534705151, +STORE, 140141947510784, 140141964296191, +SNULL, 140142056554496, 140142064943103, +STORE, 140142064943104, 140142073335807, +STORE, 140142056554496, 140142064943103, +SNULL, 140142064947199, 140142073335807, +STORE, 140142064943104, 140142064947199, +STORE, 140142064947200, 140142073335807, +SNULL, 140142073339904, 140142081728511, +STORE, 140142081728512, 140142090121215, +STORE, 140142073339904, 140142081728511, +SNULL, 140142081732607, 140142090121215, +STORE, 140142081728512, 140142081732607, +STORE, 140142081732608, 140142090121215, +STORE, 140141939118080, 140141964296191, +STORE, 140141930725376, 140141964296191, +STORE, 140141922332672, 140141964296191, +STORE, 140141913939968, 140141964296191, +SNULL, 140141913939968, 140141922332671, +STORE, 140141922332672, 140141964296191, +STORE, 140141913939968, 140141922332671, +SNULL, 140141922336767, 140141964296191, +STORE, 140141922332672, 140141922336767, +STORE, 140141922336768, 140141964296191, +STORE, 140141905547264, 140141922332671, +SNULL, 140141905551359, 140141922332671, +STORE, 140141905547264, 140141905551359, +STORE, 140141905551360, 140141922332671, +STORE, 140141821685760, 140141830078463, +STORE, 140141813293056, 140141830078463, +STORE, 140141804900352, 140141830078463, +STORE, 140141796507648, 140141830078463, +SNULL, 140141796511743, 140141830078463, +STORE, 140141796507648, 140141796511743, +STORE, 140141796511744, 140141830078463, +SNULL, 140141922336768, 140141955903487, +STORE, 140141955903488, 140141964296191, +STORE, 140141922336768, 140141955903487, +SNULL, 140141955907583, 140141964296191, +STORE, 140141955903488, 140141955907583, +STORE, 140141955907584, 140141964296191, +STORE, 140141788114944, 140141796507647, +STORE, 140141779722240, 140141796507647, +SNULL, 140141779722240, 140141788114943, +STORE, 140141788114944, 140141796507647, +STORE, 140141779722240, 140141788114943, +SNULL, 140141788119039, 140141796507647, +STORE, 140141788114944, 140141788119039, +STORE, 140141788119040, 140141796507647, +SNULL, 140141922336768, 140141947510783, +STORE, 140141947510784, 140141955903487, +STORE, 140141922336768, 140141947510783, +SNULL, 140141947514879, 140141955903487, +STORE, 140141947510784, 140141947514879, +STORE, 140141947514880, 140141955903487, +SNULL, 140142039764992, 140142048157695, +STORE, 140142048157696, 140142056550399, +STORE, 140142039764992, 140142048157695, +SNULL, 140142048161791, 140142056550399, +STORE, 140142048157696, 140142048161791, +STORE, 140142048161792, 140142056550399, +SNULL, 140142039769087, 140142048157695, +STORE, 140142039764992, 140142039769087, +STORE, 140142039769088, 140142048157695, +SNULL, 140141796511744, 140141804900351, +STORE, 140141804900352, 140141830078463, +STORE, 140141796511744, 140141804900351, +SNULL, 140141804904447, 140141830078463, +STORE, 140141804900352, 140141804904447, +STORE, 140141804904448, 140141830078463, +STORE, 140141771329536, 140141788114943, +STORE, 140141762936832, 140141788114943, +STORE, 140141754544128, 140141788114943, +SNULL, 140141804904448, 140141821685759, +STORE, 140141821685760, 140141830078463, +STORE, 140141804904448, 140141821685759, +SNULL, 140141821689855, 140141830078463, +STORE, 140141821685760, 140141821689855, +STORE, 140141821689856, 140141830078463, +SNULL, 140141922336768, 140141939118079, +STORE, 140141939118080, 140141947510783, +STORE, 140141922336768, 140141939118079, +SNULL, 140141939122175, 140141947510783, +STORE, 140141939118080, 140141939122175, +STORE, 140141939122176, 140141947510783, +SNULL, 140141905551360, 140141913939967, +STORE, 140141913939968, 140141922332671, +STORE, 140141905551360, 140141913939967, +SNULL, 140141913944063, 140141922332671, +STORE, 140141913939968, 140141913944063, +STORE, 140141913944064, 140141922332671, +STORE, 140141746151424, 140141788114943, +STORE, 140141737758720, 140141788114943, +SNULL, 140141804904448, 140141813293055, +STORE, 140141813293056, 140141821685759, +STORE, 140141804904448, 140141813293055, +SNULL, 140141813297151, 140141821685759, +STORE, 140141813293056, 140141813297151, +STORE, 140141813297152, 140141821685759, +STORE, 140141729366016, 140141788114943, +STORE, 140141720973312, 140141788114943, +STORE, 140141712580608, 140141788114943, +SNULL, 140141712584703, 140141788114943, +STORE, 140141712580608, 140141712584703, +STORE, 140141712584704, 140141788114943, +SNULL, 140141922336768, 140141930725375, +STORE, 140141930725376, 140141939118079, +STORE, 140141922336768, 140141930725375, +SNULL, 140141930729471, 140141939118079, +STORE, 140141930725376, 140141930729471, +STORE, 140141930729472, 140141939118079, +STORE, 140141704187904, 140141712580607, +SNULL, 140141704191999, 140141712580607, +STORE, 140141704187904, 140141704191999, +STORE, 140141704192000, 140141712580607, +STORE, 140141695795200, 140141704187903, +STORE, 140141687402496, 140141704187903, +SNULL, 140141712584704, 140141771329535, +STORE, 140141771329536, 140141788114943, +STORE, 140141712584704, 140141771329535, +SNULL, 140141771333631, 140141788114943, +STORE, 140141771329536, 140141771333631, +STORE, 140141771333632, 140141788114943, +SNULL, 140141771333632, 140141779722239, +STORE, 140141779722240, 140141788114943, +STORE, 140141771333632, 140141779722239, +SNULL, 140141779726335, 140141788114943, +STORE, 140141779722240, 140141779726335, +STORE, 140141779726336, 140141788114943, +STORE, 140141679009792, 140141704187903, +SNULL, 140141679013887, 140141704187903, +STORE, 140141679009792, 140141679013887, +STORE, 140141679013888, 140141704187903, +STORE, 140141670617088, 140141679009791, +SNULL, 140141670621183, 140141679009791, +STORE, 140141670617088, 140141670621183, +STORE, 140141670621184, 140141679009791, +STORE, 140141662224384, 140141670617087, +SNULL, 140141712584704, 140141737758719, +STORE, 140141737758720, 140141771329535, +STORE, 140141712584704, 140141737758719, +SNULL, 140141737762815, 140141771329535, +STORE, 140141737758720, 140141737762815, +STORE, 140141737762816, 140141771329535, +SNULL, 140141712584704, 140141729366015, +STORE, 140141729366016, 140141737758719, +STORE, 140141712584704, 140141729366015, +SNULL, 140141729370111, 140141737758719, +STORE, 140141729366016, 140141729370111, +STORE, 140141729370112, 140141737758719, +SNULL, 140141737762816, 140141746151423, +STORE, 140141746151424, 140141771329535, +STORE, 140141737762816, 140141746151423, +SNULL, 140141746155519, 140141771329535, +STORE, 140141746151424, 140141746155519, +STORE, 140141746155520, 140141771329535, +STORE, 140141653831680, 140141670617087, +SNULL, 140141746155520, 140141762936831, +STORE, 140141762936832, 140141771329535, +STORE, 140141746155520, 140141762936831, +SNULL, 140141762940927, 140141771329535, +STORE, 140141762936832, 140141762940927, +STORE, 140141762940928, 140141771329535, +STORE, 140141645438976, 140141670617087, +SNULL, 140141645443071, 140141670617087, +STORE, 140141645438976, 140141645443071, +STORE, 140141645443072, 140141670617087, +SNULL, 140141712584704, 140141720973311, +STORE, 140141720973312, 140141729366015, +STORE, 140141712584704, 140141720973311, +SNULL, 140141720977407, 140141729366015, +STORE, 140141720973312, 140141720977407, +STORE, 140141720977408, 140141729366015, +STORE, 140141637046272, 140141645438975, +SNULL, 140141637050367, 140141645438975, +STORE, 140141637046272, 140141637050367, +STORE, 140141637050368, 140141645438975, +STORE, 140141628653568, 140141637046271, +SNULL, 140141628657663, 140141637046271, +STORE, 140141628653568, 140141628657663, +STORE, 140141628657664, 140141637046271, +STORE, 140141620260864, 140141628653567, +SNULL, 140141679013888, 140141687402495, +STORE, 140141687402496, 140141704187903, +STORE, 140141679013888, 140141687402495, +SNULL, 140141687406591, 140141704187903, +STORE, 140141687402496, 140141687406591, +STORE, 140141687406592, 140141704187903, +SNULL, 140141746155520, 140141754544127, +STORE, 140141754544128, 140141762936831, +STORE, 140141746155520, 140141754544127, +SNULL, 140141754548223, 140141762936831, +STORE, 140141754544128, 140141754548223, +STORE, 140141754548224, 140141762936831, +SNULL, 140141687406592, 140141695795199, +STORE, 140141695795200, 140141704187903, +STORE, 140141687406592, 140141695795199, +SNULL, 140141695799295, 140141704187903, +STORE, 140141695795200, 140141695799295, +STORE, 140141695799296, 140141704187903, +STORE, 140141611868160, 140141628653567, +SNULL, 140141611872255, 140141628653567, +STORE, 140141611868160, 140141611872255, +STORE, 140141611872256, 140141628653567, +SNULL, 140141645443072, 140141662224383, +STORE, 140141662224384, 140141670617087, +STORE, 140141645443072, 140141662224383, +SNULL, 140141662228479, 140141670617087, +STORE, 140141662224384, 140141662228479, +STORE, 140141662228480, 140141670617087, +STORE, 140141603475456, 140141611868159, +SNULL, 140141603479551, 140141611868159, +STORE, 140141603475456, 140141603479551, +STORE, 140141603479552, 140141611868159, +STORE, 140141595082752, 140141603475455, +SNULL, 140141645443072, 140141653831679, +STORE, 140141653831680, 140141662224383, +STORE, 140141645443072, 140141653831679, +SNULL, 140141653835775, 140141662224383, +STORE, 140141653831680, 140141653835775, +STORE, 140141653835776, 140141662224383, +STORE, 140141586690048, 140141603475455, +SNULL, 140141611872256, 140141620260863, +STORE, 140141620260864, 140141628653567, +STORE, 140141611872256, 140141620260863, +SNULL, 140141620264959, 140141628653567, +STORE, 140141620260864, 140141620264959, +STORE, 140141620264960, 140141628653567, +SNULL, 140141586690048, 140141595082751, +STORE, 140141595082752, 140141603475455, +STORE, 140141586690048, 140141595082751, +SNULL, 140141595086847, 140141603475455, +STORE, 140141595082752, 140141595086847, +STORE, 140141595086848, 140141603475455, +STORE, 140141578297344, 140141595082751, +SNULL, 140141578301439, 140141595082751, +STORE, 140141578297344, 140141578301439, +STORE, 140141578301440, 140141595082751, +SNULL, 140141578301440, 140141586690047, +STORE, 140141586690048, 140141595082751, +STORE, 140141578301440, 140141586690047, +SNULL, 140141586694143, 140141595082751, +STORE, 140141586690048, 140141586694143, +STORE, 140141586694144, 140141595082751, +STORE, 140143370027008, 140143370055679, +STORE, 140143309254656, 140143311446015, +SNULL, 140143309254656, 140143309344767, +STORE, 140143309344768, 140143311446015, +STORE, 140143309254656, 140143309344767, +SNULL, 140143311437823, 140143311446015, +STORE, 140143309344768, 140143311437823, +STORE, 140143311437824, 140143311446015, +ERASE, 140143311437824, 140143311446015, +STORE, 140143311437824, 140143311446015, +SNULL, 140143311441919, 140143311446015, +STORE, 140143311437824, 140143311441919, +STORE, 140143311441920, 140143311446015, +ERASE, 140143370027008, 140143370055679, +ERASE, 140142912180224, 140142912184319, +ERASE, 140142912184320, 140142920572927, +ERASE, 140142945751040, 140142945755135, +ERASE, 140142945755136, 140142954143743, +ERASE, 140142090121216, 140142090125311, +ERASE, 140142090125312, 140142098513919, +ERASE, 140142794747904, 140142794751999, +ERASE, 140142794752000, 140142803140607, +ERASE, 140141913939968, 140141913944063, +ERASE, 140141913944064, 140141922332671, +ERASE, 140141746151424, 140141746155519, +ERASE, 140141746155520, 140141754544127, +ERASE, 140142954143744, 140142954147839, +ERASE, 140142954147840, 140142962536447, +ERASE, 140142081728512, 140142081732607, +ERASE, 140142081732608, 140142090121215, +ERASE, 140141905547264, 140141905551359, +ERASE, 140141905551360, 140141913939967, +ERASE, 140141729366016, 140141729370111, +ERASE, 140141729370112, 140141737758719, +ERASE, 140142920572928, 140142920577023, +ERASE, 140142920577024, 140142928965631, +ERASE, 140142039764992, 140142039769087, +ERASE, 140142039769088, 140142048157695, +ERASE, 140141679009792, 140141679013887, +ERASE, 140141679013888, 140141687402495, +ERASE, 140142551490560, 140142551494655, +ERASE, 140142551494656, 140142559883263, +ERASE, 140141947510784, 140141947514879, +ERASE, 140141947514880, 140141955903487, +ERASE, 140141771329536, 140141771333631, +ERASE, 140141771333632, 140141779722239, +ERASE, 140142928965632, 140142928969727, +ERASE, 140142928969728, 140142937358335, +ERASE, 140142073335808, 140142073339903, +ERASE, 140142073339904, 140142081728511, +ERASE, 140142543097856, 140142543101951, +ERASE, 140142543101952, 140142551490559, +ERASE, 140141955903488, 140141955907583, +ERASE, 140141955907584, 140141964296191, +ERASE, 140141704187904, 140141704191999, +ERASE, 140141704192000, 140141712580607, +ERASE, 140142786355200, 140142786359295, +ERASE, 140142786359296, 140142794747903, +ERASE, 140142056550400, 140142056554495, +ERASE, 140142056554496, 140142064943103, +ERASE, 140142828318720, 140142828322815, +ERASE, 140142828322816, 140142836711423, +ERASE, 140141788114944, 140141788119039, +ERASE, 140141788119040, 140141796507647, +ERASE, 140141695795200, 140141695799295, +ERASE, 140141695799296, 140141704187903, +ERASE, 140141578297344, 140141578301439, +ERASE, 140141578301440, 140141586690047, +ERASE, 140141611868160, 140141611872255, +ERASE, 140141611872256, 140141620260863, +ERASE, 140142811533312, 140142811537407, +ERASE, 140142811537408, 140142819926015, +ERASE, 140142064943104, 140142064947199, +ERASE, 140142064947200, 140142073335807, +ERASE, 140141628653568, 140141628657663, +ERASE, 140141628657664, 140141637046271, +ERASE, 140143046397952, 140143046402047, +ERASE, 140143046402048, 140143054790655, +ERASE, 140141796507648, 140141796511743, +ERASE, 140141796511744, 140141804900351, +ERASE, 140142803140608, 140142803144703, +ERASE, 140142803144704, 140142811533311, +ERASE, 140142509527040, 140142509531135, +ERASE, 140142509531136, 140142517919743, +ERASE, 140141821685760, 140141821689855, +ERASE, 140141821689856, 140141830078463, +ERASE, 140142777962496, 140142777966591, +ERASE, 140142777966592, 140142786355199, +ERASE, 140141804900352, 140141804904447, +ERASE, 140141804904448, 140141813293055, +ERASE, 140141930725376, 140141930729471, +ERASE, 140141930729472, 140141939118079, +ERASE, 140142937358336, 140142937362431, +ERASE, 140142937362432, 140142945751039, +ERASE, 140142559883264, 140142559887359, +ERASE, 140142559887360, 140142568275967, +ERASE, 140142534705152, 140142534709247, +ERASE, 140142534709248, 140142543097855, +ERASE, 140142048157696, 140142048161791, +ERASE, 140142048161792, 140142056550399, +ERASE, 140141754544128, 140141754548223, +ERASE, 140141754548224, 140141762936831, +ERASE, 140141939118080, 140141939122175, +ERASE, 140141939122176, 140141947510783, +ERASE, 140141653831680, 140141653835775, +ERASE, 140141653835776, 140141662224383, +ERASE, 140141712580608, 140141712584703, +ERASE, 140141712584704, 140141720973311, +ERASE, 140141645438976, 140141645443071, +ERASE, 140141645443072, 140141653831679, +ERASE, 140141687402496, 140141687406591, +ERASE, 140141687406592, 140141695795199, +ERASE, 140141662224384, 140141662228479, +ERASE, 140141662228480, 140141670617087, +ERASE, 140141922332672, 140141922336767, +ERASE, 140141922336768, 140141930725375, +ERASE, 140141737758720, 140141737762815, +ERASE, 140141737762816, 140141746151423, +ERASE, 140141637046272, 140141637050367, +ERASE, 140141637050368, 140141645438975, +ERASE, 140142517919744, 140142517923839, +ERASE, 140142517923840, 140142526312447, +ERASE, 140143096754176, 140143096758271, +ERASE, 140143096758272, 140143105146879, +ERASE, 140141595082752, 140141595086847, +ERASE, 140141595086848, 140141603475455, +ERASE, 140141762936832, 140141762940927, +ERASE, 140141762940928, 140141771329535, +ERASE, 140143311446016, 140143311450111, +ERASE, 140143311450112, 140143319838719, +ERASE, 140142526312448, 140142526316543, +ERASE, 140142526316544, 140142534705151, +ERASE, 140142819926016, 140142819930111, +ERASE, 140142819930112, 140142828318719, +ERASE, 140143180615680, 140143180619775, +ERASE, 140143180619776, 140143189008383, +ERASE, 140142962536448, 140142962540543, +ERASE, 140142962540544, 140142970929151, +ERASE, 140143214186496, 140143214190591, +ERASE, 140143214190592, 140143222579199, +ERASE, 140143088361472, 140143088365567, +ERASE, 140143088365568, 140143096754175, +ERASE, 140141586690048, 140141586694143, +ERASE, 140141586694144, 140141595082751, +ERASE, 140143230971904, 140143230975999, +ERASE, 140143230976000, 140143239364607, +ERASE, 140141779722240, 140141779726335, +ERASE, 140141779726336, 140141788114943, +ERASE, 140141670617088, 140141670621183, +ERASE, 140141670621184, 140141679009791, +ERASE, 140141813293056, 140141813297151, +ERASE, 140141813297152, 140141821685759, +ERASE, 140143222579200, 140143222583295, +ERASE, 140143222583296, 140143230971903, +ERASE, 140143189008384, 140143189012479, +ERASE, 140143189012480, 140143197401087, +ERASE, 140143071576064, 140143071580159, +ERASE, 140143071580160, 140143079968767, +ERASE, 140141620260864, 140141620264959, +ERASE, 140141620264960, 140141628653567, +ERASE, 140141603475456, 140141603479551, +ERASE, 140141603479552, 140141611868159, +ERASE, 140141720973312, 140141720977407, +ERASE, 140141720977408, 140141729366015, +ERASE, 140143079968768, 140143079972863, +ERASE, 140143079972864, 140143088361471, +ERASE, 140143205793792, 140143205797887, +ERASE, 140143205797888, 140143214186495, + }; + unsigned long set30[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140733436743680, 140737488351231, +SNULL, 140733436747775, 140737488351231, +STORE, 140733436743680, 140733436747775, +STORE, 140733436612608, 140733436747775, +STORE, 94630728904704, 94630731157503, +SNULL, 94630729035775, 94630731157503, +STORE, 94630728904704, 94630729035775, +STORE, 94630729035776, 94630731157503, +ERASE, 94630729035776, 94630731157503, +STORE, 94630731128832, 94630731137023, +STORE, 94630731137024, 94630731157503, +STORE, 140165750841344, 140165753094143, +SNULL, 140165750984703, 140165753094143, +STORE, 140165750841344, 140165750984703, +STORE, 140165750984704, 140165753094143, +ERASE, 140165750984704, 140165753094143, +STORE, 140165753081856, 140165753090047, +STORE, 140165753090048, 140165753094143, +STORE, 140733436887040, 140733436891135, +STORE, 140733436874752, 140733436887039, +STORE, 140165753053184, 140165753081855, +STORE, 140165753044992, 140165753053183, +STORE, 140165748625408, 140165750841343, +SNULL, 140165748625408, 140165748723711, +STORE, 140165748723712, 140165750841343, +STORE, 140165748625408, 140165748723711, +SNULL, 140165750816767, 140165750841343, +STORE, 140165748723712, 140165750816767, +STORE, 140165750816768, 140165750841343, +SNULL, 140165750816768, 140165750824959, +STORE, 140165750824960, 140165750841343, +STORE, 140165750816768, 140165750824959, +ERASE, 140165750816768, 140165750824959, +STORE, 140165750816768, 140165750824959, +ERASE, 140165750824960, 140165750841343, +STORE, 140165750824960, 140165750841343, +STORE, 140165744828416, 140165748625407, +SNULL, 140165744828416, 140165746487295, +STORE, 140165746487296, 140165748625407, +STORE, 140165744828416, 140165746487295, +SNULL, 140165748584447, 140165748625407, +STORE, 140165746487296, 140165748584447, +STORE, 140165748584448, 140165748625407, +SNULL, 140165748584448, 140165748609023, +STORE, 140165748609024, 140165748625407, +STORE, 140165748584448, 140165748609023, +ERASE, 140165748584448, 140165748609023, +STORE, 140165748584448, 140165748609023, +ERASE, 140165748609024, 140165748625407, +STORE, 140165748609024, 140165748625407, +STORE, 140165753036800, 140165753053183, +SNULL, 140165748600831, 140165748609023, +STORE, 140165748584448, 140165748600831, +STORE, 140165748600832, 140165748609023, +SNULL, 140165750820863, 140165750824959, +STORE, 140165750816768, 140165750820863, +STORE, 140165750820864, 140165750824959, +SNULL, 94630731132927, 94630731137023, +STORE, 94630731128832, 94630731132927, +STORE, 94630731132928, 94630731137023, +SNULL, 140165753085951, 140165753090047, +STORE, 140165753081856, 140165753085951, +STORE, 140165753085952, 140165753090047, +ERASE, 140165753053184, 140165753081855, +STORE, 94630743547904, 94630743683071, +STORE, 140165736435712, 140165744828415, +SNULL, 140165736439807, 140165744828415, +STORE, 140165736435712, 140165736439807, +STORE, 140165736439808, 140165744828415, +STORE, 140165728043008, 140165736435711, +STORE, 140165593825280, 140165728043007, +SNULL, 140165593825280, 140165653725183, +STORE, 140165653725184, 140165728043007, +STORE, 140165593825280, 140165653725183, +ERASE, 140165593825280, 140165653725183, +SNULL, 140165720834047, 140165728043007, +STORE, 140165653725184, 140165720834047, +STORE, 140165720834048, 140165728043007, +ERASE, 140165720834048, 140165728043007, +SNULL, 140165653860351, 140165720834047, +STORE, 140165653725184, 140165653860351, +STORE, 140165653860352, 140165720834047, +SNULL, 140165728047103, 140165736435711, +STORE, 140165728043008, 140165728047103, +STORE, 140165728047104, 140165736435711, +STORE, 140165645332480, 140165653725183, +SNULL, 140165645336575, 140165653725183, +STORE, 140165645332480, 140165645336575, +STORE, 140165645336576, 140165653725183, +STORE, 140165636939776, 140165645332479, +SNULL, 140165636943871, 140165645332479, +STORE, 140165636939776, 140165636943871, +STORE, 140165636943872, 140165645332479, +STORE, 140165628547072, 140165636939775, +SNULL, 140165628551167, 140165636939775, +STORE, 140165628547072, 140165628551167, +STORE, 140165628551168, 140165636939775, +STORE, 140165620154368, 140165628547071, +STORE, 140165611761664, 140165628547071, +STORE, 140165603368960, 140165628547071, +STORE, 140165469151232, 140165603368959, +SNULL, 140165469151232, 140165519507455, +STORE, 140165519507456, 140165603368959, +STORE, 140165469151232, 140165519507455, +ERASE, 140165469151232, 140165519507455, +SNULL, 140165586616319, 140165603368959, +STORE, 140165519507456, 140165586616319, +STORE, 140165586616320, 140165603368959, +ERASE, 140165586616320, 140165603368959, +STORE, 140165594976256, 140165628547071, +STORE, 140165385289728, 140165586616319, +SNULL, 140165452398591, 140165586616319, +STORE, 140165385289728, 140165452398591, +STORE, 140165452398592, 140165586616319, +SNULL, 140165452398592, 140165519507455, +STORE, 140165519507456, 140165586616319, +STORE, 140165452398592, 140165519507455, +ERASE, 140165452398592, 140165519507455, +STORE, 140165251072000, 140165452398591, +SNULL, 140165318180863, 140165452398591, +STORE, 140165251072000, 140165318180863, +STORE, 140165318180864, 140165452398591, +SNULL, 140165318180864, 140165385289727, +STORE, 140165385289728, 140165452398591, +STORE, 140165318180864, 140165385289727, +ERASE, 140165318180864, 140165385289727, +SNULL, 140165519642623, 140165586616319, +STORE, 140165519507456, 140165519642623, +STORE, 140165519642624, 140165586616319, +SNULL, 140165594976256, 140165611761663, +STORE, 140165611761664, 140165628547071, +STORE, 140165594976256, 140165611761663, +SNULL, 140165611765759, 140165628547071, +STORE, 140165611761664, 140165611765759, +STORE, 140165611765760, 140165628547071, +STORE, 140165385289728, 140165519507455, +SNULL, 140165385424895, 140165519507455, +STORE, 140165385289728, 140165385424895, +STORE, 140165385424896, 140165519507455, +SNULL, 140165594976256, 140165603368959, +STORE, 140165603368960, 140165611761663, +STORE, 140165594976256, 140165603368959, +SNULL, 140165603373055, 140165611761663, +STORE, 140165603368960, 140165603373055, +STORE, 140165603373056, 140165611761663, +SNULL, 140165251207167, 140165318180863, +STORE, 140165251072000, 140165251207167, +STORE, 140165251207168, 140165318180863, +STORE, 140165376897024, 140165385289727, +SNULL, 140165376901119, 140165385289727, +STORE, 140165376897024, 140165376901119, +STORE, 140165376901120, 140165385289727, +SNULL, 140165385424896, 140165452398591, +STORE, 140165452398592, 140165519507455, +STORE, 140165385424896, 140165452398591, +SNULL, 140165452533759, 140165519507455, +STORE, 140165452398592, 140165452533759, +STORE, 140165452533760, 140165519507455, +STORE, 140165368504320, 140165376897023, +SNULL, 140165594980351, 140165603368959, +STORE, 140165594976256, 140165594980351, +STORE, 140165594980352, 140165603368959, +SNULL, 140165368508415, 140165376897023, +STORE, 140165368504320, 140165368508415, +STORE, 140165368508416, 140165376897023, +SNULL, 140165611765760, 140165620154367, +STORE, 140165620154368, 140165628547071, +STORE, 140165611765760, 140165620154367, +SNULL, 140165620158463, 140165628547071, +STORE, 140165620154368, 140165620158463, +STORE, 140165620158464, 140165628547071, +STORE, 140165360111616, 140165368504319, +STORE, 140165351718912, 140165368504319, +STORE, 140165343326208, 140165368504319, +SNULL, 140165343326208, 140165351718911, +STORE, 140165351718912, 140165368504319, +STORE, 140165343326208, 140165351718911, +SNULL, 140165351723007, 140165368504319, +STORE, 140165351718912, 140165351723007, +STORE, 140165351723008, 140165368504319, +SNULL, 140165343330303, 140165351718911, +STORE, 140165343326208, 140165343330303, +STORE, 140165343330304, 140165351718911, +SNULL, 140165351723008, 140165360111615, +STORE, 140165360111616, 140165368504319, +STORE, 140165351723008, 140165360111615, +SNULL, 140165360115711, 140165368504319, +STORE, 140165360111616, 140165360115711, +STORE, 140165360115712, 140165368504319, +STORE, 140165334933504, 140165343326207, +SNULL, 140165334937599, 140165343326207, +STORE, 140165334933504, 140165334937599, +STORE, 140165334937600, 140165343326207, +STORE, 140165326540800, 140165334933503, +STORE, 140165242679296, 140165251071999, +SNULL, 140165242683391, 140165251071999, +STORE, 140165242679296, 140165242683391, +STORE, 140165242683392, 140165251071999, +STORE, 140165234286592, 140165242679295, +STORE, 140165225893888, 140165242679295, +SNULL, 140165225897983, 140165242679295, +STORE, 140165225893888, 140165225897983, +STORE, 140165225897984, 140165242679295, +SNULL, 140165225897984, 140165234286591, +STORE, 140165234286592, 140165242679295, +STORE, 140165225897984, 140165234286591, +SNULL, 140165234290687, 140165242679295, +STORE, 140165234286592, 140165234290687, +STORE, 140165234290688, 140165242679295, +SNULL, 140165326544895, 140165334933503, +STORE, 140165326540800, 140165326544895, +STORE, 140165326544896, 140165334933503, +STORE, 140165217501184, 140165225893887, +STORE, 140165209108480, 140165225893887, +SNULL, 140165209108480, 140165217501183, +STORE, 140165217501184, 140165225893887, +STORE, 140165209108480, 140165217501183, +SNULL, 140165217505279, 140165225893887, +STORE, 140165217501184, 140165217505279, +STORE, 140165217505280, 140165225893887, +SNULL, 140165209112575, 140165217501183, +STORE, 140165209108480, 140165209112575, +STORE, 140165209112576, 140165217501183, +STORE, 140165200715776, 140165209108479, +STORE, 140165066498048, 140165200715775, +SNULL, 140165066498048, 140165116854271, +STORE, 140165116854272, 140165200715775, +STORE, 140165066498048, 140165116854271, +ERASE, 140165066498048, 140165116854271, +SNULL, 140165183963135, 140165200715775, +STORE, 140165116854272, 140165183963135, +STORE, 140165183963136, 140165200715775, +ERASE, 140165183963136, 140165200715775, +SNULL, 140165116989439, 140165183963135, +STORE, 140165116854272, 140165116989439, +STORE, 140165116989440, 140165183963135, +STORE, 140165192323072, 140165209108479, +STORE, 140165108461568, 140165116854271, +STORE, 140164974243840, 140165108461567, +STORE, 140164965851136, 140164974243839, +SNULL, 140164974243840, 140164982636543, +STORE, 140164982636544, 140165108461567, +STORE, 140164974243840, 140164982636543, +ERASE, 140164974243840, 140164982636543, +STORE, 140164965851136, 140164982636543, +STORE, 140164957458432, 140164982636543, +STORE, 140164949065728, 140164982636543, +STORE, 140164940673024, 140164982636543, +STORE, 140164806455296, 140164940673023, +STORE, 140164798062592, 140164806455295, +STORE, 140164789669888, 140164806455295, +STORE, 140164655452160, 140164789669887, +STORE, 140164647059456, 140164655452159, +STORE, 140164638666752, 140164655452159, +SNULL, 140164655452160, 140164714201087, +STORE, 140164714201088, 140164789669887, +STORE, 140164655452160, 140164714201087, +ERASE, 140164655452160, 140164714201087, +STORE, 140164705808384, 140164714201087, +STORE, 140164697415680, 140164714201087, +STORE, 140164504449024, 140164638666751, +SNULL, 140164504449024, 140164512874495, +STORE, 140164512874496, 140164638666751, +STORE, 140164504449024, 140164512874495, +ERASE, 140164504449024, 140164512874495, +STORE, 140164689022976, 140164714201087, +STORE, 140164680630272, 140164714201087, +SNULL, 140164680634367, 140164714201087, +STORE, 140164680630272, 140164680634367, +STORE, 140164680634368, 140164714201087, +STORE, 140164378656768, 140164638666751, +SNULL, 140165192323072, 140165200715775, +STORE, 140165200715776, 140165209108479, +STORE, 140165192323072, 140165200715775, +SNULL, 140165200719871, 140165209108479, +STORE, 140165200715776, 140165200719871, +STORE, 140165200719872, 140165209108479, +SNULL, 140165049745407, 140165108461567, +STORE, 140164982636544, 140165049745407, +STORE, 140165049745408, 140165108461567, +ERASE, 140165049745408, 140165108461567, +SNULL, 140164982771711, 140165049745407, +STORE, 140164982636544, 140164982771711, +STORE, 140164982771712, 140165049745407, +STORE, 140164244439040, 140164638666751, +SNULL, 140164311547903, 140164638666751, +STORE, 140164244439040, 140164311547903, +STORE, 140164311547904, 140164638666751, +SNULL, 140164311547904, 140164378656767, +STORE, 140164378656768, 140164638666751, +STORE, 140164311547904, 140164378656767, +ERASE, 140164311547904, 140164378656767, +SNULL, 140164806455296, 140164848418815, +STORE, 140164848418816, 140164940673023, +STORE, 140164806455296, 140164848418815, +ERASE, 140164806455296, 140164848418815, +SNULL, 140164915527679, 140164940673023, +STORE, 140164848418816, 140164915527679, +STORE, 140164915527680, 140164940673023, +ERASE, 140164915527680, 140164940673023, +STORE, 140164110221312, 140164311547903, +SNULL, 140164177330175, 140164311547903, +STORE, 140164110221312, 140164177330175, +STORE, 140164177330176, 140164311547903, +SNULL, 140164177330176, 140164244439039, +STORE, 140164244439040, 140164311547903, +STORE, 140164177330176, 140164244439039, +ERASE, 140164177330176, 140164244439039, +SNULL, 140164781309951, 140164789669887, +STORE, 140164714201088, 140164781309951, +STORE, 140164781309952, 140164789669887, +ERASE, 140164781309952, 140164789669887, +STORE, 140163976003584, 140164177330175, +SNULL, 140164043112447, 140164177330175, +STORE, 140163976003584, 140164043112447, +STORE, 140164043112448, 140164177330175, +SNULL, 140164043112448, 140164110221311, +STORE, 140164110221312, 140164177330175, +STORE, 140164043112448, 140164110221311, +ERASE, 140164043112448, 140164110221311, +SNULL, 140164579983359, 140164638666751, +STORE, 140164378656768, 140164579983359, +STORE, 140164579983360, 140164638666751, +ERASE, 140164579983360, 140164638666751, +STORE, 140163841785856, 140164043112447, +SNULL, 140163908894719, 140164043112447, +STORE, 140163841785856, 140163908894719, +STORE, 140163908894720, 140164043112447, +SNULL, 140163908894720, 140163976003583, +STORE, 140163976003584, 140164043112447, +STORE, 140163908894720, 140163976003583, +ERASE, 140163908894720, 140163976003583, +SNULL, 140164940673024, 140164965851135, +STORE, 140164965851136, 140164982636543, +STORE, 140164940673024, 140164965851135, +SNULL, 140164965855231, 140164982636543, +STORE, 140164965851136, 140164965855231, +STORE, 140164965855232, 140164982636543, +SNULL, 140164965855232, 140164974243839, +STORE, 140164974243840, 140164982636543, +STORE, 140164965855232, 140164974243839, +SNULL, 140164974247935, 140164982636543, +STORE, 140164974243840, 140164974247935, +STORE, 140164974247936, 140164982636543, +SNULL, 140164445765631, 140164579983359, +STORE, 140164378656768, 140164445765631, +STORE, 140164445765632, 140164579983359, +SNULL, 140164445765632, 140164512874495, +STORE, 140164512874496, 140164579983359, +STORE, 140164445765632, 140164512874495, +ERASE, 140164445765632, 140164512874495, +SNULL, 140164378791935, 140164445765631, +STORE, 140164378656768, 140164378791935, +STORE, 140164378791936, 140164445765631, +SNULL, 140164789673983, 140164806455295, +STORE, 140164789669888, 140164789673983, +STORE, 140164789673984, 140164806455295, +SNULL, 140164789673984, 140164798062591, +STORE, 140164798062592, 140164806455295, +STORE, 140164789673984, 140164798062591, +SNULL, 140164798066687, 140164806455295, +STORE, 140164798062592, 140164798066687, +STORE, 140164798066688, 140164806455295, +SNULL, 140164638670847, 140164655452159, +STORE, 140164638666752, 140164638670847, +STORE, 140164638670848, 140164655452159, +STORE, 140165100068864, 140165116854271, +STORE, 140165091676160, 140165116854271, +STORE, 140165083283456, 140165116854271, +SNULL, 140164244574207, 140164311547903, +STORE, 140164244439040, 140164244574207, +STORE, 140164244574208, 140164311547903, +SNULL, 140164848553983, 140164915527679, +STORE, 140164848418816, 140164848553983, +STORE, 140164848553984, 140164915527679, +SNULL, 140164110356479, 140164177330175, +STORE, 140164110221312, 140164110356479, +STORE, 140164110356480, 140164177330175, +SNULL, 140164714336255, 140164781309951, +STORE, 140164714201088, 140164714336255, +STORE, 140164714336256, 140164781309951, +SNULL, 140163976138751, 140164043112447, +STORE, 140163976003584, 140163976138751, +STORE, 140163976138752, 140164043112447, +SNULL, 140164513009663, 140164579983359, +STORE, 140164512874496, 140164513009663, +STORE, 140164513009664, 140164579983359, +SNULL, 140163841921023, 140163908894719, +STORE, 140163841785856, 140163841921023, +STORE, 140163841921024, 140163908894719, +SNULL, 140165083283456, 140165100068863, +STORE, 140165100068864, 140165116854271, +STORE, 140165083283456, 140165100068863, +SNULL, 140165100072959, 140165116854271, +STORE, 140165100068864, 140165100072959, +STORE, 140165100072960, 140165116854271, +SNULL, 140165100072960, 140165108461567, +STORE, 140165108461568, 140165116854271, +STORE, 140165100072960, 140165108461567, +SNULL, 140165108465663, 140165116854271, +STORE, 140165108461568, 140165108465663, +STORE, 140165108465664, 140165116854271, +STORE, 140165074890752, 140165100068863, +SNULL, 140165074894847, 140165100068863, +STORE, 140165074890752, 140165074894847, +STORE, 140165074894848, 140165100068863, +STORE, 140165066498048, 140165074890751, +STORE, 140165058105344, 140165074890751, +STORE, 140164932280320, 140164965851135, +SNULL, 140165192327167, 140165200715775, +STORE, 140165192323072, 140165192327167, +STORE, 140165192327168, 140165200715775, +STORE, 140164923887616, 140164965851135, +SNULL, 140164923891711, 140164965851135, +STORE, 140164923887616, 140164923891711, +STORE, 140164923891712, 140164965851135, +SNULL, 140164680634368, 140164705808383, +STORE, 140164705808384, 140164714201087, +STORE, 140164680634368, 140164705808383, +SNULL, 140164705812479, 140164714201087, +STORE, 140164705808384, 140164705812479, +STORE, 140164705812480, 140164714201087, +SNULL, 140164680634368, 140164697415679, +STORE, 140164697415680, 140164705808383, +STORE, 140164680634368, 140164697415679, +SNULL, 140164697419775, 140164705808383, +STORE, 140164697415680, 140164697419775, +STORE, 140164697419776, 140164705808383, +STORE, 140164840026112, 140164848418815, +STORE, 140164831633408, 140164848418815, +STORE, 140164823240704, 140164848418815, +SNULL, 140165074894848, 140165083283455, +STORE, 140165083283456, 140165100068863, +STORE, 140165074894848, 140165083283455, +SNULL, 140165083287551, 140165100068863, +STORE, 140165083283456, 140165083287551, +STORE, 140165083287552, 140165100068863, +SNULL, 140165083287552, 140165091676159, +STORE, 140165091676160, 140165100068863, +STORE, 140165083287552, 140165091676159, +SNULL, 140165091680255, 140165100068863, +STORE, 140165091676160, 140165091680255, +STORE, 140165091680256, 140165100068863, +SNULL, 140164638670848, 140164647059455, +STORE, 140164647059456, 140164655452159, +STORE, 140164638670848, 140164647059455, +SNULL, 140164647063551, 140164655452159, +STORE, 140164647059456, 140164647063551, +STORE, 140164647063552, 140164655452159, +SNULL, 140164923891712, 140164940673023, +STORE, 140164940673024, 140164965851135, +STORE, 140164923891712, 140164940673023, +SNULL, 140164940677119, 140164965851135, +STORE, 140164940673024, 140164940677119, +STORE, 140164940677120, 140164965851135, +SNULL, 140164940677120, 140164949065727, +STORE, 140164949065728, 140164965851135, +STORE, 140164940677120, 140164949065727, +SNULL, 140164949069823, 140164965851135, +STORE, 140164949065728, 140164949069823, +STORE, 140164949069824, 140164965851135, +SNULL, 140164949069824, 140164957458431, +STORE, 140164957458432, 140164965851135, +STORE, 140164949069824, 140164957458431, +SNULL, 140164957462527, 140164965851135, +STORE, 140164957458432, 140164957462527, +STORE, 140164957462528, 140164965851135, +SNULL, 140164680634368, 140164689022975, +STORE, 140164689022976, 140164697415679, +STORE, 140164680634368, 140164689022975, +SNULL, 140164689027071, 140164697415679, +STORE, 140164689022976, 140164689027071, +STORE, 140164689027072, 140164697415679, +STORE, 140164814848000, 140164848418815, +SNULL, 140165058105344, 140165066498047, +STORE, 140165066498048, 140165074890751, +STORE, 140165058105344, 140165066498047, +SNULL, 140165066502143, 140165074890751, +STORE, 140165066498048, 140165066502143, +STORE, 140165066502144, 140165074890751, +SNULL, 140165058109439, 140165066498047, +STORE, 140165058105344, 140165058109439, +STORE, 140165058109440, 140165066498047, +STORE, 140164798066688, 140164814847999, +SNULL, 140164798066688, 140164806455295, +STORE, 140164806455296, 140164814847999, +STORE, 140164798066688, 140164806455295, +SNULL, 140164806459391, 140164814847999, +STORE, 140164806455296, 140164806459391, +STORE, 140164806459392, 140164814847999, +SNULL, 140164923891712, 140164932280319, +STORE, 140164932280320, 140164940673023, +STORE, 140164923891712, 140164932280319, +SNULL, 140164932284415, 140164940673023, +STORE, 140164932280320, 140164932284415, +STORE, 140164932284416, 140164940673023, +STORE, 140164672237568, 140164680630271, +STORE, 140164663844864, 140164680630271, +STORE, 140164647063552, 140164680630271, +SNULL, 140164647063552, 140164655452159, +STORE, 140164655452160, 140164680630271, +STORE, 140164647063552, 140164655452159, +SNULL, 140164655456255, 140164680630271, +STORE, 140164655452160, 140164655456255, +STORE, 140164655456256, 140164680630271, +STORE, 140164630274048, 140164638666751, +SNULL, 140164814852095, 140164848418815, +STORE, 140164814848000, 140164814852095, +STORE, 140164814852096, 140164848418815, +SNULL, 140164814852096, 140164831633407, +STORE, 140164831633408, 140164848418815, +STORE, 140164814852096, 140164831633407, +SNULL, 140164831637503, 140164848418815, +STORE, 140164831633408, 140164831637503, +STORE, 140164831637504, 140164848418815, +STORE, 140164621881344, 140164638666751, +SNULL, 140164831637504, 140164840026111, +STORE, 140164840026112, 140164848418815, +STORE, 140164831637504, 140164840026111, +SNULL, 140164840030207, 140164848418815, +STORE, 140164840026112, 140164840030207, +STORE, 140164840030208, 140164848418815, +STORE, 140164613488640, 140164638666751, +SNULL, 140164613492735, 140164638666751, +STORE, 140164613488640, 140164613492735, +STORE, 140164613492736, 140164638666751, +STORE, 140164605095936, 140164613488639, +SNULL, 140164605100031, 140164613488639, +STORE, 140164605095936, 140164605100031, +STORE, 140164605100032, 140164613488639, +STORE, 140164596703232, 140164605095935, +STORE, 140164588310528, 140164605095935, +SNULL, 140164588314623, 140164605095935, +STORE, 140164588310528, 140164588314623, +STORE, 140164588314624, 140164605095935, +STORE, 140164504481792, 140164512874495, +STORE, 140164496089088, 140164512874495, +SNULL, 140164496089088, 140164504481791, +STORE, 140164504481792, 140164512874495, +STORE, 140164496089088, 140164504481791, +SNULL, 140164504485887, 140164512874495, +STORE, 140164504481792, 140164504485887, +STORE, 140164504485888, 140164512874495, +SNULL, 140164613492736, 140164630274047, +STORE, 140164630274048, 140164638666751, +STORE, 140164613492736, 140164630274047, +SNULL, 140164630278143, 140164638666751, +STORE, 140164630274048, 140164630278143, +STORE, 140164630278144, 140164638666751, +STORE, 140164487696384, 140164504481791, +STORE, 140164479303680, 140164504481791, +SNULL, 140164814852096, 140164823240703, +STORE, 140164823240704, 140164831633407, +STORE, 140164814852096, 140164823240703, +SNULL, 140164823244799, 140164831633407, +STORE, 140164823240704, 140164823244799, +STORE, 140164823244800, 140164831633407, +STORE, 140164470910976, 140164504481791, +SNULL, 140164470910976, 140164496089087, +STORE, 140164496089088, 140164504481791, +STORE, 140164470910976, 140164496089087, +SNULL, 140164496093183, 140164504481791, +STORE, 140164496089088, 140164496093183, +STORE, 140164496093184, 140164504481791, +SNULL, 140164655456256, 140164672237567, +STORE, 140164672237568, 140164680630271, +STORE, 140164655456256, 140164672237567, +SNULL, 140164672241663, 140164680630271, +STORE, 140164672237568, 140164672241663, +STORE, 140164672241664, 140164680630271, +STORE, 140164462518272, 140164496089087, +STORE, 140164454125568, 140164496089087, +SNULL, 140164655456256, 140164663844863, +STORE, 140164663844864, 140164672237567, +STORE, 140164655456256, 140164663844863, +SNULL, 140164663848959, 140164672237567, +STORE, 140164663844864, 140164663848959, +STORE, 140164663848960, 140164672237567, +STORE, 140164370264064, 140164378656767, +STORE, 140164361871360, 140164378656767, +STORE, 140164353478656, 140164378656767, +STORE, 140164345085952, 140164378656767, +SNULL, 140164345085952, 140164353478655, +STORE, 140164353478656, 140164378656767, +STORE, 140164345085952, 140164353478655, +SNULL, 140164353482751, 140164378656767, +STORE, 140164353478656, 140164353482751, +STORE, 140164353482752, 140164378656767, +SNULL, 140164454125568, 140164487696383, +STORE, 140164487696384, 140164496089087, +STORE, 140164454125568, 140164487696383, +SNULL, 140164487700479, 140164496089087, +STORE, 140164487696384, 140164487700479, +STORE, 140164487700480, 140164496089087, +STORE, 140164336693248, 140164353478655, +SNULL, 140164336697343, 140164353478655, +STORE, 140164336693248, 140164336697343, +STORE, 140164336697344, 140164353478655, +STORE, 140164328300544, 140164336693247, +SNULL, 140164454125568, 140164479303679, +STORE, 140164479303680, 140164487696383, +STORE, 140164454125568, 140164479303679, +SNULL, 140164479307775, 140164487696383, +STORE, 140164479303680, 140164479307775, +STORE, 140164479307776, 140164487696383, +STORE, 140164319907840, 140164336693247, +STORE, 140164236046336, 140164244439039, +SNULL, 140164588314624, 140164596703231, +STORE, 140164596703232, 140164605095935, +STORE, 140164588314624, 140164596703231, +SNULL, 140164596707327, 140164605095935, +STORE, 140164596703232, 140164596707327, +STORE, 140164596707328, 140164605095935, +SNULL, 140164454125568, 140164462518271, +STORE, 140164462518272, 140164479303679, +STORE, 140164454125568, 140164462518271, +SNULL, 140164462522367, 140164479303679, +STORE, 140164462518272, 140164462522367, +STORE, 140164462522368, 140164479303679, +STORE, 140164227653632, 140164244439039, +SNULL, 140164227657727, 140164244439039, +STORE, 140164227653632, 140164227657727, +STORE, 140164227657728, 140164244439039, +SNULL, 140164462522368, 140164470910975, +STORE, 140164470910976, 140164479303679, +STORE, 140164462522368, 140164470910975, +SNULL, 140164470915071, 140164479303679, +STORE, 140164470910976, 140164470915071, +STORE, 140164470915072, 140164479303679, +SNULL, 140164613492736, 140164621881343, +STORE, 140164621881344, 140164630274047, +STORE, 140164613492736, 140164621881343, +SNULL, 140164621885439, 140164630274047, +STORE, 140164621881344, 140164621885439, +STORE, 140164621885440, 140164630274047, +SNULL, 140164353482752, 140164370264063, +STORE, 140164370264064, 140164378656767, +STORE, 140164353482752, 140164370264063, +SNULL, 140164370268159, 140164378656767, +STORE, 140164370264064, 140164370268159, +STORE, 140164370268160, 140164378656767, +STORE, 140164219260928, 140164227653631, +SNULL, 140164319911935, 140164336693247, +STORE, 140164319907840, 140164319911935, +STORE, 140164319911936, 140164336693247, +SNULL, 140164336697344, 140164345085951, +STORE, 140164345085952, 140164353478655, +STORE, 140164336697344, 140164345085951, +SNULL, 140164345090047, 140164353478655, +STORE, 140164345085952, 140164345090047, +STORE, 140164345090048, 140164353478655, +SNULL, 140164319911936, 140164328300543, +STORE, 140164328300544, 140164336693247, +STORE, 140164319911936, 140164328300543, +SNULL, 140164328304639, 140164336693247, +STORE, 140164328300544, 140164328304639, +STORE, 140164328304640, 140164336693247, +SNULL, 140164454129663, 140164462518271, +STORE, 140164454125568, 140164454129663, +STORE, 140164454129664, 140164462518271, +STORE, 140164210868224, 140164227653631, +STORE, 140164202475520, 140164227653631, +STORE, 140164194082816, 140164227653631, +SNULL, 140164194086911, 140164227653631, +STORE, 140164194082816, 140164194086911, +STORE, 140164194086912, 140164227653631, +SNULL, 140164353482752, 140164361871359, +STORE, 140164361871360, 140164370264063, +STORE, 140164353482752, 140164361871359, +SNULL, 140164361875455, 140164370264063, +STORE, 140164361871360, 140164361875455, +STORE, 140164361875456, 140164370264063, +SNULL, 140164227657728, 140164236046335, +STORE, 140164236046336, 140164244439039, +STORE, 140164227657728, 140164236046335, +SNULL, 140164236050431, 140164244439039, +STORE, 140164236046336, 140164236050431, +STORE, 140164236050432, 140164244439039, +STORE, 140164185690112, 140164194082815, +SNULL, 140164194086912, 140164219260927, +STORE, 140164219260928, 140164227653631, +STORE, 140164194086912, 140164219260927, +SNULL, 140164219265023, 140164227653631, +STORE, 140164219260928, 140164219265023, +STORE, 140164219265024, 140164227653631, +STORE, 140164101828608, 140164110221311, +STORE, 140164093435904, 140164110221311, +STORE, 140164085043200, 140164110221311, +SNULL, 140164085047295, 140164110221311, +STORE, 140164085043200, 140164085047295, +STORE, 140164085047296, 140164110221311, +STORE, 140164076650496, 140164085043199, +SNULL, 140164185694207, 140164194082815, +STORE, 140164185690112, 140164185694207, +STORE, 140164185694208, 140164194082815, +SNULL, 140164085047296, 140164101828607, +STORE, 140164101828608, 140164110221311, +STORE, 140164085047296, 140164101828607, +SNULL, 140164101832703, 140164110221311, +STORE, 140164101828608, 140164101832703, +STORE, 140164101832704, 140164110221311, +SNULL, 140164085047296, 140164093435903, +STORE, 140164093435904, 140164101828607, +STORE, 140164085047296, 140164093435903, +SNULL, 140164093439999, 140164101828607, +STORE, 140164093435904, 140164093439999, +STORE, 140164093440000, 140164101828607, +SNULL, 140164194086912, 140164202475519, +STORE, 140164202475520, 140164219260927, +STORE, 140164194086912, 140164202475519, +SNULL, 140164202479615, 140164219260927, +STORE, 140164202475520, 140164202479615, +STORE, 140164202479616, 140164219260927, +SNULL, 140164202479616, 140164210868223, +STORE, 140164210868224, 140164219260927, +STORE, 140164202479616, 140164210868223, +SNULL, 140164210872319, 140164219260927, +STORE, 140164210868224, 140164210872319, +STORE, 140164210872320, 140164219260927, +SNULL, 140164076654591, 140164085043199, +STORE, 140164076650496, 140164076654591, +STORE, 140164076654592, 140164085043199, +STORE, 140164068257792, 140164076650495, +SNULL, 140164068261887, 140164076650495, +STORE, 140164068257792, 140164068261887, +STORE, 140164068261888, 140164076650495, +STORE, 140165753053184, 140165753081855, +STORE, 140165725851648, 140165728043007, +SNULL, 140165725851648, 140165725941759, +STORE, 140165725941760, 140165728043007, +STORE, 140165725851648, 140165725941759, +SNULL, 140165728034815, 140165728043007, +STORE, 140165725941760, 140165728034815, +STORE, 140165728034816, 140165728043007, +ERASE, 140165728034816, 140165728043007, +STORE, 140165728034816, 140165728043007, +SNULL, 140165728038911, 140165728043007, +STORE, 140165728034816, 140165728038911, +STORE, 140165728038912, 140165728043007, +ERASE, 140165753053184, 140165753081855, +ERASE, 140164638666752, 140164638670847, +ERASE, 140164638670848, 140164647059455, +ERASE, 140165091676160, 140165091680255, +ERASE, 140165091680256, 140165100068863, +ERASE, 140164613488640, 140164613492735, +ERASE, 140164613492736, 140164621881343, +ERASE, 140164319907840, 140164319911935, +ERASE, 140164319911936, 140164328300543, +ERASE, 140165620154368, 140165620158463, +ERASE, 140165620158464, 140165628547071, +ERASE, 140164798062592, 140164798066687, +ERASE, 140164798066688, 140164806455295, +ERASE, 140164789669888, 140164789673983, +ERASE, 140164789673984, 140164798062591, +ERASE, 140164965851136, 140164965855231, +ERASE, 140164965855232, 140164974243839, +ERASE, 140165074890752, 140165074894847, +ERASE, 140165074894848, 140165083283455, +ERASE, 140164672237568, 140164672241663, +ERASE, 140164672241664, 140164680630271, +ERASE, 140164454125568, 140164454129663, +ERASE, 140164454129664, 140164462518271, +ERASE, 140165200715776, 140165200719871, +ERASE, 140165200719872, 140165209108479, +ERASE, 140164932280320, 140164932284415, +ERASE, 140164932284416, 140164940673023, +ERASE, 140164663844864, 140164663848959, +ERASE, 140164663848960, 140164672237567, +ERASE, 140164697415680, 140164697419775, +ERASE, 140164697419776, 140164705808383, +ERASE, 140164831633408, 140164831637503, +ERASE, 140164831637504, 140164840026111, +ERASE, 140165192323072, 140165192327167, +ERASE, 140165192327168, 140165200715775, +ERASE, 140165108461568, 140165108465663, +ERASE, 140165108465664, 140165116854271, +ERASE, 140164840026112, 140164840030207, +ERASE, 140164840030208, 140164848418815, +ERASE, 140164647059456, 140164647063551, +ERASE, 140164647063552, 140164655452159, +ERASE, 140165083283456, 140165083287551, +ERASE, 140165083287552, 140165091676159, +ERASE, 140164923887616, 140164923891711, +ERASE, 140164923891712, 140164932280319, +ERASE, 140164823240704, 140164823244799, +ERASE, 140164823244800, 140164831633407, +ERASE, 140164227653632, 140164227657727, +ERASE, 140164227657728, 140164236046335, +ERASE, 140164957458432, 140164957462527, +ERASE, 140164957462528, 140164965851135, +ERASE, 140164680630272, 140164680634367, +ERASE, 140164680634368, 140164689022975, +ERASE, 140164974243840, 140164974247935, +ERASE, 140164974247936, 140164982636543, +ERASE, 140165066498048, 140165066502143, +ERASE, 140165066502144, 140165074890751, +ERASE, 140164621881344, 140164621885439, +ERASE, 140164621885440, 140164630274047, +ERASE, 140164949065728, 140164949069823, +ERASE, 140164949069824, 140164957458431, +ERASE, 140164588310528, 140164588314623, +ERASE, 140164588314624, 140164596703231, +ERASE, 140164806455296, 140164806459391, +ERASE, 140164806459392, 140164814847999, +ERASE, 140164940673024, 140164940677119, +ERASE, 140164940677120, 140164949065727, +ERASE, 140164596703232, 140164596707327, +ERASE, 140164596707328, 140164605095935, +ERASE, 140164605095936, 140164605100031, +ERASE, 140164605100032, 140164613488639, +ERASE, 140164655452160, 140164655456255, +ERASE, 140164655456256, 140164663844863, +ERASE, 140164705808384, 140164705812479, +ERASE, 140164705812480, 140164714201087, +ERASE, 140164689022976, 140164689027071, +ERASE, 140164689027072, 140164697415679, +ERASE, 140164630274048, 140164630278143, +ERASE, 140164630278144, 140164638666751, +ERASE, 140164479303680, 140164479307775, +ERASE, 140164479307776, 140164487696383, +ERASE, 140164236046336, 140164236050431, +ERASE, 140164236050432, 140164244439039, +ERASE, 140164085043200, 140164085047295, +ERASE, 140164085047296, 140164093435903, +ERASE, 140164345085952, 140164345090047, +ERASE, 140164345090048, 140164353478655, +ERASE, 140164101828608, 140164101832703, +ERASE, 140164101832704, 140164110221311, +ERASE, 140164370264064, 140164370268159, +ERASE, 140164370268160, 140164378656767, +ERASE, 140164336693248, 140164336697343, +ERASE, 140164336697344, 140164345085951, +ERASE, 140164194082816, 140164194086911, +ERASE, 140164194086912, 140164202475519, +ERASE, 140164353478656, 140164353482751, +ERASE, 140164353482752, 140164361871359, +ERASE, 140164210868224, 140164210872319, +ERASE, 140164210872320, 140164219260927, +ERASE, 140164814848000, 140164814852095, +ERASE, 140164814852096, 140164823240703, +ERASE, 140164504481792, 140164504485887, +ERASE, 140164504485888, 140164512874495, +ERASE, 140165100068864, 140165100072959, +ERASE, 140165100072960, 140165108461567, +ERASE, 140164361871360, 140164361875455, +ERASE, 140164361875456, 140164370264063, +ERASE, 140164470910976, 140164470915071, +ERASE, 140164470915072, 140164479303679, +ERASE, 140164076650496, 140164076654591, +ERASE, 140164076654592, 140164085043199, +ERASE, 140164202475520, 140164202479615, +ERASE, 140164202479616, 140164210868223, +ERASE, 140164462518272, 140164462522367, +ERASE, 140164462522368, 140164470910975, +ERASE, 140165351718912, 140165351723007, +ERASE, 140165351723008, 140165360111615, +ERASE, 140164328300544, 140164328304639, +ERASE, 140164328304640, 140164336693247, +ERASE, 140164093435904, 140164093439999, +ERASE, 140164093440000, 140164101828607, +ERASE, 140165603368960, 140165603373055, +ERASE, 140165603373056, 140165611761663, +ERASE, 140165368504320, 140165368508415, +ERASE, 140165368508416, 140165376897023, +ERASE, 140165334933504, 140165334937599, +ERASE, 140165334937600, 140165343326207, +ERASE, 140165594976256, 140165594980351, +ERASE, 140165594980352, 140165603368959, +ERASE, 140164487696384, 140164487700479, +ERASE, 140164487700480, 140164496089087, +ERASE, 140164219260928, 140164219265023, +ERASE, 140164219265024, 140164227653631, +ERASE, 140164185690112, 140164185694207, +ERASE, 140164185694208, 140164194082815, +ERASE, 140164068257792, 140164068261887, +ERASE, 140164068261888, 140164076650495, +ERASE, 140165225893888, 140165225897983, +ERASE, 140165225897984, 140165234286591, +ERASE, 140165058105344, 140165058109439, + }; + unsigned long set31[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140730890784768, 140737488351231, +SNULL, 140730890788863, 140737488351231, +STORE, 140730890784768, 140730890788863, +STORE, 140730890653696, 140730890788863, +STORE, 94577123659776, 94577125912575, +SNULL, 94577123790847, 94577125912575, +STORE, 94577123659776, 94577123790847, +STORE, 94577123790848, 94577125912575, +ERASE, 94577123790848, 94577125912575, +STORE, 94577125883904, 94577125892095, +STORE, 94577125892096, 94577125912575, +STORE, 140624060407808, 140624062660607, +SNULL, 140624060551167, 140624062660607, +STORE, 140624060407808, 140624060551167, +STORE, 140624060551168, 140624062660607, +ERASE, 140624060551168, 140624062660607, +STORE, 140624062648320, 140624062656511, +STORE, 140624062656512, 140624062660607, +STORE, 140730892140544, 140730892144639, +STORE, 140730892128256, 140730892140543, +STORE, 140624062619648, 140624062648319, +STORE, 140624062611456, 140624062619647, +STORE, 140624058191872, 140624060407807, +SNULL, 140624058191872, 140624058290175, +STORE, 140624058290176, 140624060407807, +STORE, 140624058191872, 140624058290175, +SNULL, 140624060383231, 140624060407807, +STORE, 140624058290176, 140624060383231, +STORE, 140624060383232, 140624060407807, +SNULL, 140624060383232, 140624060391423, +STORE, 140624060391424, 140624060407807, +STORE, 140624060383232, 140624060391423, +ERASE, 140624060383232, 140624060391423, +STORE, 140624060383232, 140624060391423, +ERASE, 140624060391424, 140624060407807, +STORE, 140624060391424, 140624060407807, +STORE, 140624054394880, 140624058191871, +SNULL, 140624054394880, 140624056053759, +STORE, 140624056053760, 140624058191871, +STORE, 140624054394880, 140624056053759, +SNULL, 140624058150911, 140624058191871, +STORE, 140624056053760, 140624058150911, +STORE, 140624058150912, 140624058191871, +SNULL, 140624058150912, 140624058175487, +STORE, 140624058175488, 140624058191871, +STORE, 140624058150912, 140624058175487, +ERASE, 140624058150912, 140624058175487, +STORE, 140624058150912, 140624058175487, +ERASE, 140624058175488, 140624058191871, +STORE, 140624058175488, 140624058191871, +STORE, 140624062603264, 140624062619647, +SNULL, 140624058167295, 140624058175487, +STORE, 140624058150912, 140624058167295, +STORE, 140624058167296, 140624058175487, +SNULL, 140624060387327, 140624060391423, +STORE, 140624060383232, 140624060387327, +STORE, 140624060387328, 140624060391423, +SNULL, 94577125887999, 94577125892095, +STORE, 94577125883904, 94577125887999, +STORE, 94577125888000, 94577125892095, +SNULL, 140624062652415, 140624062656511, +STORE, 140624062648320, 140624062652415, +STORE, 140624062652416, 140624062656511, +ERASE, 140624062619648, 140624062648319, +STORE, 94577157709824, 94577157844991, +STORE, 140624046002176, 140624054394879, +SNULL, 140624046006271, 140624054394879, +STORE, 140624046002176, 140624046006271, +STORE, 140624046006272, 140624054394879, +STORE, 140624037609472, 140624046002175, +STORE, 140623903391744, 140624037609471, +SNULL, 140623903391744, 140623940157439, +STORE, 140623940157440, 140624037609471, +STORE, 140623903391744, 140623940157439, +ERASE, 140623903391744, 140623940157439, +SNULL, 140624007266303, 140624037609471, +STORE, 140623940157440, 140624007266303, +STORE, 140624007266304, 140624037609471, +ERASE, 140624007266304, 140624037609471, +SNULL, 140623940292607, 140624007266303, +STORE, 140623940157440, 140623940292607, +STORE, 140623940292608, 140624007266303, +SNULL, 140624037613567, 140624046002175, +STORE, 140624037609472, 140624037613567, +STORE, 140624037613568, 140624046002175, +STORE, 140624029216768, 140624037609471, +SNULL, 140624029220863, 140624037609471, +STORE, 140624029216768, 140624029220863, +STORE, 140624029220864, 140624037609471, +STORE, 140624020824064, 140624029216767, +SNULL, 140624020828159, 140624029216767, +STORE, 140624020824064, 140624020828159, +STORE, 140624020828160, 140624029216767, +STORE, 140624012431360, 140624020824063, +SNULL, 140624012435455, 140624020824063, +STORE, 140624012431360, 140624012435455, +STORE, 140624012435456, 140624020824063, +STORE, 140623931764736, 140623940157439, +STORE, 140623797547008, 140623931764735, +SNULL, 140623797547008, 140623805939711, +STORE, 140623805939712, 140623931764735, +STORE, 140623797547008, 140623805939711, +ERASE, 140623797547008, 140623805939711, +SNULL, 140623873048575, 140623931764735, +STORE, 140623805939712, 140623873048575, +STORE, 140623873048576, 140623931764735, +ERASE, 140623873048576, 140623931764735, +STORE, 140623923372032, 140623940157439, +STORE, 140623914979328, 140623940157439, +STORE, 140623906586624, 140623940157439, +STORE, 140623671721984, 140623873048575, +SNULL, 140623738830847, 140623873048575, +STORE, 140623671721984, 140623738830847, +STORE, 140623738830848, 140623873048575, +SNULL, 140623738830848, 140623805939711, +STORE, 140623805939712, 140623873048575, +STORE, 140623738830848, 140623805939711, +ERASE, 140623738830848, 140623805939711, +SNULL, 140623806074879, 140623873048575, +STORE, 140623805939712, 140623806074879, +STORE, 140623806074880, 140623873048575, +SNULL, 140623906586624, 140623931764735, +STORE, 140623931764736, 140623940157439, +STORE, 140623906586624, 140623931764735, +SNULL, 140623931768831, 140623940157439, +STORE, 140623931764736, 140623931768831, +STORE, 140623931768832, 140623940157439, +STORE, 140623537504256, 140623738830847, +SNULL, 140623537504256, 140623671721983, +STORE, 140623671721984, 140623738830847, +STORE, 140623537504256, 140623671721983, +SNULL, 140623671857151, 140623738830847, +STORE, 140623671721984, 140623671857151, +STORE, 140623671857152, 140623738830847, +SNULL, 140623604613119, 140623671721983, +STORE, 140623537504256, 140623604613119, +STORE, 140623604613120, 140623671721983, +ERASE, 140623604613120, 140623671721983, +SNULL, 140623537639423, 140623604613119, +STORE, 140623537504256, 140623537639423, +STORE, 140623537639424, 140623604613119, +STORE, 140623537639424, 140623671721983, +SNULL, 140623537639424, 140623604613119, +STORE, 140623604613120, 140623671721983, +STORE, 140623537639424, 140623604613119, +SNULL, 140623604748287, 140623671721983, +STORE, 140623604613120, 140623604748287, +STORE, 140623604748288, 140623671721983, +STORE, 140623898193920, 140623931764735, +SNULL, 140623898193920, 140623923372031, +STORE, 140623923372032, 140623931764735, +STORE, 140623898193920, 140623923372031, +SNULL, 140623923376127, 140623931764735, +STORE, 140623923372032, 140623923376127, +STORE, 140623923376128, 140623931764735, +STORE, 140623889801216, 140623923372031, +SNULL, 140623889801216, 140623898193919, +STORE, 140623898193920, 140623923372031, +STORE, 140623889801216, 140623898193919, +SNULL, 140623898198015, 140623923372031, +STORE, 140623898193920, 140623898198015, +STORE, 140623898198016, 140623923372031, +SNULL, 140623889805311, 140623898193919, +STORE, 140623889801216, 140623889805311, +STORE, 140623889805312, 140623898193919, +SNULL, 140623898198016, 140623906586623, +STORE, 140623906586624, 140623923372031, +STORE, 140623898198016, 140623906586623, +SNULL, 140623906590719, 140623923372031, +STORE, 140623906586624, 140623906590719, +STORE, 140623906590720, 140623923372031, +STORE, 140623881408512, 140623889801215, +SNULL, 140623906590720, 140623914979327, +STORE, 140623914979328, 140623923372031, +STORE, 140623906590720, 140623914979327, +SNULL, 140623914983423, 140623923372031, +STORE, 140623914979328, 140623914983423, +STORE, 140623914983424, 140623923372031, +SNULL, 140623881412607, 140623889801215, +STORE, 140623881408512, 140623881412607, +STORE, 140623881412608, 140623889801215, +STORE, 140623797547008, 140623805939711, +STORE, 140623789154304, 140623805939711, +STORE, 140623780761600, 140623805939711, +SNULL, 140623780761600, 140623789154303, +STORE, 140623789154304, 140623805939711, +STORE, 140623780761600, 140623789154303, +SNULL, 140623789158399, 140623805939711, +STORE, 140623789154304, 140623789158399, +STORE, 140623789158400, 140623805939711, +STORE, 140623772368896, 140623789154303, +STORE, 140623763976192, 140623789154303, +SNULL, 140623763976192, 140623780761599, +STORE, 140623780761600, 140623789154303, +STORE, 140623763976192, 140623780761599, +SNULL, 140623780765695, 140623789154303, +STORE, 140623780761600, 140623780765695, +STORE, 140623780765696, 140623789154303, +SNULL, 140623789158400, 140623797547007, +STORE, 140623797547008, 140623805939711, +STORE, 140623789158400, 140623797547007, +SNULL, 140623797551103, 140623805939711, +STORE, 140623797547008, 140623797551103, +STORE, 140623797551104, 140623805939711, +SNULL, 140623763976192, 140623772368895, +STORE, 140623772368896, 140623780761599, +STORE, 140623763976192, 140623772368895, +SNULL, 140623772372991, 140623780761599, +STORE, 140623772368896, 140623772372991, +STORE, 140623772372992, 140623780761599, +SNULL, 140623763980287, 140623772368895, +STORE, 140623763976192, 140623763980287, +STORE, 140623763980288, 140623772368895, +STORE, 140623755583488, 140623763976191, +STORE, 140623747190784, 140623763976191, +SNULL, 140623747190784, 140623755583487, +STORE, 140623755583488, 140623763976191, +STORE, 140623747190784, 140623755583487, +SNULL, 140623755587583, 140623763976191, +STORE, 140623755583488, 140623755587583, +STORE, 140623755587584, 140623763976191, +STORE, 140623529111552, 140623537504255, +SNULL, 140623747194879, 140623755583487, +STORE, 140623747190784, 140623747194879, +STORE, 140623747194880, 140623755583487, +SNULL, 140623529115647, 140623537504255, +STORE, 140623529111552, 140623529115647, +STORE, 140623529115648, 140623537504255, +STORE, 140623520718848, 140623529111551, +SNULL, 140623520722943, 140623529111551, +STORE, 140623520718848, 140623520722943, +STORE, 140623520722944, 140623529111551, +STORE, 140623512326144, 140623520718847, +STORE, 140623503933440, 140623520718847, +STORE, 140623495540736, 140623520718847, +STORE, 140623361323008, 140623495540735, +STORE, 140623227105280, 140623495540735, +STORE, 140623218712576, 140623227105279, +STORE, 140623084494848, 140623218712575, +STORE, 140623076102144, 140623084494847, +STORE, 140622941884416, 140623076102143, +SNULL, 140622941884416, 140623000633343, +STORE, 140623000633344, 140623076102143, +STORE, 140622941884416, 140623000633343, +ERASE, 140622941884416, 140623000633343, +STORE, 140622992240640, 140623000633343, +STORE, 140622983847936, 140623000633343, +STORE, 140622849630208, 140622983847935, +STORE, 140622841237504, 140622849630207, +SNULL, 140622849630208, 140622866415615, +STORE, 140622866415616, 140622983847935, +STORE, 140622849630208, 140622866415615, +ERASE, 140622849630208, 140622866415615, +STORE, 140622858022912, 140622866415615, +SNULL, 140622933524479, 140622983847935, +STORE, 140622866415616, 140622933524479, +STORE, 140622933524480, 140622983847935, +ERASE, 140622933524480, 140622983847935, +STORE, 140622975455232, 140623000633343, +STORE, 140622707019776, 140622841237503, +STORE, 140622967062528, 140623000633343, +STORE, 140622572802048, 140622841237503, +STORE, 140622958669824, 140623000633343, +STORE, 140622438584320, 140622841237503, +STORE, 140622950277120, 140623000633343, +SNULL, 140622858027007, 140622866415615, +STORE, 140622858022912, 140622858027007, +STORE, 140622858027008, 140622866415615, +STORE, 140622941884416, 140623000633343, +STORE, 140622841237504, 140622858022911, +SNULL, 140622841237504, 140622849630207, +STORE, 140622849630208, 140622858022911, +STORE, 140622841237504, 140622849630207, +SNULL, 140622849634303, 140622858022911, +STORE, 140622849630208, 140622849634303, +STORE, 140622849634304, 140622858022911, +STORE, 140622430191616, 140622438584319, +SNULL, 140622430195711, 140622438584319, +STORE, 140622430191616, 140622430195711, +STORE, 140622430195712, 140622438584319, +SNULL, 140623361323007, 140623495540735, +STORE, 140623227105280, 140623361323007, +STORE, 140623361323008, 140623495540735, +SNULL, 140623361323008, 140623403286527, +STORE, 140623403286528, 140623495540735, +STORE, 140623361323008, 140623403286527, +ERASE, 140623361323008, 140623403286527, +SNULL, 140623470395391, 140623495540735, +STORE, 140623403286528, 140623470395391, +STORE, 140623470395392, 140623495540735, +ERASE, 140623470395392, 140623495540735, +SNULL, 140623227105280, 140623269068799, +STORE, 140623269068800, 140623361323007, +STORE, 140623227105280, 140623269068799, +ERASE, 140623227105280, 140623269068799, +SNULL, 140623084494848, 140623134851071, +STORE, 140623134851072, 140623218712575, +STORE, 140623084494848, 140623134851071, +ERASE, 140623084494848, 140623134851071, +SNULL, 140623201959935, 140623218712575, +STORE, 140623134851072, 140623201959935, +STORE, 140623201959936, 140623218712575, +ERASE, 140623201959936, 140623218712575, +SNULL, 140623067742207, 140623076102143, +STORE, 140623000633344, 140623067742207, +STORE, 140623067742208, 140623076102143, +ERASE, 140623067742208, 140623076102143, +STORE, 140622295973888, 140622430191615, +SNULL, 140622295973888, 140622329544703, +STORE, 140622329544704, 140622430191615, +STORE, 140622295973888, 140622329544703, +ERASE, 140622295973888, 140622329544703, +SNULL, 140622866550783, 140622933524479, +STORE, 140622866415616, 140622866550783, +STORE, 140622866550784, 140622933524479, +SNULL, 140622707019775, 140622841237503, +STORE, 140622438584320, 140622707019775, +STORE, 140622707019776, 140622841237503, +SNULL, 140622707019776, 140622732197887, +STORE, 140622732197888, 140622841237503, +STORE, 140622707019776, 140622732197887, +ERASE, 140622707019776, 140622732197887, +SNULL, 140622799306751, 140622841237503, +STORE, 140622732197888, 140622799306751, +STORE, 140622799306752, 140622841237503, +ERASE, 140622799306752, 140622841237503, +SNULL, 140622572802047, 140622707019775, +STORE, 140622438584320, 140622572802047, +STORE, 140622572802048, 140622707019775, +SNULL, 140622572802048, 140622597980159, +STORE, 140622597980160, 140622707019775, +STORE, 140622572802048, 140622597980159, +ERASE, 140622572802048, 140622597980159, +SNULL, 140622438584320, 140622463762431, +STORE, 140622463762432, 140622572802047, +STORE, 140622438584320, 140622463762431, +ERASE, 140622438584320, 140622463762431, +SNULL, 140622530871295, 140622572802047, +STORE, 140622463762432, 140622530871295, +STORE, 140622530871296, 140622572802047, +ERASE, 140622530871296, 140622572802047, +STORE, 140622195326976, 140622430191615, +SNULL, 140622262435839, 140622430191615, +STORE, 140622195326976, 140622262435839, +STORE, 140622262435840, 140622430191615, +SNULL, 140622262435840, 140622329544703, +STORE, 140622329544704, 140622430191615, +STORE, 140622262435840, 140622329544703, +ERASE, 140622262435840, 140622329544703, +SNULL, 140622841241599, 140622849630207, +STORE, 140622841237504, 140622841241599, +STORE, 140622841241600, 140622849630207, +STORE, 140623487148032, 140623520718847, +STORE, 140623478755328, 140623520718847, +SNULL, 140622941884416, 140622983847935, +STORE, 140622983847936, 140623000633343, +STORE, 140622941884416, 140622983847935, +SNULL, 140622983852031, 140623000633343, +STORE, 140622983847936, 140622983852031, +STORE, 140622983852032, 140623000633343, +STORE, 140623394893824, 140623403286527, +SNULL, 140623394897919, 140623403286527, +STORE, 140623394893824, 140623394897919, +STORE, 140623394897920, 140623403286527, +SNULL, 140623403421695, 140623470395391, +STORE, 140623403286528, 140623403421695, +STORE, 140623403421696, 140623470395391, +SNULL, 140623478755328, 140623503933439, +STORE, 140623503933440, 140623520718847, +STORE, 140623478755328, 140623503933439, +SNULL, 140623503937535, 140623520718847, +STORE, 140623503933440, 140623503937535, +STORE, 140623503937536, 140623520718847, +SNULL, 140623336177663, 140623361323007, +STORE, 140623269068800, 140623336177663, +STORE, 140623336177664, 140623361323007, +ERASE, 140623336177664, 140623361323007, +SNULL, 140623269203967, 140623336177663, +STORE, 140623269068800, 140623269203967, +STORE, 140623269203968, 140623336177663, +SNULL, 140623134986239, 140623201959935, +STORE, 140623134851072, 140623134986239, +STORE, 140623134986240, 140623201959935, +SNULL, 140623000768511, 140623067742207, +STORE, 140623000633344, 140623000768511, +STORE, 140623000768512, 140623067742207, +SNULL, 140622396653567, 140622430191615, +STORE, 140622329544704, 140622396653567, +STORE, 140622396653568, 140622430191615, +ERASE, 140622396653568, 140622430191615, +SNULL, 140622732333055, 140622799306751, +STORE, 140622732197888, 140622732333055, +STORE, 140622732333056, 140622799306751, +SNULL, 140622941884416, 140622975455231, +STORE, 140622975455232, 140622983847935, +STORE, 140622941884416, 140622975455231, +SNULL, 140622975459327, 140622983847935, +STORE, 140622975455232, 140622975459327, +STORE, 140622975459328, 140622983847935, +SNULL, 140622665089023, 140622707019775, +STORE, 140622597980160, 140622665089023, +STORE, 140622665089024, 140622707019775, +ERASE, 140622665089024, 140622707019775, +SNULL, 140622598115327, 140622665089023, +STORE, 140622597980160, 140622598115327, +STORE, 140622598115328, 140622665089023, +SNULL, 140622463897599, 140622530871295, +STORE, 140622463762432, 140622463897599, +STORE, 140622463897600, 140622530871295, +SNULL, 140622195462143, 140622262435839, +STORE, 140622195326976, 140622195462143, +STORE, 140622195462144, 140622262435839, +STORE, 140623386501120, 140623394893823, +SNULL, 140622941884416, 140622950277119, +STORE, 140622950277120, 140622975455231, +STORE, 140622941884416, 140622950277119, +SNULL, 140622950281215, 140622975455231, +STORE, 140622950277120, 140622950281215, +STORE, 140622950281216, 140622975455231, +SNULL, 140622941888511, 140622950277119, +STORE, 140622941884416, 140622941888511, +STORE, 140622941888512, 140622950277119, +STORE, 140623378108416, 140623394893823, +SNULL, 140623478755328, 140623495540735, +STORE, 140623495540736, 140623503933439, +STORE, 140623478755328, 140623495540735, +SNULL, 140623495544831, 140623503933439, +STORE, 140623495540736, 140623495544831, +STORE, 140623495544832, 140623503933439, +SNULL, 140623478755328, 140623487148031, +STORE, 140623487148032, 140623495540735, +STORE, 140623478755328, 140623487148031, +SNULL, 140623487152127, 140623495540735, +STORE, 140623487148032, 140623487152127, +STORE, 140623487152128, 140623495540735, +SNULL, 140623218716671, 140623227105279, +STORE, 140623218712576, 140623218716671, +STORE, 140623218716672, 140623227105279, +SNULL, 140623076106239, 140623084494847, +STORE, 140623076102144, 140623076106239, +STORE, 140623076106240, 140623084494847, +SNULL, 140622329679871, 140622396653567, +STORE, 140622329544704, 140622329679871, +STORE, 140622329679872, 140622396653567, +SNULL, 140622950281216, 140622958669823, +STORE, 140622958669824, 140622975455231, +STORE, 140622950281216, 140622958669823, +SNULL, 140622958673919, 140622975455231, +STORE, 140622958669824, 140622958673919, +STORE, 140622958673920, 140622975455231, +SNULL, 140623503937536, 140623512326143, +STORE, 140623512326144, 140623520718847, +STORE, 140623503937536, 140623512326143, +SNULL, 140623512330239, 140623520718847, +STORE, 140623512326144, 140623512330239, +STORE, 140623512330240, 140623520718847, +SNULL, 140623378108416, 140623386501119, +STORE, 140623386501120, 140623394893823, +STORE, 140623378108416, 140623386501119, +SNULL, 140623386505215, 140623394893823, +STORE, 140623386501120, 140623386505215, +STORE, 140623386505216, 140623394893823, +STORE, 140623369715712, 140623386501119, +STORE, 140623361323008, 140623386501119, +STORE, 140623352930304, 140623386501119, +SNULL, 140623352930304, 140623361323007, +STORE, 140623361323008, 140623386501119, +STORE, 140623352930304, 140623361323007, +SNULL, 140623361327103, 140623386501119, +STORE, 140623361323008, 140623361327103, +STORE, 140623361327104, 140623386501119, +SNULL, 140623478759423, 140623487148031, +STORE, 140623478755328, 140623478759423, +STORE, 140623478759424, 140623487148031, +STORE, 140623344537600, 140623361323007, +STORE, 140623260676096, 140623269068799, +SNULL, 140622958673920, 140622967062527, +STORE, 140622967062528, 140622975455231, +STORE, 140622958673920, 140622967062527, +SNULL, 140622967066623, 140622975455231, +STORE, 140622967062528, 140622967066623, +STORE, 140622967066624, 140622975455231, +STORE, 140623252283392, 140623269068799, +STORE, 140623243890688, 140623269068799, +SNULL, 140622983852032, 140622992240639, +STORE, 140622992240640, 140623000633343, +STORE, 140622983852032, 140622992240639, +SNULL, 140622992244735, 140623000633343, +STORE, 140622992240640, 140622992244735, +STORE, 140622992244736, 140623000633343, +STORE, 140623235497984, 140623269068799, +STORE, 140623218716672, 140623235497983, +STORE, 140623210319872, 140623218712575, +STORE, 140623126458368, 140623134851071, +SNULL, 140623210323967, 140623218712575, +STORE, 140623210319872, 140623210323967, +STORE, 140623210323968, 140623218712575, +SNULL, 140623218716672, 140623227105279, +STORE, 140623227105280, 140623235497983, +STORE, 140623218716672, 140623227105279, +SNULL, 140623227109375, 140623235497983, +STORE, 140623227105280, 140623227109375, +STORE, 140623227109376, 140623235497983, +STORE, 140623118065664, 140623134851071, +STORE, 140623109672960, 140623134851071, +SNULL, 140623109677055, 140623134851071, +STORE, 140623109672960, 140623109677055, +STORE, 140623109677056, 140623134851071, +STORE, 140623101280256, 140623109672959, +STORE, 140623092887552, 140623109672959, +SNULL, 140623092887552, 140623101280255, +STORE, 140623101280256, 140623109672959, +STORE, 140623092887552, 140623101280255, +SNULL, 140623101284351, 140623109672959, +STORE, 140623101280256, 140623101284351, +STORE, 140623101284352, 140623109672959, +SNULL, 140623361327104, 140623378108415, +STORE, 140623378108416, 140623386501119, +STORE, 140623361327104, 140623378108415, +SNULL, 140623378112511, 140623386501119, +STORE, 140623378108416, 140623378112511, +STORE, 140623378112512, 140623386501119, +SNULL, 140623235497984, 140623243890687, +STORE, 140623243890688, 140623269068799, +STORE, 140623235497984, 140623243890687, +SNULL, 140623243894783, 140623269068799, +STORE, 140623243890688, 140623243894783, +STORE, 140623243894784, 140623269068799, +SNULL, 140623361327104, 140623369715711, +STORE, 140623369715712, 140623378108415, +STORE, 140623361327104, 140623369715711, +SNULL, 140623369719807, 140623378108415, +STORE, 140623369715712, 140623369719807, +STORE, 140623369719808, 140623378108415, +SNULL, 140623243894784, 140623252283391, +STORE, 140623252283392, 140623269068799, +STORE, 140623243894784, 140623252283391, +SNULL, 140623252287487, 140623269068799, +STORE, 140623252283392, 140623252287487, +STORE, 140623252287488, 140623269068799, +SNULL, 140623235502079, 140623243890687, +STORE, 140623235497984, 140623235502079, +STORE, 140623235502080, 140623243890687, +SNULL, 140623344541695, 140623361323007, +STORE, 140623344537600, 140623344541695, +STORE, 140623344541696, 140623361323007, +STORE, 140623076106240, 140623092887551, +SNULL, 140623076106240, 140623084494847, +STORE, 140623084494848, 140623092887551, +STORE, 140623076106240, 140623084494847, +SNULL, 140623084498943, 140623092887551, +STORE, 140623084494848, 140623084498943, +STORE, 140623084498944, 140623092887551, +SNULL, 140623344541696, 140623352930303, +STORE, 140623352930304, 140623361323007, +STORE, 140623344541696, 140623352930303, +SNULL, 140623352934399, 140623361323007, +STORE, 140623352930304, 140623352934399, +STORE, 140623352934400, 140623361323007, +SNULL, 140623109677056, 140623118065663, +STORE, 140623118065664, 140623134851071, +STORE, 140623109677056, 140623118065663, +SNULL, 140623118069759, 140623134851071, +STORE, 140623118065664, 140623118069759, +STORE, 140623118069760, 140623134851071, +STORE, 140622832844800, 140622841237503, +STORE, 140622824452096, 140622841237503, +SNULL, 140622824452096, 140622832844799, +STORE, 140622832844800, 140622841237503, +STORE, 140622824452096, 140622832844799, +SNULL, 140622832848895, 140622841237503, +STORE, 140622832844800, 140622832848895, +STORE, 140622832848896, 140622841237503, +STORE, 140622816059392, 140622832844799, +SNULL, 140623092891647, 140623101280255, +STORE, 140623092887552, 140623092891647, +STORE, 140623092891648, 140623101280255, +SNULL, 140623118069760, 140623126458367, +STORE, 140623126458368, 140623134851071, +STORE, 140623118069760, 140623126458367, +SNULL, 140623126462463, 140623134851071, +STORE, 140623126458368, 140623126462463, +STORE, 140623126462464, 140623134851071, +SNULL, 140623252287488, 140623260676095, +STORE, 140623260676096, 140623269068799, +STORE, 140623252287488, 140623260676095, +SNULL, 140623260680191, 140623269068799, +STORE, 140623260676096, 140623260680191, +STORE, 140623260680192, 140623269068799, +STORE, 140622807666688, 140622832844799, +STORE, 140622723805184, 140622732197887, +STORE, 140622715412480, 140622732197887, +STORE, 140622707019776, 140622732197887, +SNULL, 140622707023871, 140622732197887, +STORE, 140622707019776, 140622707023871, +STORE, 140622707023872, 140622732197887, +STORE, 140622698627072, 140622707019775, +STORE, 140622690234368, 140622707019775, +SNULL, 140622690238463, 140622707019775, +STORE, 140622690234368, 140622690238463, +STORE, 140622690238464, 140622707019775, +SNULL, 140622807666688, 140622816059391, +STORE, 140622816059392, 140622832844799, +STORE, 140622807666688, 140622816059391, +SNULL, 140622816063487, 140622832844799, +STORE, 140622816059392, 140622816063487, +STORE, 140622816063488, 140622832844799, +STORE, 140622681841664, 140622690234367, +STORE, 140622673448960, 140622690234367, +SNULL, 140622673453055, 140622690234367, +STORE, 140622673448960, 140622673453055, +STORE, 140622673453056, 140622690234367, +STORE, 140622589587456, 140622597980159, +SNULL, 140622807670783, 140622816059391, +STORE, 140622807666688, 140622807670783, +STORE, 140622807670784, 140622816059391, +STORE, 140622581194752, 140622597980159, +SNULL, 140622581198847, 140622597980159, +STORE, 140622581194752, 140622581198847, +STORE, 140622581198848, 140622597980159, +SNULL, 140622816063488, 140622824452095, +STORE, 140622824452096, 140622832844799, +STORE, 140622816063488, 140622824452095, +SNULL, 140622824456191, 140622832844799, +STORE, 140622824452096, 140622824456191, +STORE, 140622824456192, 140622832844799, +STORE, 140622572802048, 140622581194751, +SNULL, 140622572806143, 140622581194751, +STORE, 140622572802048, 140622572806143, +STORE, 140622572806144, 140622581194751, +STORE, 140622564409344, 140622572802047, +STORE, 140622556016640, 140622572802047, +SNULL, 140622556016640, 140622564409343, +STORE, 140622564409344, 140622572802047, +STORE, 140622556016640, 140622564409343, +SNULL, 140622564413439, 140622572802047, +STORE, 140622564409344, 140622564413439, +STORE, 140622564413440, 140622572802047, +SNULL, 140622690238464, 140622698627071, +STORE, 140622698627072, 140622707019775, +STORE, 140622690238464, 140622698627071, +SNULL, 140622698631167, 140622707019775, +STORE, 140622698627072, 140622698631167, +STORE, 140622698631168, 140622707019775, +SNULL, 140622707023872, 140622723805183, +STORE, 140622723805184, 140622732197887, +STORE, 140622707023872, 140622723805183, +SNULL, 140622723809279, 140622732197887, +STORE, 140622723805184, 140622723809279, +STORE, 140622723809280, 140622732197887, +SNULL, 140622707023872, 140622715412479, +STORE, 140622715412480, 140622723805183, +STORE, 140622707023872, 140622715412479, +SNULL, 140622715416575, 140622723805183, +STORE, 140622715412480, 140622715416575, +STORE, 140622715416576, 140622723805183, +STORE, 140622547623936, 140622564409343, +SNULL, 140622547628031, 140622564409343, +STORE, 140622547623936, 140622547628031, +STORE, 140622547628032, 140622564409343, +STORE, 140622539231232, 140622547623935, +SNULL, 140622539235327, 140622547623935, +STORE, 140622539231232, 140622539235327, +STORE, 140622539235328, 140622547623935, +SNULL, 140622581198848, 140622589587455, +STORE, 140622589587456, 140622597980159, +STORE, 140622581198848, 140622589587455, +SNULL, 140622589591551, 140622597980159, +STORE, 140622589587456, 140622589591551, +STORE, 140622589591552, 140622597980159, +STORE, 140622455369728, 140622463762431, +SNULL, 140622455373823, 140622463762431, +STORE, 140622455369728, 140622455373823, +STORE, 140622455373824, 140622463762431, +STORE, 140622446977024, 140622455369727, +SNULL, 140622446981119, 140622455369727, +STORE, 140622446977024, 140622446981119, +STORE, 140622446981120, 140622455369727, +SNULL, 140622547628032, 140622556016639, +STORE, 140622556016640, 140622564409343, +STORE, 140622547628032, 140622556016639, +SNULL, 140622556020735, 140622564409343, +STORE, 140622556016640, 140622556020735, +STORE, 140622556020736, 140622564409343, +STORE, 140622430195712, 140622446977023, +STORE, 140622421798912, 140622430191615, +SNULL, 140622430195712, 140622438584319, +STORE, 140622438584320, 140622446977023, +STORE, 140622430195712, 140622438584319, +SNULL, 140622438588415, 140622446977023, +STORE, 140622438584320, 140622438588415, +STORE, 140622438588416, 140622446977023, +STORE, 140622413406208, 140622430191615, +STORE, 140622405013504, 140622430191615, +SNULL, 140622405013504, 140622413406207, +STORE, 140622413406208, 140622430191615, +STORE, 140622405013504, 140622413406207, +SNULL, 140622413410303, 140622430191615, +STORE, 140622413406208, 140622413410303, +STORE, 140622413410304, 140622430191615, +SNULL, 140622673453056, 140622681841663, +STORE, 140622681841664, 140622690234367, +STORE, 140622673453056, 140622681841663, +SNULL, 140622681845759, 140622690234367, +STORE, 140622681841664, 140622681845759, +STORE, 140622681845760, 140622690234367, +STORE, 140622321152000, 140622329544703, +SNULL, 140622413410304, 140622421798911, +STORE, 140622421798912, 140622430191615, +STORE, 140622413410304, 140622421798911, +SNULL, 140622421803007, 140622430191615, +STORE, 140622421798912, 140622421803007, +STORE, 140622421803008, 140622430191615, +STORE, 140622312759296, 140622329544703, +SNULL, 140622312763391, 140622329544703, +STORE, 140622312759296, 140622312763391, +STORE, 140622312763392, 140622329544703, +SNULL, 140622405017599, 140622413406207, +STORE, 140622405013504, 140622405017599, +STORE, 140622405017600, 140622413406207, +STORE, 140622304366592, 140622312759295, +SNULL, 140622304370687, 140622312759295, +STORE, 140622304366592, 140622304370687, +STORE, 140622304370688, 140622312759295, +SNULL, 140622312763392, 140622321151999, +STORE, 140622321152000, 140622329544703, +STORE, 140622312763392, 140622321151999, +SNULL, 140622321156095, 140622329544703, +STORE, 140622321152000, 140622321156095, +STORE, 140622321156096, 140622329544703, +STORE, 140624062619648, 140624062648319, +STORE, 140624010240000, 140624012431359, +SNULL, 140624010240000, 140624010330111, +STORE, 140624010330112, 140624012431359, +STORE, 140624010240000, 140624010330111, +SNULL, 140624012423167, 140624012431359, +STORE, 140624010330112, 140624012423167, +STORE, 140624012423168, 140624012431359, +ERASE, 140624012423168, 140624012431359, +STORE, 140624012423168, 140624012431359, +SNULL, 140624012427263, 140624012431359, +STORE, 140624012423168, 140624012427263, +STORE, 140624012427264, 140624012431359, +ERASE, 140624062619648, 140624062648319, +ERASE, 140622849630208, 140622849634303, +ERASE, 140622849634304, 140622858022911, +ERASE, 140623394893824, 140623394897919, +ERASE, 140623394897920, 140623403286527, +ERASE, 140623361323008, 140623361327103, +ERASE, 140623361327104, 140623369715711, +ERASE, 140623084494848, 140623084498943, +ERASE, 140623084498944, 140623092887551, +ERASE, 140623931764736, 140623931768831, +ERASE, 140623931768832, 140623940157439, +ERASE, 140622841237504, 140622841241599, +ERASE, 140622841241600, 140622849630207, +ERASE, 140623487148032, 140623487152127, +ERASE, 140623487152128, 140623495540735, +ERASE, 140623109672960, 140623109677055, +ERASE, 140623109677056, 140623118065663, +ERASE, 140622983847936, 140622983852031, +ERASE, 140622983852032, 140622992240639, +ERASE, 140623352930304, 140623352934399, +ERASE, 140623352934400, 140623361323007, +ERASE, 140622564409344, 140622564413439, +ERASE, 140622564413440, 140622572802047, +ERASE, 140622430191616, 140622430195711, +ERASE, 140622430195712, 140622438584319, +ERASE, 140622958669824, 140622958673919, +ERASE, 140622958673920, 140622967062527, +ERASE, 140622992240640, 140622992244735, +ERASE, 140622992244736, 140623000633343, +ERASE, 140623227105280, 140623227109375, +ERASE, 140623227109376, 140623235497983, +ERASE, 140622321152000, 140622321156095, +ERASE, 140622321156096, 140622329544703, +ERASE, 140622858022912, 140622858027007, +ERASE, 140622858027008, 140622866415615, +ERASE, 140622975455232, 140622975459327, +ERASE, 140622975459328, 140622983847935, +ERASE, 140623378108416, 140623378112511, +ERASE, 140623378112512, 140623386501119, +ERASE, 140623495540736, 140623495544831, +ERASE, 140623495544832, 140623503933439, +ERASE, 140623118065664, 140623118069759, +ERASE, 140623118069760, 140623126458367, +ERASE, 140622572802048, 140622572806143, +ERASE, 140622572806144, 140622581194751, +ERASE, 140622421798912, 140622421803007, +ERASE, 140622421803008, 140622430191615, +ERASE, 140622967062528, 140622967066623, +ERASE, 140622967066624, 140622975455231, +ERASE, 140623252283392, 140623252287487, +ERASE, 140623252287488, 140623260676095, +ERASE, 140622673448960, 140622673453055, +ERASE, 140622673453056, 140622681841663, +ERASE, 140623076102144, 140623076106239, +ERASE, 140623076106240, 140623084494847, +ERASE, 140623101280256, 140623101284351, +ERASE, 140623101284352, 140623109672959, +ERASE, 140622715412480, 140622715416575, +ERASE, 140622715416576, 140622723805183, +ERASE, 140622405013504, 140622405017599, +ERASE, 140622405017600, 140622413406207, +ERASE, 140623478755328, 140623478759423, +ERASE, 140623478759424, 140623487148031, +ERASE, 140623906586624, 140623906590719, +ERASE, 140623906590720, 140623914979327, +ERASE, 140622950277120, 140622950281215, +ERASE, 140622950281216, 140622958669823, + }; + unsigned long set32[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140731244212224, 140737488351231, +SNULL, 140731244216319, 140737488351231, +STORE, 140731244212224, 140731244216319, +STORE, 140731244081152, 140731244216319, +STORE, 94427773984768, 94427776237567, +SNULL, 94427774115839, 94427776237567, +STORE, 94427773984768, 94427774115839, +STORE, 94427774115840, 94427776237567, +ERASE, 94427774115840, 94427776237567, +STORE, 94427776208896, 94427776217087, +STORE, 94427776217088, 94427776237567, +STORE, 140401464893440, 140401467146239, +SNULL, 140401465036799, 140401467146239, +STORE, 140401464893440, 140401465036799, +STORE, 140401465036800, 140401467146239, +ERASE, 140401465036800, 140401467146239, +STORE, 140401467133952, 140401467142143, +STORE, 140401467142144, 140401467146239, +STORE, 140731244507136, 140731244511231, +STORE, 140731244494848, 140731244507135, +STORE, 140401467105280, 140401467133951, +STORE, 140401467097088, 140401467105279, +STORE, 140401462677504, 140401464893439, +SNULL, 140401462677504, 140401462775807, +STORE, 140401462775808, 140401464893439, +STORE, 140401462677504, 140401462775807, +SNULL, 140401464868863, 140401464893439, +STORE, 140401462775808, 140401464868863, +STORE, 140401464868864, 140401464893439, +SNULL, 140401464868864, 140401464877055, +STORE, 140401464877056, 140401464893439, +STORE, 140401464868864, 140401464877055, +ERASE, 140401464868864, 140401464877055, +STORE, 140401464868864, 140401464877055, +ERASE, 140401464877056, 140401464893439, +STORE, 140401464877056, 140401464893439, +STORE, 140401458880512, 140401462677503, +SNULL, 140401458880512, 140401460539391, +STORE, 140401460539392, 140401462677503, +STORE, 140401458880512, 140401460539391, +SNULL, 140401462636543, 140401462677503, +STORE, 140401460539392, 140401462636543, +STORE, 140401462636544, 140401462677503, +SNULL, 140401462636544, 140401462661119, +STORE, 140401462661120, 140401462677503, +STORE, 140401462636544, 140401462661119, +ERASE, 140401462636544, 140401462661119, +STORE, 140401462636544, 140401462661119, +ERASE, 140401462661120, 140401462677503, +STORE, 140401462661120, 140401462677503, +STORE, 140401467088896, 140401467105279, +SNULL, 140401462652927, 140401462661119, +STORE, 140401462636544, 140401462652927, +STORE, 140401462652928, 140401462661119, +SNULL, 140401464872959, 140401464877055, +STORE, 140401464868864, 140401464872959, +STORE, 140401464872960, 140401464877055, +SNULL, 94427776212991, 94427776217087, +STORE, 94427776208896, 94427776212991, +STORE, 94427776212992, 94427776217087, +SNULL, 140401467138047, 140401467142143, +STORE, 140401467133952, 140401467138047, +STORE, 140401467138048, 140401467142143, +ERASE, 140401467105280, 140401467133951, +STORE, 94427784683520, 94427784818687, +STORE, 140401450487808, 140401458880511, +SNULL, 140401450491903, 140401458880511, +STORE, 140401450487808, 140401450491903, +STORE, 140401450491904, 140401458880511, +STORE, 140401442095104, 140401450487807, +STORE, 140401307877376, 140401442095103, +SNULL, 140401307877376, 140401340055551, +STORE, 140401340055552, 140401442095103, +STORE, 140401307877376, 140401340055551, +ERASE, 140401307877376, 140401340055551, +SNULL, 140401407164415, 140401442095103, +STORE, 140401340055552, 140401407164415, +STORE, 140401407164416, 140401442095103, +ERASE, 140401407164416, 140401442095103, +SNULL, 140401340190719, 140401407164415, +STORE, 140401340055552, 140401340190719, +STORE, 140401340190720, 140401407164415, +SNULL, 140401442099199, 140401450487807, +STORE, 140401442095104, 140401442099199, +STORE, 140401442099200, 140401450487807, +STORE, 140401433702400, 140401442095103, +SNULL, 140401433706495, 140401442095103, +STORE, 140401433702400, 140401433706495, +STORE, 140401433706496, 140401442095103, +STORE, 140401425309696, 140401433702399, +SNULL, 140401425313791, 140401433702399, +STORE, 140401425309696, 140401425313791, +STORE, 140401425313792, 140401433702399, +STORE, 140401416916992, 140401425309695, +SNULL, 140401416921087, 140401425309695, +STORE, 140401416916992, 140401416921087, +STORE, 140401416921088, 140401425309695, +STORE, 140401408524288, 140401416916991, +STORE, 140401205837824, 140401340055551, +SNULL, 140401272946687, 140401340055551, +STORE, 140401205837824, 140401272946687, +STORE, 140401272946688, 140401340055551, +ERASE, 140401272946688, 140401340055551, +SNULL, 140401205972991, 140401272946687, +STORE, 140401205837824, 140401205972991, +STORE, 140401205972992, 140401272946687, +STORE, 140401331662848, 140401340055551, +STORE, 140401323270144, 140401340055551, +STORE, 140401138728960, 140401205837823, +STORE, 140401314877440, 140401340055551, +SNULL, 140401408528383, 140401416916991, +STORE, 140401408524288, 140401408528383, +STORE, 140401408528384, 140401416916991, +SNULL, 140401138864127, 140401205837823, +STORE, 140401138728960, 140401138864127, +STORE, 140401138864128, 140401205837823, +STORE, 140401004511232, 140401138728959, +SNULL, 140401071620095, 140401138728959, +STORE, 140401004511232, 140401071620095, +STORE, 140401071620096, 140401138728959, +ERASE, 140401071620096, 140401138728959, +STORE, 140400870293504, 140401071620095, +SNULL, 140400937402367, 140401071620095, +STORE, 140400870293504, 140400937402367, +STORE, 140400937402368, 140401071620095, +SNULL, 140400937402368, 140401004511231, +STORE, 140401004511232, 140401071620095, +STORE, 140400937402368, 140401004511231, +ERASE, 140400937402368, 140401004511231, +STORE, 140401306484736, 140401340055551, +SNULL, 140401306484736, 140401323270143, +STORE, 140401323270144, 140401340055551, +STORE, 140401306484736, 140401323270143, +SNULL, 140401323274239, 140401340055551, +STORE, 140401323270144, 140401323274239, +STORE, 140401323274240, 140401340055551, +SNULL, 140401004646399, 140401071620095, +STORE, 140401004511232, 140401004646399, +STORE, 140401004646400, 140401071620095, +SNULL, 140400870428671, 140400937402367, +STORE, 140400870293504, 140400870428671, +STORE, 140400870428672, 140400937402367, +SNULL, 140401306488831, 140401323270143, +STORE, 140401306484736, 140401306488831, +STORE, 140401306488832, 140401323270143, +STORE, 140401298092032, 140401306484735, +SNULL, 140401306488832, 140401314877439, +STORE, 140401314877440, 140401323270143, +STORE, 140401306488832, 140401314877439, +SNULL, 140401314881535, 140401323270143, +STORE, 140401314877440, 140401314881535, +STORE, 140401314881536, 140401323270143, +SNULL, 140401323274240, 140401331662847, +STORE, 140401331662848, 140401340055551, +STORE, 140401323274240, 140401331662847, +SNULL, 140401331666943, 140401340055551, +STORE, 140401331662848, 140401331666943, +STORE, 140401331666944, 140401340055551, +SNULL, 140401298096127, 140401306484735, +STORE, 140401298092032, 140401298096127, +STORE, 140401298096128, 140401306484735, +STORE, 140401289699328, 140401298092031, +STORE, 140401281306624, 140401298092031, +STORE, 140401130336256, 140401138728959, +SNULL, 140401281306624, 140401289699327, +STORE, 140401289699328, 140401298092031, +STORE, 140401281306624, 140401289699327, +SNULL, 140401289703423, 140401298092031, +STORE, 140401289699328, 140401289703423, +STORE, 140401289703424, 140401298092031, +STORE, 140401121943552, 140401138728959, +STORE, 140401113550848, 140401138728959, +SNULL, 140401281310719, 140401289699327, +STORE, 140401281306624, 140401281310719, +STORE, 140401281310720, 140401289699327, +SNULL, 140401113550848, 140401121943551, +STORE, 140401121943552, 140401138728959, +STORE, 140401113550848, 140401121943551, +SNULL, 140401121947647, 140401138728959, +STORE, 140401121943552, 140401121947647, +STORE, 140401121947648, 140401138728959, +STORE, 140401105158144, 140401121943551, +SNULL, 140401121947648, 140401130336255, +STORE, 140401130336256, 140401138728959, +STORE, 140401121947648, 140401130336255, +SNULL, 140401130340351, 140401138728959, +STORE, 140401130336256, 140401130340351, +STORE, 140401130340352, 140401138728959, +STORE, 140401096765440, 140401121943551, +SNULL, 140401096765440, 140401113550847, +STORE, 140401113550848, 140401121943551, +STORE, 140401096765440, 140401113550847, +SNULL, 140401113554943, 140401121943551, +STORE, 140401113550848, 140401113554943, +STORE, 140401113554944, 140401121943551, +STORE, 140401088372736, 140401113550847, +SNULL, 140401088372736, 140401096765439, +STORE, 140401096765440, 140401113550847, +STORE, 140401088372736, 140401096765439, +SNULL, 140401096769535, 140401113550847, +STORE, 140401096765440, 140401096769535, +STORE, 140401096769536, 140401113550847, +SNULL, 140401096769536, 140401105158143, +STORE, 140401105158144, 140401113550847, +STORE, 140401096769536, 140401105158143, +SNULL, 140401105162239, 140401113550847, +STORE, 140401105158144, 140401105162239, +STORE, 140401105162240, 140401113550847, +SNULL, 140401088376831, 140401096765439, +STORE, 140401088372736, 140401088376831, +STORE, 140401088376832, 140401096765439, +STORE, 140401079980032, 140401088372735, +STORE, 140400996118528, 140401004511231, +SNULL, 140401079984127, 140401088372735, +STORE, 140401079980032, 140401079984127, +STORE, 140401079984128, 140401088372735, +SNULL, 140400996122623, 140401004511231, +STORE, 140400996118528, 140400996122623, +STORE, 140400996122624, 140401004511231, +STORE, 140400987725824, 140400996118527, +STORE, 140400979333120, 140400996118527, +STORE, 140400803184640, 140400870293503, +SNULL, 140400803319807, 140400870293503, +STORE, 140400803184640, 140400803319807, +STORE, 140400803319808, 140400870293503, +SNULL, 140400979333120, 140400987725823, +STORE, 140400987725824, 140400996118527, +STORE, 140400979333120, 140400987725823, +SNULL, 140400987729919, 140400996118527, +STORE, 140400987725824, 140400987729919, +STORE, 140400987729920, 140400996118527, +STORE, 140400970940416, 140400987725823, +STORE, 140400962547712, 140400987725823, +STORE, 140400668966912, 140400803184639, +STORE, 140400954155008, 140400987725823, +STORE, 140400945762304, 140400987725823, +STORE, 140400660574208, 140400668966911, +STORE, 140400593465344, 140400660574207, +STORE, 140400585072640, 140400593465343, +STORE, 140400450854912, 140400585072639, +STORE, 140400442462208, 140400450854911, +STORE, 140400434069504, 140400450854911, +STORE, 140400299851776, 140400434069503, +STORE, 140400291459072, 140400299851775, +SNULL, 140400299851776, 140400333422591, +STORE, 140400333422592, 140400434069503, +STORE, 140400299851776, 140400333422591, +ERASE, 140400299851776, 140400333422591, +STORE, 140400325029888, 140400333422591, +STORE, 140400157241344, 140400291459071, +STORE, 140400316637184, 140400333422591, +STORE, 140400308244480, 140400333422591, +STORE, 140400023023616, 140400291459071, +STORE, 140400291459072, 140400333422591, +SNULL, 140400023023616, 140400064987135, +STORE, 140400064987136, 140400291459071, +STORE, 140400023023616, 140400064987135, +ERASE, 140400023023616, 140400064987135, +STORE, 140400056594432, 140400064987135, +SNULL, 140400056598527, 140400064987135, +STORE, 140400056594432, 140400056598527, +STORE, 140400056598528, 140400064987135, +STORE, 140399989485568, 140400056594431, +SNULL, 140400291459072, 140400316637183, +STORE, 140400316637184, 140400333422591, +STORE, 140400291459072, 140400316637183, +SNULL, 140400316641279, 140400333422591, +STORE, 140400316637184, 140400316641279, +STORE, 140400316641280, 140400333422591, +STORE, 140399855267840, 140400056594431, +SNULL, 140399855267840, 140399863660543, +STORE, 140399863660544, 140400056594431, +STORE, 140399855267840, 140399863660543, +ERASE, 140399855267840, 140399863660543, +SNULL, 140400736075775, 140400803184639, +STORE, 140400668966912, 140400736075775, +STORE, 140400736075776, 140400803184639, +ERASE, 140400736075776, 140400803184639, +SNULL, 140400669102079, 140400736075775, +STORE, 140400668966912, 140400669102079, +STORE, 140400669102080, 140400736075775, +STORE, 140400669102080, 140400803184639, +SNULL, 140400669102080, 140400736075775, +STORE, 140400736075776, 140400803184639, +STORE, 140400669102080, 140400736075775, +SNULL, 140400736210943, 140400803184639, +STORE, 140400736075776, 140400736210943, +STORE, 140400736210944, 140400803184639, +ERASE, 140400593465344, 140400660574207, +SNULL, 140400450854912, 140400467640319, +STORE, 140400467640320, 140400585072639, +STORE, 140400450854912, 140400467640319, +ERASE, 140400450854912, 140400467640319, +STORE, 140399729442816, 140400056594431, +SNULL, 140400400531455, 140400434069503, +STORE, 140400333422592, 140400400531455, +STORE, 140400400531456, 140400434069503, +ERASE, 140400400531456, 140400434069503, +SNULL, 140400333557759, 140400400531455, +STORE, 140400333422592, 140400333557759, +STORE, 140400333557760, 140400400531455, +SNULL, 140400157241343, 140400291459071, +STORE, 140400064987136, 140400157241343, +STORE, 140400157241344, 140400291459071, +SNULL, 140400157241344, 140400199204863, +STORE, 140400199204864, 140400291459071, +STORE, 140400157241344, 140400199204863, +ERASE, 140400157241344, 140400199204863, +SNULL, 140400266313727, 140400291459071, +STORE, 140400199204864, 140400266313727, +STORE, 140400266313728, 140400291459071, +ERASE, 140400266313728, 140400291459071, +SNULL, 140400132095999, 140400157241343, +STORE, 140400064987136, 140400132095999, +STORE, 140400132096000, 140400157241343, +ERASE, 140400132096000, 140400157241343, +SNULL, 140400065122303, 140400132095999, +STORE, 140400064987136, 140400065122303, +STORE, 140400065122304, 140400132095999, +SNULL, 140400945762304, 140400954155007, +STORE, 140400954155008, 140400987725823, +STORE, 140400945762304, 140400954155007, +SNULL, 140400954159103, 140400987725823, +STORE, 140400954155008, 140400954159103, +STORE, 140400954159104, 140400987725823, +SNULL, 140400434069504, 140400442462207, +STORE, 140400442462208, 140400450854911, +STORE, 140400434069504, 140400442462207, +SNULL, 140400442466303, 140400450854911, +STORE, 140400442462208, 140400442466303, +STORE, 140400442466304, 140400450854911, +SNULL, 140400291463167, 140400316637183, +STORE, 140400291459072, 140400291463167, +STORE, 140400291463168, 140400316637183, +STORE, 140400652181504, 140400668966911, +STORE, 140400643788800, 140400668966911, +SNULL, 140400291463168, 140400299851775, +STORE, 140400299851776, 140400316637183, +STORE, 140400291463168, 140400299851775, +SNULL, 140400299855871, 140400316637183, +STORE, 140400299851776, 140400299855871, +STORE, 140400299855872, 140400316637183, +STORE, 140400635396096, 140400668966911, +SNULL, 140400635396096, 140400643788799, +STORE, 140400643788800, 140400668966911, +STORE, 140400635396096, 140400643788799, +SNULL, 140400643792895, 140400668966911, +STORE, 140400643788800, 140400643792895, +STORE, 140400643792896, 140400668966911, +SNULL, 140399989485567, 140400056594431, +STORE, 140399729442816, 140399989485567, +STORE, 140399989485568, 140400056594431, +ERASE, 140399989485568, 140400056594431, +SNULL, 140399930769407, 140399989485567, +STORE, 140399729442816, 140399930769407, +STORE, 140399930769408, 140399989485567, +ERASE, 140399930769408, 140399989485567, +SNULL, 140400945766399, 140400954155007, +STORE, 140400945762304, 140400945766399, +STORE, 140400945766400, 140400954155007, +SNULL, 140400534749183, 140400585072639, +STORE, 140400467640320, 140400534749183, +STORE, 140400534749184, 140400585072639, +ERASE, 140400534749184, 140400585072639, +SNULL, 140399796551679, 140399930769407, +STORE, 140399729442816, 140399796551679, +STORE, 140399796551680, 140399930769407, +SNULL, 140399796551680, 140399863660543, +STORE, 140399863660544, 140399930769407, +STORE, 140399796551680, 140399863660543, +ERASE, 140399796551680, 140399863660543, +SNULL, 140400199340031, 140400266313727, +STORE, 140400199204864, 140400199340031, +STORE, 140400199340032, 140400266313727, +STORE, 140400627003392, 140400643788799, +SNULL, 140400316641280, 140400325029887, +STORE, 140400325029888, 140400333422591, +STORE, 140400316641280, 140400325029887, +SNULL, 140400325033983, 140400333422591, +STORE, 140400325029888, 140400325033983, +STORE, 140400325033984, 140400333422591, +SNULL, 140400627003392, 140400635396095, +STORE, 140400635396096, 140400643788799, +STORE, 140400627003392, 140400635396095, +SNULL, 140400635400191, 140400643788799, +STORE, 140400635396096, 140400635400191, +STORE, 140400635400192, 140400643788799, +SNULL, 140400434073599, 140400442462207, +STORE, 140400434069504, 140400434073599, +STORE, 140400434073600, 140400442462207, +STORE, 140400618610688, 140400635396095, +STORE, 140400610217984, 140400635396095, +SNULL, 140400954159104, 140400962547711, +STORE, 140400962547712, 140400987725823, +STORE, 140400954159104, 140400962547711, +SNULL, 140400962551807, 140400987725823, +STORE, 140400962547712, 140400962551807, +STORE, 140400962551808, 140400987725823, +SNULL, 140400299855872, 140400308244479, +STORE, 140400308244480, 140400316637183, +STORE, 140400299855872, 140400308244479, +SNULL, 140400308248575, 140400316637183, +STORE, 140400308244480, 140400308248575, +STORE, 140400308248576, 140400316637183, +STORE, 140400601825280, 140400635396095, +SNULL, 140400601829375, 140400635396095, +STORE, 140400601825280, 140400601829375, +STORE, 140400601829376, 140400635396095, +STORE, 140400576679936, 140400593465343, +SNULL, 140400576684031, 140400593465343, +STORE, 140400576679936, 140400576684031, +STORE, 140400576684032, 140400593465343, +SNULL, 140400643792896, 140400652181503, +STORE, 140400652181504, 140400668966911, +STORE, 140400643792896, 140400652181503, +SNULL, 140400652185599, 140400668966911, +STORE, 140400652181504, 140400652185599, +STORE, 140400652185600, 140400668966911, +STORE, 140399595225088, 140399796551679, +SNULL, 140399662333951, 140399796551679, +STORE, 140399595225088, 140399662333951, +STORE, 140399662333952, 140399796551679, +SNULL, 140399662333952, 140399729442815, +STORE, 140399729442816, 140399796551679, +STORE, 140399662333952, 140399729442815, +ERASE, 140399662333952, 140399729442815, +SNULL, 140399863795711, 140399930769407, +STORE, 140399863660544, 140399863795711, +STORE, 140399863795712, 140399930769407, +STORE, 140400568287232, 140400576679935, +SNULL, 140400568291327, 140400576679935, +STORE, 140400568287232, 140400568291327, +STORE, 140400568291328, 140400576679935, +SNULL, 140400467775487, 140400534749183, +STORE, 140400467640320, 140400467775487, +STORE, 140400467775488, 140400534749183, +SNULL, 140399729577983, 140399796551679, +STORE, 140399729442816, 140399729577983, +STORE, 140399729577984, 140399796551679, +SNULL, 140400601829376, 140400627003391, +STORE, 140400627003392, 140400635396095, +STORE, 140400601829376, 140400627003391, +SNULL, 140400627007487, 140400635396095, +STORE, 140400627003392, 140400627007487, +STORE, 140400627007488, 140400635396095, +STORE, 140400559894528, 140400568287231, +STORE, 140400551501824, 140400568287231, +STORE, 140400543109120, 140400568287231, +STORE, 140400459247616, 140400467640319, +STORE, 140400442466304, 140400467640319, +SNULL, 140399595360255, 140399662333951, +STORE, 140399595225088, 140399595360255, +STORE, 140399595360256, 140399662333951, +SNULL, 140400962551808, 140400970940415, +STORE, 140400970940416, 140400987725823, +STORE, 140400962551808, 140400970940415, +SNULL, 140400970944511, 140400987725823, +STORE, 140400970940416, 140400970944511, +STORE, 140400970944512, 140400987725823, +SNULL, 140400652185600, 140400660574207, +STORE, 140400660574208, 140400668966911, +STORE, 140400652185600, 140400660574207, +SNULL, 140400660578303, 140400668966911, +STORE, 140400660574208, 140400660578303, +STORE, 140400660578304, 140400668966911, +SNULL, 140400576684032, 140400585072639, +STORE, 140400585072640, 140400593465343, +STORE, 140400576684032, 140400585072639, +SNULL, 140400585076735, 140400593465343, +STORE, 140400585072640, 140400585076735, +STORE, 140400585076736, 140400593465343, +STORE, 140400425676800, 140400434069503, +STORE, 140400417284096, 140400434069503, +STORE, 140400408891392, 140400434069503, +SNULL, 140400408891392, 140400417284095, +STORE, 140400417284096, 140400434069503, +STORE, 140400408891392, 140400417284095, +SNULL, 140400417288191, 140400434069503, +STORE, 140400417284096, 140400417288191, +STORE, 140400417288192, 140400434069503, +STORE, 140400283066368, 140400291459071, +SNULL, 140400601829376, 140400618610687, +STORE, 140400618610688, 140400627003391, +STORE, 140400601829376, 140400618610687, +SNULL, 140400618614783, 140400627003391, +STORE, 140400618610688, 140400618614783, +STORE, 140400618614784, 140400627003391, +SNULL, 140400601829376, 140400610217983, +STORE, 140400610217984, 140400618610687, +STORE, 140400601829376, 140400610217983, +SNULL, 140400610222079, 140400618610687, +STORE, 140400610217984, 140400610222079, +STORE, 140400610222080, 140400618610687, +STORE, 140400274673664, 140400291459071, +STORE, 140400190812160, 140400199204863, +STORE, 140400182419456, 140400199204863, +SNULL, 140400442466304, 140400450854911, +STORE, 140400450854912, 140400467640319, +STORE, 140400442466304, 140400450854911, +SNULL, 140400450859007, 140400467640319, +STORE, 140400450854912, 140400450859007, +STORE, 140400450859008, 140400467640319, +SNULL, 140400543109120, 140400559894527, +STORE, 140400559894528, 140400568287231, +STORE, 140400543109120, 140400559894527, +SNULL, 140400559898623, 140400568287231, +STORE, 140400559894528, 140400559898623, +STORE, 140400559898624, 140400568287231, +SNULL, 140400450859008, 140400459247615, +STORE, 140400459247616, 140400467640319, +STORE, 140400450859008, 140400459247615, +SNULL, 140400459251711, 140400467640319, +STORE, 140400459247616, 140400459251711, +STORE, 140400459251712, 140400467640319, +SNULL, 140400543113215, 140400559894527, +STORE, 140400543109120, 140400543113215, +STORE, 140400543113216, 140400559894527, +SNULL, 140400970944512, 140400979333119, +STORE, 140400979333120, 140400987725823, +STORE, 140400970944512, 140400979333119, +SNULL, 140400979337215, 140400987725823, +STORE, 140400979333120, 140400979337215, +STORE, 140400979337216, 140400987725823, +STORE, 140400174026752, 140400199204863, +SNULL, 140400174030847, 140400199204863, +STORE, 140400174026752, 140400174030847, +STORE, 140400174030848, 140400199204863, +SNULL, 140400274673664, 140400283066367, +STORE, 140400283066368, 140400291459071, +STORE, 140400274673664, 140400283066367, +SNULL, 140400283070463, 140400291459071, +STORE, 140400283066368, 140400283070463, +STORE, 140400283070464, 140400291459071, +STORE, 140400165634048, 140400174026751, +SNULL, 140400165638143, 140400174026751, +STORE, 140400165634048, 140400165638143, +STORE, 140400165638144, 140400174026751, +SNULL, 140400174030848, 140400182419455, +STORE, 140400182419456, 140400199204863, +STORE, 140400174030848, 140400182419455, +SNULL, 140400182423551, 140400199204863, +STORE, 140400182419456, 140400182423551, +STORE, 140400182423552, 140400199204863, +SNULL, 140400182423552, 140400190812159, +STORE, 140400190812160, 140400199204863, +STORE, 140400182423552, 140400190812159, +SNULL, 140400190816255, 140400199204863, +STORE, 140400190812160, 140400190816255, +STORE, 140400190816256, 140400199204863, +STORE, 140400157241344, 140400165634047, +SNULL, 140400157245439, 140400165634047, +STORE, 140400157241344, 140400157245439, +STORE, 140400157245440, 140400165634047, +SNULL, 140400408895487, 140400417284095, +STORE, 140400408891392, 140400408895487, +STORE, 140400408895488, 140400417284095, +SNULL, 140400417288192, 140400425676799, +STORE, 140400425676800, 140400434069503, +STORE, 140400417288192, 140400425676799, +SNULL, 140400425680895, 140400434069503, +STORE, 140400425676800, 140400425680895, +STORE, 140400425680896, 140400434069503, +STORE, 140400148848640, 140400157241343, +SNULL, 140400148852735, 140400157241343, +STORE, 140400148848640, 140400148852735, +STORE, 140400148852736, 140400157241343, +SNULL, 140400543113216, 140400551501823, +STORE, 140400551501824, 140400559894527, +STORE, 140400543113216, 140400551501823, +SNULL, 140400551505919, 140400559894527, +STORE, 140400551501824, 140400551505919, +STORE, 140400551505920, 140400559894527, +STORE, 140400140455936, 140400148848639, +STORE, 140400048201728, 140400056594431, +SNULL, 140400140460031, 140400148848639, +STORE, 140400140455936, 140400140460031, +STORE, 140400140460032, 140400148848639, +STORE, 140400039809024, 140400056594431, +SNULL, 140400039813119, 140400056594431, +STORE, 140400039809024, 140400039813119, +STORE, 140400039813120, 140400056594431, +STORE, 140400031416320, 140400039809023, +STORE, 140400023023616, 140400039809023, +SNULL, 140400274677759, 140400283066367, +STORE, 140400274673664, 140400274677759, +STORE, 140400274677760, 140400283066367, +STORE, 140400014630912, 140400039809023, +STORE, 140400006238208, 140400039809023, +STORE, 140399997845504, 140400039809023, +SNULL, 140399997849599, 140400039809023, +STORE, 140399997845504, 140399997849599, +STORE, 140399997849600, 140400039809023, +STORE, 140399989452800, 140399997845503, +SNULL, 140399989456895, 140399997845503, +STORE, 140399989452800, 140399989456895, +STORE, 140399989456896, 140399997845503, +STORE, 140399981060096, 140399989452799, +SNULL, 140399981064191, 140399989452799, +STORE, 140399981060096, 140399981064191, +STORE, 140399981064192, 140399989452799, +STORE, 140399972667392, 140399981060095, +STORE, 140399964274688, 140399981060095, +SNULL, 140399964278783, 140399981060095, +STORE, 140399964274688, 140399964278783, +STORE, 140399964278784, 140399981060095, +SNULL, 140400039813120, 140400048201727, +STORE, 140400048201728, 140400056594431, +STORE, 140400039813120, 140400048201727, +SNULL, 140400048205823, 140400056594431, +STORE, 140400048201728, 140400048205823, +STORE, 140400048205824, 140400056594431, +SNULL, 140399997849600, 140400031416319, +STORE, 140400031416320, 140400039809023, +STORE, 140399997849600, 140400031416319, +SNULL, 140400031420415, 140400039809023, +STORE, 140400031416320, 140400031420415, +STORE, 140400031420416, 140400039809023, +STORE, 140399955881984, 140399964274687, +SNULL, 140399955886079, 140399964274687, +STORE, 140399955881984, 140399955886079, +STORE, 140399955886080, 140399964274687, +STORE, 140399947489280, 140399955881983, +STORE, 140399939096576, 140399955881983, +STORE, 140399855267840, 140399863660543, +SNULL, 140399939100671, 140399955881983, +STORE, 140399939096576, 140399939100671, +STORE, 140399939100672, 140399955881983, +SNULL, 140399997849600, 140400014630911, +STORE, 140400014630912, 140400031416319, +STORE, 140399997849600, 140400014630911, +SNULL, 140400014635007, 140400031416319, +STORE, 140400014630912, 140400014635007, +STORE, 140400014635008, 140400031416319, +SNULL, 140400014635008, 140400023023615, +STORE, 140400023023616, 140400031416319, +STORE, 140400014635008, 140400023023615, +SNULL, 140400023027711, 140400031416319, +STORE, 140400023023616, 140400023027711, +STORE, 140400023027712, 140400031416319, +SNULL, 140399997849600, 140400006238207, +STORE, 140400006238208, 140400014630911, +STORE, 140399997849600, 140400006238207, +SNULL, 140400006242303, 140400014630911, +STORE, 140400006238208, 140400006242303, +STORE, 140400006242304, 140400014630911, +STORE, 140399846875136, 140399863660543, +STORE, 140399838482432, 140399863660543, +SNULL, 140399838486527, 140399863660543, +STORE, 140399838482432, 140399838486527, +STORE, 140399838486528, 140399863660543, +SNULL, 140399939100672, 140399947489279, +STORE, 140399947489280, 140399955881983, +STORE, 140399939100672, 140399947489279, +SNULL, 140399947493375, 140399955881983, +STORE, 140399947489280, 140399947493375, +STORE, 140399947493376, 140399955881983, +SNULL, 140399964278784, 140399972667391, +STORE, 140399972667392, 140399981060095, +STORE, 140399964278784, 140399972667391, +SNULL, 140399972671487, 140399981060095, +STORE, 140399972667392, 140399972671487, +STORE, 140399972671488, 140399981060095, +SNULL, 140399838486528, 140399855267839, +STORE, 140399855267840, 140399863660543, +STORE, 140399838486528, 140399855267839, +SNULL, 140399855271935, 140399863660543, +STORE, 140399855267840, 140399855271935, +STORE, 140399855271936, 140399863660543, +STORE, 140399830089728, 140399838482431, +SNULL, 140399830093823, 140399838482431, +STORE, 140399830089728, 140399830093823, +STORE, 140399830093824, 140399838482431, +STORE, 140399821697024, 140399830089727, +SNULL, 140399821701119, 140399830089727, +STORE, 140399821697024, 140399821701119, +STORE, 140399821701120, 140399830089727, +SNULL, 140399838486528, 140399846875135, +STORE, 140399846875136, 140399855267839, +STORE, 140399838486528, 140399846875135, +SNULL, 140399846879231, 140399855267839, +STORE, 140399846875136, 140399846879231, +STORE, 140399846879232, 140399855267839, +STORE, 140399813304320, 140399821697023, +STORE, 140399804911616, 140399821697023, +SNULL, 140399804915711, 140399821697023, +STORE, 140399804911616, 140399804915711, +STORE, 140399804915712, 140399821697023, +STORE, 140399721050112, 140399729442815, +SNULL, 140399804915712, 140399813304319, +STORE, 140399813304320, 140399821697023, +STORE, 140399804915712, 140399813304319, +SNULL, 140399813308415, 140399821697023, +STORE, 140399813304320, 140399813308415, +STORE, 140399813308416, 140399821697023, +SNULL, 140399721054207, 140399729442815, +STORE, 140399721050112, 140399721054207, +STORE, 140399721054208, 140399729442815, +STORE, 140401467105280, 140401467133951, +STORE, 140401279115264, 140401281306623, +SNULL, 140401279115264, 140401279205375, +STORE, 140401279205376, 140401281306623, +STORE, 140401279115264, 140401279205375, +SNULL, 140401281298431, 140401281306623, +STORE, 140401279205376, 140401281298431, +STORE, 140401281298432, 140401281306623, +ERASE, 140401281298432, 140401281306623, +STORE, 140401281298432, 140401281306623, +SNULL, 140401281302527, 140401281306623, +STORE, 140401281298432, 140401281302527, +STORE, 140401281302528, 140401281306623, +ERASE, 140401467105280, 140401467133951, +ERASE, 140400056594432, 140400056598527, +ERASE, 140400056598528, 140400064987135, +ERASE, 140400635396096, 140400635400191, +ERASE, 140400635400192, 140400643788799, +ERASE, 140400408891392, 140400408895487, +ERASE, 140400408895488, 140400417284095, +ERASE, 140400299851776, 140400299855871, +ERASE, 140400299855872, 140400308244479, +ERASE, 140400627003392, 140400627007487, +ERASE, 140400627007488, 140400635396095, +ERASE, 140400954155008, 140400954159103, +ERASE, 140400954159104, 140400962547711, +ERASE, 140400291459072, 140400291463167, +ERASE, 140400291463168, 140400299851775, +ERASE, 140400643788800, 140400643792895, +ERASE, 140400643792896, 140400652181503, +ERASE, 140400325029888, 140400325033983, +ERASE, 140400325033984, 140400333422591, +ERASE, 140400610217984, 140400610222079, +ERASE, 140400610222080, 140400618610687, +ERASE, 140400190812160, 140400190816255, +ERASE, 140400190816256, 140400199204863, +ERASE, 140399964274688, 140399964278783, +ERASE, 140399964278784, 140399972667391, +ERASE, 140400945762304, 140400945766399, +ERASE, 140400945766400, 140400954155007, +ERASE, 140400568287232, 140400568291327, +ERASE, 140400568291328, 140400576679935, +ERASE, 140399972667392, 140399972671487, +ERASE, 140399972671488, 140399981060095, +ERASE, 140400962547712, 140400962551807, +ERASE, 140400962551808, 140400970940415, +ERASE, 140400987725824, 140400987729919, +ERASE, 140400987729920, 140400996118527, +ERASE, 140400652181504, 140400652185599, +ERASE, 140400652185600, 140400660574207, +ERASE, 140400450854912, 140400450859007, +ERASE, 140400450859008, 140400459247615, +ERASE, 140400031416320, 140400031420415, +ERASE, 140400031420416, 140400039809023, +ERASE, 140400308244480, 140400308248575, +ERASE, 140400308248576, 140400316637183, +ERASE, 140400434069504, 140400434073599, +ERASE, 140400434073600, 140400442462207, +ERASE, 140400543109120, 140400543113215, +ERASE, 140400543113216, 140400551501823, +ERASE, 140400023023616, 140400023027711, +ERASE, 140400023027712, 140400031416319, +ERASE, 140399813304320, 140399813308415, +ERASE, 140399813308416, 140399821697023, +ERASE, 140400316637184, 140400316641279, +ERASE, 140400316641280, 140400325029887, +ERASE, 140400585072640, 140400585076735, +ERASE, 140400585076736, 140400593465343, +ERASE, 140400148848640, 140400148852735, +ERASE, 140400148852736, 140400157241343, +ERASE, 140399955881984, 140399955886079, +ERASE, 140399955886080, 140399964274687, +ERASE, 140399821697024, 140399821701119, +ERASE, 140399821701120, 140399830089727, +ERASE, 140400601825280, 140400601829375, +ERASE, 140400601829376, 140400610217983, +ERASE, 140400979333120, 140400979337215, +ERASE, 140400979337216, 140400987725823, +ERASE, 140399997845504, 140399997849599, +ERASE, 140399997849600, 140400006238207, +ERASE, 140400459247616, 140400459251711, +ERASE, 140400459251712, 140400467640319, +ERASE, 140400551501824, 140400551505919, +ERASE, 140400551505920, 140400559894527, +ERASE, 140399939096576, 140399939100671, +ERASE, 140399939100672, 140399947489279, +ERASE, 140400442462208, 140400442466303, +ERASE, 140400442466304, 140400450854911, +ERASE, 140400576679936, 140400576684031, +ERASE, 140400576684032, 140400585072639, +ERASE, 140400559894528, 140400559898623, +ERASE, 140400559898624, 140400568287231, +ERASE, 140400417284096, 140400417288191, +ERASE, 140400417288192, 140400425676799, +ERASE, 140400283066368, 140400283070463, +ERASE, 140400283070464, 140400291459071, + }; + unsigned long set33[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140734562918400, 140737488351231, +SNULL, 140734562922495, 140737488351231, +STORE, 140734562918400, 140734562922495, +STORE, 140734562787328, 140734562922495, +STORE, 94133878984704, 94133881237503, +SNULL, 94133879115775, 94133881237503, +STORE, 94133878984704, 94133879115775, +STORE, 94133879115776, 94133881237503, +ERASE, 94133879115776, 94133881237503, +STORE, 94133881208832, 94133881217023, +STORE, 94133881217024, 94133881237503, +STORE, 140583654043648, 140583656296447, +SNULL, 140583654187007, 140583656296447, +STORE, 140583654043648, 140583654187007, +STORE, 140583654187008, 140583656296447, +ERASE, 140583654187008, 140583656296447, +STORE, 140583656284160, 140583656292351, +STORE, 140583656292352, 140583656296447, +STORE, 140734564319232, 140734564323327, +STORE, 140734564306944, 140734564319231, +STORE, 140583656255488, 140583656284159, +STORE, 140583656247296, 140583656255487, +STORE, 140583651827712, 140583654043647, +SNULL, 140583651827712, 140583651926015, +STORE, 140583651926016, 140583654043647, +STORE, 140583651827712, 140583651926015, +SNULL, 140583654019071, 140583654043647, +STORE, 140583651926016, 140583654019071, +STORE, 140583654019072, 140583654043647, +SNULL, 140583654019072, 140583654027263, +STORE, 140583654027264, 140583654043647, +STORE, 140583654019072, 140583654027263, +ERASE, 140583654019072, 140583654027263, +STORE, 140583654019072, 140583654027263, +ERASE, 140583654027264, 140583654043647, +STORE, 140583654027264, 140583654043647, +STORE, 140583648030720, 140583651827711, +SNULL, 140583648030720, 140583649689599, +STORE, 140583649689600, 140583651827711, +STORE, 140583648030720, 140583649689599, +SNULL, 140583651786751, 140583651827711, +STORE, 140583649689600, 140583651786751, +STORE, 140583651786752, 140583651827711, +SNULL, 140583651786752, 140583651811327, +STORE, 140583651811328, 140583651827711, +STORE, 140583651786752, 140583651811327, +ERASE, 140583651786752, 140583651811327, +STORE, 140583651786752, 140583651811327, +ERASE, 140583651811328, 140583651827711, +STORE, 140583651811328, 140583651827711, +STORE, 140583656239104, 140583656255487, +SNULL, 140583651803135, 140583651811327, +STORE, 140583651786752, 140583651803135, +STORE, 140583651803136, 140583651811327, +SNULL, 140583654023167, 140583654027263, +STORE, 140583654019072, 140583654023167, +STORE, 140583654023168, 140583654027263, +SNULL, 94133881212927, 94133881217023, +STORE, 94133881208832, 94133881212927, +STORE, 94133881212928, 94133881217023, +SNULL, 140583656288255, 140583656292351, +STORE, 140583656284160, 140583656288255, +STORE, 140583656288256, 140583656292351, +ERASE, 140583656255488, 140583656284159, +STORE, 94133881733120, 94133881868287, +STORE, 140583639638016, 140583648030719, +SNULL, 140583639642111, 140583648030719, +STORE, 140583639638016, 140583639642111, +STORE, 140583639642112, 140583648030719, +STORE, 140583631245312, 140583639638015, +STORE, 140583497027584, 140583631245311, +SNULL, 140583497027584, 140583540621311, +STORE, 140583540621312, 140583631245311, +STORE, 140583497027584, 140583540621311, +ERASE, 140583497027584, 140583540621311, +SNULL, 140583607730175, 140583631245311, +STORE, 140583540621312, 140583607730175, +STORE, 140583607730176, 140583631245311, +ERASE, 140583607730176, 140583631245311, +SNULL, 140583540756479, 140583607730175, +STORE, 140583540621312, 140583540756479, +STORE, 140583540756480, 140583607730175, +SNULL, 140583631249407, 140583639638015, +STORE, 140583631245312, 140583631249407, +STORE, 140583631249408, 140583639638015, +STORE, 140583622852608, 140583631245311, +SNULL, 140583622856703, 140583631245311, +STORE, 140583622852608, 140583622856703, +STORE, 140583622856704, 140583631245311, +STORE, 140583614459904, 140583622852607, +SNULL, 140583614463999, 140583622852607, +STORE, 140583614459904, 140583614463999, +STORE, 140583614464000, 140583622852607, +STORE, 140583532228608, 140583540621311, +SNULL, 140583532232703, 140583540621311, +STORE, 140583532228608, 140583532232703, +STORE, 140583532232704, 140583540621311, +STORE, 140583523835904, 140583532228607, +STORE, 140583515443200, 140583532228607, +STORE, 140583507050496, 140583532228607, +STORE, 140583372832768, 140583507050495, +STORE, 140583364440064, 140583372832767, +STORE, 140583230222336, 140583364440063, +STORE, 140583096004608, 140583364440063, +SNULL, 140583230222335, 140583364440063, +STORE, 140583096004608, 140583230222335, +STORE, 140583230222336, 140583364440063, +SNULL, 140583230222336, 140583272185855, +STORE, 140583272185856, 140583364440063, +STORE, 140583230222336, 140583272185855, +ERASE, 140583230222336, 140583272185855, +STORE, 140582961786880, 140583230222335, +SNULL, 140583372832768, 140583406403583, +STORE, 140583406403584, 140583507050495, +STORE, 140583372832768, 140583406403583, +ERASE, 140583372832768, 140583406403583, +SNULL, 140583473512447, 140583507050495, +STORE, 140583406403584, 140583473512447, +STORE, 140583473512448, 140583507050495, +ERASE, 140583473512448, 140583507050495, +SNULL, 140583096004607, 140583230222335, +STORE, 140582961786880, 140583096004607, +STORE, 140583096004608, 140583230222335, +SNULL, 140583096004608, 140583137968127, +STORE, 140583137968128, 140583230222335, +STORE, 140583096004608, 140583137968127, +ERASE, 140583096004608, 140583137968127, +SNULL, 140583339294719, 140583364440063, +STORE, 140583272185856, 140583339294719, +STORE, 140583339294720, 140583364440063, +ERASE, 140583339294720, 140583364440063, +SNULL, 140583272321023, 140583339294719, +STORE, 140583272185856, 140583272321023, +STORE, 140583272321024, 140583339294719, +SNULL, 140582961786880, 140583003750399, +STORE, 140583003750400, 140583096004607, +STORE, 140582961786880, 140583003750399, +ERASE, 140582961786880, 140583003750399, + }; + + unsigned long set34[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140731327180800, 140737488351231, +SNULL, 140731327184895, 140737488351231, +STORE, 140731327180800, 140731327184895, +STORE, 140731327049728, 140731327184895, +STORE, 94632924487680, 94632926740479, +SNULL, 94632924618751, 94632926740479, +STORE, 94632924487680, 94632924618751, +STORE, 94632924618752, 94632926740479, +ERASE, 94632924618752, 94632926740479, +STORE, 94632926711808, 94632926719999, +STORE, 94632926720000, 94632926740479, +STORE, 140012544888832, 140012547141631, +SNULL, 140012545032191, 140012547141631, +STORE, 140012544888832, 140012545032191, +STORE, 140012545032192, 140012547141631, +ERASE, 140012545032192, 140012547141631, +STORE, 140012547129344, 140012547137535, +STORE, 140012547137536, 140012547141631, +STORE, 140731327725568, 140731327729663, +STORE, 140731327713280, 140731327725567, +STORE, 140012547100672, 140012547129343, +STORE, 140012547092480, 140012547100671, +STORE, 140012542672896, 140012544888831, +SNULL, 140012542672896, 140012542771199, +STORE, 140012542771200, 140012544888831, +STORE, 140012542672896, 140012542771199, +SNULL, 140012544864255, 140012544888831, +STORE, 140012542771200, 140012544864255, +STORE, 140012544864256, 140012544888831, +SNULL, 140012544864256, 140012544872447, +STORE, 140012544872448, 140012544888831, +STORE, 140012544864256, 140012544872447, +ERASE, 140012544864256, 140012544872447, +STORE, 140012544864256, 140012544872447, +ERASE, 140012544872448, 140012544888831, +STORE, 140012544872448, 140012544888831, +STORE, 140012538875904, 140012542672895, +SNULL, 140012538875904, 140012540534783, +STORE, 140012540534784, 140012542672895, +STORE, 140012538875904, 140012540534783, +SNULL, 140012542631935, 140012542672895, +STORE, 140012540534784, 140012542631935, +STORE, 140012542631936, 140012542672895, +SNULL, 140012542631936, 140012542656511, +STORE, 140012542656512, 140012542672895, +STORE, 140012542631936, 140012542656511, +ERASE, 140012542631936, 140012542656511, +STORE, 140012542631936, 140012542656511, +ERASE, 140012542656512, 140012542672895, +STORE, 140012542656512, 140012542672895, +STORE, 140012547084288, 140012547100671, +SNULL, 140012542648319, 140012542656511, +STORE, 140012542631936, 140012542648319, +STORE, 140012542648320, 140012542656511, +SNULL, 140012544868351, 140012544872447, +STORE, 140012544864256, 140012544868351, +STORE, 140012544868352, 140012544872447, +SNULL, 94632926715903, 94632926719999, +STORE, 94632926711808, 94632926715903, +STORE, 94632926715904, 94632926719999, +SNULL, 140012547133439, 140012547137535, +STORE, 140012547129344, 140012547133439, +STORE, 140012547133440, 140012547137535, +ERASE, 140012547100672, 140012547129343, +STORE, 94632939606016, 94632939741183, +STORE, 140012530483200, 140012538875903, +SNULL, 140012530487295, 140012538875903, +STORE, 140012530483200, 140012530487295, +STORE, 140012530487296, 140012538875903, +STORE, 140012522090496, 140012530483199, +STORE, 140012387872768, 140012522090495, +SNULL, 140012387872768, 140012444188671, +STORE, 140012444188672, 140012522090495, +STORE, 140012387872768, 140012444188671, +ERASE, 140012387872768, 140012444188671, +SNULL, 140012511297535, 140012522090495, +STORE, 140012444188672, 140012511297535, +STORE, 140012511297536, 140012522090495, +ERASE, 140012511297536, 140012522090495, +SNULL, 140012444323839, 140012511297535, +STORE, 140012444188672, 140012444323839, +STORE, 140012444323840, 140012511297535, +SNULL, 140012522094591, 140012530483199, +STORE, 140012522090496, 140012522094591, +STORE, 140012522094592, 140012530483199, +STORE, 140012513697792, 140012522090495, +SNULL, 140012513701887, 140012522090495, +STORE, 140012513697792, 140012513701887, +STORE, 140012513701888, 140012522090495, +STORE, 140012435795968, 140012444188671, +SNULL, 140012435800063, 140012444188671, +STORE, 140012435795968, 140012435800063, +STORE, 140012435800064, 140012444188671, +STORE, 140012427403264, 140012435795967, +SNULL, 140012427407359, 140012435795967, +STORE, 140012427403264, 140012427407359, +STORE, 140012427407360, 140012435795967, +STORE, 140012419010560, 140012427403263, +STORE, 140012410617856, 140012427403263, +STORE, 140012276400128, 140012410617855, +STORE, 140012268007424, 140012276400127, +STORE, 140012133789696, 140012268007423, +SNULL, 140012133789696, 140012175753215, +STORE, 140012175753216, 140012268007423, +STORE, 140012133789696, 140012175753215, +ERASE, 140012133789696, 140012175753215, +STORE, 140012041535488, 140012268007423, +SNULL, 140012108644351, 140012268007423, +STORE, 140012041535488, 140012108644351, +STORE, 140012108644352, 140012268007423, +SNULL, 140012108644352, 140012175753215, +STORE, 140012175753216, 140012268007423, +STORE, 140012108644352, 140012175753215, +ERASE, 140012108644352, 140012175753215, +SNULL, 140012276400128, 140012309970943, +STORE, 140012309970944, 140012410617855, +STORE, 140012276400128, 140012309970943, +ERASE, 140012276400128, 140012309970943, +STORE, 140012301578240, 140012309970943, +STORE, 140012041535488, 140012268007423, +SNULL, 140012242862079, 140012268007423, +STORE, 140012041535488, 140012242862079, +STORE, 140012242862080, 140012268007423, +ERASE, 140012242862080, 140012268007423, +SNULL, 140012041670655, 140012242862079, +STORE, 140012041535488, 140012041670655, +STORE, 140012041670656, 140012242862079, +SNULL, 140012041670656, 140012108644351, +STORE, 140012108644352, 140012242862079, +STORE, 140012041670656, 140012108644351, +SNULL, 140012108779519, 140012242862079, +STORE, 140012108644352, 140012108779519, +STORE, 140012108779520, 140012242862079, +SNULL, 140012377079807, 140012410617855, +STORE, 140012309970944, 140012377079807, +STORE, 140012377079808, 140012410617855, +ERASE, 140012377079808, 140012410617855, +SNULL, 140012310106111, 140012377079807, +STORE, 140012309970944, 140012310106111, +STORE, 140012310106112, 140012377079807, +SNULL, 140012410621951, 140012427403263, +STORE, 140012410617856, 140012410621951, +STORE, 140012410621952, 140012427403263, +SNULL, 140012108779520, 140012175753215, +STORE, 140012175753216, 140012242862079, +STORE, 140012108779520, 140012175753215, +SNULL, 140012175888383, 140012242862079, +STORE, 140012175753216, 140012175888383, +STORE, 140012175888384, 140012242862079, +SNULL, 140012301582335, 140012309970943, +STORE, 140012301578240, 140012301582335, +STORE, 140012301582336, 140012309970943, +SNULL, 140012410621952, 140012419010559, +STORE, 140012419010560, 140012427403263, +STORE, 140012410621952, 140012419010559, +SNULL, 140012419014655, 140012427403263, +STORE, 140012419010560, 140012419014655, +STORE, 140012419014656, 140012427403263, +SNULL, 140012268011519, 140012276400127, +STORE, 140012268007424, 140012268011519, +STORE, 140012268011520, 140012276400127, +STORE, 140012402225152, 140012410617855, +STORE, 140012393832448, 140012410617855, +SNULL, 140012393832448, 140012402225151, +STORE, 140012402225152, 140012410617855, +STORE, 140012393832448, 140012402225151, +SNULL, 140012402229247, 140012410617855, +STORE, 140012402225152, 140012402229247, +STORE, 140012402229248, 140012410617855, +STORE, 140012385439744, 140012402225151, +SNULL, 140012385439744, 140012393832447, +STORE, 140012393832448, 140012402225151, +STORE, 140012385439744, 140012393832447, +SNULL, 140012393836543, 140012402225151, +STORE, 140012393832448, 140012393836543, +STORE, 140012393836544, 140012402225151, +STORE, 140012293185536, 140012301578239, +STORE, 140012284792832, 140012301578239, +SNULL, 140012284792832, 140012293185535, +STORE, 140012293185536, 140012301578239, +STORE, 140012284792832, 140012293185535, +SNULL, 140012293189631, 140012301578239, +STORE, 140012293185536, 140012293189631, +STORE, 140012293189632, 140012301578239, +STORE, 140012268011520, 140012284792831, +SNULL, 140012385443839, 140012393832447, +STORE, 140012385439744, 140012385443839, +STORE, 140012385443840, 140012393832447, +STORE, 140012259614720, 140012268007423, +SNULL, 140012259618815, 140012268007423, +STORE, 140012259614720, 140012259618815, +STORE, 140012259618816, 140012268007423, +STORE, 140012251222016, 140012259614719, +SNULL, 140012251226111, 140012259614719, +STORE, 140012251222016, 140012251226111, +STORE, 140012251226112, 140012259614719, +SNULL, 140012284796927, 140012293185535, +STORE, 140012284792832, 140012284796927, +STORE, 140012284796928, 140012293185535, +SNULL, 140012268011520, 140012276400127, +STORE, 140012276400128, 140012284792831, +STORE, 140012268011520, 140012276400127, +SNULL, 140012276404223, 140012284792831, +STORE, 140012276400128, 140012276404223, +STORE, 140012276404224, 140012284792831, +STORE, 140012033142784, 140012041535487, +SNULL, 140012033146879, 140012041535487, +STORE, 140012033142784, 140012033146879, +STORE, 140012033146880, 140012041535487, +STORE, 140012024750080, 140012033142783, +STORE, 140012016357376, 140012033142783, +SNULL, 140012016357376, 140012024750079, +STORE, 140012024750080, 140012033142783, +STORE, 140012016357376, 140012024750079, +SNULL, 140012024754175, 140012033142783, +STORE, 140012024750080, 140012024754175, +STORE, 140012024754176, 140012033142783, +SNULL, 140012016361471, 140012024750079, +STORE, 140012016357376, 140012016361471, +STORE, 140012016361472, 140012024750079, +STORE, 140012007964672, 140012016357375, +SNULL, 140012007968767, 140012016357375, +STORE, 140012007964672, 140012007968767, +STORE, 140012007968768, 140012016357375, +STORE, 140011999571968, 140012007964671, +STORE, 140011991179264, 140012007964671, +STORE, 140011856961536, 140011991179263, +STORE, 140011848568832, 140011856961535, +STORE, 140011714351104, 140011848568831, +SNULL, 140011714351104, 140011773100031, +STORE, 140011773100032, 140011848568831, +STORE, 140011714351104, 140011773100031, +ERASE, 140011714351104, 140011773100031, +STORE, 140011764707328, 140011773100031, +STORE, 140011756314624, 140011773100031, +STORE, 140011622096896, 140011756314623, +STORE, 140011613704192, 140011622096895, +STORE, 140011479486464, 140011613704191, +STORE, 140011471093760, 140011479486463, +SNULL, 140011479486464, 140011504664575, +STORE, 140011504664576, 140011613704191, +STORE, 140011479486464, 140011504664575, +ERASE, 140011479486464, 140011504664575, +STORE, 140011496271872, 140011504664575, +STORE, 140011487879168, 140011504664575, +STORE, 140011336876032, 140011471093759, +SNULL, 140011336876032, 140011370446847, +STORE, 140011370446848, 140011471093759, +STORE, 140011336876032, 140011370446847, +ERASE, 140011336876032, 140011370446847, +STORE, 140011471093760, 140011487879167, +STORE, 140011362054144, 140011370446847, +SNULL, 140011362058239, 140011370446847, +STORE, 140011362054144, 140011362058239, +STORE, 140011362058240, 140011370446847, +STORE, 140011353661440, 140011362054143, +STORE, 140011345268736, 140011362054143, +SNULL, 140011345272831, 140011362054143, +STORE, 140011345268736, 140011345272831, +STORE, 140011345272832, 140011362054143, +STORE, 140011336876032, 140011345268735, +STORE, 140011328483328, 140011345268735, +SNULL, 140011328487423, 140011345268735, +STORE, 140011328483328, 140011328487423, +STORE, 140011328487424, 140011345268735, +STORE, 140011320090624, 140011328483327, +STORE, 140011185872896, 140011320090623, +SNULL, 140011185872896, 140011236229119, +STORE, 140011236229120, 140011320090623, +STORE, 140011185872896, 140011236229119, +ERASE, 140011185872896, 140011236229119, +SNULL, 140011856961536, 140011907317759, +STORE, 140011907317760, 140011991179263, +STORE, 140011856961536, 140011907317759, +ERASE, 140011856961536, 140011907317759, +SNULL, 140011974426623, 140011991179263, +STORE, 140011907317760, 140011974426623, +STORE, 140011974426624, 140011991179263, +ERASE, 140011974426624, 140011991179263, +SNULL, 140011840208895, 140011848568831, +STORE, 140011773100032, 140011840208895, +STORE, 140011840208896, 140011848568831, +ERASE, 140011840208896, 140011848568831, +SNULL, 140011773235199, 140011840208895, +STORE, 140011773100032, 140011773235199, +STORE, 140011773235200, 140011840208895, +STORE, 140011102011392, 140011320090623, +SNULL, 140011169120255, 140011320090623, +STORE, 140011102011392, 140011169120255, +STORE, 140011169120256, 140011320090623, +SNULL, 140011169120256, 140011236229119, +STORE, 140011236229120, 140011320090623, +STORE, 140011169120256, 140011236229119, +ERASE, 140011169120256, 140011236229119, +SNULL, 140011622096896, 140011638882303, +STORE, 140011638882304, 140011756314623, +STORE, 140011622096896, 140011638882303, +ERASE, 140011622096896, 140011638882303, +SNULL, 140011705991167, 140011756314623, +STORE, 140011638882304, 140011705991167, +STORE, 140011705991168, 140011756314623, +ERASE, 140011705991168, 140011756314623, +SNULL, 140011571773439, 140011613704191, +STORE, 140011504664576, 140011571773439, +STORE, 140011571773440, 140011613704191, +ERASE, 140011571773440, 140011613704191, +STORE, 140010967793664, 140011169120255, +SNULL, 140011034902527, 140011169120255, +STORE, 140010967793664, 140011034902527, +STORE, 140011034902528, 140011169120255, +SNULL, 140011034902528, 140011102011391, +STORE, 140011102011392, 140011169120255, +STORE, 140011034902528, 140011102011391, +ERASE, 140011034902528, 140011102011391, +STORE, 140010833575936, 140011034902527, +SNULL, 140011437555711, 140011471093759, +STORE, 140011370446848, 140011437555711, +STORE, 140011437555712, 140011471093759, +ERASE, 140011437555712, 140011471093759, +SNULL, 140011370582015, 140011437555711, +STORE, 140011370446848, 140011370582015, +STORE, 140011370582016, 140011437555711, +STORE, 140010699358208, 140011034902527, +SNULL, 140011487883263, 140011504664575, +STORE, 140011487879168, 140011487883263, +STORE, 140011487883264, 140011504664575, +SNULL, 140011345272832, 140011353661439, +STORE, 140011353661440, 140011362054143, +STORE, 140011345272832, 140011353661439, +SNULL, 140011353665535, 140011362054143, +STORE, 140011353661440, 140011353665535, +STORE, 140011353665536, 140011362054143, +SNULL, 140011328487424, 140011336876031, +STORE, 140011336876032, 140011345268735, +STORE, 140011328487424, 140011336876031, +SNULL, 140011336880127, 140011345268735, +STORE, 140011336876032, 140011336880127, +STORE, 140011336880128, 140011345268735, +SNULL, 140011303337983, 140011320090623, +STORE, 140011236229120, 140011303337983, +STORE, 140011303337984, 140011320090623, +ERASE, 140011303337984, 140011320090623, +SNULL, 140011907452927, 140011974426623, +STORE, 140011907317760, 140011907452927, +STORE, 140011907452928, 140011974426623, +SNULL, 140011102146559, 140011169120255, +STORE, 140011102011392, 140011102146559, +STORE, 140011102146560, 140011169120255, +SNULL, 140011639017471, 140011705991167, +STORE, 140011638882304, 140011639017471, +STORE, 140011639017472, 140011705991167, +SNULL, 140011504799743, 140011571773439, +STORE, 140011504664576, 140011504799743, +STORE, 140011504799744, 140011571773439, +SNULL, 140011613708287, 140011622096895, +STORE, 140011613704192, 140011613708287, +STORE, 140011613708288, 140011622096895, +SNULL, 140010699358208, 140010967793663, +STORE, 140010967793664, 140011034902527, +STORE, 140010699358208, 140010967793663, +SNULL, 140010967928831, 140011034902527, +STORE, 140010967793664, 140010967928831, +STORE, 140010967928832, 140011034902527, +SNULL, 140010900684799, 140010967793663, +STORE, 140010699358208, 140010900684799, +STORE, 140010900684800, 140010967793663, +ERASE, 140010900684800, 140010967793663, +SNULL, 140010766467071, 140010900684799, +STORE, 140010699358208, 140010766467071, +STORE, 140010766467072, 140010900684799, +SNULL, 140010766467072, 140010833575935, +STORE, 140010833575936, 140010900684799, +STORE, 140010766467072, 140010833575935, +ERASE, 140010766467072, 140010833575935, +SNULL, 140010699493375, 140010766467071, +STORE, 140010699358208, 140010699493375, +STORE, 140010699493376, 140010766467071, +SNULL, 140011848572927, 140011856961535, +STORE, 140011848568832, 140011848572927, +STORE, 140011848572928, 140011856961535, +STORE, 140011982786560, 140012007964671, +STORE, 140011898925056, 140011907317759, +SNULL, 140011898929151, 140011907317759, +STORE, 140011898925056, 140011898929151, +STORE, 140011898929152, 140011907317759, +SNULL, 140011320094719, 140011328483327, +STORE, 140011320090624, 140011320094719, +STORE, 140011320094720, 140011328483327, +STORE, 140011890532352, 140011898925055, +STORE, 140011882139648, 140011898925055, +SNULL, 140011882143743, 140011898925055, +STORE, 140011882139648, 140011882143743, +STORE, 140011882143744, 140011898925055, +STORE, 140011873746944, 140011882139647, +SNULL, 140011873751039, 140011882139647, +STORE, 140011873746944, 140011873751039, +STORE, 140011873751040, 140011882139647, +SNULL, 140011236364287, 140011303337983, +STORE, 140011236229120, 140011236364287, +STORE, 140011236364288, 140011303337983, +SNULL, 140011756318719, 140011773100031, +STORE, 140011756314624, 140011756318719, +STORE, 140011756318720, 140011773100031, +SNULL, 140011756318720, 140011764707327, +STORE, 140011764707328, 140011773100031, +STORE, 140011756318720, 140011764707327, +SNULL, 140011764711423, 140011773100031, +STORE, 140011764707328, 140011764711423, +STORE, 140011764711424, 140011773100031, +SNULL, 140011471097855, 140011487879167, +STORE, 140011471093760, 140011471097855, +STORE, 140011471097856, 140011487879167, +SNULL, 140010833711103, 140010900684799, +STORE, 140010833575936, 140010833711103, +STORE, 140010833711104, 140010900684799, +SNULL, 140011982790655, 140012007964671, +STORE, 140011982786560, 140011982790655, +STORE, 140011982790656, 140012007964671, +STORE, 140011865354240, 140011873746943, +STORE, 140011848572928, 140011865354239, +SNULL, 140011848572928, 140011856961535, +STORE, 140011856961536, 140011865354239, +STORE, 140011848572928, 140011856961535, +SNULL, 140011856965631, 140011865354239, +STORE, 140011856961536, 140011856965631, +STORE, 140011856965632, 140011865354239, +STORE, 140011747921920, 140011756314623, +STORE, 140011739529216, 140011756314623, +SNULL, 140011471097856, 140011479486463, +STORE, 140011479486464, 140011487879167, +STORE, 140011471097856, 140011479486463, +SNULL, 140011479490559, 140011487879167, +STORE, 140011479486464, 140011479490559, +STORE, 140011479490560, 140011487879167, +STORE, 140011731136512, 140011756314623, +STORE, 140011722743808, 140011756314623, +SNULL, 140011982790656, 140011999571967, +STORE, 140011999571968, 140012007964671, +STORE, 140011982790656, 140011999571967, +SNULL, 140011999576063, 140012007964671, +STORE, 140011999571968, 140011999576063, +STORE, 140011999576064, 140012007964671, +STORE, 140011714351104, 140011756314623, +SNULL, 140011882143744, 140011890532351, +STORE, 140011890532352, 140011898925055, +STORE, 140011882143744, 140011890532351, +SNULL, 140011890536447, 140011898925055, +STORE, 140011890532352, 140011890536447, +STORE, 140011890536448, 140011898925055, +STORE, 140011630489600, 140011638882303, +STORE, 140011613708288, 140011638882303, +STORE, 140011605311488, 140011613704191, +STORE, 140011596918784, 140011613704191, +STORE, 140011588526080, 140011613704191, +SNULL, 140011487883264, 140011496271871, +STORE, 140011496271872, 140011504664575, +STORE, 140011487883264, 140011496271871, +SNULL, 140011496275967, 140011504664575, +STORE, 140011496271872, 140011496275967, +STORE, 140011496275968, 140011504664575, +STORE, 140011580133376, 140011613704191, +SNULL, 140011580137471, 140011613704191, +STORE, 140011580133376, 140011580137471, +STORE, 140011580137472, 140011613704191, +SNULL, 140011982790656, 140011991179263, +STORE, 140011991179264, 140011999571967, +STORE, 140011982790656, 140011991179263, +SNULL, 140011991183359, 140011999571967, +STORE, 140011991179264, 140011991183359, +STORE, 140011991183360, 140011999571967, +SNULL, 140011865358335, 140011873746943, +STORE, 140011865354240, 140011865358335, +STORE, 140011865358336, 140011873746943, +STORE, 140011462701056, 140011471093759, +SNULL, 140011714351104, 140011739529215, +STORE, 140011739529216, 140011756314623, +STORE, 140011714351104, 140011739529215, +SNULL, 140011739533311, 140011756314623, +STORE, 140011739529216, 140011739533311, +STORE, 140011739533312, 140011756314623, +SNULL, 140011739533312, 140011747921919, +STORE, 140011747921920, 140011756314623, +STORE, 140011739533312, 140011747921919, +SNULL, 140011747926015, 140011756314623, +STORE, 140011747921920, 140011747926015, +STORE, 140011747926016, 140011756314623, +SNULL, 140011613708288, 140011630489599, +STORE, 140011630489600, 140011638882303, +STORE, 140011613708288, 140011630489599, +SNULL, 140011630493695, 140011638882303, +STORE, 140011630489600, 140011630493695, +STORE, 140011630493696, 140011638882303, +SNULL, 140011714351104, 140011722743807, +STORE, 140011722743808, 140011739529215, +STORE, 140011714351104, 140011722743807, +SNULL, 140011722747903, 140011739529215, +STORE, 140011722743808, 140011722747903, +STORE, 140011722747904, 140011739529215, +SNULL, 140011714355199, 140011722743807, +STORE, 140011714351104, 140011714355199, +STORE, 140011714355200, 140011722743807, +SNULL, 140011722747904, 140011731136511, +STORE, 140011731136512, 140011739529215, +STORE, 140011722747904, 140011731136511, +SNULL, 140011731140607, 140011739529215, +STORE, 140011731136512, 140011731140607, +STORE, 140011731140608, 140011739529215, +STORE, 140011454308352, 140011471093759, +STORE, 140011445915648, 140011471093759, +SNULL, 140011580137472, 140011588526079, +STORE, 140011588526080, 140011613704191, +STORE, 140011580137472, 140011588526079, +SNULL, 140011588530175, 140011613704191, +STORE, 140011588526080, 140011588530175, +STORE, 140011588530176, 140011613704191, +SNULL, 140011445915648, 140011462701055, +STORE, 140011462701056, 140011471093759, +STORE, 140011445915648, 140011462701055, +SNULL, 140011462705151, 140011471093759, +STORE, 140011462701056, 140011462705151, +STORE, 140011462705152, 140011471093759, +SNULL, 140011588530176, 140011596918783, +STORE, 140011596918784, 140011613704191, +STORE, 140011588530176, 140011596918783, +SNULL, 140011596922879, 140011613704191, +STORE, 140011596918784, 140011596922879, +STORE, 140011596922880, 140011613704191, +SNULL, 140011596922880, 140011605311487, +STORE, 140011605311488, 140011613704191, +STORE, 140011596922880, 140011605311487, +SNULL, 140011605315583, 140011613704191, +STORE, 140011605311488, 140011605315583, +STORE, 140011605315584, 140011613704191, +SNULL, 140011613708288, 140011622096895, +STORE, 140011622096896, 140011630489599, +STORE, 140011613708288, 140011622096895, +SNULL, 140011622100991, 140011630489599, +STORE, 140011622096896, 140011622100991, +STORE, 140011622100992, 140011630489599, +STORE, 140011311697920, 140011320090623, +STORE, 140011227836416, 140011236229119, +STORE, 140011219443712, 140011236229119, +SNULL, 140011219447807, 140011236229119, +STORE, 140011219443712, 140011219447807, +STORE, 140011219447808, 140011236229119, +STORE, 140011211051008, 140011219443711, +STORE, 140011202658304, 140011219443711, +SNULL, 140011202662399, 140011219443711, +STORE, 140011202658304, 140011202662399, +STORE, 140011202662400, 140011219443711, +STORE, 140011194265600, 140011202658303, +STORE, 140011185872896, 140011202658303, +STORE, 140011177480192, 140011202658303, +STORE, 140011093618688, 140011102011391, +SNULL, 140011445915648, 140011454308351, +STORE, 140011454308352, 140011462701055, +STORE, 140011445915648, 140011454308351, +SNULL, 140011454312447, 140011462701055, +STORE, 140011454308352, 140011454312447, +STORE, 140011454312448, 140011462701055, +STORE, 140011085225984, 140011102011391, +SNULL, 140011085230079, 140011102011391, +STORE, 140011085225984, 140011085230079, +STORE, 140011085230080, 140011102011391, +SNULL, 140011177484287, 140011202658303, +STORE, 140011177480192, 140011177484287, +STORE, 140011177484288, 140011202658303, +SNULL, 140011445919743, 140011454308351, +STORE, 140011445915648, 140011445919743, +STORE, 140011445919744, 140011454308351, +SNULL, 140011177484288, 140011185872895, +STORE, 140011185872896, 140011202658303, +STORE, 140011177484288, 140011185872895, +SNULL, 140011185876991, 140011202658303, +STORE, 140011185872896, 140011185876991, +STORE, 140011185876992, 140011202658303, +STORE, 140011076833280, 140011085225983, +SNULL, 140011202662400, 140011211051007, +STORE, 140011211051008, 140011219443711, +STORE, 140011202662400, 140011211051007, +SNULL, 140011211055103, 140011219443711, +STORE, 140011211051008, 140011211055103, +STORE, 140011211055104, 140011219443711, +SNULL, 140011185876992, 140011194265599, +STORE, 140011194265600, 140011202658303, +STORE, 140011185876992, 140011194265599, +SNULL, 140011194269695, 140011202658303, +STORE, 140011194265600, 140011194269695, +STORE, 140011194269696, 140011202658303, +STORE, 140011068440576, 140011085225983, +SNULL, 140011311702015, 140011320090623, +STORE, 140011311697920, 140011311702015, +STORE, 140011311702016, 140011320090623, +STORE, 140011060047872, 140011085225983, +SNULL, 140011060051967, 140011085225983, +STORE, 140011060047872, 140011060051967, +STORE, 140011060051968, 140011085225983, +STORE, 140011051655168, 140011060047871, +STORE, 140011043262464, 140011060047871, +SNULL, 140011043266559, 140011060047871, +STORE, 140011043262464, 140011043266559, +STORE, 140011043266560, 140011060047871, +SNULL, 140011219447808, 140011227836415, +STORE, 140011227836416, 140011236229119, +STORE, 140011219447808, 140011227836415, +SNULL, 140011227840511, 140011236229119, +STORE, 140011227836416, 140011227840511, +STORE, 140011227840512, 140011236229119, +SNULL, 140011085230080, 140011093618687, +STORE, 140011093618688, 140011102011391, +STORE, 140011085230080, 140011093618687, +SNULL, 140011093622783, 140011102011391, +STORE, 140011093618688, 140011093622783, +STORE, 140011093622784, 140011102011391, +STORE, 140010959400960, 140010967793663, +STORE, 140010951008256, 140010967793663, +SNULL, 140010951008256, 140010959400959, +STORE, 140010959400960, 140010967793663, +STORE, 140010951008256, 140010959400959, +SNULL, 140010959405055, 140010967793663, +STORE, 140010959400960, 140010959405055, +STORE, 140010959405056, 140010967793663, +STORE, 140010942615552, 140010959400959, +STORE, 140010934222848, 140010959400959, +SNULL, 140011060051968, 140011076833279, +STORE, 140011076833280, 140011085225983, +STORE, 140011060051968, 140011076833279, +SNULL, 140011076837375, 140011085225983, +STORE, 140011076833280, 140011076837375, +STORE, 140011076837376, 140011085225983, +SNULL, 140011043266560, 140011051655167, +STORE, 140011051655168, 140011060047871, +STORE, 140011043266560, 140011051655167, +SNULL, 140011051659263, 140011060047871, +STORE, 140011051655168, 140011051659263, +STORE, 140011051659264, 140011060047871, +STORE, 140010925830144, 140010959400959, +SNULL, 140011060051968, 140011068440575, +STORE, 140011068440576, 140011076833279, +STORE, 140011060051968, 140011068440575, +SNULL, 140011068444671, 140011076833279, +STORE, 140011068440576, 140011068444671, +STORE, 140011068444672, 140011076833279, +STORE, 140010917437440, 140010959400959, +STORE, 140010909044736, 140010959400959, +STORE, 140010825183232, 140010833575935, +SNULL, 140010909044736, 140010942615551, +STORE, 140010942615552, 140010959400959, +STORE, 140010909044736, 140010942615551, +SNULL, 140010942619647, 140010959400959, +STORE, 140010942615552, 140010942619647, +STORE, 140010942619648, 140010959400959, +SNULL, 140010909044736, 140010934222847, +STORE, 140010934222848, 140010942615551, +STORE, 140010909044736, 140010934222847, +SNULL, 140010934226943, 140010942615551, +STORE, 140010934222848, 140010934226943, +STORE, 140010934226944, 140010942615551, +SNULL, 140010909048831, 140010934222847, +STORE, 140010909044736, 140010909048831, +STORE, 140010909048832, 140010934222847, +STORE, 140010816790528, 140010833575935, +SNULL, 140010816794623, 140010833575935, +STORE, 140010816790528, 140010816794623, +STORE, 140010816794624, 140010833575935, +STORE, 140010808397824, 140010816790527, +SNULL, 140010942619648, 140010951008255, +STORE, 140010951008256, 140010959400959, +STORE, 140010942619648, 140010951008255, +SNULL, 140010951012351, 140010959400959, +STORE, 140010951008256, 140010951012351, +STORE, 140010951012352, 140010959400959, +STORE, 140010800005120, 140010816790527, +SNULL, 140010800009215, 140010816790527, +STORE, 140010800005120, 140010800009215, +STORE, 140010800009216, 140010816790527, +SNULL, 140010909048832, 140010925830143, +STORE, 140010925830144, 140010934222847, +STORE, 140010909048832, 140010925830143, +SNULL, 140010925834239, 140010934222847, +STORE, 140010925830144, 140010925834239, +STORE, 140010925834240, 140010934222847, +SNULL, 140010816794624, 140010825183231, +STORE, 140010825183232, 140010833575935, +STORE, 140010816794624, 140010825183231, +SNULL, 140010825187327, 140010833575935, +STORE, 140010825183232, 140010825187327, +STORE, 140010825187328, 140010833575935, +SNULL, 140010909048832, 140010917437439, +STORE, 140010917437440, 140010925830143, +STORE, 140010909048832, 140010917437439, +SNULL, 140010917441535, 140010925830143, +STORE, 140010917437440, 140010917441535, +STORE, 140010917441536, 140010925830143, +SNULL, 140010800009216, 140010808397823, +STORE, 140010808397824, 140010816790527, +STORE, 140010800009216, 140010808397823, +SNULL, 140010808401919, 140010816790527, +STORE, 140010808397824, 140010808401919, +STORE, 140010808401920, 140010816790527, +STORE, 140010791612416, 140010800005119, +SNULL, 140010791616511, 140010800005119, +STORE, 140010791612416, 140010791616511, +STORE, 140010791616512, 140010800005119, +STORE, 140012547100672, 140012547129343, +STORE, 140012511506432, 140012513697791, +SNULL, 140012511506432, 140012511596543, +STORE, 140012511596544, 140012513697791, +STORE, 140012511506432, 140012511596543, +SNULL, 140012513689599, 140012513697791, +STORE, 140012511596544, 140012513689599, +STORE, 140012513689600, 140012513697791, +ERASE, 140012513689600, 140012513697791, +STORE, 140012513689600, 140012513697791, +SNULL, 140012513693695, 140012513697791, +STORE, 140012513689600, 140012513693695, +STORE, 140012513693696, 140012513697791, +ERASE, 140012547100672, 140012547129343, +ERASE, 140011362054144, 140011362058239, +ERASE, 140011362058240, 140011370446847, +ERASE, 140011882139648, 140011882143743, +ERASE, 140011882143744, 140011890532351, +ERASE, 140011873746944, 140011873751039, +ERASE, 140011873751040, 140011882139647, +ERASE, 140011588526080, 140011588530175, +ERASE, 140011588530176, 140011596918783, +ERASE, 140011328483328, 140011328487423, +ERASE, 140011328487424, 140011336876031, +ERASE, 140011898925056, 140011898929151, +ERASE, 140011898929152, 140011907317759, +ERASE, 140011353661440, 140011353665535, +ERASE, 140011353665536, 140011362054143, +ERASE, 140011336876032, 140011336880127, +ERASE, 140011336880128, 140011345268735, +ERASE, 140011731136512, 140011731140607, +ERASE, 140011731140608, 140011739529215, +ERASE, 140011479486464, 140011479490559, +ERASE, 140011479490560, 140011487879167, +ERASE, 140011756314624, 140011756318719, +ERASE, 140011756318720, 140011764707327, +ERASE, 140011580133376, 140011580137471, +ERASE, 140011580137472, 140011588526079, +ERASE, 140011219443712, 140011219447807, +ERASE, 140011219447808, 140011227836415, +ERASE, 140011051655168, 140011051659263, +ERASE, 140011051659264, 140011060047871, +ERASE, 140011999571968, 140011999576063, +ERASE, 140011999576064, 140012007964671, +ERASE, 140011714351104, 140011714355199, +ERASE, 140011714355200, 140011722743807, +ERASE, 140011739529216, 140011739533311, +ERASE, 140011739533312, 140011747921919, +ERASE, 140011320090624, 140011320094719, +ERASE, 140011320094720, 140011328483327, +ERASE, 140011630489600, 140011630493695, +ERASE, 140011630493696, 140011638882303, +ERASE, 140011345268736, 140011345272831, +ERASE, 140011345272832, 140011353661439, +ERASE, 140011496271872, 140011496275967, +ERASE, 140011496275968, 140011504664575, +ERASE, 140011194265600, 140011194269695, +ERASE, 140011194269696, 140011202658303, +ERASE, 140011068440576, 140011068444671, +ERASE, 140011068444672, 140011076833279, +ERASE, 140010909044736, 140010909048831, +ERASE, 140010909048832, 140010917437439, +ERASE, 140011764707328, 140011764711423, +ERASE, 140011764711424, 140011773100031, +ERASE, 140011462701056, 140011462705151, +ERASE, 140011462705152, 140011471093759, +ERASE, 140011076833280, 140011076837375, +ERASE, 140011076837376, 140011085225983, +ERASE, 140011991179264, 140011991183359, +ERASE, 140011991183360, 140011999571967, +ERASE, 140011211051008, 140011211055103, +ERASE, 140011211055104, 140011219443711, +ERASE, 140010917437440, 140010917441535, +ERASE, 140010917441536, 140010925830143, +ERASE, 140011085225984, 140011085230079, +ERASE, 140011085230080, 140011093618687, +ERASE, 140011487879168, 140011487883263, +ERASE, 140011487883264, 140011496271871, +ERASE, 140011856961536, 140011856965631, +ERASE, 140011856965632, 140011865354239, +ERASE, 140011982786560, 140011982790655, +ERASE, 140011982790656, 140011991179263, +ERASE, 140011722743808, 140011722747903, +ERASE, 140011722747904, 140011731136511, +ERASE, 140011177480192, 140011177484287, +ERASE, 140011177484288, 140011185872895, +ERASE, 140011848568832, 140011848572927, +ERASE, 140011848572928, 140011856961535, +ERASE, 140011890532352, 140011890536447, +ERASE, 140011890536448, 140011898925055, +ERASE, 140011622096896, 140011622100991, +ERASE, 140011622100992, 140011630489599, +ERASE, 140011311697920, 140011311702015, +ERASE, 140011311702016, 140011320090623, +ERASE, 140011471093760, 140011471097855, +ERASE, 140011471097856, 140011479486463, +ERASE, 140011605311488, 140011605315583, +ERASE, 140011605315584, 140011613704191, +ERASE, 140010791612416, 140010791616511, +ERASE, 140010791616512, 140010800005119, +ERASE, 140010959400960, 140010959405055, +ERASE, 140010959405056, 140010967793663, +ERASE, 140011185872896, 140011185876991, +ERASE, 140011185876992, 140011194265599, +ERASE, 140011454308352, 140011454312447, +ERASE, 140011454312448, 140011462701055, +ERASE, 140011596918784, 140011596922879, +ERASE, 140011596922880, 140011605311487, +ERASE, 140011060047872, 140011060051967, +ERASE, 140011060051968, 140011068440575, +ERASE, 140010925830144, 140010925834239, +ERASE, 140010925834240, 140010934222847, +ERASE, 140011747921920, 140011747926015, +ERASE, 140011747926016, 140011756314623, +ERASE, 140011202658304, 140011202662399, +ERASE, 140011202662400, 140011211051007, +ERASE, 140010800005120, 140010800009215, +ERASE, 140010800009216, 140010808397823, +ERASE, 140011093618688, 140011093622783, +ERASE, 140011093622784, 140011102011391, +ERASE, 140010808397824, 140010808401919, +ERASE, 140010808401920, 140010816790527, +ERASE, 140012419010560, 140012419014655, +ERASE, 140012419014656, 140012427403263, +ERASE, 140010934222848, 140010934226943, +ERASE, 140010934226944, 140010942615551, +ERASE, 140010942615552, 140010942619647, +ERASE, 140010942619648, 140010951008255, +ERASE, 140011613704192, 140011613708287, +ERASE, 140011613708288, 140011622096895, +ERASE, 140011865354240, 140011865358335, +ERASE, 140011865358336, 140011873746943, +ERASE, 140012301578240, 140012301582335, +ERASE, 140012301582336, 140012309970943, +ERASE, 140012393832448, 140012393836543, +ERASE, 140012393836544, 140012402225151, +ERASE, 140012410617856, 140012410621951, +ERASE, 140012410621952, 140012419010559, +ERASE, 140012402225152, 140012402229247, +ERASE, 140012402229248, 140012410617855, +ERASE, 140012259614720, 140012259618815, +ERASE, 140012259618816, 140012268007423, +ERASE, 140012251222016, 140012251226111, +ERASE, 140012251226112, 140012259614719, +ERASE, 140012284792832, 140012284796927, +ERASE, 140012284796928, 140012293185535, +ERASE, 140011445915648, 140011445919743, +ERASE, 140011445919744, 140011454308351, +ERASE, 140010951008256, 140010951012351, +ERASE, 140010951012352, 140010959400959, +ERASE, 140011043262464, 140011043266559, +ERASE, 140011043266560, 140011051655167, +ERASE, 140010825183232, 140010825187327, +ERASE, 140010825187328, 140010833575935, +ERASE, 140012293185536, 140012293189631, +ERASE, 140012293189632, 140012301578239, +ERASE, 140012276400128, 140012276404223, +ERASE, 140012276404224, 140012284792831, +ERASE, 140012016357376, 140012016361471, +ERASE, 140012016361472, 140012024750079, +ERASE, 140012024750080, 140012024754175, +ERASE, 140012024754176, 140012033142783, +ERASE, 140011227836416, 140011227840511, +ERASE, 140011227840512, 140011236229119, +ERASE, 140010816790528, 140010816794623, +ERASE, 140010816794624, 140010825183231, +ERASE, 140012268007424, 140012268011519, +ERASE, 140012268011520, 140012276400127, +ERASE, 140012385439744, 140012385443839, +ERASE, 140012385443840, 140012393832447, +ERASE, 140012522090496, 140012522094591, +ERASE, 140012522094592, 140012530483199, +ERASE, 140012033142784, 140012033146879, +ERASE, 140012033146880, 140012041535487, + }; + unsigned long set35[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140730536939520, 140737488351231, +SNULL, 140730536943615, 140737488351231, +STORE, 140730536939520, 140730536943615, +STORE, 140730536808448, 140730536943615, +STORE, 94245239877632, 94245242130431, +SNULL, 94245240008703, 94245242130431, +STORE, 94245239877632, 94245240008703, +STORE, 94245240008704, 94245242130431, +ERASE, 94245240008704, 94245242130431, +STORE, 94245242101760, 94245242109951, +STORE, 94245242109952, 94245242130431, +STORE, 140475575263232, 140475577516031, +SNULL, 140475575406591, 140475577516031, +STORE, 140475575263232, 140475575406591, +STORE, 140475575406592, 140475577516031, +ERASE, 140475575406592, 140475577516031, +STORE, 140475577503744, 140475577511935, +STORE, 140475577511936, 140475577516031, +STORE, 140730538164224, 140730538168319, +STORE, 140730538151936, 140730538164223, +STORE, 140475577475072, 140475577503743, +STORE, 140475577466880, 140475577475071, +STORE, 140475573047296, 140475575263231, +SNULL, 140475573047296, 140475573145599, +STORE, 140475573145600, 140475575263231, +STORE, 140475573047296, 140475573145599, +SNULL, 140475575238655, 140475575263231, +STORE, 140475573145600, 140475575238655, +STORE, 140475575238656, 140475575263231, +SNULL, 140475575238656, 140475575246847, +STORE, 140475575246848, 140475575263231, +STORE, 140475575238656, 140475575246847, +ERASE, 140475575238656, 140475575246847, +STORE, 140475575238656, 140475575246847, +ERASE, 140475575246848, 140475575263231, +STORE, 140475575246848, 140475575263231, +STORE, 140475569250304, 140475573047295, +SNULL, 140475569250304, 140475570909183, +STORE, 140475570909184, 140475573047295, +STORE, 140475569250304, 140475570909183, +SNULL, 140475573006335, 140475573047295, +STORE, 140475570909184, 140475573006335, +STORE, 140475573006336, 140475573047295, +SNULL, 140475573006336, 140475573030911, +STORE, 140475573030912, 140475573047295, +STORE, 140475573006336, 140475573030911, +ERASE, 140475573006336, 140475573030911, +STORE, 140475573006336, 140475573030911, +ERASE, 140475573030912, 140475573047295, +STORE, 140475573030912, 140475573047295, +STORE, 140475577458688, 140475577475071, +SNULL, 140475573022719, 140475573030911, +STORE, 140475573006336, 140475573022719, +STORE, 140475573022720, 140475573030911, +SNULL, 140475575242751, 140475575246847, +STORE, 140475575238656, 140475575242751, +STORE, 140475575242752, 140475575246847, +SNULL, 94245242105855, 94245242109951, +STORE, 94245242101760, 94245242105855, +STORE, 94245242105856, 94245242109951, +SNULL, 140475577507839, 140475577511935, +STORE, 140475577503744, 140475577507839, +STORE, 140475577507840, 140475577511935, +ERASE, 140475577475072, 140475577503743, +STORE, 94245271216128, 94245271351295, +STORE, 140475560857600, 140475569250303, +SNULL, 140475560861695, 140475569250303, +STORE, 140475560857600, 140475560861695, +STORE, 140475560861696, 140475569250303, +STORE, 140475552464896, 140475560857599, +STORE, 140475418247168, 140475552464895, +SNULL, 140475418247168, 140475428241407, +STORE, 140475428241408, 140475552464895, +STORE, 140475418247168, 140475428241407, +ERASE, 140475418247168, 140475428241407, +SNULL, 140475495350271, 140475552464895, +STORE, 140475428241408, 140475495350271, +STORE, 140475495350272, 140475552464895, +ERASE, 140475495350272, 140475552464895, +SNULL, 140475428376575, 140475495350271, +STORE, 140475428241408, 140475428376575, +STORE, 140475428376576, 140475495350271, +SNULL, 140475552468991, 140475560857599, +STORE, 140475552464896, 140475552468991, +STORE, 140475552468992, 140475560857599, +STORE, 140475544072192, 140475552464895, +SNULL, 140475544076287, 140475552464895, +STORE, 140475544072192, 140475544076287, +STORE, 140475544076288, 140475552464895, +STORE, 140475535679488, 140475544072191, +SNULL, 140475535683583, 140475544072191, +STORE, 140475535679488, 140475535683583, +STORE, 140475535683584, 140475544072191, +STORE, 140475527286784, 140475535679487, +SNULL, 140475527290879, 140475535679487, +STORE, 140475527286784, 140475527290879, +STORE, 140475527290880, 140475535679487, +STORE, 140475518894080, 140475527286783, +STORE, 140475510501376, 140475527286783, +STORE, 140475502108672, 140475527286783, +STORE, 140475419848704, 140475428241407, +STORE, 140475285630976, 140475419848703, +SNULL, 140475285630976, 140475294023679, +STORE, 140475294023680, 140475419848703, +STORE, 140475285630976, 140475294023679, +ERASE, 140475285630976, 140475294023679, +STORE, 140475159805952, 140475419848703, +STORE, 140475025588224, 140475419848703, +SNULL, 140475092697087, 140475419848703, +STORE, 140475025588224, 140475092697087, +STORE, 140475092697088, 140475419848703, +SNULL, 140475092697088, 140475159805951, +STORE, 140475159805952, 140475419848703, +STORE, 140475092697088, 140475159805951, +ERASE, 140475092697088, 140475159805951, +STORE, 140474891370496, 140475092697087, +SNULL, 140474958479359, 140475092697087, +STORE, 140474891370496, 140474958479359, +STORE, 140474958479360, 140475092697087, +SNULL, 140474958479360, 140475025588223, +STORE, 140475025588224, 140475092697087, +STORE, 140474958479360, 140475025588223, +ERASE, 140474958479360, 140475025588223, +SNULL, 140475361132543, 140475419848703, +STORE, 140475159805952, 140475361132543, +STORE, 140475361132544, 140475419848703, +ERASE, 140475361132544, 140475419848703, +SNULL, 140475159805952, 140475294023679, +STORE, 140475294023680, 140475361132543, +STORE, 140475159805952, 140475294023679, +SNULL, 140475294158847, 140475361132543, +STORE, 140475294023680, 140475294158847, +STORE, 140475294158848, 140475361132543, +SNULL, 140475226914815, 140475294023679, +STORE, 140475159805952, 140475226914815, +STORE, 140475226914816, 140475294023679, +ERASE, 140475226914816, 140475294023679, +SNULL, 140475025723391, 140475092697087, +STORE, 140475025588224, 140475025723391, +STORE, 140475025723392, 140475092697087, +SNULL, 140475159941119, 140475226914815, +STORE, 140475159805952, 140475159941119, +STORE, 140475159941120, 140475226914815, +SNULL, 140474891505663, 140474958479359, +STORE, 140474891370496, 140474891505663, +STORE, 140474891505664, 140474958479359, +SNULL, 140475502108672, 140475518894079, +STORE, 140475518894080, 140475527286783, +STORE, 140475502108672, 140475518894079, +SNULL, 140475518898175, 140475527286783, +STORE, 140475518894080, 140475518898175, +STORE, 140475518898176, 140475527286783, +STORE, 140475411456000, 140475428241407, +SNULL, 140475502112767, 140475518894079, +STORE, 140475502108672, 140475502112767, +STORE, 140475502112768, 140475518894079, +SNULL, 140475411460095, 140475428241407, +STORE, 140475411456000, 140475411460095, +STORE, 140475411460096, 140475428241407, +SNULL, 140475411460096, 140475419848703, +STORE, 140475419848704, 140475428241407, +STORE, 140475411460096, 140475419848703, +SNULL, 140475419852799, 140475428241407, +STORE, 140475419848704, 140475419852799, +STORE, 140475419852800, 140475428241407, +STORE, 140475403063296, 140475411455999, +SNULL, 140475502112768, 140475510501375, +STORE, 140475510501376, 140475518894079, +STORE, 140475502112768, 140475510501375, +SNULL, 140475510505471, 140475518894079, +STORE, 140475510501376, 140475510505471, +STORE, 140475510505472, 140475518894079, +SNULL, 140475403067391, 140475411455999, +STORE, 140475403063296, 140475403067391, +STORE, 140475403067392, 140475411455999, +STORE, 140475394670592, 140475403063295, +SNULL, 140475394674687, 140475403063295, +STORE, 140475394670592, 140475394674687, +STORE, 140475394674688, 140475403063295, +STORE, 140475386277888, 140475394670591, +STORE, 140475377885184, 140475394670591, +STORE, 140475369492480, 140475394670591, +SNULL, 140475369496575, 140475394670591, +STORE, 140475369492480, 140475369496575, +STORE, 140475369496576, 140475394670591, +SNULL, 140475369496576, 140475377885183, +STORE, 140475377885184, 140475394670591, +STORE, 140475369496576, 140475377885183, +SNULL, 140475377889279, 140475394670591, +STORE, 140475377885184, 140475377889279, +STORE, 140475377889280, 140475394670591, +STORE, 140475285630976, 140475294023679, +SNULL, 140475377889280, 140475386277887, +STORE, 140475386277888, 140475394670591, +STORE, 140475377889280, 140475386277887, +SNULL, 140475386281983, 140475394670591, +STORE, 140475386277888, 140475386281983, +STORE, 140475386281984, 140475394670591, +SNULL, 140475285635071, 140475294023679, +STORE, 140475285630976, 140475285635071, +STORE, 140475285635072, 140475294023679, +STORE, 140475277238272, 140475285630975, +STORE, 140475268845568, 140475285630975, +SNULL, 140475268845568, 140475277238271, +STORE, 140475277238272, 140475285630975, +STORE, 140475268845568, 140475277238271, +SNULL, 140475277242367, 140475285630975, +STORE, 140475277238272, 140475277242367, +STORE, 140475277242368, 140475285630975, +STORE, 140475260452864, 140475277238271, +SNULL, 140475260452864, 140475268845567, +STORE, 140475268845568, 140475277238271, +STORE, 140475260452864, 140475268845567, +SNULL, 140475268849663, 140475277238271, +STORE, 140475268845568, 140475268849663, +STORE, 140475268849664, 140475277238271, +SNULL, 140475260456959, 140475268845567, +STORE, 140475260452864, 140475260456959, +STORE, 140475260456960, 140475268845567, +STORE, 140475252060160, 140475260452863, +SNULL, 140475252064255, 140475260452863, +STORE, 140475252060160, 140475252064255, +STORE, 140475252064256, 140475260452863, +STORE, 140475243667456, 140475252060159, +SNULL, 140475243671551, 140475252060159, +STORE, 140475243667456, 140475243671551, +STORE, 140475243671552, 140475252060159, +STORE, 140475235274752, 140475243667455, +STORE, 140475151413248, 140475159805951, +STORE, 140474891505664, 140475025588223, +STORE, 140475143020544, 140475159805951, +SNULL, 140474891505664, 140474958479359, +STORE, 140474958479360, 140475025588223, +STORE, 140474891505664, 140474958479359, +SNULL, 140474958614527, 140475025588223, +STORE, 140474958479360, 140474958614527, +STORE, 140474958614528, 140475025588223, +STORE, 140474824261632, 140474891370495, +SNULL, 140474824396799, 140474891370495, +STORE, 140474824261632, 140474824396799, +STORE, 140474824396800, 140474891370495, +STORE, 140475134627840, 140475159805951, +STORE, 140474690043904, 140474824261631, +STORE, 140475126235136, 140475159805951, +STORE, 140475117842432, 140475159805951, +STORE, 140474622935040, 140474824261631, +STORE, 140475109449728, 140475159805951, +STORE, 140474488717312, 140474824261631, +STORE, 140475101057024, 140475159805951, +STORE, 140474480324608, 140474488717311, +STORE, 140474413215744, 140474480324607, +STORE, 140474404823040, 140474413215743, +ERASE, 140474413215744, 140474480324607, +STORE, 140474471931904, 140474488717311, +STORE, 140474270605312, 140474404823039, +SNULL, 140475101057024, 140475126235135, +STORE, 140475126235136, 140475159805951, +STORE, 140475101057024, 140475126235135, +SNULL, 140475126239231, 140475159805951, +STORE, 140475126235136, 140475126239231, +STORE, 140475126239232, 140475159805951, +STORE, 140474463539200, 140474488717311, +STORE, 140474455146496, 140474488717311, +SNULL, 140474455150591, 140474488717311, +STORE, 140474455146496, 140474455150591, +STORE, 140474455150592, 140474488717311, +STORE, 140474446753792, 140474455146495, +SNULL, 140474446757887, 140474455146495, +STORE, 140474446753792, 140474446757887, +STORE, 140474446757888, 140474455146495, +STORE, 140474438361088, 140474446753791, +STORE, 140474429968384, 140474446753791, +SNULL, 140474429972479, 140474446753791, +STORE, 140474429968384, 140474429972479, +STORE, 140474429972480, 140474446753791, +SNULL, 140475235278847, 140475243667455, +STORE, 140475235274752, 140475235278847, +STORE, 140475235278848, 140475243667455, +SNULL, 140474757152767, 140474824261631, +STORE, 140474488717312, 140474757152767, +STORE, 140474757152768, 140474824261631, +ERASE, 140474757152768, 140474824261631, +SNULL, 140474488717312, 140474690043903, +STORE, 140474690043904, 140474757152767, +STORE, 140474488717312, 140474690043903, +SNULL, 140474690179071, 140474757152767, +STORE, 140474690043904, 140474690179071, +STORE, 140474690179072, 140474757152767, +SNULL, 140474488717312, 140474622935039, +STORE, 140474622935040, 140474690043903, +STORE, 140474488717312, 140474622935039, +SNULL, 140474623070207, 140474690043903, +STORE, 140474622935040, 140474623070207, +STORE, 140474623070208, 140474690043903, +SNULL, 140475101057024, 140475117842431, +STORE, 140475117842432, 140475126235135, +STORE, 140475101057024, 140475117842431, +SNULL, 140475117846527, 140475126235135, +STORE, 140475117842432, 140475117846527, +STORE, 140475117846528, 140475126235135, +SNULL, 140474555826175, 140474622935039, +STORE, 140474488717312, 140474555826175, +STORE, 140474555826176, 140474622935039, +ERASE, 140474555826176, 140474622935039, +STORE, 140474136387584, 140474404823039, +SNULL, 140474136387584, 140474153172991, +STORE, 140474153172992, 140474404823039, +STORE, 140474136387584, 140474153172991, +ERASE, 140474136387584, 140474153172991, +STORE, 140474018955264, 140474404823039, +STORE, 140473884737536, 140474404823039, +SNULL, 140474086064127, 140474404823039, +STORE, 140473884737536, 140474086064127, +STORE, 140474086064128, 140474404823039, +SNULL, 140474086064128, 140474153172991, +STORE, 140474153172992, 140474404823039, +STORE, 140474086064128, 140474153172991, +ERASE, 140474086064128, 140474153172991, +STORE, 140473750519808, 140474086064127, +SNULL, 140473817628671, 140474086064127, +STORE, 140473750519808, 140473817628671, +STORE, 140473817628672, 140474086064127, +SNULL, 140473817628672, 140473884737535, +STORE, 140473884737536, 140474086064127, +STORE, 140473817628672, 140473884737535, +ERASE, 140473817628672, 140473884737535, +SNULL, 140475126239232, 140475151413247, +STORE, 140475151413248, 140475159805951, +STORE, 140475126239232, 140475151413247, +SNULL, 140475151417343, 140475159805951, +STORE, 140475151413248, 140475151417343, +STORE, 140475151417344, 140475159805951, +SNULL, 140474270605311, 140474404823039, +STORE, 140474153172992, 140474270605311, +STORE, 140474270605312, 140474404823039, +SNULL, 140474270605312, 140474287390719, +STORE, 140474287390720, 140474404823039, +STORE, 140474270605312, 140474287390719, +ERASE, 140474270605312, 140474287390719, +SNULL, 140474429972480, 140474438361087, +STORE, 140474438361088, 140474446753791, +STORE, 140474429972480, 140474438361087, +SNULL, 140474438365183, 140474446753791, +STORE, 140474438361088, 140474438365183, +STORE, 140474438365184, 140474446753791, +STORE, 140474815868928, 140474824261631, +SNULL, 140474815873023, 140474824261631, +STORE, 140474815868928, 140474815873023, +STORE, 140474815873024, 140474824261631, +SNULL, 140474220281855, 140474270605311, +STORE, 140474153172992, 140474220281855, +STORE, 140474220281856, 140474270605311, +ERASE, 140474220281856, 140474270605311, +SNULL, 140474488852479, 140474555826175, +STORE, 140474488717312, 140474488852479, +STORE, 140474488852480, 140474555826175, +SNULL, 140475101057024, 140475109449727, +STORE, 140475109449728, 140475117842431, +STORE, 140475101057024, 140475109449727, +SNULL, 140475109453823, 140475117842431, +STORE, 140475109449728, 140475109453823, +STORE, 140475109453824, 140475117842431, +SNULL, 140473951846399, 140474086064127, +STORE, 140473884737536, 140473951846399, +STORE, 140473951846400, 140474086064127, +SNULL, 140473951846400, 140474018955263, +STORE, 140474018955264, 140474086064127, +STORE, 140473951846400, 140474018955263, +ERASE, 140473951846400, 140474018955263, +SNULL, 140473884872703, 140473951846399, +STORE, 140473884737536, 140473884872703, +STORE, 140473884872704, 140473951846399, +SNULL, 140474019090431, 140474086064127, +STORE, 140474018955264, 140474019090431, +STORE, 140474019090432, 140474086064127, +SNULL, 140473750654975, 140473817628671, +STORE, 140473750519808, 140473750654975, +STORE, 140473750654976, 140473817628671, +SNULL, 140474455150592, 140474463539199, +STORE, 140474463539200, 140474488717311, +STORE, 140474455150592, 140474463539199, +SNULL, 140474463543295, 140474488717311, +STORE, 140474463539200, 140474463543295, +STORE, 140474463543296, 140474488717311, +STORE, 140474807476224, 140474815868927, +SNULL, 140474463543296, 140474471931903, +STORE, 140474471931904, 140474488717311, +STORE, 140474463543296, 140474471931903, +SNULL, 140474471935999, 140474488717311, +STORE, 140474471931904, 140474471935999, +STORE, 140474471936000, 140474488717311, +STORE, 140474799083520, 140474815868927, +STORE, 140474790690816, 140474815868927, +SNULL, 140474790690816, 140474799083519, +STORE, 140474799083520, 140474815868927, +STORE, 140474790690816, 140474799083519, +SNULL, 140474799087615, 140474815868927, +STORE, 140474799083520, 140474799087615, +STORE, 140474799087616, 140474815868927, +SNULL, 140474354499583, 140474404823039, +STORE, 140474287390720, 140474354499583, +STORE, 140474354499584, 140474404823039, +ERASE, 140474354499584, 140474404823039, +SNULL, 140474287525887, 140474354499583, +STORE, 140474287390720, 140474287525887, +STORE, 140474287525888, 140474354499583, +STORE, 140474782298112, 140474799083519, +STORE, 140474773905408, 140474799083519, +SNULL, 140474773909503, 140474799083519, +STORE, 140474773905408, 140474773909503, +STORE, 140474773909504, 140474799083519, +SNULL, 140475126239232, 140475134627839, +STORE, 140475134627840, 140475151413247, +STORE, 140475126239232, 140475134627839, +SNULL, 140475134631935, 140475151413247, +STORE, 140475134627840, 140475134631935, +STORE, 140475134631936, 140475151413247, +STORE, 140474765512704, 140474773905407, +STORE, 140474614542336, 140474622935039, +SNULL, 140474153308159, 140474220281855, +STORE, 140474153172992, 140474153308159, +STORE, 140474153308160, 140474220281855, +SNULL, 140474404827135, 140474413215743, +STORE, 140474404823040, 140474404827135, +STORE, 140474404827136, 140474413215743, +STORE, 140474606149632, 140474622935039, +SNULL, 140474606153727, 140474622935039, +STORE, 140474606149632, 140474606153727, +STORE, 140474606153728, 140474622935039, +STORE, 140474597756928, 140474606149631, +SNULL, 140474597761023, 140474606149631, +STORE, 140474597756928, 140474597761023, +STORE, 140474597761024, 140474606149631, +SNULL, 140475134631936, 140475143020543, +STORE, 140475143020544, 140475151413247, +STORE, 140475134631936, 140475143020543, +SNULL, 140475143024639, 140475151413247, +STORE, 140475143020544, 140475143024639, +STORE, 140475143024640, 140475151413247, +STORE, 140474589364224, 140474597756927, +SNULL, 140474606153728, 140474614542335, +STORE, 140474614542336, 140474622935039, +STORE, 140474606153728, 140474614542335, +SNULL, 140474614546431, 140474622935039, +STORE, 140474614542336, 140474614546431, +STORE, 140474614546432, 140474622935039, +SNULL, 140474765516799, 140474773905407, +STORE, 140474765512704, 140474765516799, +STORE, 140474765516800, 140474773905407, +STORE, 140474580971520, 140474597756927, +SNULL, 140474773909504, 140474782298111, +STORE, 140474782298112, 140474799083519, +STORE, 140474773909504, 140474782298111, +SNULL, 140474782302207, 140474799083519, +STORE, 140474782298112, 140474782302207, +STORE, 140474782302208, 140474799083519, +SNULL, 140474471936000, 140474480324607, +STORE, 140474480324608, 140474488717311, +STORE, 140474471936000, 140474480324607, +SNULL, 140474480328703, 140474488717311, +STORE, 140474480324608, 140474480328703, +STORE, 140474480328704, 140474488717311, +STORE, 140474572578816, 140474597756927, +SNULL, 140474572582911, 140474597756927, +STORE, 140474572578816, 140474572582911, +STORE, 140474572582912, 140474597756927, +SNULL, 140474782302208, 140474790690815, +STORE, 140474790690816, 140474799083519, +STORE, 140474782302208, 140474790690815, +SNULL, 140474790694911, 140474799083519, +STORE, 140474790690816, 140474790694911, +STORE, 140474790694912, 140474799083519, +STORE, 140474564186112, 140474572578815, +STORE, 140474421575680, 140474429968383, +STORE, 140474396430336, 140474404823039, +SNULL, 140474396434431, 140474404823039, +STORE, 140474396430336, 140474396434431, +STORE, 140474396434432, 140474404823039, +STORE, 140474388037632, 140474396430335, +SNULL, 140474799087616, 140474807476223, +STORE, 140474807476224, 140474815868927, +STORE, 140474799087616, 140474807476223, +SNULL, 140474807480319, 140474815868927, +STORE, 140474807476224, 140474807480319, +STORE, 140474807480320, 140474815868927, +SNULL, 140475101061119, 140475109449727, +STORE, 140475101057024, 140475101061119, +STORE, 140475101061120, 140475109449727, +STORE, 140474379644928, 140474396430335, +SNULL, 140474572582912, 140474589364223, +STORE, 140474589364224, 140474597756927, +STORE, 140474572582912, 140474589364223, +SNULL, 140474589368319, 140474597756927, +STORE, 140474589364224, 140474589368319, +STORE, 140474589368320, 140474597756927, +STORE, 140474371252224, 140474396430335, +STORE, 140474362859520, 140474396430335, +STORE, 140474278998016, 140474287390719, +STORE, 140474270605312, 140474287390719, +STORE, 140474262212608, 140474287390719, +SNULL, 140474262216703, 140474287390719, +STORE, 140474262212608, 140474262216703, +STORE, 140474262216704, 140474287390719, +STORE, 140474253819904, 140474262212607, +SNULL, 140474253823999, 140474262212607, +STORE, 140474253819904, 140474253823999, +STORE, 140474253824000, 140474262212607, +SNULL, 140474362859520, 140474388037631, +STORE, 140474388037632, 140474396430335, +STORE, 140474362859520, 140474388037631, +SNULL, 140474388041727, 140474396430335, +STORE, 140474388037632, 140474388041727, +STORE, 140474388041728, 140474396430335, +SNULL, 140474362859520, 140474379644927, +STORE, 140474379644928, 140474388037631, +STORE, 140474362859520, 140474379644927, +SNULL, 140474379649023, 140474388037631, +STORE, 140474379644928, 140474379649023, +STORE, 140474379649024, 140474388037631, +STORE, 140474245427200, 140474253819903, +STORE, 140474237034496, 140474253819903, +STORE, 140474228641792, 140474253819903, +STORE, 140474144780288, 140474153172991, +SNULL, 140474228645887, 140474253819903, +STORE, 140474228641792, 140474228645887, +STORE, 140474228645888, 140474253819903, +SNULL, 140474564190207, 140474572578815, +STORE, 140474564186112, 140474564190207, +STORE, 140474564190208, 140474572578815, +STORE, 140474136387584, 140474153172991, +SNULL, 140474362859520, 140474371252223, +STORE, 140474371252224, 140474379644927, +STORE, 140474362859520, 140474371252223, +SNULL, 140474371256319, 140474379644927, +STORE, 140474371252224, 140474371256319, +STORE, 140474371256320, 140474379644927, +STORE, 140474127994880, 140474153172991, +STORE, 140474119602176, 140474153172991, +SNULL, 140474421579775, 140474429968383, +STORE, 140474421575680, 140474421579775, +STORE, 140474421579776, 140474429968383, +STORE, 140474111209472, 140474153172991, +SNULL, 140474111213567, 140474153172991, +STORE, 140474111209472, 140474111213567, +STORE, 140474111213568, 140474153172991, +SNULL, 140474262216704, 140474270605311, +STORE, 140474270605312, 140474287390719, +STORE, 140474262216704, 140474270605311, +SNULL, 140474270609407, 140474287390719, +STORE, 140474270605312, 140474270609407, +STORE, 140474270609408, 140474287390719, +STORE, 140474102816768, 140474111209471, +SNULL, 140474102820863, 140474111209471, +STORE, 140474102816768, 140474102820863, +STORE, 140474102820864, 140474111209471, +SNULL, 140474270609408, 140474278998015, +STORE, 140474278998016, 140474287390719, +STORE, 140474270609408, 140474278998015, +SNULL, 140474279002111, 140474287390719, +STORE, 140474278998016, 140474279002111, +STORE, 140474279002112, 140474287390719, +STORE, 140474094424064, 140474102816767, +SNULL, 140474572582912, 140474580971519, +STORE, 140474580971520, 140474589364223, +STORE, 140474572582912, 140474580971519, +SNULL, 140474580975615, 140474589364223, +STORE, 140474580971520, 140474580975615, +STORE, 140474580975616, 140474589364223, +SNULL, 140474362863615, 140474371252223, +STORE, 140474362859520, 140474362863615, +STORE, 140474362863616, 140474371252223, +STORE, 140474010562560, 140474018955263, +SNULL, 140474228645888, 140474245427199, +STORE, 140474245427200, 140474253819903, +STORE, 140474228645888, 140474245427199, +SNULL, 140474245431295, 140474253819903, +STORE, 140474245427200, 140474245431295, +STORE, 140474245431296, 140474253819903, +SNULL, 140474111213568, 140474136387583, +STORE, 140474136387584, 140474153172991, +STORE, 140474111213568, 140474136387583, +SNULL, 140474136391679, 140474153172991, +STORE, 140474136387584, 140474136391679, +STORE, 140474136391680, 140474153172991, +STORE, 140474002169856, 140474018955263, +STORE, 140473993777152, 140474018955263, +SNULL, 140474111213568, 140474127994879, +STORE, 140474127994880, 140474136387583, +STORE, 140474111213568, 140474127994879, +SNULL, 140474127998975, 140474136387583, +STORE, 140474127994880, 140474127998975, +STORE, 140474127998976, 140474136387583, +SNULL, 140474228645888, 140474237034495, +STORE, 140474237034496, 140474245427199, +STORE, 140474228645888, 140474237034495, +SNULL, 140474237038591, 140474245427199, +STORE, 140474237034496, 140474237038591, +STORE, 140474237038592, 140474245427199, +SNULL, 140474136391680, 140474144780287, +STORE, 140474144780288, 140474153172991, +STORE, 140474136391680, 140474144780287, +SNULL, 140474144784383, 140474153172991, +STORE, 140474144780288, 140474144784383, +STORE, 140474144784384, 140474153172991, +STORE, 140473985384448, 140474018955263, +STORE, 140473976991744, 140474018955263, +STORE, 140473968599040, 140474018955263, +SNULL, 140473968603135, 140474018955263, +STORE, 140473968599040, 140473968603135, +STORE, 140473968603136, 140474018955263, +SNULL, 140474111213568, 140474119602175, +STORE, 140474119602176, 140474127994879, +STORE, 140474111213568, 140474119602175, +SNULL, 140474119606271, 140474127994879, +STORE, 140474119602176, 140474119606271, +STORE, 140474119606272, 140474127994879, +STORE, 140473960206336, 140473968599039, +SNULL, 140474094428159, 140474102816767, +STORE, 140474094424064, 140474094428159, +STORE, 140474094428160, 140474102816767, +STORE, 140473876344832, 140473884737535, +STORE, 140473867952128, 140473884737535, +STORE, 140473859559424, 140473884737535, +SNULL, 140473859563519, 140473884737535, +STORE, 140473859559424, 140473859563519, +STORE, 140473859563520, 140473884737535, +SNULL, 140473968603136, 140473993777151, +STORE, 140473993777152, 140474018955263, +STORE, 140473968603136, 140473993777151, +SNULL, 140473993781247, 140474018955263, +STORE, 140473993777152, 140473993781247, +STORE, 140473993781248, 140474018955263, +SNULL, 140473960210431, 140473968599039, +STORE, 140473960206336, 140473960210431, +STORE, 140473960210432, 140473968599039, +SNULL, 140473993781248, 140474010562559, +STORE, 140474010562560, 140474018955263, +STORE, 140473993781248, 140474010562559, +SNULL, 140474010566655, 140474018955263, +STORE, 140474010562560, 140474010566655, +STORE, 140474010566656, 140474018955263, +SNULL, 140473968603136, 140473985384447, +STORE, 140473985384448, 140473993777151, +STORE, 140473968603136, 140473985384447, +SNULL, 140473985388543, 140473993777151, +STORE, 140473985384448, 140473985388543, +STORE, 140473985388544, 140473993777151, +SNULL, 140473993781248, 140474002169855, +STORE, 140474002169856, 140474010562559, +STORE, 140473993781248, 140474002169855, +SNULL, 140474002173951, 140474010562559, +STORE, 140474002169856, 140474002173951, +STORE, 140474002173952, 140474010562559, +STORE, 140473851166720, 140473859559423, +SNULL, 140473851170815, 140473859559423, +STORE, 140473851166720, 140473851170815, +STORE, 140473851170816, 140473859559423, +SNULL, 140473968603136, 140473976991743, +STORE, 140473976991744, 140473985384447, +STORE, 140473968603136, 140473976991743, +SNULL, 140473976995839, 140473985384447, +STORE, 140473976991744, 140473976995839, +STORE, 140473976995840, 140473985384447, +STORE, 140473842774016, 140473851166719, +SNULL, 140473859563520, 140473867952127, +STORE, 140473867952128, 140473884737535, +STORE, 140473859563520, 140473867952127, +SNULL, 140473867956223, 140473884737535, +STORE, 140473867952128, 140473867956223, +STORE, 140473867956224, 140473884737535, +SNULL, 140473867956224, 140473876344831, +STORE, 140473876344832, 140473884737535, +STORE, 140473867956224, 140473876344831, +SNULL, 140473876348927, 140473884737535, +STORE, 140473876344832, 140473876348927, +STORE, 140473876348928, 140473884737535, +STORE, 140473834381312, 140473851166719, +SNULL, 140473834385407, 140473851166719, +STORE, 140473834381312, 140473834385407, +STORE, 140473834385408, 140473851166719, +SNULL, 140473834385408, 140473842774015, +STORE, 140473842774016, 140473851166719, +STORE, 140473834385408, 140473842774015, +SNULL, 140473842778111, 140473851166719, +STORE, 140473842774016, 140473842778111, +STORE, 140473842778112, 140473851166719, +STORE, 140473825988608, 140473834381311, +SNULL, 140473825992703, 140473834381311, +STORE, 140473825988608, 140473825992703, +STORE, 140473825992704, 140473834381311, +STORE, 140475577475072, 140475577503743, +STORE, 140475499917312, 140475502108671, +SNULL, 140475499917312, 140475500007423, +STORE, 140475500007424, 140475502108671, +STORE, 140475499917312, 140475500007423, +SNULL, 140475502100479, 140475502108671, +STORE, 140475500007424, 140475502100479, +STORE, 140475502100480, 140475502108671, +ERASE, 140475502100480, 140475502108671, +STORE, 140475502100480, 140475502108671, +SNULL, 140475502104575, 140475502108671, +STORE, 140475502100480, 140475502104575, +STORE, 140475502104576, 140475502108671, +ERASE, 140475577475072, 140475577503743, +ERASE, 140475235274752, 140475235278847, +ERASE, 140475235278848, 140475243667455, +ERASE, 140474815868928, 140474815873023, +ERASE, 140474815873024, 140474824261631, +ERASE, 140474606149632, 140474606153727, +ERASE, 140474606153728, 140474614542335, +ERASE, 140474270605312, 140474270609407, +ERASE, 140474270609408, 140474278998015, +ERASE, 140474438361088, 140474438365183, +ERASE, 140474438365184, 140474446753791, +ERASE, 140474597756928, 140474597761023, +ERASE, 140474597761024, 140474606149631, +ERASE, 140475126235136, 140475126239231, +ERASE, 140475126239232, 140475134627839, +ERASE, 140474463539200, 140474463543295, +ERASE, 140474463543296, 140474471931903, +ERASE, 140474388037632, 140474388041727, +ERASE, 140474388041728, 140474396430335, +ERASE, 140474404823040, 140474404827135, +ERASE, 140474404827136, 140474413215743, +ERASE, 140474278998016, 140474279002111, +ERASE, 140474279002112, 140474287390719, +ERASE, 140474094424064, 140474094428159, +ERASE, 140474094428160, 140474102816767, +ERASE, 140473867952128, 140473867956223, +ERASE, 140473867956224, 140473876344831, +ERASE, 140475151413248, 140475151417343, +ERASE, 140475151417344, 140475159805951, +ERASE, 140474455146496, 140474455150591, +ERASE, 140474455150592, 140474463539199, +ERASE, 140474807476224, 140474807480319, +ERASE, 140474807480320, 140474815868927, +ERASE, 140475117842432, 140475117846527, +ERASE, 140475117846528, 140475126235135, +ERASE, 140474446753792, 140474446757887, +ERASE, 140474446757888, 140474455146495, +ERASE, 140474429968384, 140474429972479, +ERASE, 140474429972480, 140474438361087, +ERASE, 140474782298112, 140474782302207, +ERASE, 140474782302208, 140474790690815, +ERASE, 140474136387584, 140474136391679, +ERASE, 140474136391680, 140474144780287, +ERASE, 140474002169856, 140474002173951, +ERASE, 140474002173952, 140474010562559, +ERASE, 140475134627840, 140475134631935, +ERASE, 140475134631936, 140475143020543, +ERASE, 140474471931904, 140474471935999, +ERASE, 140474471936000, 140474480324607, +ERASE, 140474396430336, 140474396434431, +ERASE, 140474396434432, 140474404823039, + }; + unsigned long set36[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140723893125120, 140737488351231, +SNULL, 140723893129215, 140737488351231, +STORE, 140723893125120, 140723893129215, +STORE, 140723892994048, 140723893129215, +STORE, 94076829786112, 94076832038911, +SNULL, 94076829917183, 94076832038911, +STORE, 94076829786112, 94076829917183, +STORE, 94076829917184, 94076832038911, +ERASE, 94076829917184, 94076832038911, +STORE, 94076832010240, 94076832018431, +STORE, 94076832018432, 94076832038911, +STORE, 140122444345344, 140122446598143, +SNULL, 140122444488703, 140122446598143, +STORE, 140122444345344, 140122444488703, +STORE, 140122444488704, 140122446598143, +ERASE, 140122444488704, 140122446598143, +STORE, 140122446585856, 140122446594047, +STORE, 140122446594048, 140122446598143, +STORE, 140723893538816, 140723893542911, +STORE, 140723893526528, 140723893538815, +STORE, 140122446557184, 140122446585855, +STORE, 140122446548992, 140122446557183, +STORE, 140122442129408, 140122444345343, +SNULL, 140122442129408, 140122442227711, +STORE, 140122442227712, 140122444345343, +STORE, 140122442129408, 140122442227711, +SNULL, 140122444320767, 140122444345343, +STORE, 140122442227712, 140122444320767, +STORE, 140122444320768, 140122444345343, +SNULL, 140122444320768, 140122444328959, +STORE, 140122444328960, 140122444345343, +STORE, 140122444320768, 140122444328959, +ERASE, 140122444320768, 140122444328959, +STORE, 140122444320768, 140122444328959, +ERASE, 140122444328960, 140122444345343, +STORE, 140122444328960, 140122444345343, +STORE, 140122438332416, 140122442129407, +SNULL, 140122438332416, 140122439991295, +STORE, 140122439991296, 140122442129407, +STORE, 140122438332416, 140122439991295, +SNULL, 140122442088447, 140122442129407, +STORE, 140122439991296, 140122442088447, +STORE, 140122442088448, 140122442129407, +SNULL, 140122442088448, 140122442113023, +STORE, 140122442113024, 140122442129407, +STORE, 140122442088448, 140122442113023, +ERASE, 140122442088448, 140122442113023, +STORE, 140122442088448, 140122442113023, +ERASE, 140122442113024, 140122442129407, +STORE, 140122442113024, 140122442129407, +STORE, 140122446540800, 140122446557183, +SNULL, 140122442104831, 140122442113023, +STORE, 140122442088448, 140122442104831, +STORE, 140122442104832, 140122442113023, +SNULL, 140122444324863, 140122444328959, +STORE, 140122444320768, 140122444324863, +STORE, 140122444324864, 140122444328959, +SNULL, 94076832014335, 94076832018431, +STORE, 94076832010240, 94076832014335, +STORE, 94076832014336, 94076832018431, +SNULL, 140122446589951, 140122446594047, +STORE, 140122446585856, 140122446589951, +STORE, 140122446589952, 140122446594047, +ERASE, 140122446557184, 140122446585855, +STORE, 94076845723648, 94076845858815, +STORE, 140122429939712, 140122438332415, +SNULL, 140122429943807, 140122438332415, +STORE, 140122429939712, 140122429943807, +STORE, 140122429943808, 140122438332415, +STORE, 140122421547008, 140122429939711, +STORE, 140122287329280, 140122421547007, +SNULL, 140122287329280, 140122301399039, +STORE, 140122301399040, 140122421547007, +STORE, 140122287329280, 140122301399039, +ERASE, 140122287329280, 140122301399039, +SNULL, 140122368507903, 140122421547007, +STORE, 140122301399040, 140122368507903, +STORE, 140122368507904, 140122421547007, +ERASE, 140122368507904, 140122421547007, +SNULL, 140122301534207, 140122368507903, +STORE, 140122301399040, 140122301534207, +STORE, 140122301534208, 140122368507903, +SNULL, 140122421551103, 140122429939711, +STORE, 140122421547008, 140122421551103, +STORE, 140122421551104, 140122429939711, +STORE, 140122413154304, 140122421547007, +SNULL, 140122413158399, 140122421547007, +STORE, 140122413154304, 140122413158399, +STORE, 140122413158400, 140122421547007, +STORE, 140122404761600, 140122413154303, +SNULL, 140122404765695, 140122413154303, +STORE, 140122404761600, 140122404765695, +STORE, 140122404765696, 140122413154303, +STORE, 140122396368896, 140122404761599, +SNULL, 140122396372991, 140122404761599, +STORE, 140122396368896, 140122396372991, +STORE, 140122396372992, 140122404761599, +STORE, 140122387976192, 140122396368895, +STORE, 140122167181312, 140122301399039, +SNULL, 140122234290175, 140122301399039, +STORE, 140122167181312, 140122234290175, +STORE, 140122234290176, 140122301399039, +ERASE, 140122234290176, 140122301399039, +SNULL, 140122167316479, 140122234290175, +STORE, 140122167181312, 140122167316479, +STORE, 140122167316480, 140122234290175, +STORE, 140122379583488, 140122396368895, +STORE, 140122371190784, 140122396368895, +STORE, 140122167316480, 140122301399039, +STORE, 140122158788608, 140122167181311, +SNULL, 140122371190784, 140122387976191, +STORE, 140122387976192, 140122396368895, +STORE, 140122371190784, 140122387976191, +SNULL, 140122387980287, 140122396368895, +STORE, 140122387976192, 140122387980287, +STORE, 140122387980288, 140122396368895, +SNULL, 140122167316480, 140122234290175, +STORE, 140122234290176, 140122301399039, +STORE, 140122167316480, 140122234290175, +SNULL, 140122234425343, 140122301399039, +STORE, 140122234290176, 140122234425343, +STORE, 140122234425344, 140122301399039, +STORE, 140122024570880, 140122158788607, +SNULL, 140122024570880, 140122032963583, +STORE, 140122032963584, 140122158788607, +STORE, 140122024570880, 140122032963583, +ERASE, 140122024570880, 140122032963583, +STORE, 140121898745856, 140122158788607, +STORE, 140121890353152, 140121898745855, +SNULL, 140122100072447, 140122158788607, +STORE, 140121898745856, 140122100072447, +STORE, 140122100072448, 140122158788607, +ERASE, 140122100072448, 140122158788607, +SNULL, 140121965854719, 140122100072447, +STORE, 140121898745856, 140121965854719, +STORE, 140121965854720, 140122100072447, +SNULL, 140121965854720, 140122032963583, +STORE, 140122032963584, 140122100072447, +STORE, 140121965854720, 140122032963583, +ERASE, 140121965854720, 140122032963583, +SNULL, 140121898881023, 140121965854719, +STORE, 140121898745856, 140121898881023, +STORE, 140121898881024, 140121965854719, +SNULL, 140121890357247, 140121898745855, +STORE, 140121890353152, 140121890357247, +STORE, 140121890357248, 140121898745855, +SNULL, 140122371190784, 140122379583487, +STORE, 140122379583488, 140122387976191, +STORE, 140122371190784, 140122379583487, +SNULL, 140122379587583, 140122387976191, +STORE, 140122379583488, 140122379587583, +STORE, 140122379587584, 140122387976191, +SNULL, 140122033098751, 140122100072447, +STORE, 140122032963584, 140122033098751, +STORE, 140122033098752, 140122100072447, +SNULL, 140122158792703, 140122167181311, +STORE, 140122158788608, 140122158792703, +STORE, 140122158792704, 140122167181311, +STORE, 140122150395904, 140122158788607, +STORE, 140122142003200, 140122158788607, +SNULL, 140122142007295, 140122158788607, +STORE, 140122142003200, 140122142007295, +STORE, 140122142007296, 140122158788607, +SNULL, 140122371194879, 140122379583487, +STORE, 140122371190784, 140122371194879, +STORE, 140122371194880, 140122379583487, +SNULL, 140122142007296, 140122150395903, +STORE, 140122150395904, 140122158788607, +STORE, 140122142007296, 140122150395903, +SNULL, 140122150399999, 140122158788607, +STORE, 140122150395904, 140122150399999, +STORE, 140122150400000, 140122158788607, +STORE, 140122133610496, 140122142003199, +STORE, 140122125217792, 140122142003199, +STORE, 140122116825088, 140122142003199, +SNULL, 140122116829183, 140122142003199, +STORE, 140122116825088, 140122116829183, +STORE, 140122116829184, 140122142003199, +SNULL, 140122116829184, 140122133610495, +STORE, 140122133610496, 140122142003199, +STORE, 140122116829184, 140122133610495, +SNULL, 140122133614591, 140122142003199, +STORE, 140122133610496, 140122133614591, +STORE, 140122133614592, 140122142003199, +SNULL, 140122116829184, 140122125217791, +STORE, 140122125217792, 140122133610495, +STORE, 140122116829184, 140122125217791, +SNULL, 140122125221887, 140122133610495, +STORE, 140122125217792, 140122125221887, +STORE, 140122125221888, 140122133610495, +STORE, 140122108432384, 140122116825087, +SNULL, 140122108436479, 140122116825087, +STORE, 140122108432384, 140122108436479, +STORE, 140122108436480, 140122116825087, +STORE, 140122024570880, 140122032963583, +STORE, 140122016178176, 140122032963583, +SNULL, 140122016182271, 140122032963583, +STORE, 140122016178176, 140122016182271, +STORE, 140122016182272, 140122032963583, +SNULL, 140122016182272, 140122024570879, +STORE, 140122024570880, 140122032963583, +STORE, 140122016182272, 140122024570879, +SNULL, 140122024574975, 140122032963583, +STORE, 140122024570880, 140122024574975, +STORE, 140122024574976, 140122032963583, +STORE, 140122007785472, 140122016178175, +SNULL, 140122007789567, 140122016178175, +STORE, 140122007785472, 140122007789567, +STORE, 140122007789568, 140122016178175, +STORE, 140121999392768, 140122007785471, +STORE, 140121991000064, 140122007785471, +SNULL, 140121991004159, 140122007785471, +STORE, 140121991000064, 140121991004159, +STORE, 140121991004160, 140122007785471, +SNULL, 140121991004160, 140121999392767, +STORE, 140121999392768, 140122007785471, +STORE, 140121991004160, 140121999392767, +SNULL, 140121999396863, 140122007785471, +STORE, 140121999392768, 140121999396863, +STORE, 140121999396864, 140122007785471, +STORE, 140121982607360, 140121991000063, +STORE, 140121823244288, 140121890353151, +ERASE, 140121823244288, 140121890353151, +STORE, 140121756135424, 140121890353151, +SNULL, 140121756135424, 140121764528127, +STORE, 140121764528128, 140121890353151, +STORE, 140121756135424, 140121764528127, +ERASE, 140121756135424, 140121764528127, +SNULL, 140121831636991, 140121890353151, +STORE, 140121764528128, 140121831636991, +STORE, 140121831636992, 140121890353151, +ERASE, 140121831636992, 140121890353151, +STORE, 140121974214656, 140121991000063, +STORE, 140121630310400, 140121831636991, +SNULL, 140121697419263, 140121831636991, +STORE, 140121630310400, 140121697419263, +STORE, 140121697419264, 140121831636991, +SNULL, 140121697419264, 140121764528127, +STORE, 140121764528128, 140121831636991, +STORE, 140121697419264, 140121764528127, +ERASE, 140121697419264, 140121764528127, +STORE, 140121881960448, 140121890353151, +STORE, 140121630310400, 140121831636991, +STORE, 140121873567744, 140121890353151, +SNULL, 140121630310400, 140121697419263, +STORE, 140121697419264, 140121831636991, +STORE, 140121630310400, 140121697419263, +SNULL, 140121697554431, 140121831636991, +STORE, 140121697419264, 140121697554431, +STORE, 140121697554432, 140121831636991, +STORE, 140121865175040, 140121890353151, +STORE, 140121856782336, 140121890353151, +STORE, 140121848389632, 140121890353151, +STORE, 140121839996928, 140121890353151, +STORE, 140121496092672, 140121697419263, +STORE, 140121487699968, 140121496092671, +STORE, 140121420591104, 140121487699967, +STORE, 140121412198400, 140121420591103, +ERASE, 140121420591104, 140121487699967, +STORE, 140121479307264, 140121496092671, +STORE, 140121277980672, 140121412198399, +SNULL, 140121277980672, 140121294766079, +STORE, 140121294766080, 140121412198399, +STORE, 140121277980672, 140121294766079, +ERASE, 140121277980672, 140121294766079, +STORE, 140121470914560, 140121496092671, +STORE, 140121462521856, 140121496092671, +STORE, 140121160548352, 140121412198399, +STORE, 140121454129152, 140121496092671, +SNULL, 140121227657215, 140121412198399, +STORE, 140121160548352, 140121227657215, +STORE, 140121227657216, 140121412198399, +SNULL, 140121227657216, 140121294766079, +STORE, 140121294766080, 140121412198399, +STORE, 140121227657216, 140121294766079, +ERASE, 140121227657216, 140121294766079, +STORE, 140121445736448, 140121496092671, +STORE, 140121437343744, 140121496092671, +SNULL, 140121437343744, 140121445736447, +STORE, 140121445736448, 140121496092671, +STORE, 140121437343744, 140121445736447, +SNULL, 140121445740543, 140121496092671, +STORE, 140121445736448, 140121445740543, +STORE, 140121445740544, 140121496092671, +SNULL, 140121697554432, 140121764528127, +STORE, 140121764528128, 140121831636991, +STORE, 140121697554432, 140121764528127, +SNULL, 140121764663295, 140121831636991, +STORE, 140121764528128, 140121764663295, +STORE, 140121764663296, 140121831636991, +SNULL, 140121496092672, 140121630310399, +STORE, 140121630310400, 140121697419263, +STORE, 140121496092672, 140121630310399, +SNULL, 140121630445567, 140121697419263, +STORE, 140121630310400, 140121630445567, +STORE, 140121630445568, 140121697419263, +SNULL, 140121445740544, 140121454129151, +STORE, 140121454129152, 140121496092671, +STORE, 140121445740544, 140121454129151, +SNULL, 140121454133247, 140121496092671, +STORE, 140121454129152, 140121454133247, +STORE, 140121454133248, 140121496092671, +STORE, 140121026330624, 140121227657215, +SNULL, 140121093439487, 140121227657215, +STORE, 140121026330624, 140121093439487, +STORE, 140121093439488, 140121227657215, +SNULL, 140121093439488, 140121160548351, +STORE, 140121160548352, 140121227657215, +STORE, 140121093439488, 140121160548351, +ERASE, 140121093439488, 140121160548351, +SNULL, 140121563201535, 140121630310399, +STORE, 140121496092672, 140121563201535, +STORE, 140121563201536, 140121630310399, +ERASE, 140121563201536, 140121630310399, +STORE, 140120892112896, 140121093439487, +SNULL, 140120959221759, 140121093439487, +STORE, 140120892112896, 140120959221759, +STORE, 140120959221760, 140121093439487, +SNULL, 140120959221760, 140121026330623, +STORE, 140121026330624, 140121093439487, +STORE, 140120959221760, 140121026330623, +ERASE, 140120959221760, 140121026330623, +STORE, 140120757895168, 140120959221759, +SNULL, 140121361874943, 140121412198399, +STORE, 140121294766080, 140121361874943, +STORE, 140121361874944, 140121412198399, +ERASE, 140121361874944, 140121412198399, +SNULL, 140121294901247, 140121361874943, +STORE, 140121294766080, 140121294901247, +STORE, 140121294901248, 140121361874943, +STORE, 140120623677440, 140120959221759, +SNULL, 140120690786303, 140120959221759, +STORE, 140120623677440, 140120690786303, +STORE, 140120690786304, 140120959221759, +SNULL, 140120690786304, 140120757895167, +STORE, 140120757895168, 140120959221759, +STORE, 140120690786304, 140120757895167, +ERASE, 140120690786304, 140120757895167, +SNULL, 140121160683519, 140121227657215, +STORE, 140121160548352, 140121160683519, +STORE, 140121160683520, 140121227657215, +SNULL, 140121974214656, 140121982607359, +STORE, 140121982607360, 140121991000063, +STORE, 140121974214656, 140121982607359, +SNULL, 140121982611455, 140121991000063, +STORE, 140121982607360, 140121982611455, +STORE, 140121982611456, 140121991000063, +SNULL, 140121839996928, 140121873567743, +STORE, 140121873567744, 140121890353151, +STORE, 140121839996928, 140121873567743, +SNULL, 140121873571839, 140121890353151, +STORE, 140121873567744, 140121873571839, +STORE, 140121873571840, 140121890353151, +SNULL, 140121873571840, 140121881960447, +STORE, 140121881960448, 140121890353151, +STORE, 140121873571840, 140121881960447, +SNULL, 140121881964543, 140121890353151, +STORE, 140121881960448, 140121881964543, +STORE, 140121881964544, 140121890353151, +SNULL, 140121840001023, 140121873567743, +STORE, 140121839996928, 140121840001023, +STORE, 140121840001024, 140121873567743, +SNULL, 140121840001024, 140121865175039, +STORE, 140121865175040, 140121873567743, +STORE, 140121840001024, 140121865175039, +SNULL, 140121865179135, 140121873567743, +STORE, 140121865175040, 140121865179135, +STORE, 140121865179136, 140121873567743, +SNULL, 140121437347839, 140121445736447, +STORE, 140121437343744, 140121437347839, +STORE, 140121437347840, 140121445736447, +STORE, 140121621917696, 140121630310399, +STORE, 140121613524992, 140121630310399, +SNULL, 140121026465791, 140121093439487, +STORE, 140121026330624, 140121026465791, +STORE, 140121026465792, 140121093439487, +SNULL, 140121496227839, 140121563201535, +STORE, 140121496092672, 140121496227839, +STORE, 140121496227840, 140121563201535, +SNULL, 140120757895168, 140120892112895, +STORE, 140120892112896, 140120959221759, +STORE, 140120757895168, 140120892112895, +SNULL, 140120892248063, 140120959221759, +STORE, 140120892112896, 140120892248063, +STORE, 140120892248064, 140120959221759, +SNULL, 140120825004031, 140120892112895, +STORE, 140120757895168, 140120825004031, +STORE, 140120825004032, 140120892112895, +ERASE, 140120825004032, 140120892112895, +SNULL, 140120623812607, 140120690786303, +STORE, 140120623677440, 140120623812607, +STORE, 140120623812608, 140120690786303, +SNULL, 140120758030335, 140120825004031, +STORE, 140120757895168, 140120758030335, +STORE, 140120758030336, 140120825004031, +SNULL, 140121454133248, 140121462521855, +STORE, 140121462521856, 140121496092671, +STORE, 140121454133248, 140121462521855, +SNULL, 140121462525951, 140121496092671, +STORE, 140121462521856, 140121462525951, +STORE, 140121462525952, 140121496092671, +STORE, 140121605132288, 140121630310399, +SNULL, 140121605136383, 140121630310399, +STORE, 140121605132288, 140121605136383, +STORE, 140121605136384, 140121630310399, +STORE, 140121596739584, 140121605132287, +SNULL, 140121605136384, 140121621917695, +STORE, 140121621917696, 140121630310399, +STORE, 140121605136384, 140121621917695, +SNULL, 140121621921791, 140121630310399, +STORE, 140121621917696, 140121621921791, +STORE, 140121621921792, 140121630310399, +STORE, 140121588346880, 140121605132287, +STORE, 140121579954176, 140121605132287, +SNULL, 140121412202495, 140121420591103, +STORE, 140121412198400, 140121412202495, +STORE, 140121412202496, 140121420591103, +SNULL, 140121974218751, 140121982607359, +STORE, 140121974214656, 140121974218751, +STORE, 140121974218752, 140121982607359, +SNULL, 140121462525952, 140121479307263, +STORE, 140121479307264, 140121496092671, +STORE, 140121462525952, 140121479307263, +SNULL, 140121479311359, 140121496092671, +STORE, 140121479307264, 140121479311359, +STORE, 140121479311360, 140121496092671, +STORE, 140121571561472, 140121605132287, +SNULL, 140121571565567, 140121605132287, +STORE, 140121571561472, 140121571565567, +STORE, 140121571565568, 140121605132287, +STORE, 140121428951040, 140121437343743, +SNULL, 140121428955135, 140121437343743, +STORE, 140121428951040, 140121428955135, +STORE, 140121428955136, 140121437343743, +SNULL, 140121840001024, 140121856782335, +STORE, 140121856782336, 140121865175039, +STORE, 140121840001024, 140121856782335, +SNULL, 140121856786431, 140121865175039, +STORE, 140121856782336, 140121856786431, +STORE, 140121856786432, 140121865175039, +STORE, 140121403805696, 140121412198399, +SNULL, 140121840001024, 140121848389631, +STORE, 140121848389632, 140121856782335, +STORE, 140121840001024, 140121848389631, +SNULL, 140121848393727, 140121856782335, +STORE, 140121848389632, 140121848393727, +STORE, 140121848393728, 140121856782335, +SNULL, 140121479311360, 140121487699967, +STORE, 140121487699968, 140121496092671, +STORE, 140121479311360, 140121487699967, +SNULL, 140121487704063, 140121496092671, +STORE, 140121487699968, 140121487704063, +STORE, 140121487704064, 140121496092671, +STORE, 140121395412992, 140121412198399, +STORE, 140121387020288, 140121412198399, +SNULL, 140121387024383, 140121412198399, +STORE, 140121387020288, 140121387024383, +STORE, 140121387024384, 140121412198399, +SNULL, 140121605136384, 140121613524991, +STORE, 140121613524992, 140121621917695, +STORE, 140121605136384, 140121613524991, +SNULL, 140121613529087, 140121621917695, +STORE, 140121613524992, 140121613529087, +STORE, 140121613529088, 140121621917695, +SNULL, 140121462525952, 140121470914559, +STORE, 140121470914560, 140121479307263, +STORE, 140121462525952, 140121470914559, +SNULL, 140121470918655, 140121479307263, +STORE, 140121470914560, 140121470918655, +STORE, 140121470918656, 140121479307263, +STORE, 140121378627584, 140121387020287, +SNULL, 140121378631679, 140121387020287, +STORE, 140121378627584, 140121378631679, +STORE, 140121378631680, 140121387020287, +SNULL, 140121571565568, 140121596739583, +STORE, 140121596739584, 140121605132287, +STORE, 140121571565568, 140121596739583, +SNULL, 140121596743679, 140121605132287, +STORE, 140121596739584, 140121596743679, +STORE, 140121596743680, 140121605132287, +SNULL, 140121387024384, 140121403805695, +STORE, 140121403805696, 140121412198399, +STORE, 140121387024384, 140121403805695, +SNULL, 140121403809791, 140121412198399, +STORE, 140121403805696, 140121403809791, +STORE, 140121403809792, 140121412198399, +STORE, 140121370234880, 140121378627583, +SNULL, 140121387024384, 140121395412991, +STORE, 140121395412992, 140121403805695, +STORE, 140121387024384, 140121395412991, +SNULL, 140121395417087, 140121403805695, +STORE, 140121395412992, 140121395417087, +STORE, 140121395417088, 140121403805695, +SNULL, 140121571565568, 140121588346879, +STORE, 140121588346880, 140121596739583, +STORE, 140121571565568, 140121588346879, +SNULL, 140121588350975, 140121596739583, +STORE, 140121588346880, 140121588350975, +STORE, 140121588350976, 140121596739583, +SNULL, 140121571565568, 140121579954175, +STORE, 140121579954176, 140121588346879, +STORE, 140121571565568, 140121579954175, +SNULL, 140121579958271, 140121588346879, +STORE, 140121579954176, 140121579958271, +STORE, 140121579958272, 140121588346879, +STORE, 140121286373376, 140121294766079, +STORE, 140121277980672, 140121294766079, +SNULL, 140121277980672, 140121286373375, +STORE, 140121286373376, 140121294766079, +STORE, 140121277980672, 140121286373375, +SNULL, 140121286377471, 140121294766079, +STORE, 140121286373376, 140121286377471, +STORE, 140121286377472, 140121294766079, +STORE, 140121269587968, 140121286373375, +STORE, 140121261195264, 140121286373375, +SNULL, 140121261195264, 140121269587967, +STORE, 140121269587968, 140121286373375, +STORE, 140121261195264, 140121269587967, +SNULL, 140121269592063, 140121286373375, +STORE, 140121269587968, 140121269592063, +STORE, 140121269592064, 140121286373375, +STORE, 140121252802560, 140121269587967, +SNULL, 140121252806655, 140121269587967, +STORE, 140121252802560, 140121252806655, +STORE, 140121252806656, 140121269587967, +STORE, 140121244409856, 140121252802559, +STORE, 140121236017152, 140121252802559, +SNULL, 140121236017152, 140121244409855, +STORE, 140121244409856, 140121252802559, +STORE, 140121236017152, 140121244409855, +SNULL, 140121244413951, 140121252802559, +STORE, 140121244409856, 140121244413951, +STORE, 140121244413952, 140121252802559, +SNULL, 140121370238975, 140121378627583, +STORE, 140121370234880, 140121370238975, +STORE, 140121370238976, 140121378627583, +STORE, 140121152155648, 140121160548351, +STORE, 140121143762944, 140121160548351, +STORE, 140121135370240, 140121160548351, +SNULL, 140121135374335, 140121160548351, +STORE, 140121135370240, 140121135374335, +STORE, 140121135374336, 140121160548351, +STORE, 140121126977536, 140121135370239, +STORE, 140121118584832, 140121135370239, +STORE, 140121110192128, 140121135370239, +SNULL, 140121110192128, 140121118584831, +STORE, 140121118584832, 140121135370239, +STORE, 140121110192128, 140121118584831, +SNULL, 140121118588927, 140121135370239, +STORE, 140121118584832, 140121118588927, +STORE, 140121118588928, 140121135370239, +STORE, 140121101799424, 140121118584831, +STORE, 140121017937920, 140121026330623, +STORE, 140121009545216, 140121026330623, +SNULL, 140121009545216, 140121017937919, +STORE, 140121017937920, 140121026330623, +STORE, 140121009545216, 140121017937919, +SNULL, 140121017942015, 140121026330623, +STORE, 140121017937920, 140121017942015, +STORE, 140121017942016, 140121026330623, +SNULL, 140121269592064, 140121277980671, +STORE, 140121277980672, 140121286373375, +STORE, 140121269592064, 140121277980671, +SNULL, 140121277984767, 140121286373375, +STORE, 140121277980672, 140121277984767, +STORE, 140121277984768, 140121286373375, +STORE, 140121001152512, 140121017937919, +SNULL, 140121252806656, 140121261195263, +STORE, 140121261195264, 140121269587967, +STORE, 140121252806656, 140121261195263, +SNULL, 140121261199359, 140121269587967, +STORE, 140121261195264, 140121261199359, +STORE, 140121261199360, 140121269587967, +SNULL, 140121135374336, 140121152155647, +STORE, 140121152155648, 140121160548351, +STORE, 140121135374336, 140121152155647, +SNULL, 140121152159743, 140121160548351, +STORE, 140121152155648, 140121152159743, +STORE, 140121152159744, 140121160548351, +STORE, 140120992759808, 140121017937919, +STORE, 140120984367104, 140121017937919, +STORE, 140120975974400, 140121017937919, +SNULL, 140121101799424, 140121110192127, +STORE, 140121110192128, 140121118584831, +STORE, 140121101799424, 140121110192127, +SNULL, 140121110196223, 140121118584831, +STORE, 140121110192128, 140121110196223, +STORE, 140121110196224, 140121118584831, +SNULL, 140121118588928, 140121126977535, +STORE, 140121126977536, 140121135370239, +STORE, 140121118588928, 140121126977535, +SNULL, 140121126981631, 140121135370239, +STORE, 140121126977536, 140121126981631, +STORE, 140121126981632, 140121135370239, +STORE, 140120967581696, 140121017937919, +STORE, 140120883720192, 140120892112895, +SNULL, 140120883724287, 140120892112895, +STORE, 140120883720192, 140120883724287, +STORE, 140120883724288, 140120892112895, +STORE, 140120875327488, 140120883720191, +SNULL, 140121101803519, 140121110192127, +STORE, 140121101799424, 140121101803519, +STORE, 140121101803520, 140121110192127, +SNULL, 140121135374336, 140121143762943, +STORE, 140121143762944, 140121152155647, +STORE, 140121135374336, 140121143762943, +SNULL, 140121143767039, 140121152155647, +STORE, 140121143762944, 140121143767039, +STORE, 140121143767040, 140121152155647, +STORE, 140120866934784, 140120883720191, +SNULL, 140120967581696, 140120984367103, +STORE, 140120984367104, 140121017937919, +STORE, 140120967581696, 140120984367103, +SNULL, 140120984371199, 140121017937919, +STORE, 140120984367104, 140120984371199, +STORE, 140120984371200, 140121017937919, +STORE, 140120858542080, 140120883720191, +SNULL, 140121236021247, 140121244409855, +STORE, 140121236017152, 140121236021247, +STORE, 140121236021248, 140121244409855, +SNULL, 140120984371200, 140121009545215, +STORE, 140121009545216, 140121017937919, +STORE, 140120984371200, 140121009545215, +SNULL, 140121009549311, 140121017937919, +STORE, 140121009545216, 140121009549311, +STORE, 140121009549312, 140121017937919, +SNULL, 140120984371200, 140120992759807, +STORE, 140120992759808, 140121009545215, +STORE, 140120984371200, 140120992759807, +SNULL, 140120992763903, 140121009545215, +STORE, 140120992759808, 140120992763903, +STORE, 140120992763904, 140121009545215, +SNULL, 140120992763904, 140121001152511, +STORE, 140121001152512, 140121009545215, +STORE, 140120992763904, 140121001152511, +SNULL, 140121001156607, 140121009545215, +STORE, 140121001152512, 140121001156607, +STORE, 140121001156608, 140121009545215, +STORE, 140120850149376, 140120883720191, +SNULL, 140120850153471, 140120883720191, +STORE, 140120850149376, 140120850153471, +STORE, 140120850153472, 140120883720191, +SNULL, 140120967585791, 140120984367103, +STORE, 140120967581696, 140120967585791, +STORE, 140120967585792, 140120984367103, +SNULL, 140120850153472, 140120866934783, +STORE, 140120866934784, 140120883720191, +STORE, 140120850153472, 140120866934783, +SNULL, 140120866938879, 140120883720191, +STORE, 140120866934784, 140120866938879, +STORE, 140120866938880, 140120883720191, +STORE, 140120841756672, 140120850149375, +SNULL, 140120967585792, 140120975974399, +STORE, 140120975974400, 140120984367103, +STORE, 140120967585792, 140120975974399, +SNULL, 140120975978495, 140120984367103, +STORE, 140120975974400, 140120975978495, +STORE, 140120975978496, 140120984367103, +SNULL, 140120866938880, 140120875327487, +STORE, 140120875327488, 140120883720191, +STORE, 140120866938880, 140120875327487, +SNULL, 140120875331583, 140120883720191, +STORE, 140120875327488, 140120875331583, +STORE, 140120875331584, 140120883720191, +STORE, 140120833363968, 140120850149375, +STORE, 140120749502464, 140120757895167, +STORE, 140120741109760, 140120757895167, +STORE, 140120732717056, 140120757895167, +STORE, 140120724324352, 140120757895167, +SNULL, 140120724324352, 140120732717055, +STORE, 140120732717056, 140120757895167, +STORE, 140120724324352, 140120732717055, +SNULL, 140120732721151, 140120757895167, +STORE, 140120732717056, 140120732721151, +STORE, 140120732721152, 140120757895167, +STORE, 140120715931648, 140120732717055, +SNULL, 140120715935743, 140120732717055, +STORE, 140120715931648, 140120715935743, +STORE, 140120715935744, 140120732717055, +SNULL, 140120850153472, 140120858542079, +STORE, 140120858542080, 140120866934783, +STORE, 140120850153472, 140120858542079, +SNULL, 140120858546175, 140120866934783, +STORE, 140120858542080, 140120858546175, +STORE, 140120858546176, 140120866934783, +STORE, 140120707538944, 140120715931647, +SNULL, 140120707543039, 140120715931647, +STORE, 140120707538944, 140120707543039, +STORE, 140120707543040, 140120715931647, +SNULL, 140120833368063, 140120850149375, +STORE, 140120833363968, 140120833368063, +STORE, 140120833368064, 140120850149375, +SNULL, 140120833368064, 140120841756671, +STORE, 140120841756672, 140120850149375, +STORE, 140120833368064, 140120841756671, +SNULL, 140120841760767, 140120850149375, +STORE, 140120841756672, 140120841760767, +STORE, 140120841760768, 140120850149375, +STORE, 140120699146240, 140120707538943, +SNULL, 140120715935744, 140120724324351, +STORE, 140120724324352, 140120732717055, +STORE, 140120715935744, 140120724324351, +SNULL, 140120724328447, 140120732717055, +STORE, 140120724324352, 140120724328447, +STORE, 140120724328448, 140120732717055, +SNULL, 140120732721152, 140120741109759, +STORE, 140120741109760, 140120757895167, +STORE, 140120732721152, 140120741109759, +SNULL, 140120741113855, 140120757895167, +STORE, 140120741109760, 140120741113855, +STORE, 140120741113856, 140120757895167, +SNULL, 140120741113856, 140120749502463, +STORE, 140120749502464, 140120757895167, +STORE, 140120741113856, 140120749502463, +SNULL, 140120749506559, 140120757895167, +STORE, 140120749502464, 140120749506559, +STORE, 140120749506560, 140120757895167, +SNULL, 140120699150335, 140120707538943, +STORE, 140120699146240, 140120699150335, +STORE, 140120699150336, 140120707538943, +STORE, 140122446557184, 140122446585855, +STORE, 140122368999424, 140122371190783, +SNULL, 140122368999424, 140122369089535, +STORE, 140122369089536, 140122371190783, +STORE, 140122368999424, 140122369089535, +SNULL, 140122371182591, 140122371190783, +STORE, 140122369089536, 140122371182591, +STORE, 140122371182592, 140122371190783, +ERASE, 140122371182592, 140122371190783, +STORE, 140122371182592, 140122371190783, +SNULL, 140122371186687, 140122371190783, +STORE, 140122371182592, 140122371186687, +STORE, 140122371186688, 140122371190783, +ERASE, 140122446557184, 140122446585855, +ERASE, 140121445736448, 140121445740543, +ERASE, 140121445740544, 140121454129151, +ERASE, 140121621917696, 140121621921791, +ERASE, 140121621921792, 140121630310399, +ERASE, 140121579954176, 140121579958271, +ERASE, 140121579958272, 140121588346879, +ERASE, 140121261195264, 140121261199359, +ERASE, 140121261199360, 140121269587967, +ERASE, 140121454129152, 140121454133247, +ERASE, 140121454133248, 140121462521855, +ERASE, 140121588346880, 140121588350975, +ERASE, 140121588350976, 140121596739583, +ERASE, 140121135370240, 140121135374335, +ERASE, 140121135374336, 140121143762943, +ERASE, 140121881960448, 140121881964543, +ERASE, 140121881964544, 140121890353151, +ERASE, 140121428951040, 140121428955135, +ERASE, 140121428955136, 140121437343743, +ERASE, 140121387020288, 140121387024383, +ERASE, 140121387024384, 140121395412991, +ERASE, 140121487699968, 140121487704063, +ERASE, 140121487704064, 140121496092671, +ERASE, 140121437343744, 140121437347839, +ERASE, 140121437347840, 140121445736447, +ERASE, 140121613524992, 140121613529087, +ERASE, 140121613529088, 140121621917695, +ERASE, 140121856782336, 140121856786431, +ERASE, 140121856786432, 140121865175039, +ERASE, 140121252802560, 140121252806655, +ERASE, 140121252806656, 140121261195263, +ERASE, 140121839996928, 140121840001023, +ERASE, 140121840001024, 140121848389631, +ERASE, 140121596739584, 140121596743679, +ERASE, 140121596743680, 140121605132287, +ERASE, 140121009545216, 140121009549311, +ERASE, 140121009549312, 140121017937919, +ERASE, 140120724324352, 140120724328447, +ERASE, 140120724328448, 140120732717055, +ERASE, 140120883720192, 140120883724287, +ERASE, 140120883724288, 140120892112895, +ERASE, 140121982607360, 140121982611455, +ERASE, 140121982611456, 140121991000063, +ERASE, 140121571561472, 140121571565567, +ERASE, 140121571565568, 140121579954175, +ERASE, 140121286373376, 140121286377471, +ERASE, 140121286377472, 140121294766079, +ERASE, 140120875327488, 140120875331583, +ERASE, 140120875331584, 140120883720191, +ERASE, 140121848389632, 140121848393727, +ERASE, 140121848393728, 140121856782335, +ERASE, 140121370234880, 140121370238975, +ERASE, 140121370238976, 140121378627583, +ERASE, 140121143762944, 140121143767039, +ERASE, 140121143767040, 140121152155647, +ERASE, 140121118584832, 140121118588927, +ERASE, 140121118588928, 140121126977535, +ERASE, 140120866934784, 140120866938879, +ERASE, 140120866938880, 140120875327487, +ERASE, 140120741109760, 140120741113855, +ERASE, 140120741113856, 140120749502463, +ERASE, 140121865175040, 140121865179135, +ERASE, 140121865179136, 140121873567743, +ERASE, 140121403805696, 140121403809791, +ERASE, 140121403809792, 140121412198399, +ERASE, 140121236017152, 140121236021247, +ERASE, 140121236021248, 140121244409855, +ERASE, 140120732717056, 140120732721151, +ERASE, 140120732721152, 140120741109759, +ERASE, 140121017937920, 140121017942015, +ERASE, 140121017942016, 140121026330623, +ERASE, 140121873567744, 140121873571839, +ERASE, 140121873571840, 140121881960447, +ERASE, 140121470914560, 140121470918655, +ERASE, 140121470918656, 140121479307263, +ERASE, 140121126977536, 140121126981631, +ERASE, 140121126981632, 140121135370239, +ERASE, 140120850149376, 140120850153471, +ERASE, 140120850153472, 140120858542079, +ERASE, 140120707538944, 140120707543039, +ERASE, 140120707543040, 140120715931647, +ERASE, 140121479307264, 140121479311359, +ERASE, 140121479311360, 140121487699967, +ERASE, 140120967581696, 140120967585791, +ERASE, 140120967585792, 140120975974399, +ERASE, 140120841756672, 140120841760767, +ERASE, 140120841760768, 140120850149375, +ERASE, 140121412198400, 140121412202495, +ERASE, 140121412202496, 140121420591103, +ERASE, 140122158788608, 140122158792703, +ERASE, 140122158792704, 140122167181311, +ERASE, 140122142003200, 140122142007295, +ERASE, 140122142007296, 140122150395903, +ERASE, 140121101799424, 140121101803519, +ERASE, 140121101803520, 140121110192127, +ERASE, 140120858542080, 140120858546175, +ERASE, 140120858546176, 140120866934783, +ERASE, 140120833363968, 140120833368063, +ERASE, 140120833368064, 140120841756671, +ERASE, 140121277980672, 140121277984767, +ERASE, 140121277984768, 140121286373375, +ERASE, 140121001152512, 140121001156607, +ERASE, 140121001156608, 140121009545215, +ERASE, 140120749502464, 140120749506559, +ERASE, 140120749506560, 140120757895167, +ERASE, 140121605132288, 140121605136383, +ERASE, 140121605136384, 140121613524991, +ERASE, 140121378627584, 140121378631679, +ERASE, 140121378631680, 140121387020287, +ERASE, 140121110192128, 140121110196223, +ERASE, 140121110196224, 140121118584831, +ERASE, 140121462521856, 140121462525951, +ERASE, 140121462525952, 140121470914559, +ERASE, 140121395412992, 140121395417087, +ERASE, 140121395417088, 140121403805695, +ERASE, 140121152155648, 140121152159743, +ERASE, 140121152159744, 140121160548351, +ERASE, 140120992759808, 140120992763903, +ERASE, 140120992763904, 140121001152511, +ERASE, 140122387976192, 140122387980287, +ERASE, 140122387980288, 140122396368895, +ERASE, 140121890353152, 140121890357247, +ERASE, 140121890357248, 140121898745855, +ERASE, 140121269587968, 140121269592063, +ERASE, 140121269592064, 140121277980671, + }; + unsigned long set37[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140722404016128, 140737488351231, +SNULL, 140722404020223, 140737488351231, +STORE, 140722404016128, 140722404020223, +STORE, 140722403885056, 140722404020223, +STORE, 94637010001920, 94637012254719, +SNULL, 94637010132991, 94637012254719, +STORE, 94637010001920, 94637010132991, +STORE, 94637010132992, 94637012254719, +ERASE, 94637010132992, 94637012254719, +STORE, 94637012226048, 94637012234239, +STORE, 94637012234240, 94637012254719, +STORE, 139760240594944, 139760242847743, +SNULL, 139760240738303, 139760242847743, +STORE, 139760240594944, 139760240738303, +STORE, 139760240738304, 139760242847743, +ERASE, 139760240738304, 139760242847743, +STORE, 139760242835456, 139760242843647, +STORE, 139760242843648, 139760242847743, +STORE, 140722405232640, 140722405236735, +STORE, 140722405220352, 140722405232639, +STORE, 139760242806784, 139760242835455, +STORE, 139760242798592, 139760242806783, +STORE, 139760238379008, 139760240594943, +SNULL, 139760238379008, 139760238477311, +STORE, 139760238477312, 139760240594943, +STORE, 139760238379008, 139760238477311, +SNULL, 139760240570367, 139760240594943, +STORE, 139760238477312, 139760240570367, +STORE, 139760240570368, 139760240594943, +SNULL, 139760240570368, 139760240578559, +STORE, 139760240578560, 139760240594943, +STORE, 139760240570368, 139760240578559, +ERASE, 139760240570368, 139760240578559, +STORE, 139760240570368, 139760240578559, +ERASE, 139760240578560, 139760240594943, +STORE, 139760240578560, 139760240594943, +STORE, 139760234582016, 139760238379007, +SNULL, 139760234582016, 139760236240895, +STORE, 139760236240896, 139760238379007, +STORE, 139760234582016, 139760236240895, +SNULL, 139760238338047, 139760238379007, +STORE, 139760236240896, 139760238338047, +STORE, 139760238338048, 139760238379007, +SNULL, 139760238338048, 139760238362623, +STORE, 139760238362624, 139760238379007, +STORE, 139760238338048, 139760238362623, +ERASE, 139760238338048, 139760238362623, +STORE, 139760238338048, 139760238362623, +ERASE, 139760238362624, 139760238379007, +STORE, 139760238362624, 139760238379007, +STORE, 139760242790400, 139760242806783, +SNULL, 139760238354431, 139760238362623, +STORE, 139760238338048, 139760238354431, +STORE, 139760238354432, 139760238362623, +SNULL, 139760240574463, 139760240578559, +STORE, 139760240570368, 139760240574463, +STORE, 139760240574464, 139760240578559, +SNULL, 94637012230143, 94637012234239, +STORE, 94637012226048, 94637012230143, +STORE, 94637012230144, 94637012234239, +SNULL, 139760242839551, 139760242843647, +STORE, 139760242835456, 139760242839551, +STORE, 139760242839552, 139760242843647, +ERASE, 139760242806784, 139760242835455, +STORE, 94637033324544, 94637033459711, +STORE, 139760226189312, 139760234582015, +SNULL, 139760226193407, 139760234582015, +STORE, 139760226189312, 139760226193407, +STORE, 139760226193408, 139760234582015, +STORE, 139760217796608, 139760226189311, +STORE, 139760083578880, 139760217796607, +SNULL, 139760083578880, 139760114860031, +STORE, 139760114860032, 139760217796607, +STORE, 139760083578880, 139760114860031, +ERASE, 139760083578880, 139760114860031, +SNULL, 139760181968895, 139760217796607, +STORE, 139760114860032, 139760181968895, +STORE, 139760181968896, 139760217796607, +ERASE, 139760181968896, 139760217796607, +SNULL, 139760114995199, 139760181968895, +STORE, 139760114860032, 139760114995199, +STORE, 139760114995200, 139760181968895, +SNULL, 139760217800703, 139760226189311, +STORE, 139760217796608, 139760217800703, +STORE, 139760217800704, 139760226189311, +STORE, 139760209403904, 139760217796607, +SNULL, 139760209407999, 139760217796607, +STORE, 139760209403904, 139760209407999, +STORE, 139760209408000, 139760217796607, +STORE, 139760201011200, 139760209403903, +SNULL, 139760201015295, 139760209403903, +STORE, 139760201011200, 139760201015295, +STORE, 139760201015296, 139760209403903, +STORE, 139760192618496, 139760201011199, +SNULL, 139760192622591, 139760201011199, +STORE, 139760192618496, 139760192622591, +STORE, 139760192622592, 139760201011199, +STORE, 139760184225792, 139760192618495, +STORE, 139759980642304, 139760114860031, +STORE, 139759972249600, 139759980642303, +STORE, 139759963856896, 139759980642303, +STORE, 139759955464192, 139759980642303, +STORE, 139759888355328, 139759955464191, +SNULL, 139760047751167, 139760114860031, +STORE, 139759980642304, 139760047751167, +STORE, 139760047751168, 139760114860031, +ERASE, 139760047751168, 139760114860031, +SNULL, 139759980777471, 139760047751167, +STORE, 139759980642304, 139759980777471, +STORE, 139759980777472, 139760047751167, +STORE, 139759980777472, 139760114860031, +SNULL, 139759980777472, 139760047751167, +STORE, 139760047751168, 139760114860031, +STORE, 139759980777472, 139760047751167, +SNULL, 139760047886335, 139760114860031, +STORE, 139760047751168, 139760047886335, +STORE, 139760047886336, 139760114860031, +STORE, 139759821246464, 139759955464191, +SNULL, 139759821246464, 139759888355327, +STORE, 139759888355328, 139759955464191, +STORE, 139759821246464, 139759888355327, +ERASE, 139759821246464, 139759888355327, +ERASE, 139759888355328, 139759955464191, + }; + unsigned long set38[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140730666221568, 140737488351231, +SNULL, 140730666225663, 140737488351231, +STORE, 140730666221568, 140730666225663, +STORE, 140730666090496, 140730666225663, +STORE, 94177584803840, 94177587056639, +SNULL, 94177584934911, 94177587056639, +STORE, 94177584803840, 94177584934911, +STORE, 94177584934912, 94177587056639, +ERASE, 94177584934912, 94177587056639, +STORE, 94177587027968, 94177587036159, +STORE, 94177587036160, 94177587056639, +STORE, 140614382714880, 140614384967679, +SNULL, 140614382858239, 140614384967679, +STORE, 140614382714880, 140614382858239, +STORE, 140614382858240, 140614384967679, +ERASE, 140614382858240, 140614384967679, +STORE, 140614384955392, 140614384963583, +STORE, 140614384963584, 140614384967679, +STORE, 140730666315776, 140730666319871, +STORE, 140730666303488, 140730666315775, +STORE, 140614384926720, 140614384955391, +STORE, 140614384918528, 140614384926719, +STORE, 140614380498944, 140614382714879, +SNULL, 140614380498944, 140614380597247, +STORE, 140614380597248, 140614382714879, +STORE, 140614380498944, 140614380597247, +SNULL, 140614382690303, 140614382714879, +STORE, 140614380597248, 140614382690303, +STORE, 140614382690304, 140614382714879, +SNULL, 140614382690304, 140614382698495, +STORE, 140614382698496, 140614382714879, +STORE, 140614382690304, 140614382698495, +ERASE, 140614382690304, 140614382698495, +STORE, 140614382690304, 140614382698495, +ERASE, 140614382698496, 140614382714879, +STORE, 140614382698496, 140614382714879, +STORE, 140614376701952, 140614380498943, +SNULL, 140614376701952, 140614378360831, +STORE, 140614378360832, 140614380498943, +STORE, 140614376701952, 140614378360831, +SNULL, 140614380457983, 140614380498943, +STORE, 140614378360832, 140614380457983, +STORE, 140614380457984, 140614380498943, +SNULL, 140614380457984, 140614380482559, +STORE, 140614380482560, 140614380498943, +STORE, 140614380457984, 140614380482559, +ERASE, 140614380457984, 140614380482559, +STORE, 140614380457984, 140614380482559, +ERASE, 140614380482560, 140614380498943, +STORE, 140614380482560, 140614380498943, +STORE, 140614384910336, 140614384926719, +SNULL, 140614380474367, 140614380482559, +STORE, 140614380457984, 140614380474367, +STORE, 140614380474368, 140614380482559, +SNULL, 140614382694399, 140614382698495, +STORE, 140614382690304, 140614382694399, +STORE, 140614382694400, 140614382698495, +SNULL, 94177587032063, 94177587036159, +STORE, 94177587027968, 94177587032063, +STORE, 94177587032064, 94177587036159, +SNULL, 140614384959487, 140614384963583, +STORE, 140614384955392, 140614384959487, +STORE, 140614384959488, 140614384963583, +ERASE, 140614384926720, 140614384955391, +STORE, 94177619791872, 94177619927039, +STORE, 140614368309248, 140614376701951, +SNULL, 140614368313343, 140614376701951, +STORE, 140614368309248, 140614368313343, +STORE, 140614368313344, 140614376701951, +STORE, 140614359916544, 140614368309247, +STORE, 140614225698816, 140614359916543, +SNULL, 140614225698816, 140614276481023, +STORE, 140614276481024, 140614359916543, +STORE, 140614225698816, 140614276481023, +ERASE, 140614225698816, 140614276481023, +SNULL, 140614343589887, 140614359916543, +STORE, 140614276481024, 140614343589887, +STORE, 140614343589888, 140614359916543, +ERASE, 140614343589888, 140614359916543, +SNULL, 140614276616191, 140614343589887, +STORE, 140614276481024, 140614276616191, +STORE, 140614276616192, 140614343589887, +SNULL, 140614359920639, 140614368309247, +STORE, 140614359916544, 140614359920639, +STORE, 140614359920640, 140614368309247, +STORE, 140614351523840, 140614359916543, +SNULL, 140614351527935, 140614359916543, +STORE, 140614351523840, 140614351527935, +STORE, 140614351527936, 140614359916543, +STORE, 140614268088320, 140614276481023, +SNULL, 140614268092415, 140614276481023, +STORE, 140614268088320, 140614268092415, +STORE, 140614268092416, 140614276481023, +STORE, 140614259695616, 140614268088319, +SNULL, 140614259699711, 140614268088319, +STORE, 140614259695616, 140614259699711, +STORE, 140614259699712, 140614268088319, +STORE, 140614251302912, 140614259695615, +STORE, 140614242910208, 140614259695615, +STORE, 140614108692480, 140614242910207, +SNULL, 140614108692480, 140614142263295, +STORE, 140614142263296, 140614242910207, +STORE, 140614108692480, 140614142263295, +ERASE, 140614108692480, 140614142263295, +STORE, 140614133870592, 140614142263295, +STORE, 140613999652864, 140614133870591, +SNULL, 140613999652864, 140614008045567, +STORE, 140614008045568, 140614133870591, +STORE, 140613999652864, 140614008045567, +ERASE, 140613999652864, 140614008045567, +STORE, 140613999652864, 140614008045567, +STORE, 140613865435136, 140613999652863, +SNULL, 140613865435136, 140613873827839, +STORE, 140613873827840, 140613999652863, +STORE, 140613865435136, 140613873827839, +ERASE, 140613865435136, 140613873827839, +SNULL, 140614209372159, 140614242910207, +STORE, 140614142263296, 140614209372159, +STORE, 140614209372160, 140614242910207, +ERASE, 140614209372160, 140614242910207, +SNULL, 140614142398463, 140614209372159, +STORE, 140614142263296, 140614142398463, +STORE, 140614142398464, 140614209372159, +SNULL, 140614075154431, 140614133870591, +STORE, 140614008045568, 140614075154431, +STORE, 140614075154432, 140614133870591, +ERASE, 140614075154432, 140614133870591, +SNULL, 140614008180735, 140614075154431, +STORE, 140614008045568, 140614008180735, +STORE, 140614008180736, 140614075154431, +SNULL, 140613940936703, 140613999652863, +STORE, 140613873827840, 140613940936703, +STORE, 140613940936704, 140613999652863, +ERASE, 140613940936704, 140613999652863, +SNULL, 140614242914303, 140614259695615, +STORE, 140614242910208, 140614242914303, +STORE, 140614242914304, 140614259695615, +STORE, 140613739610112, 140613940936703, +STORE, 140614234517504, 140614242910207, +SNULL, 140614242914304, 140614251302911, +STORE, 140614251302912, 140614259695615, +STORE, 140614242914304, 140614251302911, +SNULL, 140614251307007, 140614259695615, +STORE, 140614251302912, 140614251307007, +STORE, 140614251307008, 140614259695615, +SNULL, 140613739610112, 140613873827839, +STORE, 140613873827840, 140613940936703, +STORE, 140613739610112, 140613873827839, +SNULL, 140613873963007, 140613940936703, +STORE, 140613873827840, 140613873963007, +STORE, 140613873963008, 140613940936703, +SNULL, 140614133874687, 140614142263295, +STORE, 140614133870592, 140614133874687, +STORE, 140614133874688, 140614142263295, +SNULL, 140613806718975, 140613873827839, +STORE, 140613739610112, 140613806718975, +STORE, 140613806718976, 140613873827839, +ERASE, 140613806718976, 140613873827839, +STORE, 140614226124800, 140614242910207, +SNULL, 140613739745279, 140613806718975, +STORE, 140613739610112, 140613739745279, +STORE, 140613739745280, 140613806718975, +SNULL, 140613999656959, 140614008045567, +STORE, 140613999652864, 140613999656959, +STORE, 140613999656960, 140614008045567, +SNULL, 140614226124800, 140614234517503, +STORE, 140614234517504, 140614242910207, +STORE, 140614226124800, 140614234517503, +SNULL, 140614234521599, 140614242910207, +STORE, 140614234517504, 140614234521599, +STORE, 140614234521600, 140614242910207, +STORE, 140614217732096, 140614234517503, +STORE, 140614125477888, 140614133870591, +SNULL, 140614125481983, 140614133870591, +STORE, 140614125477888, 140614125481983, +STORE, 140614125481984, 140614133870591, +STORE, 140614117085184, 140614125477887, +SNULL, 140614217736191, 140614234517503, +STORE, 140614217732096, 140614217736191, +STORE, 140614217736192, 140614234517503, +SNULL, 140614117089279, 140614125477887, +STORE, 140614117085184, 140614117089279, +STORE, 140614117089280, 140614125477887, +SNULL, 140614217736192, 140614226124799, +STORE, 140614226124800, 140614234517503, +STORE, 140614217736192, 140614226124799, +SNULL, 140614226128895, 140614234517503, +STORE, 140614226124800, 140614226128895, +STORE, 140614226128896, 140614234517503, +STORE, 140614108692480, 140614117085183, +STORE, 140614100299776, 140614117085183, +STORE, 140614091907072, 140614117085183, +SNULL, 140614091907072, 140614108692479, +STORE, 140614108692480, 140614117085183, +STORE, 140614091907072, 140614108692479, +SNULL, 140614108696575, 140614117085183, +STORE, 140614108692480, 140614108696575, +STORE, 140614108696576, 140614117085183, +SNULL, 140614091907072, 140614100299775, +STORE, 140614100299776, 140614108692479, +STORE, 140614091907072, 140614100299775, +SNULL, 140614100303871, 140614108692479, +STORE, 140614100299776, 140614100303871, +STORE, 140614100303872, 140614108692479, +STORE, 140614083514368, 140614100299775, +SNULL, 140614083518463, 140614100299775, +STORE, 140614083514368, 140614083518463, +STORE, 140614083518464, 140614100299775, +STORE, 140613991260160, 140613999652863, +SNULL, 140614083518464, 140614091907071, +STORE, 140614091907072, 140614100299775, +STORE, 140614083518464, 140614091907071, +SNULL, 140614091911167, 140614100299775, +STORE, 140614091907072, 140614091911167, +STORE, 140614091911168, 140614100299775, +SNULL, 140613991264255, 140613999652863, +STORE, 140613991260160, 140613991264255, +STORE, 140613991264256, 140613999652863, +STORE, 140613982867456, 140613991260159, +SNULL, 140613982871551, 140613991260159, +STORE, 140613982867456, 140613982871551, +STORE, 140613982871552, 140613991260159, +STORE, 140613974474752, 140613982867455, +SNULL, 140613974478847, 140613982867455, +STORE, 140613974474752, 140613974478847, +STORE, 140613974478848, 140613982867455, +STORE, 140613966082048, 140613974474751, +STORE, 140613739745280, 140613873827839, +SNULL, 140613739745280, 140613806718975, +STORE, 140613806718976, 140613873827839, +STORE, 140613739745280, 140613806718975, +SNULL, 140613806854143, 140613873827839, +STORE, 140613806718976, 140613806854143, +STORE, 140613806854144, 140613873827839, +SNULL, 140613966086143, 140613974474751, +STORE, 140613966082048, 140613966086143, +STORE, 140613966086144, 140613974474751, +STORE, 140613957689344, 140613966082047, +STORE, 140613605392384, 140613739610111, +STORE, 140613949296640, 140613966082047, +STORE, 140613596999680, 140613605392383, +STORE, 140613529890816, 140613596999679, +STORE, 140613521498112, 140613529890815, +STORE, 140613513105408, 140613529890815, +STORE, 140613378887680, 140613513105407, +SNULL, 140613378887680, 140613404065791, +STORE, 140613404065792, 140613513105407, +STORE, 140613378887680, 140613404065791, +ERASE, 140613378887680, 140613404065791, +STORE, 140613395673088, 140613404065791, +STORE, 140613261455360, 140613395673087, +SNULL, 140613261455360, 140613269848063, +STORE, 140613269848064, 140613395673087, +STORE, 140613261455360, 140613269848063, +ERASE, 140613261455360, 140613269848063, +STORE, 140613261455360, 140613269848063, +STORE, 140613253062656, 140613269848063, +STORE, 140613118844928, 140613253062655, +STORE, 140613110452224, 140613118844927, +SNULL, 140613118844928, 140613135630335, +STORE, 140613135630336, 140613253062655, +STORE, 140613118844928, 140613135630335, +ERASE, 140613118844928, 140613135630335, +STORE, 140613127237632, 140613135630335, +STORE, 140613110452224, 140613135630335, +STORE, 140612976234496, 140613110452223, +STORE, 140612967841792, 140612976234495, +STORE, 140612833624064, 140612967841791, +STORE, 140612825231360, 140612833624063, +STORE, 140612816838656, 140612833624063, +STORE, 140612682620928, 140612816838655, +STORE, 140612674228224, 140612682620927, +SNULL, 140612682620928, 140612732977151, +STORE, 140612732977152, 140612816838655, +STORE, 140612682620928, 140612732977151, +ERASE, 140612682620928, 140612732977151, +SNULL, 140613672501247, 140613739610111, +STORE, 140613605392384, 140613672501247, +STORE, 140613672501248, 140613739610111, +ERASE, 140613672501248, 140613739610111, +SNULL, 140613605527551, 140613672501247, +STORE, 140613605392384, 140613605527551, +STORE, 140613605527552, 140613672501247, +ERASE, 140613529890816, 140613596999679, +STORE, 140612540010496, 140612674228223, +SNULL, 140612540010496, 140612598759423, +STORE, 140612598759424, 140612674228223, +STORE, 140612540010496, 140612598759423, +ERASE, 140612540010496, 140612598759423, +SNULL, 140613471174655, 140613513105407, +STORE, 140613404065792, 140613471174655, +STORE, 140613471174656, 140613513105407, +ERASE, 140613471174656, 140613513105407, +SNULL, 140613404200959, 140613471174655, +STORE, 140613404065792, 140613404200959, +STORE, 140613404200960, 140613471174655, +SNULL, 140613336956927, 140613395673087, +STORE, 140613269848064, 140613336956927, +STORE, 140613336956928, 140613395673087, +ERASE, 140613336956928, 140613395673087, +SNULL, 140612833624064, 140612867194879, +STORE, 140612867194880, 140612967841791, +STORE, 140612833624064, 140612867194879, +ERASE, 140612833624064, 140612867194879, +SNULL, 140612976234496, 140613001412607, +STORE, 140613001412608, 140613110452223, +STORE, 140612976234496, 140613001412607, +ERASE, 140612976234496, 140613001412607, +SNULL, 140613202739199, 140613253062655, +STORE, 140613135630336, 140613202739199, +STORE, 140613202739200, 140613253062655, +ERASE, 140613202739200, 140613253062655, +SNULL, 140613135765503, 140613202739199, +STORE, 140613135630336, 140613135765503, +STORE, 140613135765504, 140613202739199, +SNULL, 140612816842751, 140612833624063, +STORE, 140612816838656, 140612816842751, +STORE, 140612816842752, 140612833624063, +SNULL, 140613110456319, 140613135630335, +STORE, 140613110452224, 140613110456319, +STORE, 140613110456320, 140613135630335, +SNULL, 140613949300735, 140613966082047, +STORE, 140613949296640, 140613949300735, +STORE, 140613949300736, 140613966082047, +SNULL, 140613110456320, 140613118844927, +STORE, 140613118844928, 140613135630335, +STORE, 140613110456320, 140613118844927, +SNULL, 140613118849023, 140613135630335, +STORE, 140613118844928, 140613118849023, +STORE, 140613118849024, 140613135630335, +SNULL, 140612800086015, 140612816838655, +STORE, 140612732977152, 140612800086015, +STORE, 140612800086016, 140612816838655, +ERASE, 140612800086016, 140612816838655, +SNULL, 140613253062656, 140613261455359, +STORE, 140613261455360, 140613269848063, +STORE, 140613253062656, 140613261455359, +SNULL, 140613261459455, 140613269848063, +STORE, 140613261455360, 140613261459455, +STORE, 140613261459456, 140613269848063, +SNULL, 140612674232319, 140612682620927, +STORE, 140612674228224, 140612674232319, +STORE, 140612674232320, 140612682620927, +STORE, 140613731217408, 140613739610111, +STORE, 140613722824704, 140613739610111, +SNULL, 140613949300736, 140613957689343, +STORE, 140613957689344, 140613966082047, +STORE, 140613949300736, 140613957689343, +SNULL, 140613957693439, 140613966082047, +STORE, 140613957689344, 140613957693439, +STORE, 140613957693440, 140613966082047, +STORE, 140612464541696, 140612674228223, +SNULL, 140612531650559, 140612674228223, +STORE, 140612464541696, 140612531650559, +STORE, 140612531650560, 140612674228223, +SNULL, 140612531650560, 140612598759423, +STORE, 140612598759424, 140612674228223, +STORE, 140612531650560, 140612598759423, +ERASE, 140612531650560, 140612598759423, +SNULL, 140612665868287, 140612674228223, +STORE, 140612598759424, 140612665868287, +STORE, 140612665868288, 140612674228223, +ERASE, 140612665868288, 140612674228223, +SNULL, 140613269983231, 140613336956927, +STORE, 140613269848064, 140613269983231, +STORE, 140613269983232, 140613336956927, +SNULL, 140612934303743, 140612967841791, +STORE, 140612867194880, 140612934303743, +STORE, 140612934303744, 140612967841791, +ERASE, 140612934303744, 140612967841791, +SNULL, 140613068521471, 140613110452223, +STORE, 140613001412608, 140613068521471, +STORE, 140613068521472, 140613110452223, +ERASE, 140613068521472, 140613110452223, +STORE, 140613714432000, 140613739610111, +SNULL, 140613001547775, 140613068521471, +STORE, 140613001412608, 140613001547775, +STORE, 140613001547776, 140613068521471, +SNULL, 140612733112319, 140612800086015, +STORE, 140612732977152, 140612733112319, +STORE, 140612733112320, 140612800086015, +SNULL, 140613513109503, 140613529890815, +STORE, 140613513105408, 140613513109503, +STORE, 140613513109504, 140613529890815, +STORE, 140613706039296, 140613739610111, +STORE, 140613697646592, 140613739610111, +STORE, 140613689253888, 140613739610111, +SNULL, 140613689257983, 140613739610111, +STORE, 140613689253888, 140613689257983, +STORE, 140613689257984, 140613739610111, +SNULL, 140613253066751, 140613261455359, +STORE, 140613253062656, 140613253066751, +STORE, 140613253066752, 140613261455359, +STORE, 140613680861184, 140613689253887, +STORE, 140613588606976, 140613605392383, +SNULL, 140613689257984, 140613731217407, +STORE, 140613731217408, 140613739610111, +STORE, 140613689257984, 140613731217407, +SNULL, 140613731221503, 140613739610111, +STORE, 140613731217408, 140613731221503, +STORE, 140613731221504, 140613739610111, +STORE, 140613580214272, 140613605392383, +SNULL, 140612464676863, 140612531650559, +STORE, 140612464541696, 140612464676863, +STORE, 140612464676864, 140612531650559, +SNULL, 140612598894591, 140612665868287, +STORE, 140612598759424, 140612598894591, +STORE, 140612598894592, 140612665868287, +SNULL, 140612867330047, 140612934303743, +STORE, 140612867194880, 140612867330047, +STORE, 140612867330048, 140612934303743, +STORE, 140613571821568, 140613605392383, +SNULL, 140613571825663, 140613605392383, +STORE, 140613571821568, 140613571825663, +STORE, 140613571825664, 140613605392383, +SNULL, 140613689257984, 140613722824703, +STORE, 140613722824704, 140613731217407, +STORE, 140613689257984, 140613722824703, +SNULL, 140613722828799, 140613731217407, +STORE, 140613722824704, 140613722828799, +STORE, 140613722828800, 140613731217407, +SNULL, 140613689257984, 140613714431999, +STORE, 140613714432000, 140613722824703, +STORE, 140613689257984, 140613714431999, +SNULL, 140613714436095, 140613722824703, +STORE, 140613714432000, 140613714436095, +STORE, 140613714436096, 140613722824703, +SNULL, 140612816842752, 140612825231359, +STORE, 140612825231360, 140612833624063, +STORE, 140612816842752, 140612825231359, +SNULL, 140612825235455, 140612833624063, +STORE, 140612825231360, 140612825235455, +STORE, 140612825235456, 140612833624063, +SNULL, 140613395677183, 140613404065791, +STORE, 140613395673088, 140613395677183, +STORE, 140613395677184, 140613404065791, +SNULL, 140613689257984, 140613706039295, +STORE, 140613706039296, 140613714431999, +STORE, 140613689257984, 140613706039295, +SNULL, 140613706043391, 140613714431999, +STORE, 140613706039296, 140613706043391, +STORE, 140613706043392, 140613714431999, +SNULL, 140613118849024, 140613127237631, +STORE, 140613127237632, 140613135630335, +STORE, 140613118849024, 140613127237631, +SNULL, 140613127241727, 140613135630335, +STORE, 140613127237632, 140613127241727, +STORE, 140613127241728, 140613135630335, +SNULL, 140613571825664, 140613580214271, +STORE, 140613580214272, 140613605392383, +STORE, 140613571825664, 140613580214271, +SNULL, 140613580218367, 140613605392383, +STORE, 140613580214272, 140613580218367, +STORE, 140613580218368, 140613605392383, +SNULL, 140613689257984, 140613697646591, +STORE, 140613697646592, 140613706039295, +STORE, 140613689257984, 140613697646591, +SNULL, 140613697650687, 140613706039295, +STORE, 140613697646592, 140613697650687, +STORE, 140613697650688, 140613706039295, +SNULL, 140613680865279, 140613689253887, +STORE, 140613680861184, 140613680865279, +STORE, 140613680865280, 140613689253887, +STORE, 140613563428864, 140613571821567, +SNULL, 140613563432959, 140613571821567, +STORE, 140613563428864, 140613563432959, +STORE, 140613563432960, 140613571821567, +SNULL, 140613580218368, 140613588606975, +STORE, 140613588606976, 140613605392383, +STORE, 140613580218368, 140613588606975, +SNULL, 140613588611071, 140613605392383, +STORE, 140613588606976, 140613588611071, +STORE, 140613588611072, 140613605392383, +SNULL, 140613513109504, 140613521498111, +STORE, 140613521498112, 140613529890815, +STORE, 140613513109504, 140613521498111, +SNULL, 140613521502207, 140613529890815, +STORE, 140613521498112, 140613521502207, +STORE, 140613521502208, 140613529890815, +SNULL, 140613588611072, 140613596999679, +STORE, 140613596999680, 140613605392383, +STORE, 140613588611072, 140613596999679, +SNULL, 140613597003775, 140613605392383, +STORE, 140613596999680, 140613597003775, +STORE, 140613597003776, 140613605392383, +STORE, 140613555036160, 140613563428863, +SNULL, 140613555040255, 140613563428863, +STORE, 140613555036160, 140613555040255, +STORE, 140613555040256, 140613563428863, +STORE, 140613546643456, 140613555036159, +STORE, 140613538250752, 140613555036159, +SNULL, 140613538250752, 140613546643455, +STORE, 140613546643456, 140613555036159, +STORE, 140613538250752, 140613546643455, +SNULL, 140613546647551, 140613555036159, +STORE, 140613546643456, 140613546647551, +STORE, 140613546647552, 140613555036159, +STORE, 140613504712704, 140613513105407, +STORE, 140613496320000, 140613513105407, +SNULL, 140613496324095, 140613513105407, +STORE, 140613496320000, 140613496324095, +STORE, 140613496324096, 140613513105407, +STORE, 140613487927296, 140613496319999, +SNULL, 140613487931391, 140613496319999, +STORE, 140613487927296, 140613487931391, +STORE, 140613487931392, 140613496319999, +STORE, 140613479534592, 140613487927295, +SNULL, 140612967845887, 140612976234495, +STORE, 140612967841792, 140612967845887, +STORE, 140612967845888, 140612976234495, +STORE, 140613387280384, 140613395673087, +STORE, 140613378887680, 140613395673087, +SNULL, 140613378887680, 140613387280383, +STORE, 140613387280384, 140613395673087, +STORE, 140613378887680, 140613387280383, +SNULL, 140613387284479, 140613395673087, +STORE, 140613387280384, 140613387284479, +STORE, 140613387284480, 140613395673087, +STORE, 140613370494976, 140613387280383, +STORE, 140613362102272, 140613387280383, +SNULL, 140613479538687, 140613487927295, +STORE, 140613479534592, 140613479538687, +STORE, 140613479538688, 140613487927295, +STORE, 140613353709568, 140613387280383, +STORE, 140613345316864, 140613387280383, +STORE, 140613244669952, 140613253062655, +SNULL, 140613345320959, 140613387280383, +STORE, 140613345316864, 140613345320959, +STORE, 140613345320960, 140613387280383, +SNULL, 140613538254847, 140613546643455, +STORE, 140613538250752, 140613538254847, +STORE, 140613538254848, 140613546643455, +STORE, 140613236277248, 140613253062655, +STORE, 140613227884544, 140613253062655, +STORE, 140613219491840, 140613253062655, +STORE, 140613211099136, 140613253062655, +SNULL, 140613211103231, 140613253062655, +STORE, 140613211099136, 140613211103231, +STORE, 140613211103232, 140613253062655, +STORE, 140613102059520, 140613110452223, +STORE, 140613093666816, 140613110452223, +SNULL, 140613093670911, 140613110452223, +STORE, 140613093666816, 140613093670911, +STORE, 140613093670912, 140613110452223, +STORE, 140613085274112, 140613093666815, +SNULL, 140613496324096, 140613504712703, +STORE, 140613504712704, 140613513105407, +STORE, 140613496324096, 140613504712703, +SNULL, 140613504716799, 140613513105407, +STORE, 140613504712704, 140613504716799, +STORE, 140613504716800, 140613513105407, +SNULL, 140613345320960, 140613378887679, +STORE, 140613378887680, 140613387280383, +STORE, 140613345320960, 140613378887679, +SNULL, 140613378891775, 140613387280383, +STORE, 140613378887680, 140613378891775, +STORE, 140613378891776, 140613387280383, +SNULL, 140613345320960, 140613362102271, +STORE, 140613362102272, 140613378887679, +STORE, 140613345320960, 140613362102271, +SNULL, 140613362106367, 140613378887679, +STORE, 140613362102272, 140613362106367, +STORE, 140613362106368, 140613378887679, +SNULL, 140613362106368, 140613370494975, +STORE, 140613370494976, 140613378887679, +STORE, 140613362106368, 140613370494975, +SNULL, 140613370499071, 140613378887679, +STORE, 140613370494976, 140613370499071, +STORE, 140613370499072, 140613378887679, +STORE, 140613076881408, 140613093666815, +STORE, 140612993019904, 140613001412607, +SNULL, 140613076885503, 140613093666815, +STORE, 140613076881408, 140613076885503, +STORE, 140613076885504, 140613093666815, +SNULL, 140613093670912, 140613102059519, +STORE, 140613102059520, 140613110452223, +STORE, 140613093670912, 140613102059519, +SNULL, 140613102063615, 140613110452223, +STORE, 140613102059520, 140613102063615, +STORE, 140613102063616, 140613110452223, +SNULL, 140613076885504, 140613085274111, +STORE, 140613085274112, 140613093666815, +STORE, 140613076885504, 140613085274111, +SNULL, 140613085278207, 140613093666815, +STORE, 140613085274112, 140613085278207, +STORE, 140613085278208, 140613093666815, +STORE, 140612984627200, 140613001412607, +STORE, 140612967845888, 140612984627199, +SNULL, 140613211103232, 140613219491839, +STORE, 140613219491840, 140613253062655, +STORE, 140613211103232, 140613219491839, +SNULL, 140613219495935, 140613253062655, +STORE, 140613219491840, 140613219495935, +STORE, 140613219495936, 140613253062655, +STORE, 140612959449088, 140612967841791, +STORE, 140612951056384, 140612967841791, +SNULL, 140612951060479, 140612967841791, +STORE, 140612951056384, 140612951060479, +STORE, 140612951060480, 140612967841791, +SNULL, 140613345320960, 140613353709567, +STORE, 140613353709568, 140613362102271, +STORE, 140613345320960, 140613353709567, +SNULL, 140613353713663, 140613362102271, +STORE, 140613353709568, 140613353713663, +STORE, 140613353713664, 140613362102271, +SNULL, 140613219495936, 140613244669951, +STORE, 140613244669952, 140613253062655, +STORE, 140613219495936, 140613244669951, +SNULL, 140613244674047, 140613253062655, +STORE, 140613244669952, 140613244674047, +STORE, 140613244674048, 140613253062655, +STORE, 140612942663680, 140612951056383, +SNULL, 140613219495936, 140613236277247, +STORE, 140613236277248, 140613244669951, +STORE, 140613219495936, 140613236277247, +SNULL, 140613236281343, 140613244669951, +STORE, 140613236277248, 140613236281343, +STORE, 140613236281344, 140613244669951, +SNULL, 140613219495936, 140613227884543, +STORE, 140613227884544, 140613236277247, +STORE, 140613219495936, 140613227884543, +SNULL, 140613227888639, 140613236277247, +STORE, 140613227884544, 140613227888639, +STORE, 140613227888640, 140613236277247, +SNULL, 140612984627200, 140612993019903, +STORE, 140612993019904, 140613001412607, +STORE, 140612984627200, 140612993019903, +SNULL, 140612993023999, 140613001412607, +STORE, 140612993019904, 140612993023999, +STORE, 140612993024000, 140613001412607, +STORE, 140612858802176, 140612867194879, +STORE, 140612850409472, 140612867194879, +SNULL, 140612951060480, 140612959449087, +STORE, 140612959449088, 140612967841791, +STORE, 140612951060480, 140612959449087, +SNULL, 140612959453183, 140612967841791, +STORE, 140612959449088, 140612959453183, +STORE, 140612959453184, 140612967841791, +SNULL, 140612967845888, 140612976234495, +STORE, 140612976234496, 140612984627199, +STORE, 140612967845888, 140612976234495, +SNULL, 140612976238591, 140612984627199, +STORE, 140612976234496, 140612976238591, +STORE, 140612976238592, 140612984627199, +STORE, 140612842016768, 140612867194879, +SNULL, 140612842020863, 140612867194879, +STORE, 140612842016768, 140612842020863, +STORE, 140612842020864, 140612867194879, +SNULL, 140612984631295, 140612993019903, +STORE, 140612984627200, 140612984631295, +STORE, 140612984631296, 140612993019903, +STORE, 140612825235456, 140612842016767, +STORE, 140612808445952, 140612816838655, +SNULL, 140612942667775, 140612951056383, +STORE, 140612942663680, 140612942667775, +STORE, 140612942667776, 140612951056383, +STORE, 140612724584448, 140612732977151, +SNULL, 140612724588543, 140612732977151, +STORE, 140612724584448, 140612724588543, +STORE, 140612724588544, 140612732977151, +STORE, 140612716191744, 140612724584447, +SNULL, 140612842020864, 140612850409471, +STORE, 140612850409472, 140612867194879, +STORE, 140612842020864, 140612850409471, +SNULL, 140612850413567, 140612867194879, +STORE, 140612850409472, 140612850413567, +STORE, 140612850413568, 140612867194879, +SNULL, 140612850413568, 140612858802175, +STORE, 140612858802176, 140612867194879, +STORE, 140612850413568, 140612858802175, +SNULL, 140612858806271, 140612867194879, +STORE, 140612858802176, 140612858806271, +STORE, 140612858806272, 140612867194879, +STORE, 140612707799040, 140612724584447, +SNULL, 140612707803135, 140612724584447, +STORE, 140612707799040, 140612707803135, +STORE, 140612707803136, 140612724584447, +SNULL, 140612707803136, 140612716191743, +STORE, 140612716191744, 140612724584447, +STORE, 140612707803136, 140612716191743, +SNULL, 140612716195839, 140612724584447, +STORE, 140612716191744, 140612716195839, +STORE, 140612716195840, 140612724584447, +SNULL, 140612808450047, 140612816838655, +STORE, 140612808445952, 140612808450047, +STORE, 140612808450048, 140612816838655, +SNULL, 140612825235456, 140612833624063, +STORE, 140612833624064, 140612842016767, +STORE, 140612825235456, 140612833624063, +SNULL, 140612833628159, 140612842016767, +STORE, 140612833624064, 140612833628159, +STORE, 140612833628160, 140612842016767, +STORE, 140612699406336, 140612707799039, +SNULL, 140612699410431, 140612707799039, +STORE, 140612699406336, 140612699410431, +STORE, 140612699410432, 140612707799039, +STORE, 140614384926720, 140614384955391, +STORE, 140614349332480, 140614351523839, +SNULL, 140614349332480, 140614349422591, +STORE, 140614349422592, 140614351523839, +STORE, 140614349332480, 140614349422591, +SNULL, 140614351515647, 140614351523839, +STORE, 140614349422592, 140614351515647, +STORE, 140614351515648, 140614351523839, +ERASE, 140614351515648, 140614351523839, +STORE, 140614351515648, 140614351523839, +SNULL, 140614351519743, 140614351523839, +STORE, 140614351515648, 140614351519743, +STORE, 140614351519744, 140614351523839, +ERASE, 140614384926720, 140614384955391, +ERASE, 140613949296640, 140613949300735, +ERASE, 140613949300736, 140613957689343, +ERASE, 140613689253888, 140613689257983, +ERASE, 140613689257984, 140613697646591, +ERASE, 140613563428864, 140613563432959, +ERASE, 140613563432960, 140613571821567, +ERASE, 140613211099136, 140613211103231, +ERASE, 140613211103232, 140613219491839, +ERASE, 140614133870592, 140614133874687, +ERASE, 140614133874688, 140614142263295, +ERASE, 140612967841792, 140612967845887, +ERASE, 140612967845888, 140612976234495, +ERASE, 140613076881408, 140613076885503, +ERASE, 140613076885504, 140613085274111, +ERASE, 140612850409472, 140612850413567, +ERASE, 140612850413568, 140612858802175, +ERASE, 140613110452224, 140613110456319, +ERASE, 140613110456320, 140613118844927, +ERASE, 140613706039296, 140613706043391, +ERASE, 140613706043392, 140613714431999, +ERASE, 140613521498112, 140613521502207, +ERASE, 140613521502208, 140613529890815, +ERASE, 140613362102272, 140613362106367, +ERASE, 140613362106368, 140613370494975, +ERASE, 140613253062656, 140613253066751, +ERASE, 140613253066752, 140613261455359, +ERASE, 140612816838656, 140612816842751, +ERASE, 140612816842752, 140612825231359, +ERASE, 140613261455360, 140613261459455, +ERASE, 140613261459456, 140613269848063, +ERASE, 140613118844928, 140613118849023, +ERASE, 140613118849024, 140613127237631, +ERASE, 140613714432000, 140613714436095, +ERASE, 140613714436096, 140613722824703, +ERASE, 140613496320000, 140613496324095, +ERASE, 140613496324096, 140613504712703, +ERASE, 140613513105408, 140613513109503, +ERASE, 140613513109504, 140613521498111, +ERASE, 140613697646592, 140613697650687, +ERASE, 140613697650688, 140613706039295, +ERASE, 140613093666816, 140613093670911, +ERASE, 140613093670912, 140613102059519, +ERASE, 140612993019904, 140612993023999, +ERASE, 140612993024000, 140613001412607, +ERASE, 140613127237632, 140613127241727, +ERASE, 140613127241728, 140613135630335, +ERASE, 140613957689344, 140613957693439, +ERASE, 140613957693440, 140613966082047, +ERASE, 140613571821568, 140613571825663, +ERASE, 140613571825664, 140613580214271, +ERASE, 140613479534592, 140613479538687, +ERASE, 140613479538688, 140613487927295, +ERASE, 140612984627200, 140612984631295, +ERASE, 140612984631296, 140612993019903, +ERASE, 140613588606976, 140613588611071, +ERASE, 140613588611072, 140613596999679, +ERASE, 140613680861184, 140613680865279, +ERASE, 140613680865280, 140613689253887, +ERASE, 140613345316864, 140613345320959, +ERASE, 140613345320960, 140613353709567, +ERASE, 140613596999680, 140613597003775, +ERASE, 140613597003776, 140613605392383, +ERASE, 140613966082048, 140613966086143, +ERASE, 140613966086144, 140613974474751, +ERASE, 140613731217408, 140613731221503, +ERASE, 140613731221504, 140613739610111, +ERASE, 140613395673088, 140613395677183, +ERASE, 140613395677184, 140613404065791, +ERASE, 140612825231360, 140612825235455, +ERASE, 140612825235456, 140612833624063, +ERASE, 140612674228224, 140612674232319, +ERASE, 140612674232320, 140612682620927, +ERASE, 140613722824704, 140613722828799, +ERASE, 140613722828800, 140613731217407, +ERASE, 140613487927296, 140613487931391, +ERASE, 140613487931392, 140613496319999, +ERASE, 140613102059520, 140613102063615, +ERASE, 140613102063616, 140613110452223, +ERASE, 140614242910208, 140614242914303, +ERASE, 140614242914304, 140614251302911, +ERASE, 140612808445952, 140612808450047, +ERASE, 140612808450048, 140612816838655, +ERASE, 140613236277248, 140613236281343, +ERASE, 140613236281344, 140613244669951, +ERASE, 140613580214272, 140613580218367, +ERASE, 140613580218368, 140613588606975, +ERASE, 140613370494976, 140613370499071, +ERASE, 140613370499072, 140613378887679, +ERASE, 140613244669952, 140613244674047, +ERASE, 140613244674048, 140613253062655, +ERASE, 140612724584448, 140612724588543, +ERASE, 140612724588544, 140612732977151, +ERASE, 140612707799040, 140612707803135, +ERASE, 140612707803136, 140612716191743, +ERASE, 140613504712704, 140613504716799, +ERASE, 140613504716800, 140613513105407, + }; + + unsigned long set39[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140736271417344, 140737488351231, +SNULL, 140736271421439, 140737488351231, +STORE, 140736271417344, 140736271421439, +STORE, 140736271286272, 140736271421439, +STORE, 94412930822144, 94412933074943, +SNULL, 94412930953215, 94412933074943, +STORE, 94412930822144, 94412930953215, +STORE, 94412930953216, 94412933074943, +ERASE, 94412930953216, 94412933074943, +STORE, 94412933046272, 94412933054463, +STORE, 94412933054464, 94412933074943, +STORE, 140326136901632, 140326139154431, +SNULL, 140326137044991, 140326139154431, +STORE, 140326136901632, 140326137044991, +STORE, 140326137044992, 140326139154431, +ERASE, 140326137044992, 140326139154431, +STORE, 140326139142144, 140326139150335, +STORE, 140326139150336, 140326139154431, +STORE, 140736271585280, 140736271589375, +STORE, 140736271572992, 140736271585279, +STORE, 140326139113472, 140326139142143, +STORE, 140326139105280, 140326139113471, +STORE, 140326134685696, 140326136901631, +SNULL, 140326134685696, 140326134783999, +STORE, 140326134784000, 140326136901631, +STORE, 140326134685696, 140326134783999, +SNULL, 140326136877055, 140326136901631, +STORE, 140326134784000, 140326136877055, +STORE, 140326136877056, 140326136901631, +SNULL, 140326136877056, 140326136885247, +STORE, 140326136885248, 140326136901631, +STORE, 140326136877056, 140326136885247, +ERASE, 140326136877056, 140326136885247, +STORE, 140326136877056, 140326136885247, +ERASE, 140326136885248, 140326136901631, +STORE, 140326136885248, 140326136901631, +STORE, 140326130888704, 140326134685695, +SNULL, 140326130888704, 140326132547583, +STORE, 140326132547584, 140326134685695, +STORE, 140326130888704, 140326132547583, +SNULL, 140326134644735, 140326134685695, +STORE, 140326132547584, 140326134644735, +STORE, 140326134644736, 140326134685695, +SNULL, 140326134644736, 140326134669311, +STORE, 140326134669312, 140326134685695, +STORE, 140326134644736, 140326134669311, +ERASE, 140326134644736, 140326134669311, +STORE, 140326134644736, 140326134669311, +ERASE, 140326134669312, 140326134685695, +STORE, 140326134669312, 140326134685695, +STORE, 140326139097088, 140326139113471, +SNULL, 140326134661119, 140326134669311, +STORE, 140326134644736, 140326134661119, +STORE, 140326134661120, 140326134669311, +SNULL, 140326136881151, 140326136885247, +STORE, 140326136877056, 140326136881151, +STORE, 140326136881152, 140326136885247, +SNULL, 94412933050367, 94412933054463, +STORE, 94412933046272, 94412933050367, +STORE, 94412933050368, 94412933054463, +SNULL, 140326139146239, 140326139150335, +STORE, 140326139142144, 140326139146239, +STORE, 140326139146240, 140326139150335, +ERASE, 140326139113472, 140326139142143, +STORE, 94412939493376, 94412939628543, +STORE, 140326122496000, 140326130888703, +SNULL, 140326122500095, 140326130888703, +STORE, 140326122496000, 140326122500095, +STORE, 140326122500096, 140326130888703, +STORE, 140326114103296, 140326122495999, +STORE, 140325979885568, 140326114103295, +SNULL, 140325979885568, 140326043910143, +STORE, 140326043910144, 140326114103295, +STORE, 140325979885568, 140326043910143, +ERASE, 140325979885568, 140326043910143, +SNULL, 140326111019007, 140326114103295, +STORE, 140326043910144, 140326111019007, +STORE, 140326111019008, 140326114103295, +ERASE, 140326111019008, 140326114103295, +SNULL, 140326044045311, 140326111019007, +STORE, 140326043910144, 140326044045311, +STORE, 140326044045312, 140326111019007, +SNULL, 140326114107391, 140326122495999, +STORE, 140326114103296, 140326114107391, +STORE, 140326114107392, 140326122495999, +STORE, 140326035517440, 140326043910143, +SNULL, 140326035521535, 140326043910143, +STORE, 140326035517440, 140326035521535, +STORE, 140326035521536, 140326043910143, +STORE, 140326027124736, 140326035517439, +SNULL, 140326027128831, 140326035517439, +STORE, 140326027124736, 140326027128831, +STORE, 140326027128832, 140326035517439, +STORE, 140326018732032, 140326027124735, +SNULL, 140326018736127, 140326027124735, +STORE, 140326018732032, 140326018736127, +STORE, 140326018736128, 140326027124735, +STORE, 140326010339328, 140326018732031, +STORE, 140326001946624, 140326018732031, +STORE, 140325993553920, 140326018732031, +STORE, 140325859336192, 140325993553919, +SNULL, 140325859336192, 140325909692415, +STORE, 140325909692416, 140325993553919, +STORE, 140325859336192, 140325909692415, +ERASE, 140325859336192, 140325909692415, +SNULL, 140325976801279, 140325993553919, +STORE, 140325909692416, 140325976801279, +STORE, 140325976801280, 140325993553919, +ERASE, 140325976801280, 140325993553919, +STORE, 140325985161216, 140326018732031, +STORE, 140325775474688, 140325976801279, +STORE, 140325708365824, 140325976801279, +SNULL, 140325708500991, 140325976801279, +STORE, 140325708365824, 140325708500991, +STORE, 140325708500992, 140325976801279, +SNULL, 140325708500992, 140325909692415, +STORE, 140325909692416, 140325976801279, +STORE, 140325708500992, 140325909692415, +SNULL, 140325909827583, 140325976801279, +STORE, 140325909692416, 140325909827583, +STORE, 140325909827584, 140325976801279, +SNULL, 140325842583551, 140325909692415, +STORE, 140325708500992, 140325842583551, +STORE, 140325842583552, 140325909692415, +ERASE, 140325842583552, 140325909692415, +SNULL, 140325708500992, 140325775474687, +STORE, 140325775474688, 140325842583551, +STORE, 140325708500992, 140325775474687, +SNULL, 140325775609855, 140325842583551, +STORE, 140325775474688, 140325775609855, +STORE, 140325775609856, 140325842583551, +STORE, 140325775609856, 140325909692415, +SNULL, 140325775609856, 140325842583551, +STORE, 140325842583552, 140325909692415, +STORE, 140325775609856, 140325842583551, +SNULL, 140325842718719, 140325909692415, +STORE, 140325842583552, 140325842718719, +STORE, 140325842718720, 140325909692415, +SNULL, 140325985161216, 140325993553919, +STORE, 140325993553920, 140326018732031, +STORE, 140325985161216, 140325993553919, +SNULL, 140325993558015, 140326018732031, +STORE, 140325993553920, 140325993558015, +STORE, 140325993558016, 140326018732031, +SNULL, 140325985165311, 140325993553919, +STORE, 140325985161216, 140325985165311, +STORE, 140325985165312, 140325993553919, +SNULL, 140325993558016, 140326001946623, +STORE, 140326001946624, 140326018732031, +STORE, 140325993558016, 140326001946623, +SNULL, 140326001950719, 140326018732031, +STORE, 140326001946624, 140326001950719, +STORE, 140326001950720, 140326018732031, +SNULL, 140326001950720, 140326010339327, +STORE, 140326010339328, 140326018732031, +STORE, 140326001950720, 140326010339327, +SNULL, 140326010343423, 140326018732031, +STORE, 140326010339328, 140326010343423, +STORE, 140326010343424, 140326018732031, +STORE, 140325699973120, 140325708365823, +STORE, 140325691580416, 140325708365823, +STORE, 140325683187712, 140325708365823, +SNULL, 140325683191807, 140325708365823, +STORE, 140325683187712, 140325683191807, +STORE, 140325683191808, 140325708365823, +SNULL, 140325683191808, 140325699973119, +STORE, 140325699973120, 140325708365823, +STORE, 140325683191808, 140325699973119, +SNULL, 140325699977215, 140325708365823, +STORE, 140325699973120, 140325699977215, +STORE, 140325699977216, 140325708365823, +STORE, 140325674795008, 140325683187711, +STORE, 140325666402304, 140325683187711, +STORE, 140325658009600, 140325683187711, +SNULL, 140325658009600, 140325666402303, +STORE, 140325666402304, 140325683187711, +STORE, 140325658009600, 140325666402303, +SNULL, 140325666406399, 140325683187711, +STORE, 140325666402304, 140325666406399, +STORE, 140325666406400, 140325683187711, +SNULL, 140325683191808, 140325691580415, +STORE, 140325691580416, 140325699973119, +STORE, 140325683191808, 140325691580415, +SNULL, 140325691584511, 140325699973119, +STORE, 140325691580416, 140325691584511, +STORE, 140325691584512, 140325699973119, +SNULL, 140325666406400, 140325674795007, +STORE, 140325674795008, 140325683187711, +STORE, 140325666406400, 140325674795007, +SNULL, 140325674799103, 140325683187711, +STORE, 140325674795008, 140325674799103, +STORE, 140325674799104, 140325683187711, +STORE, 140325649616896, 140325666402303, +SNULL, 140325649616896, 140325658009599, +STORE, 140325658009600, 140325666402303, +STORE, 140325649616896, 140325658009599, +SNULL, 140325658013695, 140325666402303, +STORE, 140325658009600, 140325658013695, +STORE, 140325658013696, 140325666402303, +SNULL, 140325649620991, 140325658009599, +STORE, 140325649616896, 140325649620991, +STORE, 140325649620992, 140325658009599, +STORE, 140325641224192, 140325649616895, +STORE, 140325632831488, 140325649616895, +SNULL, 140325632835583, 140325649616895, +STORE, 140325632831488, 140325632835583, +STORE, 140325632835584, 140325649616895, +STORE, 140325624438784, 140325632831487, +SNULL, 140325624442879, 140325632831487, +STORE, 140325624438784, 140325624442879, +STORE, 140325624442880, 140325632831487, +SNULL, 140325632835584, 140325641224191, +STORE, 140325641224192, 140325649616895, +STORE, 140325632835584, 140325641224191, +SNULL, 140325641228287, 140325649616895, +STORE, 140325641224192, 140325641228287, +STORE, 140325641228288, 140325649616895, +STORE, 140325616046080, 140325624438783, +SNULL, 140325616050175, 140325624438783, +STORE, 140325616046080, 140325616050175, +STORE, 140325616050176, 140325624438783, +STORE, 140325607653376, 140325616046079, +SNULL, 140325607657471, 140325616046079, +STORE, 140325607653376, 140325607657471, +STORE, 140325607657472, 140325616046079, +STORE, 140325599260672, 140325607653375, +STORE, 140325590867968, 140325607653375, +STORE, 140325456650240, 140325590867967, +SNULL, 140325456650240, 140325507039231, +STORE, 140325507039232, 140325590867967, +STORE, 140325456650240, 140325507039231, +ERASE, 140325456650240, 140325507039231, +STORE, 140325498646528, 140325507039231, +STORE, 140325364428800, 140325498646527, +SNULL, 140325364428800, 140325372821503, +STORE, 140325372821504, 140325498646527, +STORE, 140325364428800, 140325372821503, +ERASE, 140325364428800, 140325372821503, +STORE, 140325364428800, 140325372821503, +STORE, 140325356036096, 140325372821503, +STORE, 140325221818368, 140325356036095, +SNULL, 140325221818368, 140325238603775, +STORE, 140325238603776, 140325356036095, +STORE, 140325221818368, 140325238603775, +ERASE, 140325221818368, 140325238603775, +STORE, 140325230211072, 140325238603775, +STORE, 140325221818368, 140325238603775, +STORE, 140325087600640, 140325221818367, +STORE, 140325079207936, 140325087600639, +SNULL, 140325087600640, 140325104386047, +STORE, 140325104386048, 140325221818367, +STORE, 140325087600640, 140325104386047, +ERASE, 140325087600640, 140325104386047, +STORE, 140325095993344, 140325104386047, +STORE, 140325079207936, 140325104386047, +STORE, 140324944990208, 140325079207935, +SNULL, 140324944990208, 140324970168319, +STORE, 140324970168320, 140325079207935, +STORE, 140324944990208, 140324970168319, +ERASE, 140324944990208, 140324970168319, +STORE, 140324961775616, 140324970168319, +STORE, 140324953382912, 140324970168319, +STORE, 140324819165184, 140324953382911, +STORE, 140324684947456, 140324953382911, +STORE, 140324676554752, 140324684947455, +STORE, 140324668162048, 140324684947455, +STORE, 140324533944320, 140324668162047, +STORE, 140324525551616, 140324533944319, +SNULL, 140324533944320, 140324567515135, +STORE, 140324567515136, 140324668162047, +STORE, 140324533944320, 140324567515135, +ERASE, 140324533944320, 140324567515135, +STORE, 140324559122432, 140324567515135, +STORE, 140324391333888, 140324525551615, +SNULL, 140325574148095, 140325590867967, +STORE, 140325507039232, 140325574148095, +STORE, 140325574148096, 140325590867967, +ERASE, 140325574148096, 140325590867967, +SNULL, 140325439930367, 140325498646527, +STORE, 140325372821504, 140325439930367, +STORE, 140325439930368, 140325498646527, +ERASE, 140325439930368, 140325498646527, +SNULL, 140325305712639, 140325356036095, +STORE, 140325238603776, 140325305712639, +STORE, 140325305712640, 140325356036095, +ERASE, 140325305712640, 140325356036095, +SNULL, 140325171494911, 140325221818367, +STORE, 140325104386048, 140325171494911, +STORE, 140325171494912, 140325221818367, +ERASE, 140325171494912, 140325221818367, +SNULL, 140325104521215, 140325171494911, +STORE, 140325104386048, 140325104521215, +STORE, 140325104521216, 140325171494911, +STORE, 140324257116160, 140324525551615, +SNULL, 140324257116160, 140324299079679, +STORE, 140324299079680, 140324525551615, +STORE, 140324257116160, 140324299079679, +ERASE, 140324257116160, 140324299079679, +SNULL, 140325037277183, 140325079207935, +STORE, 140324970168320, 140325037277183, +STORE, 140325037277184, 140325079207935, +ERASE, 140325037277184, 140325079207935, +SNULL, 140324819165183, 140324953382911, +STORE, 140324684947456, 140324819165183, +STORE, 140324819165184, 140324953382911, +SNULL, 140324819165184, 140324835950591, +STORE, 140324835950592, 140324953382911, +STORE, 140324819165184, 140324835950591, +ERASE, 140324819165184, 140324835950591, +SNULL, 140324903059455, 140324953382911, +STORE, 140324835950592, 140324903059455, +STORE, 140324903059456, 140324953382911, +ERASE, 140324903059456, 140324953382911, +SNULL, 140324684947456, 140324701732863, +STORE, 140324701732864, 140324819165183, +STORE, 140324684947456, 140324701732863, +ERASE, 140324684947456, 140324701732863, +SNULL, 140324768841727, 140324819165183, +STORE, 140324701732864, 140324768841727, +STORE, 140324768841728, 140324819165183, +ERASE, 140324768841728, 140324819165183, +SNULL, 140324634623999, 140324668162047, +STORE, 140324567515136, 140324634623999, +STORE, 140324634624000, 140324668162047, +ERASE, 140324634624000, 140324668162047, +SNULL, 140324391333887, 140324525551615, +STORE, 140324299079680, 140324391333887, +STORE, 140324391333888, 140324525551615, +SNULL, 140324391333888, 140324433297407, +STORE, 140324433297408, 140324525551615, +STORE, 140324391333888, 140324433297407, +ERASE, 140324391333888, 140324433297407, +SNULL, 140325507174399, 140325574148095, +STORE, 140325507039232, 140325507174399, +STORE, 140325507174400, 140325574148095, +SNULL, 140325590867968, 140325599260671, +STORE, 140325599260672, 140325607653375, +STORE, 140325590867968, 140325599260671, +SNULL, 140325599264767, 140325607653375, +STORE, 140325599260672, 140325599264767, +STORE, 140325599264768, 140325607653375, +SNULL, 140325372956671, 140325439930367, +STORE, 140325372821504, 140325372956671, +STORE, 140325372956672, 140325439930367, +SNULL, 140324668166143, 140324684947455, +STORE, 140324668162048, 140324668166143, +STORE, 140324668166144, 140324684947455, +SNULL, 140324525555711, 140324533944319, +STORE, 140324525551616, 140324525555711, +STORE, 140324525555712, 140324533944319, +SNULL, 140324953382912, 140324961775615, +STORE, 140324961775616, 140324970168319, +STORE, 140324953382912, 140324961775615, +SNULL, 140324961779711, 140324970168319, +STORE, 140324961775616, 140324961779711, +STORE, 140324961779712, 140324970168319, +SNULL, 140325079212031, 140325104386047, +STORE, 140325079207936, 140325079212031, +STORE, 140325079212032, 140325104386047, +SNULL, 140325221818368, 140325230211071, +STORE, 140325230211072, 140325238603775, +STORE, 140325221818368, 140325230211071, +SNULL, 140325230215167, 140325238603775, +STORE, 140325230211072, 140325230215167, +STORE, 140325230215168, 140325238603775, +SNULL, 140325356036096, 140325364428799, +STORE, 140325364428800, 140325372821503, +STORE, 140325356036096, 140325364428799, +SNULL, 140325364432895, 140325372821503, + }; + unsigned long set40[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140734309167104, 140737488351231, +SNULL, 140734309171199, 140737488351231, +STORE, 140734309167104, 140734309171199, +STORE, 140734309036032, 140734309171199, +STORE, 94270500081664, 94270502334463, +SNULL, 94270500212735, 94270502334463, +STORE, 94270500081664, 94270500212735, +STORE, 94270500212736, 94270502334463, +ERASE, 94270500212736, 94270502334463, +STORE, 94270502305792, 94270502313983, +STORE, 94270502313984, 94270502334463, +STORE, 140321935110144, 140321937362943, +SNULL, 140321935253503, 140321937362943, +STORE, 140321935110144, 140321935253503, +STORE, 140321935253504, 140321937362943, +ERASE, 140321935253504, 140321937362943, +STORE, 140321937350656, 140321937358847, +STORE, 140321937358848, 140321937362943, +STORE, 140734309625856, 140734309629951, +STORE, 140734309613568, 140734309625855, +STORE, 140321937321984, 140321937350655, +STORE, 140321937313792, 140321937321983, +STORE, 140321932894208, 140321935110143, +SNULL, 140321932894208, 140321932992511, +STORE, 140321932992512, 140321935110143, +STORE, 140321932894208, 140321932992511, +SNULL, 140321935085567, 140321935110143, +STORE, 140321932992512, 140321935085567, +STORE, 140321935085568, 140321935110143, +SNULL, 140321935085568, 140321935093759, +STORE, 140321935093760, 140321935110143, +STORE, 140321935085568, 140321935093759, +ERASE, 140321935085568, 140321935093759, +STORE, 140321935085568, 140321935093759, +ERASE, 140321935093760, 140321935110143, +STORE, 140321935093760, 140321935110143, +STORE, 140321929097216, 140321932894207, +SNULL, 140321929097216, 140321930756095, +STORE, 140321930756096, 140321932894207, +STORE, 140321929097216, 140321930756095, +SNULL, 140321932853247, 140321932894207, +STORE, 140321930756096, 140321932853247, +STORE, 140321932853248, 140321932894207, +SNULL, 140321932853248, 140321932877823, +STORE, 140321932877824, 140321932894207, +STORE, 140321932853248, 140321932877823, +ERASE, 140321932853248, 140321932877823, +STORE, 140321932853248, 140321932877823, +ERASE, 140321932877824, 140321932894207, +STORE, 140321932877824, 140321932894207, +STORE, 140321937305600, 140321937321983, +SNULL, 140321932869631, 140321932877823, +STORE, 140321932853248, 140321932869631, +STORE, 140321932869632, 140321932877823, +SNULL, 140321935089663, 140321935093759, +STORE, 140321935085568, 140321935089663, +STORE, 140321935089664, 140321935093759, +SNULL, 94270502309887, 94270502313983, +STORE, 94270502305792, 94270502309887, +STORE, 94270502309888, 94270502313983, +SNULL, 140321937354751, 140321937358847, +STORE, 140321937350656, 140321937354751, +STORE, 140321937354752, 140321937358847, +ERASE, 140321937321984, 140321937350655, +STORE, 94270507364352, 94270507499519, +STORE, 140321920704512, 140321929097215, +SNULL, 140321920708607, 140321929097215, +STORE, 140321920704512, 140321920708607, +STORE, 140321920708608, 140321929097215, +STORE, 140321912311808, 140321920704511, +STORE, 140321778094080, 140321912311807, +SNULL, 140321778094080, 140321816051711, +STORE, 140321816051712, 140321912311807, +STORE, 140321778094080, 140321816051711, +ERASE, 140321778094080, 140321816051711, +SNULL, 140321883160575, 140321912311807, +STORE, 140321816051712, 140321883160575, +STORE, 140321883160576, 140321912311807, +ERASE, 140321883160576, 140321912311807, +SNULL, 140321816186879, 140321883160575, +STORE, 140321816051712, 140321816186879, +STORE, 140321816186880, 140321883160575, +SNULL, 140321912315903, 140321920704511, +STORE, 140321912311808, 140321912315903, +STORE, 140321912315904, 140321920704511, +STORE, 140321903919104, 140321912311807, +SNULL, 140321903923199, 140321912311807, +STORE, 140321903919104, 140321903923199, +STORE, 140321903923200, 140321912311807, +STORE, 140321895526400, 140321903919103, +SNULL, 140321895530495, 140321903919103, +STORE, 140321895526400, 140321895530495, +STORE, 140321895530496, 140321903919103, +STORE, 140321887133696, 140321895526399, +SNULL, 140321887137791, 140321895526399, +STORE, 140321887133696, 140321887137791, +STORE, 140321887137792, 140321895526399, +STORE, 140321807659008, 140321816051711, +STORE, 140321673441280, 140321807659007, +SNULL, 140321673441280, 140321681833983, +STORE, 140321681833984, 140321807659007, +STORE, 140321673441280, 140321681833983, +ERASE, 140321673441280, 140321681833983, +SNULL, 140321748942847, 140321807659007, +STORE, 140321681833984, 140321748942847, +STORE, 140321748942848, 140321807659007, +ERASE, 140321748942848, 140321807659007, +STORE, 140321799266304, 140321816051711, +STORE, 140321790873600, 140321816051711, +STORE, 140321782480896, 140321816051711, +STORE, 140321547616256, 140321748942847, +SNULL, 140321614725119, 140321748942847, +STORE, 140321547616256, 140321614725119, +STORE, 140321614725120, 140321748942847, +SNULL, 140321614725120, 140321681833983, +STORE, 140321681833984, 140321748942847, +STORE, 140321614725120, 140321681833983, +ERASE, 140321614725120, 140321681833983, +SNULL, 140321681969151, 140321748942847, +STORE, 140321681833984, 140321681969151, +STORE, 140321681969152, 140321748942847, +STORE, 140321547616256, 140321681833983, +SNULL, 140321547616256, 140321614725119, +STORE, 140321614725120, 140321681833983, +STORE, 140321547616256, 140321614725119, +SNULL, 140321614860287, 140321681833983, +STORE, 140321614725120, 140321614860287, +STORE, 140321614860288, 140321681833983, +SNULL, 140321547751423, 140321614725119, +STORE, 140321547616256, 140321547751423, +STORE, 140321547751424, 140321614725119, +STORE, 140321480507392, 140321547616255, +SNULL, 140321782480896, 140321799266303, +STORE, 140321799266304, 140321816051711, +STORE, 140321782480896, 140321799266303, +SNULL, 140321799270399, 140321816051711, +STORE, 140321799266304, 140321799270399, +STORE, 140321799270400, 140321816051711, +STORE, 140321774088192, 140321799266303, +SNULL, 140321774088192, 140321790873599, +STORE, 140321790873600, 140321799266303, +STORE, 140321774088192, 140321790873599, +SNULL, 140321790877695, 140321799266303, +STORE, 140321790873600, 140321790877695, +STORE, 140321790877696, 140321799266303, +SNULL, 140321480642559, 140321547616255, +STORE, 140321480507392, 140321480642559, +STORE, 140321480642560, 140321547616255, +SNULL, 140321774088192, 140321782480895, +STORE, 140321782480896, 140321790873599, +STORE, 140321774088192, 140321782480895, +SNULL, 140321782484991, 140321790873599, +STORE, 140321782480896, 140321782484991, +STORE, 140321782484992, 140321790873599, +SNULL, 140321799270400, 140321807659007, +STORE, 140321807659008, 140321816051711, +STORE, 140321799270400, 140321807659007, +SNULL, 140321807663103, 140321816051711, +STORE, 140321807659008, 140321807663103, +STORE, 140321807663104, 140321816051711, +STORE, 140321765695488, 140321782480895, +STORE, 140321757302784, 140321782480895, +SNULL, 140321757306879, 140321782480895, +STORE, 140321757302784, 140321757306879, +STORE, 140321757306880, 140321782480895, +STORE, 140321472114688, 140321480507391, +STORE, 140321463721984, 140321480507391, +SNULL, 140321463726079, 140321480507391, +STORE, 140321463721984, 140321463726079, +STORE, 140321463726080, 140321480507391, +SNULL, 140321757306880, 140321774088191, +STORE, 140321774088192, 140321782480895, +STORE, 140321757306880, 140321774088191, +SNULL, 140321774092287, 140321782480895, +STORE, 140321774088192, 140321774092287, +STORE, 140321774092288, 140321782480895, +SNULL, 140321463726080, 140321472114687, +STORE, 140321472114688, 140321480507391, +STORE, 140321463726080, 140321472114687, +SNULL, 140321472118783, 140321480507391, +STORE, 140321472114688, 140321472118783, +STORE, 140321472118784, 140321480507391, +SNULL, 140321757306880, 140321765695487, +STORE, 140321765695488, 140321774088191, +STORE, 140321757306880, 140321765695487, +SNULL, 140321765699583, 140321774088191, +STORE, 140321765695488, 140321765699583, +STORE, 140321765699584, 140321774088191, +STORE, 140321455329280, 140321463721983, +SNULL, 140321455333375, 140321463721983, +STORE, 140321455329280, 140321455333375, +STORE, 140321455333376, 140321463721983, +STORE, 140321446936576, 140321455329279, +STORE, 140321438543872, 140321455329279, +STORE, 140321430151168, 140321455329279, +SNULL, 140321430155263, 140321455329279, +STORE, 140321430151168, 140321430155263, +STORE, 140321430155264, 140321455329279, +SNULL, 140321430155264, 140321446936575, +STORE, 140321446936576, 140321455329279, +STORE, 140321430155264, 140321446936575, +SNULL, 140321446940671, 140321455329279, +STORE, 140321446936576, 140321446940671, +STORE, 140321446940672, 140321455329279, +SNULL, 140321430155264, 140321438543871, +STORE, 140321438543872, 140321446936575, +STORE, 140321430155264, 140321438543871, +SNULL, 140321438547967, 140321446936575, +STORE, 140321438543872, 140321438547967, +STORE, 140321438547968, 140321446936575, +STORE, 140321421758464, 140321430151167, +SNULL, 140321421762559, 140321430151167, +STORE, 140321421758464, 140321421762559, +STORE, 140321421762560, 140321430151167, +STORE, 140321413365760, 140321421758463, +SNULL, 140321413369855, 140321421758463, +STORE, 140321413365760, 140321413369855, +STORE, 140321413369856, 140321421758463, +STORE, 140321404973056, 140321413365759, +SNULL, 140321404977151, 140321413365759, +STORE, 140321404973056, 140321404977151, +STORE, 140321404977152, 140321413365759, +STORE, 140321396580352, 140321404973055, +STORE, 140321388187648, 140321404973055, +STORE, 140321253969920, 140321388187647, +SNULL, 140321253969920, 140321279180799, +STORE, 140321279180800, 140321388187647, +STORE, 140321253969920, 140321279180799, +ERASE, 140321253969920, 140321279180799, +SNULL, 140321346289663, 140321388187647, +STORE, 140321279180800, 140321346289663, +STORE, 140321346289664, 140321388187647, +ERASE, 140321346289664, 140321388187647, +STORE, 140321144963072, 140321346289663, +STORE, 140321379794944, 140321404973055, +STORE, 140321371402240, 140321404973055, +STORE, 140321010745344, 140321346289663, +STORE, 140321363009536, 140321404973055, +SNULL, 140321077854207, 140321346289663, +STORE, 140321010745344, 140321077854207, +STORE, 140321077854208, 140321346289663, +SNULL, 140321077854208, 140321144963071, +STORE, 140321144963072, 140321346289663, +STORE, 140321077854208, 140321144963071, +ERASE, 140321077854208, 140321144963071, +STORE, 140321354616832, 140321404973055, +STORE, 140321136570368, 140321144963071, +STORE, 140320943636480, 140321077854207, +STORE, 140320876527616, 140321077854207, +STORE, 140321128177664, 140321144963071, +SNULL, 140320876662783, 140321077854207, +STORE, 140320876527616, 140320876662783, +STORE, 140320876662784, 140321077854207, +STORE, 140321119784960, 140321144963071, +STORE, 140321111392256, 140321144963071, +STORE, 140320742309888, 140320876527615, +STORE, 140321102999552, 140321144963071, +STORE, 140320608092160, 140320876527615, +SNULL, 140320675201023, 140320876527615, +STORE, 140320608092160, 140320675201023, +STORE, 140320675201024, 140320876527615, +SNULL, 140320675201024, 140320742309887, +STORE, 140320742309888, 140320876527615, +STORE, 140320675201024, 140320742309887, +ERASE, 140320675201024, 140320742309887, +STORE, 140321094606848, 140321144963071, +STORE, 140321086214144, 140321144963071, +STORE, 140320608092160, 140320876527615, +SNULL, 140320608092160, 140320675201023, +STORE, 140320675201024, 140320876527615, +STORE, 140320608092160, 140320675201023, +SNULL, 140320675336191, 140320876527615, +STORE, 140320675201024, 140320675336191, +STORE, 140320675336192, 140320876527615, +STORE, 140320599699456, 140320608092159, +STORE, 140320591306752, 140320608092159, +STORE, 140320457089024, 140320591306751, +STORE, 140320448696320, 140320457089023, +STORE, 140320314478592, 140320448696319, +SNULL, 140321144963072, 140321279180799, +STORE, 140321279180800, 140321346289663, +STORE, 140321144963072, 140321279180799, +SNULL, 140321279315967, 140321346289663, +STORE, 140321279180800, 140321279315967, +STORE, 140321279315968, 140321346289663, +SNULL, 140321086214144, 140321136570367, +STORE, 140321136570368, 140321144963071, +STORE, 140321086214144, 140321136570367, +SNULL, 140321136574463, 140321144963071, +STORE, 140321136570368, 140321136574463, +STORE, 140321136574464, 140321144963071, +SNULL, 140321212071935, 140321279180799, +STORE, 140321144963072, 140321212071935, +STORE, 140321212071936, 140321279180799, +ERASE, 140321212071936, 140321279180799, +SNULL, 140321145098239, 140321212071935, +STORE, 140321144963072, 140321145098239, +STORE, 140321145098240, 140321212071935, +SNULL, 140320876662784, 140321010745343, +STORE, 140321010745344, 140321077854207, +STORE, 140320876662784, 140321010745343, +SNULL, 140321010880511, 140321077854207, +STORE, 140321010745344, 140321010880511, +STORE, 140321010880512, 140321077854207, +SNULL, 140321354616832, 140321379794943, +STORE, 140321379794944, 140321404973055, +STORE, 140321354616832, 140321379794943, +SNULL, 140321379799039, 140321404973055, +STORE, 140321379794944, 140321379799039, +STORE, 140321379799040, 140321404973055, +SNULL, 140320876662784, 140320943636479, +STORE, 140320943636480, 140321010745343, +STORE, 140320876662784, 140320943636479, +SNULL, 140320943771647, 140321010745343, +STORE, 140320943636480, 140320943771647, +STORE, 140320943771648, 140321010745343, +SNULL, 140320809418751, 140320876527615, +STORE, 140320675336192, 140320809418751, +STORE, 140320809418752, 140320876527615, +ERASE, 140320809418752, 140320876527615, +SNULL, 140320675336192, 140320742309887, +STORE, 140320742309888, 140320809418751, +STORE, 140320675336192, 140320742309887, +SNULL, 140320742445055, 140320809418751, +STORE, 140320742309888, 140320742445055, +STORE, 140320742445056, 140320809418751, +SNULL, 140320608227327, 140320675201023, +STORE, 140320608092160, 140320608227327, +STORE, 140320608227328, 140320675201023, +SNULL, 140320457089024, 140320473874431, +STORE, 140320473874432, 140320591306751, +STORE, 140320457089024, 140320473874431, +ERASE, 140320457089024, 140320473874431, +SNULL, 140320540983295, 140320591306751, +STORE, 140320473874432, 140320540983295, +STORE, 140320540983296, 140320591306751, +ERASE, 140320540983296, 140320591306751, +SNULL, 140320314478592, 140320339656703, +STORE, 140320339656704, 140320448696319, +STORE, 140320314478592, 140320339656703, +ERASE, 140320314478592, 140320339656703, +SNULL, 140321086214144, 140321128177663, +STORE, 140321128177664, 140321136570367, +STORE, 140321086214144, 140321128177663, +SNULL, 140321128181759, 140321136570367, +STORE, 140321128177664, 140321128181759, +STORE, 140321128181760, 140321136570367, +SNULL, 140321354616832, 140321371402239, +STORE, 140321371402240, 140321379794943, +STORE, 140321354616832, 140321371402239, +SNULL, 140321371406335, 140321379794943, +STORE, 140321371402240, 140321371406335, +STORE, 140321371406336, 140321379794943, +SNULL, 140320591310847, 140320608092159, +STORE, 140320591306752, 140320591310847, +STORE, 140320591310848, 140320608092159, +SNULL, 140321354616832, 140321363009535, +STORE, 140321363009536, 140321371402239, +STORE, 140321354616832, 140321363009535, +SNULL, 140321363013631, 140321371402239, +STORE, 140321363009536, 140321363013631, +STORE, 140321363013632, 140321371402239, +SNULL, 140321086214144, 140321119784959, +STORE, 140321119784960, 140321128177663, +STORE, 140321086214144, 140321119784959, +SNULL, 140321119789055, 140321128177663, +STORE, 140321119784960, 140321119789055, +STORE, 140321119789056, 140321128177663, +SNULL, 140321086218239, 140321119784959, +STORE, 140321086214144, 140321086218239, +STORE, 140321086218240, 140321119784959, +SNULL, 140321086218240, 140321094606847, +STORE, 140321094606848, 140321119784959, +STORE, 140321086218240, 140321094606847, +SNULL, 140321094610943, 140321119784959, +STORE, 140321094606848, 140321094610943, +STORE, 140321094610944, 140321119784959, +SNULL, 140320474009599, 140320540983295, +STORE, 140320473874432, 140320474009599, +STORE, 140320474009600, 140320540983295, +SNULL, 140320406765567, 140320448696319, +STORE, 140320339656704, 140320406765567, +STORE, 140320406765568, 140320448696319, +ERASE, 140320406765568, 140320448696319, +SNULL, 140320339791871, 140320406765567, +STORE, 140320339656704, 140320339791871, +STORE, 140320339791872, 140320406765567, +STORE, 140321270788096, 140321279180799, +STORE, 140321262395392, 140321279180799, +STORE, 140321254002688, 140321279180799, +SNULL, 140321254002688, 140321262395391, +STORE, 140321262395392, 140321279180799, +STORE, 140321254002688, 140321262395391, +SNULL, 140321262399487, 140321279180799, +STORE, 140321262395392, 140321262399487, +STORE, 140321262399488, 140321279180799, +STORE, 140321245609984, 140321262395391, +STORE, 140321237217280, 140321262395391, +SNULL, 140321237217280, 140321245609983, +STORE, 140321245609984, 140321262395391, +STORE, 140321237217280, 140321245609983, +SNULL, 140321245614079, 140321262395391, +STORE, 140321245609984, 140321245614079, +STORE, 140321245614080, 140321262395391, +SNULL, 140321379799040, 140321388187647, +STORE, 140321388187648, 140321404973055, +STORE, 140321379799040, 140321388187647, +SNULL, 140321388191743, 140321404973055, +STORE, 140321388187648, 140321388191743, +STORE, 140321388191744, 140321404973055, +SNULL, 140321354620927, 140321363009535, +STORE, 140321354616832, 140321354620927, +STORE, 140321354620928, 140321363009535, +SNULL, 140321388191744, 140321396580351, +STORE, 140321396580352, 140321404973055, +STORE, 140321388191744, 140321396580351, +SNULL, 140321396584447, 140321404973055, +STORE, 140321396580352, 140321396584447, +STORE, 140321396584448, 140321404973055, +SNULL, 140321094610944, 140321111392255, +STORE, 140321111392256, 140321119784959, +STORE, 140321094610944, 140321111392255, +SNULL, 140321111396351, 140321119784959, +STORE, 140321111392256, 140321111396351, +STORE, 140321111396352, 140321119784959, +STORE, 140321228824576, 140321245609983, +SNULL, 140321094610944, 140321102999551, +STORE, 140321102999552, 140321111392255, +STORE, 140321094610944, 140321102999551, +SNULL, 140321103003647, 140321111392255, +STORE, 140321102999552, 140321103003647, +STORE, 140321103003648, 140321111392255, +STORE, 140321220431872, 140321245609983, +SNULL, 140321220435967, 140321245609983, +STORE, 140321220431872, 140321220435967, +STORE, 140321220435968, 140321245609983, +STORE, 140320868134912, 140320876527615, +SNULL, 140320868139007, 140320876527615, +STORE, 140320868134912, 140320868139007, +STORE, 140320868139008, 140320876527615, +SNULL, 140320591310848, 140320599699455, +STORE, 140320599699456, 140320608092159, +STORE, 140320591310848, 140320599699455, +SNULL, 140320599703551, 140320608092159, +STORE, 140320599699456, 140320599703551, +STORE, 140320599703552, 140320608092159, +STORE, 140320859742208, 140320868134911, +SNULL, 140321262399488, 140321270788095, +STORE, 140321270788096, 140321279180799, +STORE, 140321262399488, 140321270788095, +SNULL, 140321270792191, 140321279180799, +STORE, 140321270788096, 140321270792191, +STORE, 140321270792192, 140321279180799, +STORE, 140320851349504, 140320868134911, +STORE, 140320842956800, 140320868134911, +STORE, 140320834564096, 140320868134911, +STORE, 140320826171392, 140320868134911, +SNULL, 140320826171392, 140320834564095, +STORE, 140320834564096, 140320868134911, +STORE, 140320826171392, 140320834564095, +SNULL, 140320834568191, 140320868134911, +STORE, 140320834564096, 140320834568191, +STORE, 140320834568192, 140320868134911, +SNULL, 140321220435968, 140321228824575, +STORE, 140321228824576, 140321245609983, +STORE, 140321220435968, 140321228824575, +SNULL, 140321228828671, 140321245609983, +STORE, 140321228824576, 140321228828671, +STORE, 140321228828672, 140321245609983, +STORE, 140320817778688, 140320834564095, +SNULL, 140320817782783, 140320834564095, +STORE, 140320817778688, 140320817782783, +STORE, 140320817782784, 140320834564095, +STORE, 140320582914048, 140320591306751, +SNULL, 140321228828672, 140321237217279, +STORE, 140321237217280, 140321245609983, +STORE, 140321228828672, 140321237217279, +SNULL, 140321237221375, 140321245609983, +STORE, 140321237217280, 140321237221375, +STORE, 140321237221376, 140321245609983, +SNULL, 140320448700415, 140320457089023, +STORE, 140320448696320, 140320448700415, +STORE, 140320448700416, 140320457089023, +SNULL, 140321245614080, 140321254002687, +STORE, 140321254002688, 140321262395391, +STORE, 140321245614080, 140321254002687, +SNULL, 140321254006783, 140321262395391, +STORE, 140321254002688, 140321254006783, +STORE, 140321254006784, 140321262395391, +STORE, 140320574521344, 140320591306751, +SNULL, 140320574525439, 140320591306751, +STORE, 140320574521344, 140320574525439, +STORE, 140320574525440, 140320591306751, +STORE, 140320566128640, 140320574521343, +SNULL, 140320566132735, 140320574521343, +STORE, 140320566128640, 140320566132735, +STORE, 140320566132736, 140320574521343, +SNULL, 140320574525440, 140320582914047, +STORE, 140320582914048, 140320591306751, +STORE, 140320574525440, 140320582914047, +SNULL, 140320582918143, 140320591306751, +STORE, 140320582914048, 140320582918143, +STORE, 140320582918144, 140320591306751, +STORE, 140320557735936, 140320566128639, +SNULL, 140320557740031, 140320566128639, +STORE, 140320557735936, 140320557740031, +STORE, 140320557740032, 140320566128639, +STORE, 140320549343232, 140320557735935, +STORE, 140320465481728, 140320473874431, +STORE, 140320448700416, 140320473874431, +SNULL, 140320834568192, 140320859742207, +STORE, 140320859742208, 140320868134911, +STORE, 140320834568192, 140320859742207, +SNULL, 140320859746303, 140320868134911, +STORE, 140320859742208, 140320859746303, +STORE, 140320859746304, 140320868134911, +STORE, 140320440303616, 140320448696319, +STORE, 140320431910912, 140320448696319, +SNULL, 140320834568192, 140320851349503, +STORE, 140320851349504, 140320859742207, +STORE, 140320834568192, 140320851349503, +SNULL, 140320851353599, 140320859742207, +STORE, 140320851349504, 140320851353599, +STORE, 140320851353600, 140320859742207, +SNULL, 140320817782784, 140320826171391, +STORE, 140320826171392, 140320834564095, +STORE, 140320817782784, 140320826171391, +SNULL, 140320826175487, 140320834564095, +STORE, 140320826171392, 140320826175487, +STORE, 140320826175488, 140320834564095, +SNULL, 140320834568192, 140320842956799, +STORE, 140320842956800, 140320851349503, +STORE, 140320834568192, 140320842956799, +SNULL, 140320842960895, 140320851349503, +STORE, 140320842956800, 140320842960895, +STORE, 140320842960896, 140320851349503, +STORE, 140320423518208, 140320448696319, +SNULL, 140320423522303, 140320448696319, +STORE, 140320423518208, 140320423522303, +STORE, 140320423522304, 140320448696319, +STORE, 140320415125504, 140320423518207, +STORE, 140320331264000, 140320339656703, +STORE, 140320322871296, 140320339656703, +STORE, 140320314478592, 140320339656703, +SNULL, 140320314482687, 140320339656703, +STORE, 140320314478592, 140320314482687, +STORE, 140320314482688, 140320339656703, +STORE, 140320306085888, 140320314478591, +SNULL, 140320306089983, 140320314478591, +STORE, 140320306085888, 140320306089983, +STORE, 140320306089984, 140320314478591, +STORE, 140320297693184, 140320306085887, +SNULL, 140320297697279, 140320306085887, +STORE, 140320297693184, 140320297697279, +STORE, 140320297697280, 140320306085887, +STORE, 140320289300480, 140320297693183, +STORE, 140320280907776, 140320297693183, +SNULL, 140320280911871, 140320297693183, +STORE, 140320280907776, 140320280911871, +STORE, 140320280911872, 140320297693183, +SNULL, 140320423522304, 140320431910911, +STORE, 140320431910912, 140320448696319, +STORE, 140320423522304, 140320431910911, +SNULL, 140320431915007, 140320448696319, +STORE, 140320431910912, 140320431915007, +STORE, 140320431915008, 140320448696319, +SNULL, 140320549347327, 140320557735935, +STORE, 140320549343232, 140320549347327, +STORE, 140320549347328, 140320557735935, +STORE, 140320272515072, 140320280907775, +SNULL, 140320448700416, 140320457089023, +STORE, 140320457089024, 140320473874431, +STORE, 140320448700416, 140320457089023, +SNULL, 140320457093119, 140320473874431, +STORE, 140320457089024, 140320457093119, +STORE, 140320457093120, 140320473874431, +STORE, 140320264122368, 140320280907775, +SNULL, 140320457093120, 140320465481727, +STORE, 140320465481728, 140320473874431, +STORE, 140320457093120, 140320465481727, +SNULL, 140320465485823, 140320473874431, +STORE, 140320465481728, 140320465485823, +STORE, 140320465485824, 140320473874431, +SNULL, 140320431915008, 140320440303615, +STORE, 140320440303616, 140320448696319, +STORE, 140320431915008, 140320440303615, +SNULL, 140320440307711, 140320448696319, +STORE, 140320440303616, 140320440307711, +STORE, 140320440307712, 140320448696319, +STORE, 140320255729664, 140320280907775, +STORE, 140320247336960, 140320280907775, +SNULL, 140320247341055, 140320280907775, +STORE, 140320247336960, 140320247341055, +STORE, 140320247341056, 140320280907775, +STORE, 140320238944256, 140320247336959, +STORE, 140320230551552, 140320247336959, +SNULL, 140320230551552, 140320238944255, +STORE, 140320238944256, 140320247336959, +STORE, 140320230551552, 140320238944255, +SNULL, 140320238948351, 140320247336959, +STORE, 140320238944256, 140320238948351, +STORE, 140320238948352, 140320247336959, +SNULL, 140320314482688, 140320331263999, +STORE, 140320331264000, 140320339656703, +STORE, 140320314482688, 140320331263999, +SNULL, 140320331268095, 140320339656703, +STORE, 140320331264000, 140320331268095, +STORE, 140320331268096, 140320339656703, +SNULL, 140320280911872, 140320289300479, +STORE, 140320289300480, 140320297693183, +STORE, 140320280911872, 140320289300479, +SNULL, 140320289304575, 140320297693183, +STORE, 140320289300480, 140320289304575, +STORE, 140320289304576, 140320297693183, +SNULL, 140320415129599, 140320423518207, +STORE, 140320415125504, 140320415129599, +STORE, 140320415129600, 140320423518207, +STORE, 140320222158848, 140320238944255, +STORE, 140320213766144, 140320238944255, +STORE, 140320205373440, 140320238944255, +SNULL, 140320205377535, 140320238944255, +STORE, 140320205373440, 140320205377535, +STORE, 140320205377536, 140320238944255, +SNULL, 140320314482688, 140320322871295, +STORE, 140320322871296, 140320331263999, +STORE, 140320314482688, 140320322871295, +SNULL, 140320322875391, 140320331263999, +STORE, 140320322871296, 140320322875391, +STORE, 140320322875392, 140320331263999, +SNULL, 140320247341056, 140320272515071, +STORE, 140320272515072, 140320280907775, +STORE, 140320247341056, 140320272515071, +SNULL, 140320272519167, 140320280907775, +STORE, 140320272515072, 140320272519167, +STORE, 140320272519168, 140320280907775, +SNULL, 140320247341056, 140320264122367, +STORE, 140320264122368, 140320272515071, +STORE, 140320247341056, 140320264122367, +SNULL, 140320264126463, 140320272515071, +STORE, 140320264122368, 140320264126463, +STORE, 140320264126464, 140320272515071, +SNULL, 140320205377536, 140320230551551, +STORE, 140320230551552, 140320238944255, +STORE, 140320205377536, 140320230551551, +SNULL, 140320230555647, 140320238944255, +STORE, 140320230551552, 140320230555647, +STORE, 140320230555648, 140320238944255, +STORE, 140320196980736, 140320205373439, +SNULL, 140320196984831, 140320205373439, +STORE, 140320196980736, 140320196984831, +STORE, 140320196984832, 140320205373439, +STORE, 140320188588032, 140320196980735, +SNULL, 140320247341056, 140320255729663, +STORE, 140320255729664, 140320264122367, +STORE, 140320247341056, 140320255729663, +SNULL, 140320255733759, 140320264122367, +STORE, 140320255729664, 140320255733759, +STORE, 140320255733760, 140320264122367, +STORE, 140320180195328, 140320196980735, +SNULL, 140320180199423, 140320196980735, +STORE, 140320180195328, 140320180199423, +STORE, 140320180199424, 140320196980735, +STORE, 140320171802624, 140320180195327, +STORE, 140320163409920, 140320180195327, +SNULL, 140320163414015, 140320180195327, +STORE, 140320163409920, 140320163414015, +STORE, 140320163414016, 140320180195327, +SNULL, 140320205377536, 140320222158847, +STORE, 140320222158848, 140320230551551, +STORE, 140320205377536, 140320222158847, +SNULL, 140320222162943, 140320230551551, +STORE, 140320222158848, 140320222162943, +STORE, 140320222162944, 140320230551551, +SNULL, 140320205377536, 140320213766143, +STORE, 140320213766144, 140320222158847, +STORE, 140320205377536, 140320213766143, +SNULL, 140320213770239, 140320222158847, +STORE, 140320213766144, 140320213770239, +STORE, 140320213770240, 140320222158847, +STORE, 140320155017216, 140320163409919, +SNULL, 140320180199424, 140320188588031, +STORE, 140320188588032, 140320196980735, +STORE, 140320180199424, 140320188588031, +SNULL, 140320188592127, 140320196980735, +STORE, 140320188588032, 140320188592127, +STORE, 140320188592128, 140320196980735, +SNULL, 140320155021311, 140320163409919, +STORE, 140320155017216, 140320155021311, +STORE, 140320155021312, 140320163409919, +SNULL, 140320163414016, 140320171802623, +STORE, 140320171802624, 140320180195327, +STORE, 140320163414016, 140320171802623, +SNULL, 140320171806719, 140320180195327, +STORE, 140320171802624, 140320171806719, +STORE, 140320171806720, 140320180195327, +STORE, 140320146624512, 140320155017215, +SNULL, 140320146628607, 140320155017215, +STORE, 140320146624512, 140320146628607, +STORE, 140320146628608, 140320155017215, +STORE, 140321937321984, 140321937350655, +STORE, 140321884942336, 140321887133695, +SNULL, 140321884942336, 140321885032447, +STORE, 140321885032448, 140321887133695, +STORE, 140321884942336, 140321885032447, +SNULL, 140321887125503, 140321887133695, +STORE, 140321885032448, 140321887125503, +STORE, 140321887125504, 140321887133695, +ERASE, 140321887125504, 140321887133695, +STORE, 140321887125504, 140321887133695, +SNULL, 140321887129599, 140321887133695, +STORE, 140321887125504, 140321887129599, +STORE, 140321887129600, 140321887133695, +ERASE, 140321937321984, 140321937350655, +ERASE, 140321086214144, 140321086218239, +ERASE, 140321086218240, 140321094606847, +ERASE, 140321119784960, 140321119789055, +ERASE, 140321119789056, 140321128177663, +ERASE, 140321245609984, 140321245614079, +ERASE, 140321245614080, 140321254002687, +ERASE, 140320574521344, 140320574525439, +ERASE, 140320574525440, 140320582914047, +ERASE, 140320297693184, 140320297697279, +ERASE, 140320297697280, 140320306085887, +ERASE, 140321354616832, 140321354620927, +ERASE, 140321354620928, 140321363009535, +ERASE, 140320834564096, 140320834568191, +ERASE, 140320834568192, 140320842956799, +ERASE, 140320591306752, 140320591310847, +ERASE, 140320591310848, 140320599699455, +ERASE, 140321136570368, 140321136574463, +ERASE, 140321136574464, 140321144963071, +ERASE, 140321237217280, 140321237221375, +ERASE, 140321237221376, 140321245609983, +ERASE, 140321363009536, 140321363013631, +ERASE, 140321363013632, 140321371402239, +ERASE, 140320599699456, 140320599703551, +ERASE, 140320599703552, 140320608092159, +ERASE, 140321396580352, 140321396584447, +ERASE, 140321396584448, 140321404973055, +ERASE, 140320566128640, 140320566132735, +ERASE, 140320566132736, 140320574521343, +ERASE, 140321094606848, 140321094610943, +ERASE, 140321094610944, 140321102999551, +ERASE, 140320582914048, 140320582918143, +ERASE, 140320582918144, 140320591306751, +ERASE, 140320289300480, 140320289304575, +ERASE, 140320289304576, 140320297693183, +ERASE, 140320163409920, 140320163414015, + }; + unsigned long set41[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140728157171712, 140737488351231, +SNULL, 140728157175807, 140737488351231, +STORE, 140728157171712, 140728157175807, +STORE, 140728157040640, 140728157175807, +STORE, 94376106364928, 94376108613631, +SNULL, 94376106487807, 94376108613631, +STORE, 94376106364928, 94376106487807, +STORE, 94376106487808, 94376108613631, +SNULL, 94376106487808, 94376108613631, +STORE, 94376108584960, 94376108593151, +STORE, 94376108593152, 94376108613631, +STORE, 140113496432640, 140113498685439, +SNULL, 140113496575999, 140113498685439, +STORE, 140113496432640, 140113496575999, +STORE, 140113496576000, 140113498685439, +SNULL, 140113496576000, 140113498685439, +STORE, 140113498673152, 140113498681343, +STORE, 140113498681344, 140113498685439, +STORE, 140728157609984, 140728157618175, +STORE, 140728157593600, 140728157609983, +STORE, 140113498636288, 140113498673151, +STORE, 140113498628096, 140113498636287, +STORE, 140113492635648, 140113496432639, +SNULL, 140113492635648, 140113494294527, +STORE, 140113494294528, 140113496432639, +STORE, 140113492635648, 140113494294527, +SNULL, 140113496391679, 140113496432639, +STORE, 140113494294528, 140113496391679, +STORE, 140113496391680, 140113496432639, +SNULL, 140113496391680, 140113496416255, +STORE, 140113496416256, 140113496432639, +STORE, 140113496391680, 140113496416255, +SNULL, 140113496391680, 140113496416255, +STORE, 140113496391680, 140113496416255, +SNULL, 140113496416256, 140113496432639, +STORE, 140113496416256, 140113496432639, +SNULL, 140113496408063, 140113496416255, +STORE, 140113496391680, 140113496408063, +STORE, 140113496408064, 140113496416255, +SNULL, 94376108589055, 94376108593151, +STORE, 94376108584960, 94376108589055, +STORE, 94376108589056, 94376108593151, +SNULL, 140113498677247, 140113498681343, +STORE, 140113498673152, 140113498677247, +STORE, 140113498677248, 140113498681343, +SNULL, 140113498636288, 140113498673151, +STORE, 94376135090176, 94376135094271, +STORE, 94376135090176, 94376135098367, +STORE, 94376139288576, 94376139292671, +STORE, 94376143482880, 94376143486975, +STORE, 94376147677184, 94376147681279, +STORE, 94376151871488, 94376151875583, +STORE, 94376156065792, 94376156069887, +STORE, 94376160260096, 94376160264191, +STORE, 94376164454400, 94376164458495, +STORE, 94376168648704, 94376168652799, +STORE, 94376172843008, 94376172847103, +STORE, 94376177037312, 94376177041407, +STORE, 94376181231616, 94376181235711, +STORE, 94376185425920, 94376185430015, +STORE, 94376189620224, 94376189624319, +STORE, 94376193814528, 94376193818623, +STORE, 94376198008832, 94376198012927, +STORE, 94376202203136, 94376202207231, +STORE, 94376206397440, 94376206401535, +STORE, 94376210591744, 94376210595839, +STORE, 94376214786048, 94376214790143, +STORE, 94376218980352, 94376218984447, +STORE, 94376223174656, 94376223178751, +STORE, 94376227368960, 94376227373055, +STORE, 94376231563264, 94376231567359, +STORE, 94376235757568, 94376235761663, +STORE, 94376239951872, 94376239955967, +STORE, 94376244146176, 94376244150271, +STORE, 94376248340480, 94376248344575, +STORE, 94376252534784, 94376252538879, +STORE, 94376256729088, 94376256733183, +STORE, 94376260923392, 94376260927487, +STORE, 94376265117696, 94376265121791, +STORE, 94376269312000, 94376269316095, +STORE, 94376273506304, 94376273510399, +STORE, 94376277700608, 94376277704703, +STORE, 94376281894912, 94376281899007, +STORE, 94376286089216, 94376286093311, +STORE, 94376290283520, 94376290287615, +STORE, 94376294477824, 94376294481919, +STORE, 94376298672128, 94376298676223, +STORE, 94376302866432, 94376302870527, +STORE, 94376307060736, 94376307064831, +STORE, 94376311255040, 94376311259135, +STORE, 94376315449344, 94376315453439, +STORE, 94376319643648, 94376319647743, +STORE, 94376323837952, 94376323842047, +STORE, 94376328032256, 94376328036351, +STORE, 94376332226560, 94376332230655, +STORE, 94376336420864, 94376336424959, +STORE, 94376340615168, 94376340619263, +STORE, 94376344809472, 94376344813567, +STORE, 94376349003776, 94376349007871, +STORE, 94376353198080, 94376353202175, +STORE, 94376357392384, 94376357396479, +STORE, 94376361586688, 94376361590783, +STORE, 94376365780992, 94376365785087, +STORE, 94376369975296, 94376369979391, +STORE, 94376374169600, 94376374173695, +STORE, 94376378363904, 94376378367999, +STORE, 94376382558208, 94376382562303, +STORE, 94376386752512, 94376386756607, +STORE, 94376390946816, 94376390950911, +STORE, 94376395141120, 94376395145215, +STORE, 94376399335424, 94376399339519, +STORE, 94376403529728, 94376403533823, +STORE, 94376407724032, 94376407728127, +STORE, 94376411918336, 94376411922431, +STORE, 94376416112640, 94376416116735, +STORE, 94376420306944, 94376420311039, +STORE, 94376424501248, 94376424505343, +STORE, 94376428695552, 94376428699647, +STORE, 94376432889856, 94376432893951, +STORE, 94376437084160, 94376437088255, +STORE, 94376441278464, 94376441282559, +STORE, 94376445472768, 94376445476863, +STORE, 94376449667072, 94376449671167, +STORE, 94376453861376, 94376453865471, +STORE, 94376458055680, 94376458059775, +STORE, 94376462249984, 94376462254079, +STORE, 94376466444288, 94376466448383, +STORE, 94376470638592, 94376470642687, +STORE, 94376474832896, 94376474836991, +STORE, 94376479027200, 94376479031295, +STORE, 94376483221504, 94376483225599, +STORE, 94376487415808, 94376487419903, +STORE, 94376491610112, 94376491614207, +STORE, 94376495804416, 94376495808511, +STORE, 94376499998720, 94376500002815, +STORE, 94376504193024, 94376504197119, +STORE, 94376508387328, 94376508391423, +STORE, 94376512581632, 94376512585727, +STORE, 94376516775936, 94376516780031, +STORE, 94376520970240, 94376520974335, +STORE, 94376525164544, 94376525168639, +STORE, 94376529358848, 94376529362943, +STORE, 94376533553152, 94376533557247, +STORE, 94376537747456, 94376537751551, +STORE, 94376541941760, 94376541945855, +STORE, 94376546136064, 94376546140159, +STORE, 94376550330368, 94376550334463, +STORE, 94376554524672, 94376554528767, +STORE, 94376558718976, 94376558723071, +STORE, 94376562913280, 94376562917375, +STORE, 94376567107584, 94376567111679, +STORE, 94376571301888, 94376571305983, +STORE, 94376575496192, 94376575500287, +STORE, 94376579690496, 94376579694591, +STORE, 94376583884800, 94376583888895, +STORE, 94376588079104, 94376588083199, +STORE, 94376592273408, 94376592277503, +STORE, 94376596467712, 94376596471807, +STORE, 94376600662016, 94376600666111, +STORE, 94376604856320, 94376604860415, +STORE, 94376609050624, 94376609054719, +STORE, 94376613244928, 94376613249023, +STORE, 94376617439232, 94376617443327, +STORE, 94376621633536, 94376621637631, +STORE, 94376625827840, 94376625831935, +STORE, 94376630022144, 94376630026239, +STORE, 94376634216448, 94376634220543, +STORE, 94376638410752, 94376638414847, +STORE, 94376642605056, 94376642609151, +STORE, 94376646799360, 94376646803455, +STORE, 94376650993664, 94376650997759, +STORE, 94376655187968, 94376655192063, +STORE, 94376659382272, 94376659386367, +STORE, 94376663576576, 94376663580671, +STORE, 94376667770880, 94376667774975, +STORE, 94376671965184, 94376671969279, +STORE, 94376676159488, 94376676163583, +STORE, 94376680353792, 94376680357887, +STORE, 94376684548096, 94376684552191, +STORE, 94376688742400, 94376688746495, +STORE, 94376692936704, 94376692940799, +STORE, 94376697131008, 94376697135103, +STORE, 94376701325312, 94376701329407, +STORE, 94376705519616, 94376705523711, +STORE, 94376709713920, 94376709718015, +STORE, 94376713908224, 94376713912319, +STORE, 94376718102528, 94376718106623, +STORE, 94376722296832, 94376722300927, +STORE, 94376726491136, 94376726495231, +STORE, 94376730685440, 94376730689535, +STORE, 94376734879744, 94376734883839, +STORE, 94376739074048, 94376739078143, +STORE, 94376743268352, 94376743272447, +STORE, 94376747462656, 94376747466751, +STORE, 94376751656960, 94376751661055, +STORE, 94376755851264, 94376755855359, +STORE, 94376760045568, 94376760049663, +STORE, 94376764239872, 94376764243967, +STORE, 94376768434176, 94376768438271, +STORE, 94376772628480, 94376772632575, +STORE, 94376776822784, 94376776826879, +STORE, 94376781017088, 94376781021183, +STORE, 94376785211392, 94376785215487, +STORE, 94376789405696, 94376789409791, +STORE, 94376793600000, 94376793604095, +STORE, 94376797794304, 94376797798399, +STORE, 94376801988608, 94376801992703, +STORE, 94376806182912, 94376806187007, +STORE, 94376810377216, 94376810381311, +STORE, 94376814571520, 94376814575615, +STORE, 94376818765824, 94376818769919, +STORE, 94376822960128, 94376822964223, +STORE, 94376827154432, 94376827158527, +STORE, 94376831348736, 94376831352831, +STORE, 94376835543040, 94376835547135, +STORE, 94376839737344, 94376839741439, +STORE, 94376843931648, 94376843935743, +STORE, 94376848125952, 94376848130047, +STORE, 94376852320256, 94376852324351, +STORE, 94376856514560, 94376856518655, +STORE, 94376860708864, 94376860712959, +STORE, 94376864903168, 94376864907263, +STORE, 94376869097472, 94376869101567, +STORE, 94376873291776, 94376873295871, +STORE, 94376877486080, 94376877490175, +STORE, 94376881680384, 94376881684479, +STORE, 94376885874688, 94376885878783, +STORE, 94376890068992, 94376890073087, +STORE, 94376894263296, 94376894267391, +STORE, 94376898457600, 94376898461695, +STORE, 94376902651904, 94376902655999, +STORE, 94376906846208, 94376906850303, +STORE, 94376911040512, 94376911044607, +STORE, 94376915234816, 94376915238911, +STORE, 94376919429120, 94376919433215, +STORE, 94376923623424, 94376923627519, +STORE, 94376927817728, 94376927821823, +STORE, 94376932012032, 94376932016127, +STORE, 94376936206336, 94376936210431, +STORE, 94376940400640, 94376940404735, +STORE, 94376944594944, 94376944599039, +STORE, 94376948789248, 94376948793343, +STORE, 94376952983552, 94376952987647, +STORE, 94376957177856, 94376957181951, +STORE, 94376961372160, 94376961376255, +STORE, 94376965566464, 94376965570559, +STORE, 94376969760768, 94376969764863, +STORE, 94376973955072, 94376973959167, +STORE, 94376978149376, 94376978153471, +STORE, 94376982343680, 94376982347775, +STORE, 94376986537984, 94376986542079, +STORE, 94376990732288, 94376990736383, +STORE, 94376994926592, 94376994930687, +STORE, 94376999120896, 94376999124991, +STORE, 94377003315200, 94377003319295, +STORE, 94377007509504, 94377007513599, +STORE, 94377011703808, 94377011707903, +STORE, 94377015898112, 94377015902207, +STORE, 94377020092416, 94377020096511, +STORE, 94377024286720, 94377024290815, +STORE, 94377028481024, 94377028485119, +STORE, 94377032675328, 94377032679423, +STORE, 94377036869632, 94377036873727, +STORE, 94377041063936, 94377041068031, +STORE, 94377045258240, 94377045262335, +STORE, 94377049452544, 94377049456639, +STORE, 94377053646848, 94377053650943, +STORE, 94377057841152, 94377057845247, +STORE, 94377062035456, 94377062039551, +STORE, 94377066229760, 94377066233855, +STORE, 94377070424064, 94377070428159, +STORE, 94377074618368, 94377074622463, +STORE, 94377078812672, 94377078816767, +STORE, 94377083006976, 94377083011071, +STORE, 94377087201280, 94377087205375, +STORE, 94377091395584, 94377091399679, +STORE, 94377095589888, 94377095593983, +STORE, 94377099784192, 94377099788287, +STORE, 94377103978496, 94377103982591, +STORE, 94377108172800, 94377108176895, +STORE, 94377112367104, 94377112371199, +STORE, 94377116561408, 94377116565503, +STORE, 94377120755712, 94377120759807, +STORE, 94377124950016, 94377124954111, +STORE, 94377129144320, 94377129148415, +STORE, 94377133338624, 94377133342719, +STORE, 94377137532928, 94377137537023, +STORE, 94377141727232, 94377141731327, +STORE, 94377145921536, 94377145925631, +STORE, 94377150115840, 94377150119935, +STORE, 94377154310144, 94377154314239, +STORE, 94377158504448, 94377158508543, +STORE, 94377162698752, 94377162702847, +STORE, 94377166893056, 94377166897151, +STORE, 94377171087360, 94377171091455, +STORE, 94377175281664, 94377175285759, +STORE, 94377179475968, 94377179480063, +STORE, 94377183670272, 94377183674367, +STORE, 94377187864576, 94377187868671, +STORE, 94377192058880, 94377192062975, +STORE, 94377196253184, 94377196257279, +STORE, 94377200447488, 94377200451583, +STORE, 94377204641792, 94377204645887, +SNULL, 94376135094271, 94376135098367, +STORE, 94376135090176, 94376135094271, +STORE, 94376135094272, 94376135098367, +SNULL, 94376135094272, 94377208836095, + }; + unsigned long set42[] = { +STORE, 314572800, 1388314623, +STORE, 1462157312, 1462169599, +STORE, 1462169600, 1462185983, +STORE, 1462185984, 1462190079, +STORE, 1462190080, 1462194175, +STORE, 1462194176, 1462198271, +STORE, 1879986176, 1881800703, +STORE, 1881800704, 1882034175, +STORE, 1882034176, 1882193919, +STORE, 1882193920, 1882406911, +STORE, 1882406912, 1882451967, +STORE, 1882451968, 1882996735, +STORE, 1882996736, 1885892607, +STORE, 1885892608, 1885896703, +STORE, 1885896704, 1885904895, +STORE, 1885904896, 1885908991, +STORE, 1885908992, 1885913087, +STORE, 1885913088, 1885966335, +STORE, 1885966336, 1886232575, +STORE, 1886232576, 1886236671, +STORE, 1886236672, 1886240767, +STORE, 1886240768, 1886244863, +STORE, 1886244864, 1886248959, +STORE, 1886248960, 1886294015, +STORE, 1886294016, 1886494719, +STORE, 1886494720, 1886498815, +STORE, 1886498816, 1886502911, +STORE, 1886502912, 1886507007, +STORE, 1886507008, 1886511103, +STORE, 1886511104, 1886556159, +STORE, 1886556160, 1886629887, +STORE, 1886629888, 1886633983, +STORE, 1886633984, 1886638079, +STORE, 1886638080, 1886642175, +STORE, 1886642176, 1886646271, +STORE, 1886646272, 1886666751, +STORE, 1886666752, 1886670847, +STORE, 1886670848, 1886674943, +STORE, 1886674944, 1886679039, +STORE, 1886679040, 1895419903, +STORE, 1895419904, 1895550975, +STORE, 1895550976, 1896148991, +STORE, 1896148992, 1897189375, +STORE, 1897189376, 1897701375, +STORE, 1897701376, 1897803775, +STORE, 1897803776, 1897816063, +STORE, 1897816064, 1899913215, +STORE, 1899913216, 1909379071, +STORE, 1909379072, 1909387263, +STORE, 1909387264, 1909391359, +STORE, 1909391360, 1909432319, +STORE, 1909432320, 1909436415, +STORE, 1909436416, 1909440511, +STORE, 1909440512, 1909460991, +STORE, 1909460992, 1909547007, +STORE, 1909547008, 1909551103, +STORE, 1909551104, 1909555199, +STORE, 1909555200, 1909559295, +STORE, 1909559296, 1909563391, +STORE, 1909563392, 1909739519, +STORE, 1909739520, 1910566911, +STORE, 1910566912, 1910571007, +STORE, 1910571008, 1910575103, +STORE, 1910575104, 1910579199, +STORE, 1910579200, 1910583295, +STORE, 1910583296, 1910587391, +STORE, 1910587392, 1910620159, +STORE, 1910620160, 1910624255, +STORE, 1910624256, 1910628351, +STORE, 1910628352, 1910632447, +STORE, 1910632448, 1910652927, +STORE, 1910652928, 1910657023, +STORE, 1910657024, 1910661119, +STORE, 1910661120, 1910665215, +STORE, 1910665216, 1910669311, +STORE, 1910669312, 1910677503, +STORE, 1910677504, 1910681599, +STORE, 1910681600, 1910685695, +STORE, 1910685696, 1910689791, +STORE, 1910689792, 1910697983, +STORE, 1910697984, 1910702079, +STORE, 1910702080, 1910706175, +STORE, 1910706176, 1910710271, +STORE, 1910710272, 1914093567, +STORE, 1914093568, 1914097663, +STORE, 1914097664, 1969434623, +STORE, 1969434624, 1977819135, +STORE, 3290435584, 3426750463, +STORE, 3426750464, 3426754559, +STORE, 3426754560, 3426762751, +STORE, 3426762752, 3426766847, +STORE, 3426766848, 3426770943, +STORE, 3427037184, 3427061759, +STORE, 3427061760, 3427135487, +STORE, 3427135488, 3427143679, +STORE, 3427143680, 3427147775, +STORE, 3427147776, 3427209215, +STORE, 3427319808, 3432116223, +STORE, 3432116224, 3450130431, +STORE, 3450130432, 3451027455, +STORE, 3451027456, 3451031551, +STORE, 3451031552, 3451461631, +STORE, 3451736064, 3456688127, +STORE, 3456688128, 3475222527, +STORE, 3475222528, 3476119551, +STORE, 3476119552, 3476127743, +STORE, 3476127744, 3476553727, +STORE, 3476631552, 3477315583, +STORE, 3477315584, 3479949311, +STORE, 3479949312, 3480002559, +STORE, 3480002560, 3480006655, +STORE, 3480006656, 3480432639, +STORE, 3480539136, 3480543231, +STORE, 3480543232, 3480547327, +STORE, 3480547328, 3480555519, +STORE, 3480854528, 3480903679, +STORE, 3480903680, 3480969215, +STORE, 3480969216, 3480977407, +STORE, 3480977408, 3480981503, +STORE, 3481030656, 3481092095, +STORE, 3481092096, 3481235455, +STORE, 3481235456, 3481243647, +STORE, 3481243648, 3481247743, +STORE, 3481436160, 3481444351, +STORE, 3481444352, 3481456639, +STORE, 3481456640, 3481460735, +STORE, 3481460736, 3481464831, +STORE, 3481587712, 3481645055, +STORE, 3481645056, 3481772031, +STORE, 3481772032, 3481776127, +STORE, 3481776128, 3481780223, +STORE, 3481874432, 3481935871, +STORE, 3481935872, 3482030079, +STORE, 3482030080, 3482038271, +STORE, 3482038272, 3482042367, +STORE, 3482198016, 3482230783, +STORE, 3482230784, 3482271743, +STORE, 3482271744, 3482279935, +STORE, 3482279936, 3482284031, +STORE, 3482562560, 3482566655, +STORE, 3482566656, 3482570751, +STORE, 3482570752, 3482574847, +STORE, 3482636288, 3482689535, +STORE, 3482689536, 3482746879, +STORE, 3482746880, 3482755071, +STORE, 3482755072, 3482759167, +STORE, 3482972160, 3483062271, +STORE, 3483062272, 3483242495, +STORE, 3483242496, 3483246591, +STORE, 3483246592, 3483250687, +STORE, 3483398144, 3483688959, +STORE, 3483688960, 3484114943, +STORE, 3484114944, 3484131327, +STORE, 3484131328, 3484135423, +STORE, 3484135424, 3484143615, +STORE, 3484184576, 3484475391, +STORE, 3484475392, 3485028351, +STORE, 3485028352, 3485057023, +STORE, 3485057024, 3485061119, +STORE, 3485360128, 3485364223, +STORE, 3485364224, 3485368319, +STORE, 3485368320, 3485372415, +STORE, 3485589504, 3485593599, +STORE, 3485593600, 3485597695, +STORE, 3485597696, 3485601791, +STORE, 3485913088, 3485937663, +STORE, 3485937664, 3485974527, +STORE, 3485974528, 3485982719, +STORE, 3485982720, 3485986815, +STORE, 3486052352, 3486056447, +STORE, 3486056448, 3486064639, +STORE, 3486064640, 3486068735, +STORE, 3486068736, 3486072831, +STORE, 3486294016, 3486302207, +STORE, 3486302208, 3486306303, +STORE, 3486306304, 3486310399, +STORE, 3486310400, 3486314495, +STORE, 3486670848, 3486679039, +STORE, 3486679040, 3486683135, +STORE, 3486683136, 3486687231, +STORE, 3486687232, 3486691327, +STORE, 3486863360, 3486871551, +STORE, 3486871552, 3486875647, +STORE, 3486875648, 3486879743, +STORE, 3486879744, 3486883839, +STORE, 3487584256, 3522543615, +STORE, 3522543616, 3523321855, +STORE, 3523321856, 3523342335, +STORE, 3523342336, 3523387391, +STORE, 3523387392, 3523391487, +STORE, 3523391488, 3523395583, +STORE, 3523477504, 3523686399, +STORE, 3523686400, 3523981311, +STORE, 3523981312, 3523997695, +STORE, 3523997696, 3524001791, +STORE, 3524177920, 3525013503, +STORE, 3525013504, 3526582271, +STORE, 3526582272, 3526606847, +STORE, 3526606848, 3526610943, +STORE, 3526610944, 3526615039, +STORE, 3526672384, 3526746111, +STORE, 3526746112, 3526860799, +STORE, 3526860800, 3526868991, +STORE, 3526868992, 3526873087, +STORE, 3527000064, 3527475199, +STORE, 3527475200, 3527479295, +STORE, 3527479296, 3527573503, +STORE, 3527573504, 3527581695, +STORE, 3527581696, 3527585791, +STORE, 3527585792, 3527606271, +STORE, 3527909376, 3527913471, +STORE, 3527913472, 3527917567, +STORE, 3527917568, 3527921663, +STORE, 3527950336, 3528011775, +STORE, 3528011776, 3528093695, +STORE, 3528093696, 3528101887, +STORE, 3528101888, 3528105983, +STORE, 3528228864, 3528241151, +STORE, 3528241152, 3528261631, +STORE, 3528261632, 3528265727, +STORE, 3528273920, 3528593407, +STORE, 3528593408, 3528609791, +STORE, 3528609792, 3528638463, +STORE, 3528638464, 3528642559, +STORE, 3528642560, 3528646655, +STORE, 3528880128, 3528912895, +STORE, 3528912896, 3528962047, +STORE, 3528962048, 3528966143, +STORE, 3528966144, 3528970239, +STORE, 3528982528, 3530293247, +STORE, 3530366976, 3530825727, +STORE, 3530825728, 3531317247, +STORE, 3531317248, 3541041151, +STORE, 3541041152, 3541303295, +STORE, 3541430272, 3566206975, +STORE, 3566206976, 3566993407, +STORE, 3567239168, 3587571711, +STORE, 3587571712, 3588284415, +STORE, 3588284416, 3588661247, +STORE, 3588661248, 3589066751, +STORE, 3589066752, 3589574655, +STORE, 3589574656, 3590078463, +STORE, 3590078464, 3590373375, +STORE, 3590373376, 3590668287, +STORE, 3590668288, 3590963199, +STORE, 3590963200, 3591294975, +STORE, 3591294976, 3591602175, +STORE, 3591602176, 3591933951, +STORE, 3591933952, 3592241151, +STORE, 3592241152, 3592572927, +STORE, 3592572928, 3592876031, +STORE, 3592876032, 3593211903, +STORE, 3593211904, 3593547775, +STORE, 3593547776, 3593650175, +STORE, 3593650176, 3593928703, +STORE, 3593928704, 3593936895, +STORE, 3593936896, 3593940991, +STORE, 3594006528, 3594301439, +STORE, 3594301440, 3594739711, +STORE, 3594739712, 3594756095, +STORE, 3594756096, 3594760191, +STORE, 3594760192, 3594768383, +STORE, 3594952704, 3595051007, +STORE, 3595051008, 3595223039, +STORE, 3595223040, 3595227135, +STORE, 3595227136, 3595235327, +STORE, 3595431936, 3595775999, +STORE, 3595776000, 3596701695, +STORE, 3596701696, 3596742655, +STORE, 3596742656, 3596746751, +STORE, 3596746752, 3596750847, +STORE, 3596767232, 3597070335, +STORE, 3597070336, 3597402111, +STORE, 3597402112, 3598188543, +STORE, 3598262272, 3623428095, +STORE, 3623428096, 3623432191, +STORE, 3623432192, 3623436287, +STORE, 3623436288, 3623440383, +STORE, 3623616512, 3623878655, +STORE, 3624169472, 3624300543, +STORE, 3627524096, 3628523519, +STORE, 3628523520, 3629522943, +STORE, 3696631808, 3730186239, +STORE, 3730186240, 3763740671, +STORE, 3763740672, 3764027391, +STORE, 3764027392, 3765133311, +STORE, 3765133312, 3765145599, +STORE, 3765145600, 3765149695, +STORE, 3765178368, 3766022143, +STORE, 3766022144, 3768791039, +STORE, 3768791040, 3768840191, +STORE, 3768840192, 3768844287, +STORE, 3768897536, 3768913919, +STORE, 3768913920, 3768934399, +STORE, 3768934400, 3768938495, +STORE, 3769016320, 3769147391, +STORE, 3769147392, 3769233407, +STORE, 3769233408, 3769356287, +STORE, 3769356288, 3769360383, +STORE, 3769360384, 3769368575, +STORE, 3769376768, 3794542591, +STORE, 3794542592, 3794599935, +STORE, 3794599936, 3794731007, +STORE, 3794731008, 3794735103, +STORE, 3794735104, 3794743295, +STORE, 3794849792, 3794980863, +STORE, 3794980864, 3794984959, +STORE, 3794984960, 3794989055, +STORE, 3794989056, 3794993151, +STORE, 3794993152, 3794997247, +STORE, 3795103744, 3795128319, +STORE, 3795128320, 3795165183, +STORE, 3795165184, 3795169279, +STORE, 3795169280, 3795173375, +STORE, 3795210240, 3795357695, +STORE, 3795357696, 3795365887, +STORE, 3795365888, 3795374079, +STORE, 3795374080, 3795378175, +STORE, 3795378176, 3795382271, +STORE, 3795406848, 3795738623, +STORE, 3795738624, 3795742719, +STORE, 3795742720, 3795755007, +STORE, 3795755008, 3795759103, +STORE, 3795763200, 3795894271, +STORE, 3795894272, 3796041727, +STORE, 3796041728, 3796054015, +STORE, 3796054016, 3796066303, +STORE, 3796066304, 3796070399, +STORE, 3796176896, 3796205567, +STORE, 3796205568, 3796250623, +STORE, 3796250624, 3796254719, +STORE, 3796254720, 3796258815, +STORE, 3796262912, 3796393983, +STORE, 3796393984, 3796516863, +STORE, 3796516864, 3796873215, +STORE, 3796873216, 3796885503, +STORE, 3796885504, 3796889599, +STORE, 3796963328, 3796967423, +STORE, 3796967424, 3796975615, +STORE, 3796975616, 3796979711, +STORE, 3797000192, 3797307391, +STORE, 3797307392, 3797311487, +STORE, 3797311488, 3797315583, +STORE, 3797315584, 3797323775, +STORE, 3797327872, 3797450751, +STORE, 3797450752, 3797458943, +STORE, 3797458944, 3797471231, +STORE, 3797471232, 3797475327, +STORE, 3797577728, 3797700607, +STORE, 3797700608, 3797721087, +STORE, 3797721088, 3797733375, +STORE, 3797733376, 3797741567, +STORE, 3797741568, 3797864447, +STORE, 3797864448, 3797995519, +STORE, 3797995520, 3798048767, +STORE, 3798048768, 3798179839, +STORE, 3798179840, 3798188031, +STORE, 3798188032, 3798192127, +STORE, 3798290432, 3798302719, +STORE, 3798302720, 3798323199, +STORE, 3798323200, 3798327295, +STORE, 3798327296, 3798331391, +STORE, 3798429696, 3798433791, +STORE, 3798433792, 3798552575, +STORE, 3798552576, 3798556671, +STORE, 3798556672, 3798568959, +STORE, 3798568960, 3798573055, +STORE, 3798573056, 3798581247, +STORE, 3798618112, 3798749183, +STORE, 3798749184, 3798855679, +STORE, 3798855680, 3798966271, +STORE, 3798966272, 3798982655, +STORE, 3798982656, 3798986751, +STORE, 3799101440, 3799171071, +STORE, 3799171072, 3799240703, +STORE, 3799240704, 3799248895, +STORE, 3799248896, 3799252991, +STORE, 3799326720, 3799650303, +STORE, 3799650304, 3800629247, +STORE, 3800629248, 3800641535, +STORE, 3800641536, 3800645631, +STORE, 3800645632, 3800649727, +STORE, 3800649728, 3800903679, +STORE, 3800903680, 3800936447, +STORE, 3800936448, 3800969215, +STORE, 3800969216, 3800981503, +STORE, 3800981504, 3800985599, +STORE, 3801001984, 3801133055, +STORE, 3801133056, 3801202687, +STORE, 3801202688, 3801591807, +STORE, 3801591808, 3801599999, +STORE, 3801600000, 3801604095, +STORE, 3801604096, 3801608191, +STORE, 3801608192, 3801739263, +STORE, 3801739264, 3801755647, +STORE, 3801755648, 3801796607, +STORE, 3801796608, 3801804799, +STORE, 3801804800, 3801808895, +STORE, 3801878528, 3801944063, +STORE, 3801944064, 3802116095, +STORE, 3802116096, 3802124287, +STORE, 3802124288, 3802128383, +STORE, 3802136576, 3803447295, +STORE, 3803492352, 3803553791, +STORE, 3803553792, 3804233727, +STORE, 3804233728, 3806068735, +STORE, 3806121984, 3806253055, +STORE, 3806253056, 3806674943, +STORE, 3806674944, 3807117311, +STORE, 3807117312, 3807379455, +STORE, 3807379456, 3807432703, +STORE, 3807432704, 3807563775, +STORE, 3807563776, 3809202175, +STORE, 3809202176, 3810250751, +STORE, 3810250752, 3827027967, +STORE, 3827027968, 3829125119, +STORE, 3829125120, 3837513727, +STORE, 3837513728, 3839610879, +STORE, 3839610880, 3847999487, +STORE, 3847999488, 3856392191, +STORE, 3856392192, 3864784895, +STORE, 3864784896, 3868983295, +STORE, 3868983296, 3885760511, +STORE, 3885760512, 3886809087, +STORE, 3886809088, 3887857663, +STORE, 3887857664, 3888119807, +STORE, 3888144384, 3888148479, +STORE, 3888148480, 3888218111, +STORE, 3888218112, 3888222207, +STORE, 3888222208, 3888353279, +STORE, 3888353280, 3889172479, +STORE, 3889172480, 3892314111, +STORE, 3892314112, 3892576255, +STORE, 3892588544, 3892637695, +STORE, 3892637696, 3892686847, +STORE, 3892686848, 3892744191, +STORE, 3892748288, 3892785151, +STORE, 3892785152, 3895459839, +STORE, 3895459840, 3895721983, +STORE, 3895738368, 3895885823, +STORE, 3895885824, 3897081855, +STORE, 3897081856, 3906482175, +STORE, 3906482176, 3916144639, +STORE, 3916144640, 3925766143, +STORE, 3925766144, 3926974463, +STORE, 3926974464, 3928367103, +STORE, 3928367104, 3928911871, +STORE, 3928911872, 3933995007, +STORE, 3933995008, 3935830015, +STORE, 3935830016, 3935846399, +STORE, 3935879168, 3936010239, +STORE, 3936010240, 3936026623, +STORE, 3936026624, 3936034815, +STORE, 3936034816, 3936051199, +STORE, 3936051200, 3936055295, +STORE, 3936071680, 3936137215, +STORE, 3936137216, 3936202751, +STORE, 3936202752, 3936219135, +STORE, 3936235520, 3936251903, +STORE, 3936268288, 3936276479, +STORE, 3936276480, 3936284671, +STORE, 3936284672, 3936288767, +STORE, 3936288768, 3936292863, +STORE, 3936296960, 3936354303, +STORE, 3936354304, 3936616447, +STORE, 3936628736, 3936669695, +STORE, 3936669696, 3936747519, +STORE, 3936747520, 3936870399, +STORE, 3936870400, 3936874495, +STORE, 3936874496, 3936878591, +STORE, 3936882688, 3936903167, +STORE, 3936911360, 3936948223, +STORE, 3936948224, 3936964607, +STORE, 3936964608, 3937103871, +STORE, 3937103872, 3937107967, +STORE, 3937132544, 3937161215, +STORE, 3937189888, 3937255423, +STORE, 3937255424, 3938512895, +STORE, 3938512896, 3945435135, +STORE, 3945435136, 3945476095, +STORE, 3945476096, 3945484287, +STORE, 3945484288, 3945496575, +STORE, 3945500672, 3945541631, +STORE, 3945558016, 3945566207, +STORE, 3945566208, 3945594879, +STORE, 3945594880, 3945598975, +STORE, 3945598976, 3945603071, +STORE, 3945611264, 3945742335, +STORE, 3945742336, 3945844735, +STORE, 3945844736, 3945848831, +STORE, 3945848832, 3945861119, +STORE, 3945861120, 3945865215, +STORE, 3945869312, 3945897983, +STORE, 3945897984, 3946303487, +STORE, 3946303488, 3946397695, +STORE, 3946397696, 3946569727, +STORE, 3946569728, 3946573823, +STORE, 3946573824, 3946594303, +STORE, 3946594304, 3946663935, +STORE, 3946663936, 3946708991, +STORE, 3946708992, 3946823679, +STORE, 3946823680, 3946827775, +STORE, 3946827776, 3946831871, +STORE, 3946831872, 3946860543, +STORE, 3946893312, 3946897407, +STORE, 3946897408, 3946905599, +STORE, 3946905600, 3946909695, +STORE, 3946909696, 3946913791, +STORE, 3946913792, 3946930175, +STORE, 3946930176, 3946967039, +STORE, 3946967040, 3947102207, +STORE, 3947102208, 3948412927, +STORE, 3948441600, 3948556287, +STORE, 3948556288, 3948576767, +STORE, 3948576768, 3948597247, +STORE, 3948597248, 3948605439, +STORE, 3948605440, 3948609535, +STORE, 3948609536, 3948654591, +STORE, 3948654592, 3948781567, +STORE, 3948781568, 3948822527, +STORE, 3948822528, 3948904447, +STORE, 3948904448, 3948908543, +STORE, 3948908544, 3948912639, +STORE, 3948945408, 3949043711, +STORE, 3949043712, 3949174783, +STORE, 3949174784, 3949191167, +STORE, 3949191168, 3949195263, +STORE, 3949207552, 3949252607, +STORE, 3949252608, 3949256703, +STORE, 3949256704, 3949363199, +STORE, 3949363200, 3949367295, +STORE, 3949367296, 3949379583, +STORE, 3949379584, 3949383679, +STORE, 3949383680, 3949400063, +STORE, 3949400064, 3949404159, +STORE, 3949416448, 3949481983, +STORE, 3949481984, 3949486079, +STORE, 3949486080, 3949592575, +STORE, 3949592576, 3949596671, +STORE, 3949596672, 3949621247, +STORE, 3949621248, 3949662207, +STORE, 3949662208, 3949666303, +STORE, 3949694976, 3949727743, +STORE, 3949727744, 3949731839, +STORE, 3949731840, 3949838335, +STORE, 3949838336, 3949842431, +STORE, 3949842432, 3949846527, +STORE, 3949846528, 3949854719, +STORE, 3949854720, 3949858815, +STORE, 3949858816, 3949862911, +STORE, 3949867008, 3949891583, +STORE, 3949891584, 3949928447, +STORE, 3949928448, 3949993983, +STORE, 3949993984, 3950043135, +STORE, 3950043136, 3950059519, +STORE, 3950059520, 3950096383, +STORE, 3950096384, 3950100479, +STORE, 3950100480, 3950104575, +STORE, 3950104576, 3950157823, +STORE, 3950157824, 3950292991, +STORE, 3950292992, 3950346239, +STORE, 3950346240, 3950477311, +STORE, 3950477312, 3950485503, +STORE, 3950485504, 3950489599, +STORE, 3950493696, 3950510079, +STORE, 3950510080, 3950661631, +STORE, 3950661632, 3951005695, +STORE, 3951005696, 3951026175, +STORE, 3951026176, 3951030271, +STORE, 3951030272, 3951054847, +STORE, 3951054848, 3951116287, +STORE, 3951116288, 3951144959, +STORE, 3951144960, 3951149055, +STORE, 3951149056, 3951194111, +STORE, 3951194112, 3951202303, +STORE, 3951202304, 3951206399, +STORE, 3951210496, 3951226879, +STORE, 3951226880, 3951329279, +STORE, 3951329280, 3951366143, +STORE, 3951366144, 3951411199, +STORE, 3951411200, 3951415295, +STORE, 3951415296, 3951419391, +STORE, 3951419392, 3951452159, +STORE, 3951452160, 3951566847, +STORE, 3951566848, 3951812607, +STORE, 3951812608, 3952173055, +STORE, 3952173056, 3952214015, +STORE, 3952214016, 3952218111, +STORE, 3952222208, 3952250879, +STORE, 3952250880, 3952369663, +STORE, 3952369664, 3952488447, +STORE, 3952488448, 3952627711, +STORE, 3952627712, 3952635903, +STORE, 3952635904, 3952639999, +STORE, 3952652288, 3952668671, +STORE, 3952668672, 3953000447, +STORE, 3953000448, 3953004543, +STORE, 3953004544, 3953008639, +STORE, 3953008640, 3953012735, +STORE, 3953012736, 3953037311, +STORE, 3953037312, 3953151999, +STORE, 3953152000, 3953291263, +STORE, 3953291264, 3953324031, +STORE, 3953324032, 3953364991, +STORE, 3953364992, 3953373183, +STORE, 3953373184, 3953377279, +STORE, 3953381376, 3953410047, +STORE, 3953410048, 3953491967, +STORE, 3953491968, 3953643519, +STORE, 3953643520, 3953651711, +STORE, 3953651712, 3953655807, +STORE, 3953659904, 3953766399, +STORE, 3953766400, 3953774591, +STORE, 3953774592, 3953786879, +STORE, 3953786880, 3953790975, +STORE, 3953790976, 3953823743, +STORE, 3953823744, 3953963007, +STORE, 3953963008, 3954024447, +STORE, 3954024448, 3954118655, +STORE, 3954118656, 3954122751, +STORE, 3954122752, 3954126847, +STORE, 3954130944, 3954184191, +STORE, 3954184192, 3954294783, +STORE, 3954294784, 3954323455, +STORE, 3954323456, 3954393087, +STORE, 3954393088, 3954397183, +STORE, 3954397184, 3954401279, +STORE, 3954401280, 3954405375, +STORE, 3954409472, 3954528255, +STORE, 3954528256, 3954737151, +STORE, 3954737152, 3955052543, +STORE, 3955052544, 3955060735, +STORE, 3955060736, 3955064831, +STORE, 3955068928, 3955105791, +STORE, 3955105792, 3955167231, +STORE, 3955167232, 3955277823, +STORE, 3955277824, 3955310591, +STORE, 3955310592, 3955351551, +STORE, 3955351552, 3955359743, +STORE, 3955359744, 3955363839, +STORE, 3955363840, 3955392511, +STORE, 3955392512, 3955453951, +STORE, 3955453952, 3955601407, +STORE, 3955601408, 3955777535, +STORE, 3955777536, 3955982335, +STORE, 3955982336, 3956011007, +STORE, 3956011008, 3956015103, +STORE, 3956023296, 3956039679, +STORE, 3956039680, 3956125695, +STORE, 3956125696, 3956129791, +STORE, 3956129792, 3956133887, +STORE, 3956133888, 3956137983, +STORE, 3956142080, 3956449279, +STORE, 3956449280, 3956543487, +STORE, 3956543488, 3956719615, +STORE, 3956719616, 3956731903, +STORE, 3956731904, 3956735999, +STORE, 3956744192, 3956793343, +STORE, 3956793344, 3956887551, +STORE, 3956887552, 3956953087, +STORE, 3956953088, 3957035007, +STORE, 3957035008, 3957039103, +STORE, 3957039104, 3957047295, +STORE, 3957047296, 3957071871, +STORE, 3957071872, 3957231615, +STORE, 3957231616, 3957563391, +STORE, 3957563392, 3957579775, +STORE, 3957579776, 3957583871, +STORE, 3957592064, 3957608447, +STORE, 3957608448, 3957878783, +STORE, 3957878784, 3958591487, +STORE, 3958591488, 3958599679, +STORE, 3958599680, 3958607871, +STORE, 3958607872, 3958620159, +STORE, 3958620160, 3958624255, +STORE, 3958624256, 3963199487, +STORE, 3963199488, 3963285503, +STORE, 3963285504, 3963371519, +STORE, 3963371520, 3963428863, +STORE, 3963428864, 3963555839, +STORE, 3963555840, 3963559935, +STORE, 3963559936, 3963564031, +STORE, 3963568128, 3963596799, +STORE, 3963596800, 3963682815, +STORE, 3963682816, 3963695103, +STORE, 3963695104, 3963711487, +STORE, 3963711488, 3963715583, +STORE, 3963719680, 3963752447, +STORE, 3963752448, 3963846655, +STORE, 3963846656, 3963932671, +STORE, 3963932672, 3964444671, +STORE, 3964444672, 3964448767, +STORE, 3964448768, 3965808639, +STORE, 3965808640, 3965845503, +STORE, 3965845504, 3965849599, +STORE, 3965853696, 3965935615, +STORE, 3965935616, 3966017535, +STORE, 3966017536, 3966103551, +STORE, 3966103552, 3966685183, +STORE, 3966685184, 3967705087, +STORE, 3967705088, 3967758335, +STORE, 3967758336, 3967762431, +STORE, 3967762432, 3967770623, +STORE, 3967770624, 3967799295, +STORE, 3967799296, 3967848447, +STORE, 3967848448, 3967868927, +STORE, 3967868928, 3967901695, +STORE, 3967901696, 3967905791, +STORE, 3967905792, 3967909887, +STORE, 3967909888, 3967995903, +STORE, 3967995904, 3968077823, +STORE, 3968077824, 3968159743, +STORE, 3968159744, 3968167935, +STORE, 3968167936, 3968172031, +STORE, 3968172032, 3968192511, +STORE, 3968192512, 3968196607, +STORE, 3968196608, 3968200703, +STORE, 3968208896, 3968516095, +STORE, 3968516096, 3968528383, +STORE, 3968528384, 3968552959, +STORE, 3968552960, 3968557055, +STORE, 3968561152, 3968593919, +STORE, 3968593920, 3968626687, +STORE, 3968626688, 3971153919, +STORE, 3971153920, 3973754879, +STORE, 3973754880, 3973804031, +STORE, 3973804032, 3973820415, +STORE, 3973820416, 3973832703, +STORE, 3973840896, 3973873663, +STORE, 3973873664, 3973967871, +STORE, 3973967872, 3973976063, +STORE, 3973976064, 3973984255, +STORE, 3973984256, 3973988351, +STORE, 3973988352, 3973992447, +STORE, 3973996544, 3974008831, +STORE, 3974008832, 3974045695, +STORE, 3974045696, 3974139903, +STORE, 3974139904, 3974254591, +STORE, 3974254592, 3974275071, +STORE, 3974275072, 3974291455, +STORE, 3974291456, 3974295551, +STORE, 3974295552, 3974373375, +STORE, 3974373376, 3974524927, +STORE, 3974524928, 3974529023, +STORE, 3974529024, 3974537215, +STORE, 3974537216, 3974541311, +STORE, 3974541312, 3974545407, +STORE, 3974545408, 3974627327, +STORE, 3974627328, 3974680575, +STORE, 3974680576, 3974811647, +STORE, 3974811648, 3974819839, +STORE, 3974819840, 3974823935, +STORE, 3974832128, 3974918143, +STORE, 3974918144, 3974963199, +STORE, 3974963200, 3975077887, +STORE, 3975077888, 3975090175, +STORE, 3975090176, 3975094271, +STORE, 3975094272, 3975102463, +STORE, 3975102464, 3975114751, +STORE, 3975114752, 3975266303, +STORE, 3975266304, 3975274495, +STORE, 3975274496, 3975286783, +STORE, 3975286784, 3975290879, +STORE, 3975290880, 3975299071, +STORE, 3975299072, 3975315455, +STORE, 3975315456, 3975430143, +STORE, 3975430144, 3975536639, +STORE, 3975536640, 3975651327, +STORE, 3975651328, 3975655423, +STORE, 3975655424, 3975659519, +STORE, 3975659520, 3975770111, +STORE, 3975770112, 3975778303, +STORE, 3975778304, 3975790591, +STORE, 3975790592, 3975794687, +STORE, 3975794688, 3975798783, +STORE, 3975798784, 3975831551, +STORE, 3975831552, 3975872511, +STORE, 3975872512, 3975987199, +STORE, 3975987200, 3976134655, +STORE, 3976134656, 3977175039, +STORE, 3977175040, 3977183231, +STORE, 3977183232, 3977191423, +STORE, 3977191424, 3977195519, +STORE, 3977199616, 3977248767, +STORE, 3977248768, 3977539583, +STORE, 3977539584, 3977965567, +STORE, 3977965568, 3977981951, +STORE, 3977981952, 3977986047, +STORE, 3977986048, 3977994239, +STORE, 3977994240, 3978002431, +STORE, 3978002432, 3978084351, +STORE, 3978084352, 3978125311, +STORE, 3978125312, 3978174463, +STORE, 3978174464, 3978178559, +STORE, 3978178560, 3978182655, +STORE, 3978182656, 3978207231, +STORE, 3978207232, 3978297343, +STORE, 3978297344, 3978301439, +STORE, 3978301440, 3978305535, +STORE, 3978305536, 3978309631, +STORE, 3978309632, 3978317823, +STORE, 3978317824, 3978625023, +STORE, 3978625024, 3978657791, +STORE, 3978657792, 3978727423, +STORE, 3978727424, 3978735615, +STORE, 3978735616, 3978739711, +STORE, 3978739712, 3978760191, +STORE, 3978760192, 3978842111, +STORE, 3978842112, 3978850303, +STORE, 3978850304, 3978858495, +STORE, 3978858496, 3978862591, +STORE, 3978862592, 3978895359, +STORE, 3978895360, 3979014143, +STORE, 3979014144, 3979132927, +STORE, 3979132928, 3979288575, +STORE, 3979288576, 3979481087, +STORE, 3979481088, 3979489279, +STORE, 3979489280, 3979493375, +STORE, 3979497472, 3979583487, +STORE, 3979583488, 3979673599, +STORE, 3979673600, 3979718655, +STORE, 3979718656, 3979829247, +STORE, 3979829248, 3979841535, +STORE, 3979841536, 3979882495, +STORE, 3979882496, 3979964415, +STORE, 3979964416, 3980013567, +STORE, 3980013568, 3980148735, +STORE, 3980148736, 3980152831, +STORE, 3980152832, 3980320767, +STORE, 3980320768, 3980337151, +STORE, 3980337152, 3980341247, +STORE, 3980345344, 3980365823, +STORE, 3980365824, 3980423167, +STORE, 3980423168, 3980460031, +STORE, 3980460032, 3980500991, +STORE, 3980500992, 3980509183, +STORE, 3980509184, 3980513279, +STORE, 3980513280, 3980546047, +STORE, 3980546048, 3980660735, +STORE, 3980660736, 3980951551, +STORE, 3980951552, 3981500415, +STORE, 3981500416, 3981529087, +STORE, 3981529088, 3981533183, +STORE, 3981537280, 3981549567, +STORE, 3981549568, 3981598719, +STORE, 3981598720, 3981717503, +STORE, 3981717504, 3982127103, +STORE, 3982127104, 3982675967, +STORE, 3982675968, 3982733311, +STORE, 3982733312, 3982737407, +STORE, 3982741504, 3982860287, +STORE, 3982860288, 3982905343, +STORE, 3982905344, 3982966783, +STORE, 3982966784, 3982974975, +STORE, 3982974976, 3982979071, +STORE, 3982979072, 3983032319, +STORE, 3983032320, 3983085567, +STORE, 3983085568, 3983208447, +STORE, 3983208448, 3983212543, +STORE, 3983212544, 3983220735, +STORE, 3983220736, 3983224831, +STORE, 3983224832, 3983237119, +STORE, 3983237120, 3983351807, +STORE, 3983351808, 3983376383, +STORE, 3983376384, 3983392767, +STORE, 3983392768, 3983396863, +STORE, 3983396864, 3983400959, +STORE, 3983400960, 3983417343, +STORE, 3983417344, 3983753215, +STORE, 3983753216, 3983757311, +STORE, 3983757312, 3983761407, +STORE, 3983761408, 3983765503, +STORE, 3983765504, 3983769599, +STORE, 3983769600, 3983880191, +STORE, 3983880192, 3983892479, +STORE, 3983892480, 3983900671, +STORE, 3983900672, 3983904767, +STORE, 3983904768, 3983908863, +STORE, 3983908864, 3983941631, +STORE, 3983941632, 3983990783, +STORE, 3983990784, 3984097279, +STORE, 3984097280, 3984105471, +STORE, 3984105472, 3984117759, +STORE, 3984117760, 3984121855, +STORE, 3984121856, 3984125951, +STORE, 3984125952, 3984134143, +STORE, 3984134144, 3984150527, +STORE, 3984150528, 3984416767, +STORE, 3984416768, 3984470015, +STORE, 3984470016, 3984564223, +STORE, 3984564224, 3984568319, +STORE, 3984572416, 3984629759, +STORE, 3984629760, 3984805887, +STORE, 3984805888, 3985096703, +STORE, 3985096704, 3985104895, +STORE, 3985104896, 3985108991, +STORE, 3985113088, 3986862079, +STORE, 3986862080, 3993640959, +STORE, 3993640960, 3993739263, +STORE, 3993739264, 3993743359, +STORE, 3993743360, 3993759743, +STORE, 3993759744, 3993780223, +STORE, 3993780224, 3993784319, +STORE, 3993784320, 3993792511, +STORE, 3993792512, 3993796607, +STORE, 3993796608, 3993800703, +STORE, 3993804800, 3994214399, +STORE, 3994214400, 3994218495, +STORE, 3994218496, 3994222591, +STORE, 3994222592, 3994226687, +STORE, 3994230784, 3994243071, +STORE, 3994243072, 3994255359, +STORE, 3994255360, 3994304511, +STORE, 3994304512, 3994386431, +STORE, 3994386432, 3994509311, +STORE, 3994509312, 3994521599, +STORE, 3994521600, 3994525695, +STORE, 3994529792, 3994542079, +STORE, 3994542080, 3994660863, +STORE, 3994660864, 3994705919, +STORE, 3994705920, 3994796031, +STORE, 3994796032, 3994800127, +STORE, 3994800128, 3994804223, +STORE, 3994804224, 3994812415, +STORE, 3994812416, 3994845183, +STORE, 3994845184, 3994898431, +STORE, 3994898432, 3994902527, +STORE, 3994902528, 3994906623, +STORE, 3994910720, 3994931199, +STORE, 3994931200, 3995181055, +STORE, 3995181056, 3995222015, +STORE, 3995222016, 3995275263, +STORE, 3995275264, 3995279359, +STORE, 3995279360, 3995283455, +STORE, 3995283456, 3995291647, +STORE, 3995291648, 3995324415, +STORE, 3995324416, 3995451391, +STORE, 3995451392, 3995697151, +STORE, 3995697152, 3996078079, +STORE, 3996078080, 3996086271, +STORE, 3996086272, 3996090367, +STORE, 3996094464, 3996119039, +STORE, 3996119040, 3996200959, +STORE, 3996200960, 3996229631, +STORE, 3996229632, 3996233727, +STORE, 3996233728, 3996282879, +STORE, 3996282880, 3996291071, +STORE, 3996291072, 3996295167, +STORE, 3996299264, 3996311551, +STORE, 3996311552, 3996430335, +STORE, 3996430336, 3996467199, +STORE, 3996467200, 3996504063, +STORE, 3996504064, 3996512255, +STORE, 3996512256, 3996516351, +STORE, 3996516352, 3996540927, +STORE, 3996540928, 3996671999, +STORE, 3996672000, 3996676095, +STORE, 3996676096, 3996684287, +STORE, 3996684288, 3996688383, +STORE, 3996688384, 3996692479, +STORE, 3996692480, 3996717055, +STORE, 3996717056, 3997048831, +STORE, 3997048832, 3997057023, +STORE, 3997057024, 3997073407, +STORE, 3997073408, 3997077503, +STORE, 3997077504, 3997081599, +STORE, 3997081600, 3997097983, +STORE, 3997097984, 3997179903, +STORE, 3997179904, 3997356031, +STORE, 3997356032, 3997650943, +STORE, 3997650944, 3997675519, +STORE, 3997675520, 3997679615, +STORE, 3997683712, 3997700095, +STORE, 3997700096, 3997745151, +STORE, 3997745152, 3997802495, +STORE, 3997802496, 3997810687, +STORE, 3997810688, 3997814783, +STORE, 3997814784, 3998064639, +STORE, 3998064640, 3998081023, +STORE, 3998081024, 3998085119, +STORE, 3998085120, 3998130175, +STORE, 3998130176, 3998134271, +STORE, 3998134272, 3998142463, +STORE, 3998142464, 3998179327, +STORE, 3998179328, 3998212095, +STORE, 3998212096, 3998326783, +STORE, 3998326784, 3998351359, +STORE, 3998351360, 3998392319, +STORE, 3998392320, 3998396415, +STORE, 3998396416, 3998400511, +STORE, 3998400512, 3998433279, +STORE, 3998433280, 3998466047, +STORE, 3998466048, 3998613503, +STORE, 3998613504, 3998666751, +STORE, 3998666752, 3998724095, +STORE, 3998724096, 3998732287, +STORE, 3998732288, 3998736383, +STORE, 3998736384, 3998760959, +STORE, 3998760960, 3998777343, +STORE, 3998777344, 3998822399, +STORE, 3998822400, 3998826495, +STORE, 3998826496, 3998830591, +STORE, 3998830592, 3998863359, +STORE, 3998863360, 3998900223, +STORE, 3998900224, 3999043583, +STORE, 3999043584, 3999121407, +STORE, 3999121408, 3999215615, +STORE, 3999215616, 3999223807, +STORE, 3999223808, 3999227903, +STORE, 3999227904, 3999236095, +STORE, 3999236096, 3999268863, +STORE, 3999268864, 3999301631, +STORE, 3999301632, 3999354879, +STORE, 3999354880, 3999428607, +STORE, 3999428608, 3999436799, +STORE, 3999436800, 3999440895, +STORE, 3999444992, 3999461375, +STORE, 3999461376, 3999584255, +STORE, 3999584256, 3999760383, +STORE, 3999760384, 4000219135, +STORE, 4000219136, 4000235519, +STORE, 4000235520, 4000251903, +STORE, 4000251904, 4000501759, +STORE, 4000501760, 4000505855, +STORE, 4000505856, 4000509951, +STORE, 4000509952, 4000518143, +STORE, 4000518144, 4000522239, +STORE, 4000522240, 4000587775, +STORE, 4000587776, 4000645119, +STORE, 4000645120, 4000813055, +STORE, 4000813056, 4000817151, +STORE, 4000821248, 4000837631, +STORE, 4000837632, 4000870399, +STORE, 4000870400, 4000874495, +STORE, 4000874496, 4000878591, +STORE, 4000878592, 4000882687, +STORE, 4000882688, 4000886783, +STORE, 4000886784, 4000890879, +STORE, 4000890880, 4000907263, +STORE, 4000907264, 4001214463, +STORE, 4001214464, 4001558527, +STORE, 4001558528, 4002484223, +STORE, 4002484224, 4002525183, +STORE, 4002525184, 4002529279, +STORE, 4002529280, 4002533375, +STORE, 4002533376, 4002537471, +STORE, 4002537472, 4002660351, +STORE, 4002660352, 4002779135, +STORE, 4002779136, 4002791423, +STORE, 4002791424, 4002799615, +STORE, 4002799616, 4002807807, +STORE, 4002807808, 4002811903, +STORE, 4002811904, 4002828287, +STORE, 4002828288, 4002910207, +STORE, 4002910208, 4003028991, +STORE, 4003028992, 4003037183, +STORE, 4003037184, 4003045375, +STORE, 4003045376, 4003049471, +STORE, 4003049472, 4003053567, +STORE, 4003053568, 4003057663, +STORE, 4003057664, 4003065855, +STORE, 4003065856, 4003135487, +STORE, 4003135488, 4003446783, +STORE, 4003446784, 4003450879, +STORE, 4003450880, 4003454975, +STORE, 4003454976, 4003459071, +STORE, 4003459072, 4003463167, +STORE, 4003463168, 4003495935, +STORE, 4003495936, 4003569663, +STORE, 4003569664, 4003573759, +STORE, 4003573760, 4003704831, +STORE, 4003704832, 4003708927, +STORE, 4003708928, 4003713023, +STORE, 4003713024, 4003737599, +STORE, 4003737600, 4003770367, +STORE, 4003770368, 4003876863, +STORE, 4003876864, 4003880959, +STORE, 4003880960, 4003885055, +STORE, 4003885056, 4003889151, +STORE, 4003889152, 4003893247, +STORE, 4003893248, 4003897343, +STORE, 4003897344, 4003962879, +STORE, 4003962880, 4004069375, +STORE, 4004069376, 4004093951, +STORE, 4004093952, 4004118527, +STORE, 4004118528, 4004122623, +STORE, 4004122624, 4004126719, +STORE, 4004126720, 4004155391, +STORE, 4004155392, 4004286463, +STORE, 4004286464, 4004384767, +STORE, 4004384768, 4004388863, +STORE, 4004388864, 4004646911, +STORE, 4004646912, 4004655103, +STORE, 4004655104, 4004659199, +STORE, 4004659200, 4004667391, +STORE, 4004667392, 4004683775, +STORE, 4004683776, 4004814847, +STORE, 4004814848, 4004818943, +STORE, 4004818944, 4004823039, +STORE, 4004823040, 4004827135, +STORE, 4004827136, 4004835327, +STORE, 4004835328, 4004954111, +STORE, 4004954112, 4005085183, +STORE, 4005085184, 4005306367, +STORE, 4005306368, 4005765119, +STORE, 4005765120, 4005789695, +STORE, 4005789696, 4005793791, +STORE, 4005793792, 4005801983, +STORE, 4005801984, 4005920767, +STORE, 4005920768, 4005945343, +STORE, 4005945344, 4005949439, +STORE, 4005949440, 4005986303, +STORE, 4005986304, 4005990399, +STORE, 4005990400, 4005994495, +STORE, 4005994496, 4006002687, +STORE, 4006002688, 4006109183, +STORE, 4006109184, 4006117375, +STORE, 4006117376, 4006121471, +STORE, 4006121472, 4006133759, +STORE, 4006133760, 4006137855, +STORE, 4006137856, 4006141951, +STORE, 4006141952, 4006150143, +STORE, 4006150144, 4006391807, +STORE, 4006391808, 4006445055, +STORE, 4006445056, 4006563839, +STORE, 4006563840, 4006572031, +STORE, 4006572032, 4006576127, +STORE, 4006576128, 4006584319, +STORE, 4006584320, 4006694911, +STORE, 4006694912, 4006739967, +STORE, 4006739968, 4006776831, +STORE, 4006776832, 4006785023, +STORE, 4006785024, 4006789119, +STORE, 4006789120, 4006797311, +STORE, 4006797312, 4006813695, +STORE, 4006813696, 4006846463, +STORE, 4006846464, 4006977535, +STORE, 4006977536, 4007006207, +STORE, 4007006208, 4007010303, +STORE, 4007010304, 4007067647, +STORE, 4007067648, 4007075839, +STORE, 4007075840, 4007084031, +STORE, 4007084032, 4007100415, +STORE, 4007100416, 4007116799, +STORE, 4007116800, 4007133183, +STORE, 4007133184, 4007153663, +STORE, 4007153664, 4007178239, +STORE, 4007178240, 4007202815, +STORE, 4007202816, 4007206911, +STORE, 4007206912, 4007272447, +STORE, 4007272448, 4007276543, +STORE, 4007276544, 4007280639, +STORE, 4007280640, 4007284735, +STORE, 4007284736, 4007292927, +STORE, 4007292928, 4007423999, +STORE, 4007424000, 4007448575, +STORE, 4007448576, 4007452671, +STORE, 4007452672, 4007505919, +STORE, 4007505920, 4007510015, +STORE, 4007510016, 4007514111, +STORE, 4007514112, 4007645183, +STORE, 4007645184, 4007776255, +STORE, 4007776256, 4007780351, +STORE, 4007780352, 4007784447, +STORE, 4007784448, 4007788543, +STORE, 4007788544, 4007809023, +STORE, 4007809024, 4007829503, +STORE, 4007829504, 4007960575, +STORE, 4007960576, 4008091647, +STORE, 4008091648, 4008296447, +STORE, 4008296448, 4008890367, +STORE, 4008890368, 4008898559, +STORE, 4008898560, 4008902655, +STORE, 4008902656, 4008996863, +STORE, 4008996864, 4009041919, +STORE, 4009041920, 4009082879, +STORE, 4009082880, 4009091071, +STORE, 4009091072, 4009107455, +STORE, 4009107456, 4009349119, +STORE, 4009349120, 4009373695, +STORE, 4009373696, 4009414655, +STORE, 4009414656, 4009422847, +STORE, 4009422848, 4009426943, +STORE, 4009426944, 4009447423, +STORE, 4009447424, 4009471999, +STORE, 4009472000, 4009512959, +STORE, 4009512960, 4009594879, +STORE, 4009594880, 4009598975, +STORE, 4009598976, 4009697279, +STORE, 4009697280, 4009713663, +STORE, 4009713664, 4009717759, +STORE, 4009717760, 4009721855, +STORE, 4009721856, 4009730047, +STORE, 4009730048, 4009861119, +STORE, 4009861120, 4009951231, +STORE, 4009951232, 4010131455, +STORE, 4010131456, 4010135551, +STORE, 4010135552, 4010139647, +STORE, 4010139648, 4010143743, +STORE, 4010143744, 4010164223, +STORE, 4010164224, 4010295295, +STORE, 4010295296, 4010299391, +STORE, 4010299392, 4010491903, +STORE, 4010491904, 4010495999, +STORE, 4010496000, 4010668031, +STORE, 4010668032, 4011028479, +STORE, 4011028480, 4011053055, +STORE, 4011053056, 4011057151, +STORE, 4011057152, 4011118591, +STORE, 4011118592, 4011126783, +STORE, 4011126784, 4011130879, +STORE, 4011130880, 4011143167, +STORE, 4011143168, 4011147263, +STORE, 4011147264, 4011167743, +STORE, 4011167744, 4011171839, +STORE, 4011171840, 4011360255, +STORE, 4011360256, 4011364351, +STORE, 4011364352, 4011626495, +STORE, 4011626496, 4012216319, +STORE, 4012216320, 4012228607, +STORE, 4012228608, 4012232703, +STORE, 4012232704, 4012236799, +STORE, 4012236800, 4012240895, +STORE, 4012240896, 4012261375, +STORE, 4012261376, 4012392447, +STORE, 4012392448, 4012466175, +STORE, 4012466176, 4012597247, +STORE, 4012597248, 4012601343, +STORE, 4012601344, 4012605439, +STORE, 4012605440, 4012609535, +STORE, 4012609536, 4012679167, +STORE, 4012679168, 4013563903, +STORE, 4013563904, 4015366143, +STORE, 4015366144, 4015411199, +STORE, 4015411200, 4015415295, +STORE, 4015415296, 4015419391, +STORE, 4015419392, 4015542271, +STORE, 4015542272, 4015550463, +STORE, 4015550464, 4015558655, +STORE, 4015558656, 4015562751, +STORE, 4015562752, 4015583231, +STORE, 4015583232, 4015587327, +STORE, 4015587328, 4015603711, +STORE, 4015665152, 4015669247, +STORE, 4015669248, 4015812607, +STORE, 4015812608, 4015816703, +STORE, 4015816704, 4016111615, +STORE, 4016111616, 4016467967, +STORE, 4016467968, 4016508927, +STORE, 4016508928, 4016517119, +STORE, 4016517120, 4016525311, +STORE, 4016525312, 4016586751, +STORE, 4016586752, 4016664575, +STORE, 4016664576, 4016697343, +STORE, 4016697344, 4016742399, +STORE, 4016742400, 4016746495, +STORE, 4016746496, 4016750591, +STORE, 4016750592, 4016758783, +STORE, 4016799744, 4016844799, +STORE, 4016844800, 4016902143, +STORE, 4016902144, 4016992255, +STORE, 4016992256, 4017000447, +STORE, 4017000448, 4017004543, +STORE, 4017004544, 4017008639, +STORE, 4017008640, 4017016831, +STORE, 4017016832, 4017020927, +STORE, 4017020928, 4017127423, +STORE, 4017127424, 4017131519, +STORE, 4017131520, 4017229823, +STORE, 4017229824, 4017422335, +STORE, 4017422336, 4017438719, +STORE, 4017438720, 4017442815, +STORE, 4017442816, 4017446911, +STORE, 4017446912, 4017455103, +STORE, 4017455104, 4017766399, +STORE, 4017766400, 4017909759, +STORE, 4017909760, 4018081791, +STORE, 4018081792, 4018089983, +STORE, 4018089984, 4018094079, +STORE, 4018094080, 4018098175, +STORE, 4018098176, 4018327551, +STORE, 4018327552, 4018331647, +STORE, 4018331648, 4018339839, +STORE, 4018339840, 4018348031, +STORE, 4018348032, 4018610175, +STORE, 4018610176, 4018626559, +STORE, 4018626560, 4018647039, +STORE, 4018647040, 4018651135, +STORE, 4018651136, 4018749439, +STORE, 4018749440, 4018761727, +STORE, 4018761728, 4018802687, +STORE, 4018802688, 4018806783, +STORE, 4018806784, 4018810879, +STORE, 4018810880, 4018814975, +STORE, 4018814976, 4018823167, +STORE, 4018823168, 4018954239, +STORE, 4018954240, 4019007487, +STORE, 4019007488, 4019068927, +STORE, 4019068928, 4019077119, +STORE, 4019077120, 4019081215, +STORE, 4019081216, 4019093503, +STORE, 4019093504, 4019208191, +STORE, 4019208192, 4019232767, +STORE, 4019232768, 4019265535, +STORE, 4019265536, 4019269631, +STORE, 4019269632, 4019277823, +STORE, 4019277824, 4019458047, +STORE, 4019458048, 4019519487, +STORE, 4019519488, 4019613695, +STORE, 4019613696, 4019621887, +STORE, 4019621888, 4019625983, +STORE, 4019625984, 4019630079, +STORE, 4019630080, 4019744767, +STORE, 4019744768, 4019822591, +STORE, 4019822592, 4019929087, +STORE, 4019929088, 4019941375, +STORE, 4019941376, 4019945471, +STORE, 4019945472, 4019961855, +STORE, 4019961856, 4019994623, +STORE, 4019994624, 4019998719, +STORE, 4019998720, 4020002815, +STORE, 4020002816, 4020006911, +STORE, 4020006912, 4020011007, +STORE, 4020011008, 4020256767, +STORE, 4020256768, 4020326399, +STORE, 4020326400, 4020457471, +STORE, 4020457472, 4020469759, +STORE, 4020469760, 4020473855, +STORE, 4020473856, 4020482047, +STORE, 4020482048, 4020711423, +STORE, 4020711424, 4020715519, +STORE, 4020715520, 4020719615, +STORE, 4020719616, 4020723711, +STORE, 4020723712, 4020805631, +STORE, 4020805632, 4021051391, +STORE, 4021051392, 4021460991, +STORE, 4021460992, 4021469183, +STORE, 4021469184, 4021473279, +STORE, 4021473280, 4021571583, +STORE, 4021571584, 4021633023, +STORE, 4021633024, 4021727231, +STORE, 4021727232, 4021735423, +STORE, 4021735424, 4021739519, +STORE, 4021739520, 4021747711, +STORE, 4021747712, 4021829631, +STORE, 4021829632, 4021866495, +STORE, 4021866496, 4021919743, +STORE, 4021919744, 4021927935, +STORE, 4021927936, 4021932031, +STORE, 4021932032, 4021944319, +STORE, 4021944320, 4022157311, +STORE, 4022157312, 4022161407, +STORE, 4022161408, 4022173695, +STORE, 4022173696, 4022177791, +STORE, 4022177792, 4022472703, +STORE, 4022472704, 4022509567, +STORE, 4022509568, 4022583295, +STORE, 4022583296, 4022587391, +STORE, 4022587392, 4022591487, +STORE, 4022591488, 4022607871, +STORE, 4022607872, 4022657023, +STORE, 4022657024, 4022722559, +STORE, 4022722560, 4022730751, +STORE, 4022730752, 4022734847, +STORE, 4022734848, 4022865919, +STORE, 4022865920, 4022943743, +STORE, 4022943744, 4023062527, +STORE, 4023062528, 4023074815, +STORE, 4023074816, 4023078911, +STORE, 4023078912, 4023128063, +STORE, 4023128064, 4023218175, +STORE, 4023218176, 4023361535, +STORE, 4023361536, 4023373823, +STORE, 4023373824, 4023377919, +STORE, 4023377920, 4023558143, +STORE, 4023558144, 4023631871, +STORE, 4023631872, 4023816191, +STORE, 4023816192, 4023820287, +STORE, 4023820288, 4023824383, +STORE, 4023824384, 4023832575, +STORE, 4023832576, 4024078335, +STORE, 4024078336, 4024197119, +STORE, 4024197120, 4024389631, +STORE, 4024389632, 4024406015, +STORE, 4024406016, 4024410111, +STORE, 4024410112, 4024422399, +STORE, 4024422400, 4024619007, +STORE, 4024619008, 4024639487, +STORE, 4024639488, 4024655871, +STORE, 4024655872, 4024664063, +STORE, 4024664064, 4024668159, +STORE, 4024668160, 4024676351, +STORE, 4024676352, 4024905727, +STORE, 4024905728, 4024909823, +STORE, 4024909824, 4024918015, +STORE, 4024918016, 4024922111, +STORE, 4024922112, 4024930303, +STORE, 4024930304, 4025110527, +STORE, 4025110528, 4025176063, +STORE, 4025176064, 4025208831, +STORE, 4025208832, 4025212927, +STORE, 4025212928, 4025217023, +STORE, 4025217024, 4025348095, +STORE, 4025348096, 4025372671, +STORE, 4025372672, 4025458687, +STORE, 4025458688, 4025466879, +STORE, 4025466880, 4025565183, +STORE, 4025565184, 4025757695, +STORE, 4025757696, 4026249215, +STORE, 4026249216, 4026261503, +STORE, 4026261504, 4026265599, +STORE, 4026265600, 4026269695, +STORE, 4026269696, 4026302463, +STORE, 4026302464, 4026306559, +STORE, 4026306560, 4026314751, +STORE, 4026314752, 4026318847, +STORE, 4026318848, 4026322943, +STORE, 4026322944, 4026327039, +STORE, 4026327040, 4026654719, +STORE, 4026654720, 4026671103, +STORE, 4026671104, 4026720255, +STORE, 4026720256, 4026724351, +STORE, 4026724352, 4026728447, +STORE, 4026728448, 4026732543, +STORE, 4026732544, 4026863615, +STORE, 4026863616, 4027027455, +STORE, 4027027456, 4027031551, +STORE, 4027031552, 4027514879, +STORE, 4027514880, 4027531263, +STORE, 4027531264, 4027535359, +STORE, 4027535360, 4027539455, +STORE, 4027539456, 4027785215, +STORE, 4027785216, 4027789311, +STORE, 4027789312, 4027793407, +STORE, 4027793408, 4027797503, +STORE, 4027797504, 4027863039, +STORE, 4027863040, 4027899903, +STORE, 4027899904, 4027949055, +STORE, 4027949056, 4027957247, +STORE, 4027957248, 4027961343, +STORE, 4027961344, 4027965439, +STORE, 4027965440, 4028194815, +STORE, 4028194816, 4028252159, +STORE, 4028252160, 4028338175, +STORE, 4028338176, 4028350463, +STORE, 4028350464, 4028354559, +STORE, 4028354560, 4028452863, +STORE, 4028452864, 4028489727, +STORE, 4028489728, 4028530687, +STORE, 4028530688, 4028538879, +STORE, 4028538880, 4028542975, +STORE, 4028542976, 4028551167, +STORE, 4028551168, 4028665855, +STORE, 4028665856, 4029349887, +STORE, 4029349888, 4030468095, +STORE, 4030468096, 4030513151, +STORE, 4030513152, 4030517247, +STORE, 4030517248, 4030525439, +STORE, 4030525440, 4030529535, +STORE, 4030529536, 4030758911, +STORE, 4030758912, 4030828543, +STORE, 4030828544, 4030943231, +STORE, 4030943232, 4030951423, +STORE, 4030951424, 4030955519, +STORE, 4030955520, 4030967807, +STORE, 4030967808, 4031131647, +STORE, 4031131648, 4031135743, +STORE, 4031135744, 4031139839, +STORE, 4031139840, 4031148031, +STORE, 4031148032, 4031152127, +STORE, 4031152128, 4031160319, +STORE, 4031160320, 4031504383, +STORE, 4031504384, 4031598591, +STORE, 4031598592, 4031754239, +STORE, 4031754240, 4031766527, +STORE, 4031766528, 4031770623, +STORE, 4031770624, 4031774719, +STORE, 4031774720, 4031782911, +STORE, 4031782912, 4031799295, +STORE, 4031799296, 4031856639, +STORE, 4031856640, 4031983615, +STORE, 4031983616, 4031987711, +STORE, 4031987712, 4031991807, +STORE, 4031991808, 4032270335, +STORE, 4032270336, 4032274431, +STORE, 4032274432, 4032282623, +STORE, 4032282624, 4032286719, +STORE, 4032286720, 4032290815, +STORE, 4032290816, 4032389119, +STORE, 4032389120, 4032397311, +STORE, 4032397312, 4032405503, +STORE, 4032405504, 4032413695, +STORE, 4032413696, 4032417791, +STORE, 4032417792, 4032565247, +STORE, 4032565248, 4032593919, +STORE, 4032593920, 4032737279, +STORE, 4032737280, 4032741375, +STORE, 4032741376, 4032745471, +STORE, 4032745472, 4032770047, +STORE, 4032770048, 4032933887, +STORE, 4032933888, 4032999423, +STORE, 4032999424, 4033032191, +STORE, 4033032192, 4033036287, +STORE, 4033036288, 4033040383, +STORE, 4033040384, 4033105919, +STORE, 4033105920, 4033396735, +STORE, 4033396736, 4033822719, +STORE, 4033822720, 4033839103, +STORE, 4033839104, 4033843199, +STORE, 4033843200, 4033851391, +STORE, 4033851392, 4033863679, +STORE, 4033863680, 4033880063, +STORE, 4033880064, 4033933311, +STORE, 4033933312, 4034023423, +STORE, 4034023424, 4034031615, +STORE, 4034031616, 4034035711, +STORE, 4034035712, 4034043903, +STORE, 4034043904, 4034142207, +STORE, 4034142208, 4034191359, +STORE, 4034191360, 4034260991, +STORE, 4034260992, 4034269183, +STORE, 4034269184, 4034273279, +STORE, 4034273280, 4034281471, +STORE, 4034281472, 4034412543, +STORE, 4034412544, 4034445311, +STORE, 4034445312, 4034490367, +STORE, 4034490368, 4034494463, +STORE, 4034494464, 4034498559, +STORE, 4034498560, 4034662399, +STORE, 4034662400, 4034666495, +STORE, 4034666496, 4034670591, +STORE, 4034670592, 4034674687, +STORE, 4034674688, 4034678783, +STORE, 4034678784, 4034682879, +STORE, 4034682880, 4034781183, +STORE, 4034781184, 4035043327, +STORE, 4035043328, 4035047423, +STORE, 4035047424, 4035055615, +STORE, 4035055616, 4035059711, +STORE, 4035059712, 4035063807, +STORE, 4035063808, 4035067903, +STORE, 4035067904, 4035100671, +STORE, 4035100672, 4035375103, +STORE, 4035375104, 4035383295, +STORE, 4035383296, 4035395583, +STORE, 4035395584, 4035399679, +STORE, 4035399680, 4035403775, +STORE, 4035403776, 4035407871, +STORE, 4035407872, 4035411967, +STORE, 4035411968, 4035477503, +STORE, 4035477504, 4035608575, +STORE, 4035608576, 4035641343, +STORE, 4035641344, 4035682303, +STORE, 4035682304, 4035686399, +STORE, 4035686400, 4035690495, +STORE, 4035690496, 4035694591, +STORE, 4035694592, 4035743743, +STORE, 4035743744, 4035784703, +STORE, 4035784704, 4035829759, +STORE, 4035829760, 4035837951, +STORE, 4035837952, 4035842047, +STORE, 4035842048, 4035846143, +STORE, 4035846144, 4035850239, +STORE, 4035850240, 4036001791, +STORE, 4036001792, 4036005887, +STORE, 4036005888, 4036214783, +STORE, 4036214784, 4036218879, +STORE, 4036218880, 4036603903, +STORE, 4036603904, 4036648959, +STORE, 4036648960, 4036653055, +STORE, 4036653056, 4036657151, +STORE, 4036657152, 4036665343, +STORE, 4036665344, 4036780031, +STORE, 4036780032, 4036829183, +STORE, 4036829184, 4036984831, +STORE, 4036984832, 4036993023, +STORE, 4036993024, 4036997119, +STORE, 4036997120, 4037001215, +STORE, 4037001216, 4037009407, +STORE, 4037009408, 4037025791, +STORE, 4037025792, 4037095423, +STORE, 4037095424, 4037181439, +STORE, 4037181440, 4037193727, +STORE, 4037193728, 4037197823, +STORE, 4037197824, 4037206015, +STORE, 4037206016, 4037320703, +STORE, 4037320704, 4037337087, +STORE, 4037337088, 4037349375, +STORE, 4037349376, 4037357567, +STORE, 4037357568, 4037361663, +STORE, 4037369856, 4037386239, +STORE, 4037386240, 4037672959, +STORE, 4037672960, 4037689343, +STORE, 4037689344, 4037730303, +STORE, 4037730304, 4037734399, +STORE, 4037734400, 4037738495, +STORE, 4037738496, 4037742591, +STORE, 4037742592, 4037758975, +STORE, 4037758976, 4037890047, +STORE, 4037890048, 4037931007, +STORE, 4037931008, 4037976063, +STORE, 4037976064, 4037984255, +STORE, 4037984256, 4037988351, +STORE, 4037988352, 4038053887, +STORE, 4038053888, 4038184959, +STORE, 4038184960, 4038189055, +STORE, 4038189056, 4038197247, +STORE, 4038197248, 4038201343, +STORE, 4038201344, 4038205439, +STORE, 4038205440, 4038209535, +STORE, 4038217728, 4038250495, +STORE, 4038250496, 4038512639, +STORE, 4038512640, 4038516735, +STORE, 4038516736, 4038520831, +STORE, 4038520832, 4038524927, +STORE, 4038524928, 4038529023, +STORE, 4038529024, 4038533119, +STORE, 4038541312, 4038623231, +STORE, 4038623232, 4038754303, +STORE, 4038754304, 4038885375, +STORE, 4038885376, 4038889471, +STORE, 4038897664, 4038963199, +STORE, 4038963200, 4038967295, +STORE, 4038967296, 4038983679, +STORE, 4038983680, 4039114751, +STORE, 4039114752, 4039245823, +STORE, 4039245824, 4039376895, +STORE, 4039376896, 4040687615, +STORE, 4040687616, 4040691711, +STORE, 4040691712, 4040806399, +STORE, 4040806400, 4040937471, +STORE, 4040937472, 4040941567, +STORE, 4040945664, 4040949759, +STORE, 4040949760, 4041080831, +STORE, 4041080832, 4041211903, +STORE, 4041211904, 4043046911, +STORE, 4043046912, 4043051007, +STORE, 4043051008, 4043055103, +STORE, 4043055104, 4043137023, +STORE, 4043137024, 4043141119, +STORE, 4043141120, 4043145215, +STORE, 4043145216, 4043153407, +STORE, 4043153408, 4043186175, +STORE, 4043186176, 4043317247, +STORE, 4043317248, 4043448319, +STORE, 4043448320, 4043579391, +STORE, 4043579392, 4043583487, +STORE, 4043583488, 4043599871, +STORE, 4043599872, 4043661311, +STORE, 4043661312, 4043792383, +STORE, 4043792384, 4043796479, +STORE, 4043796480, 4043800575, +STORE, 4043800576, 4043816959, +STORE, 4043816960, 4043821055, +STORE, 4043821056, 4043825151, +STORE, 4043825152, 4043829247, +STORE, 4043829248, 4043833343, +STORE, 4043833344, 4047241215, +STORE, 4047241216, 4047249407, +STORE, 4047249408, 4047253503, +STORE, 4047253504, 4047323135, +STORE, 4047323136, 4047327231, +STORE, 4047327232, 4047458303, +STORE, 4047458304, 4047589375, +STORE, 4047589376, 4047720447, +STORE, 4047720448, 4047773695, +STORE, 4047773696, 4047790079, +STORE, 4047790080, 4047921151, +STORE, 4047921152, 4048052223, +STORE, 4048052224, 4048183295, +STORE, 4048183296, 4049002495, +STORE, 4049002496, 4049133567, +STORE, 4049133568, 4049154047, +STORE, 4049154048, 4049158143, +STORE, 4049158144, 4049162239, +STORE, 4049162240, 4049166335, +STORE, 4049166336, 4049174527, +STORE, 4049174528, 4049182719, +STORE, 4049182720, 4049186815, +STORE, 4049186816, 4049190911, +STORE, 4049190912, 4049195007, +STORE, 4049195008, 4049203199, +STORE, 4049203200, 4049207295, +STORE, 4049207296, 4049211391, +STORE, 4049211392, 4049215487, +STORE, 4049215488, 4049219583, +STORE, 4049219584, 4049227775, +STORE, 4049227776, 4049231871, +STORE, 4049231872, 4049235967, +STORE, 4049235968, 4049244159, +STORE, 4049244160, 4049248255, +STORE, 4049248256, 4049252351, +STORE, 4049252352, 4049256447, +STORE, 4049256448, 4049268735, +STORE, 4049268736, 4049272831, +STORE, 4049272832, 4049313791, +STORE, 4049313792, 4049723391, +STORE, 4049723392, 4049727487, +STORE, 4049727488, 4049858559, +STORE, 4049858560, 4049989631, +STORE, 4049989632, 4049993727, +STORE, 4049993728, 4050026495, +STORE, 4050026496, 4050030591, +STORE, 4050030592, 4050161663, +STORE, 4050161664, 4050169855, +STORE, 4050169856, 4050223103, +STORE, 4050223104, 4050632703, +STORE, 4050632704, 4050636799, +STORE, 4050636800, 4050640895, +STORE, 4050640896, 4050644991, +STORE, 4050644992, 4050661375, +STORE, 4050661376, 4050665471, +STORE, 4050665472, 4050673663, +STORE, 4050673664, 4050677759, +STORE, 4050677760, 4050694143, +STORE, 4050694144, 4050702335, +STORE, 4050702336, 4050956287, +STORE, 4050956288, 4051963903, +STORE, 4051963904, 4051980287, +STORE, 4051980288, 4051988479, +STORE, 4051988480, 4052000767, +STORE, 4052000768, 4052004863, +STORE, 4052004864, 4052029439, +STORE, 4284014592, 4284018687, +STORE, 4284018688, 4292403199, +SNULL, 4041080832, 4041211903, +SNULL, 3795763200, 3795894271, +STORE, 3629522944, 3696631807, +SNULL, 3663077375, 3696631807, +STORE, 3629522944, 3663077375, +STORE, 3663077376, 3696631807, +SNULL, 3663077376, 3696631807, +STORE, 3663077376, 3696631807, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3626471424, 3627524095, +SNULL, 3626471424, 3626475519, +STORE, 3626475520, 3627524095, +STORE, 3626471424, 3626475519, +SNULL, 3627519999, 3627524095, +STORE, 3626475520, 3627519999, +STORE, 3627520000, 3627524095, +STORE, 3625418752, 3626475519, +SNULL, 3625418752, 3625422847, +STORE, 3625422848, 3626475519, +STORE, 3625418752, 3625422847, +SNULL, 3626467327, 3626475519, +STORE, 3625422848, 3626467327, +STORE, 3626467328, 3626475519, +STORE, 3624366080, 3625422847, +SNULL, 3624366080, 3624370175, +STORE, 3624370176, 3625422847, +STORE, 3624366080, 3624370175, +SNULL, 3625414655, 3625422847, +STORE, 3624370176, 3625414655, +STORE, 3625414656, 3625422847, +STORE, 4041191424, 4041211903, +SNULL, 4041195519, 4041211903, +STORE, 4041191424, 4041195519, +STORE, 4041195520, 4041211903, +STORE, 4041170944, 4041191423, +SNULL, 4041175039, 4041191423, +STORE, 4041170944, 4041175039, +STORE, 4041175040, 4041191423, +SNULL, 3625426943, 3626467327, +STORE, 3625422848, 3625426943, +STORE, 3625426944, 3626467327, +STORE, 4041162752, 4041170943, +SNULL, 3626479615, 3627519999, +STORE, 3626475520, 3626479615, +STORE, 3626479616, 3627519999, +STORE, 4041154560, 4041162751, +STORE, 4041154560, 4041170943, +STORE, 4041134080, 4041154559, +SNULL, 4041138175, 4041154559, +STORE, 4041134080, 4041138175, +STORE, 4041138176, 4041154559, +SNULL, 3624374271, 3625414655, +STORE, 3624370176, 3624374271, +STORE, 3624374272, 3625414655, +STORE, 4041125888, 4041134079, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +STORE, 3487174656, 3487584255, +STORE, 4041121792, 4041125887, +SNULL, 4041121792, 4041125887, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 3487174656, 3487584255, +STORE, 3222274048, 3223326719, +SNULL, 3222274048, 3222278143, +STORE, 3222278144, 3223326719, +STORE, 3222274048, 3222278143, +SNULL, 3223322623, 3223326719, +STORE, 3222278144, 3223322623, +STORE, 3223322624, 3223326719, +STORE, 3221221376, 3222278143, +SNULL, 3221221376, 3221225471, +STORE, 3221225472, 3222278143, +STORE, 3221221376, 3221225471, +SNULL, 3222269951, 3222278143, +STORE, 3221225472, 3222269951, +STORE, 3222269952, 3222278143, +STORE, 3220168704, 3221225471, +SNULL, 3220168704, 3220172799, +STORE, 3220172800, 3221225471, +STORE, 3220168704, 3220172799, +SNULL, 3221217279, 3221225471, +STORE, 3220172800, 3221217279, +STORE, 3221217280, 3221225471, +STORE, 4041117696, 4041125887, +STORE, 4041117696, 4041134079, +STORE, 3219083264, 3220172799, +SNULL, 3219083264, 3219087359, +STORE, 3219087360, 3220172799, +STORE, 3219083264, 3219087359, +SNULL, 3220164607, 3220172799, +STORE, 3219087360, 3220164607, +STORE, 3220164608, 3220172799, +STORE, 4041109504, 4041117695, +STORE, 4041109504, 4041134079, +STORE, 3217997824, 3219087359, +SNULL, 3217997824, 3218001919, +STORE, 3218001920, 3219087359, +STORE, 3217997824, 3218001919, +SNULL, 3219079167, 3219087359, +STORE, 3218001920, 3219079167, +STORE, 3219079168, 3219087359, +STORE, 4041101312, 4041109503, +STORE, 4041101312, 4041134079, +STORE, 3216912384, 3218001919, +SNULL, 3216912384, 3216916479, +STORE, 3216916480, 3218001919, +STORE, 3216912384, 3216916479, +SNULL, 3217993727, 3218001919, +STORE, 3216916480, 3217993727, +STORE, 3217993728, 3218001919, +STORE, 4041093120, 4041101311, +STORE, 4041093120, 4041134079, +STORE, 3215826944, 3216916479, +SNULL, 3215826944, 3215831039, +STORE, 3215831040, 3216916479, +STORE, 3215826944, 3215831039, +SNULL, 3216908287, 3216916479, +STORE, 3215831040, 3216908287, +STORE, 3216908288, 3216916479, +STORE, 4016779264, 4016799743, +SNULL, 4016783359, 4016799743, +STORE, 4016779264, 4016783359, +STORE, 4016783360, 4016799743, +STORE, 4016758784, 4016779263, +SNULL, 4016762879, 4016779263, +STORE, 4016758784, 4016762879, +STORE, 4016762880, 4016779263, +SNULL, 3222282239, 3223322623, +STORE, 3222278144, 3222282239, +STORE, 3222282240, 3223322623, +STORE, 4041084928, 4041093119, +STORE, 4041084928, 4041134079, +SNULL, 3221229567, 3222269951, +STORE, 3221225472, 3221229567, +STORE, 3221229568, 3222269951, +STORE, 4015644672, 4015665151, +STORE, 4038889472, 4038897663, +SNULL, 4015648767, 4015665151, +STORE, 4015644672, 4015648767, +STORE, 4015648768, 4015665151, +STORE, 4015624192, 4015644671, +SNULL, 4015628287, 4015644671, +STORE, 4015624192, 4015628287, +STORE, 4015628288, 4015644671, +SNULL, 3219091455, 3220164607, +STORE, 3219087360, 3219091455, +STORE, 3219091456, 3220164607, +STORE, 4015603712, 4015624191, +SNULL, 4015607807, 4015624191, +STORE, 4015603712, 4015607807, +STORE, 4015607808, 4015624191, +SNULL, 3218006015, 3219079167, +STORE, 3218001920, 3218006015, +STORE, 3218006016, 3219079167, +STORE, 3949674496, 3949694975, +SNULL, 3949678591, 3949694975, +STORE, 3949674496, 3949678591, +STORE, 3949678592, 3949694975, +SNULL, 3216920575, 3217993727, +STORE, 3216916480, 3216920575, +STORE, 3216920576, 3217993727, +STORE, 3948924928, 3948945407, +SNULL, 3948929023, 3948945407, +STORE, 3948924928, 3948929023, +STORE, 3948929024, 3948945407, +SNULL, 3215835135, 3216908287, +STORE, 3215831040, 3215835135, +STORE, 3215835136, 3216908287, +SNULL, 3220176895, 3221217279, +STORE, 3220172800, 3220176895, +STORE, 3220176896, 3221217279, +STORE, 3214786560, 3215826943, +STORE, 3213733888, 3214786559, +SNULL, 3213733888, 3213737983, +STORE, 3213737984, 3214786559, +STORE, 3213733888, 3213737983, +SNULL, 3214782463, 3214786559, +STORE, 3213737984, 3214782463, +STORE, 3214782464, 3214786559, +STORE, 4038533120, 4038541311, +STORE, 3948421120, 3948441599, +SNULL, 3948425215, 3948441599, +STORE, 3948421120, 3948425215, +STORE, 3948425216, 3948441599, +SNULL, 3213742079, 3214782463, +STORE, 3213737984, 3213742079, +STORE, 3213742080, 3214782463, +STORE, 4038209536, 4038217727, +STORE, 3212681216, 3213737983, +SNULL, 3212681216, 3212685311, +STORE, 3212685312, 3213737983, +STORE, 3212681216, 3212685311, +SNULL, 3213729791, 3213737983, +STORE, 3212685312, 3213729791, +STORE, 3213729792, 3213737983, +STORE, 3795763200, 3795894271, +STORE, 3946872832, 3946893311, +SNULL, 3946876927, 3946893311, +STORE, 3946872832, 3946876927, +STORE, 3946876928, 3946893311, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +STORE, 3487174656, 3487584255, +SNULL, 3212689407, 3213729791, +STORE, 3212685312, 3212689407, +STORE, 3212689408, 3213729791, +STORE, 4041080832, 4041084927, +STORE, 4040941568, 4040945663, +STORE, 4037361664, 4037369855, +STORE, 4000817152, 4000821247, +STORE, 3999440896, 3999444991, +STORE, 3212161024, 3212681215, +SNULL, 3212161024, 3212439551, +STORE, 3212439552, 3212681215, +STORE, 3212161024, 3212439551, +SNULL, 3212161024, 3212439551, +SNULL, 3212464127, 3212681215, +STORE, 3212439552, 3212464127, +STORE, 3212464128, 3212681215, +SNULL, 3212464128, 3212681215, +SNULL, 3212439552, 3212451839, +STORE, 3212451840, 3212464127, +STORE, 3212439552, 3212451839, +SNULL, 3212439552, 3212451839, +STORE, 3212439552, 3212451839, +SNULL, 3212451840, 3212455935, +STORE, 3212455936, 3212464127, +STORE, 3212451840, 3212455935, +SNULL, 3212451840, 3212455935, +STORE, 3212451840, 3212455935, +SNULL, 3212455936, 3212460031, +STORE, 3212460032, 3212464127, +STORE, 3212455936, 3212460031, +SNULL, 3212455936, 3212460031, +STORE, 3212455936, 3212460031, +SNULL, 3212460032, 3212464127, +STORE, 3212460032, 3212464127, +STORE, 3997679616, 3997683711, +SNULL, 4049235968, 4049240063, +STORE, 4049240064, 4049244159, +STORE, 4049235968, 4049240063, +SNULL, 4049240064, 4049244159, +STORE, 4049240064, 4049244159, +SNULL, 3997679616, 3997683711, +SNULL, 3999440896, 3999444991, +SNULL, 4000817152, 4000821247, +SNULL, 4040941568, 4040945663, +SNULL, 4041080832, 4041084927, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 3487174656, 3487584255, +SNULL, 3212451840, 3212455935, +STORE, 3212451840, 3212455935, +STORE, 4041080832, 4041084927, +STORE, 3623890944, 3624169471, +SNULL, 4041080832, 4041084927, +STORE, 4041080832, 4041084927, +SNULL, 4041080832, 4041084927, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +STORE, 4041080832, 4041084927, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +STORE, 3211386880, 3212439551, +SNULL, 3211386880, 3211390975, +STORE, 3211390976, 3212439551, +STORE, 3211386880, 3211390975, +SNULL, 3212435455, 3212439551, +STORE, 3211390976, 3212435455, +STORE, 3212435456, 3212439551, +STORE, 4040941568, 4040945663, +STORE, 3937169408, 3937189887, +STORE, 3623485440, 3623616511, +SNULL, 717225983, 1388314623, +STORE, 314572800, 717225983, +STORE, 717225984, 1388314623, +SNULL, 717225984, 1388314623, +STORE, 3937112064, 3937132543, +SNULL, 3937116159, 3937132543, +STORE, 3937112064, 3937116159, +STORE, 3937116160, 3937132543, +SNULL, 3211395071, 3212435455, +STORE, 3211390976, 3211395071, +STORE, 3211395072, 3212435455, +STORE, 4000817152, 4000821247, +STORE, 3974823936, 3974832127, +STORE, 3595284480, 3595431935, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +STORE, 3487174656, 3487584255, +STORE, 3999440896, 3999444991, +STORE, 3997679616, 3997683711, +STORE, 3996295168, 3996299263, +STORE, 3996090368, 3996094463, +STORE, 3210866688, 3211386879, +SNULL, 3210866688, 3211001855, +STORE, 3211001856, 3211386879, +STORE, 3210866688, 3211001855, +SNULL, 3210866688, 3211001855, +SNULL, 3211038719, 3211386879, +STORE, 3211001856, 3211038719, +STORE, 3211038720, 3211386879, +SNULL, 3211038720, 3211386879, +SNULL, 3211001856, 3211022335, +STORE, 3211022336, 3211038719, +STORE, 3211001856, 3211022335, +SNULL, 3211001856, 3211022335, +STORE, 3211001856, 3211022335, +SNULL, 3211022336, 3211030527, +STORE, 3211030528, 3211038719, +STORE, 3211022336, 3211030527, +SNULL, 3211022336, 3211030527, +STORE, 3211022336, 3211030527, +SNULL, 3211030528, 3211034623, +STORE, 3211034624, 3211038719, +STORE, 3211030528, 3211034623, +SNULL, 3211030528, 3211034623, +STORE, 3211030528, 3211034623, +SNULL, 3211034624, 3211038719, +STORE, 3211034624, 3211038719, +STORE, 3994906624, 3994910719, +SNULL, 4049240064, 4049244159, +STORE, 4049240064, 4049244159, +SNULL, 3994906624, 3994910719, +SNULL, 3996090368, 3996094463, +SNULL, 3996295168, 3996299263, +SNULL, 3997679616, 3997683711, +SNULL, 3999440896, 3999444991, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 3487174656, 3487584255, +SNULL, 3211022336, 3211030527, +STORE, 3211022336, 3211030527, +STORE, 3999440896, 3999444991, +STORE, 3210199040, 3211001855, +SNULL, 3999440896, 3999444991, +STORE, 3999440896, 3999444991, +SNULL, 3999440896, 3999444991, +STORE, 3594821632, 3594952703, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 4048183296, 4048592895, +STORE, 4048592896, 4049002495, +STORE, 4048183296, 4048592895, +STORE, 4048183296, 4049002495, +SNULL, 1914101759, 1969434623, +STORE, 1914097664, 1914101759, +STORE, 1914101760, 1969434623, +STORE, 3567108096, 3567239167, +STORE, 3973832704, 3973840895, +STORE, 3209113600, 3210199039, +SNULL, 3209113600, 3209117695, +STORE, 3209117696, 3210199039, +STORE, 3209113600, 3209117695, +SNULL, 3210194943, 3210199039, +STORE, 3209117696, 3210194943, +STORE, 3210194944, 3210199039, +STORE, 3935858688, 3935879167, +SNULL, 3935862783, 3935879167, +STORE, 3935858688, 3935862783, +STORE, 3935862784, 3935879167, +SNULL, 3209121791, 3210194943, +STORE, 3209117696, 3209121791, +STORE, 3209121792, 3210194943, +STORE, 3528749056, 3528880127, +STORE, 3968200704, 3968208895, +STORE, 3208028160, 3209117695, +SNULL, 3208028160, 3208032255, +STORE, 3208032256, 3209117695, +STORE, 3208028160, 3208032255, +SNULL, 3209109503, 3209117695, +STORE, 3208032256, 3209109503, +STORE, 3209109504, 3209117695, +STORE, 3888123904, 3888144383, +SNULL, 3888127999, 3888144383, +STORE, 3888123904, 3888127999, +STORE, 3888128000, 3888144383, +SNULL, 3208036351, 3209109503, +STORE, 3208032256, 3208036351, +STORE, 3208036352, 3209109503, +SNULL, 3968200704, 3968208895, +SNULL, 3888123904, 3888144383, +SNULL, 3209109504, 3209113599, +STORE, 3209113600, 3209117695, +STORE, 3209109504, 3209113599, +SNULL, 3208028160, 3209113599, +STORE, 3208060928, 3209117695, +SNULL, 3208060928, 3208065023, +STORE, 3208065024, 3209117695, +STORE, 3208060928, 3208065023, +SNULL, 3209109503, 3209117695, +STORE, 3208065024, 3209109503, +STORE, 3209109504, 3209117695, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3888123904, 3888144383, +SNULL, 3888127999, 3888144383, +STORE, 3888123904, 3888127999, +STORE, 3888128000, 3888144383, +SNULL, 3208069119, 3209109503, +STORE, 3208065024, 3208069119, +STORE, 3208069120, 3209109503, +STORE, 3968200704, 3968208895, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3527778304, 3527909375, +STORE, 3999440896, 3999444991, +STORE, 3997679616, 3997683711, +STORE, 1914097664, 1914105855, +STORE, 1914105856, 1969434623, +STORE, 3957583872, 3957592063, +STORE, 3206975488, 3208065023, +SNULL, 3206975488, 3206979583, +STORE, 3206979584, 3208065023, +STORE, 3206975488, 3206979583, +SNULL, 3208056831, 3208065023, +STORE, 3206979584, 3208056831, +STORE, 3208056832, 3208065023, +STORE, 3956736000, 3956744191, +STORE, 3205890048, 3206979583, +SNULL, 3205890048, 3205894143, +STORE, 3205894144, 3206979583, +STORE, 3205890048, 3205894143, +SNULL, 3206971391, 3206979583, +STORE, 3205894144, 3206971391, +STORE, 3206971392, 3206979583, +STORE, 3806101504, 3806121983, +SNULL, 3806105599, 3806121983, +STORE, 3806101504, 3806105599, +STORE, 3806105600, 3806121983, +SNULL, 3206983679, 3208056831, +STORE, 3206979584, 3206983679, +STORE, 3206983680, 3208056831, +STORE, 3806081024, 3806101503, +SNULL, 3806085119, 3806101503, +STORE, 3806081024, 3806085119, +STORE, 3806085120, 3806101503, +SNULL, 3205898239, 3206971391, +STORE, 3205894144, 3205898239, +STORE, 3205898240, 3206971391, +STORE, 3956015104, 3956023295, +STORE, 3204804608, 3205894143, +SNULL, 3204804608, 3204808703, +STORE, 3204808704, 3205894143, +STORE, 3204804608, 3204808703, +SNULL, 3205885951, 3205894143, +STORE, 3204808704, 3205885951, +STORE, 3205885952, 3205894143, +STORE, 3803471872, 3803492351, +STORE, 3803451392, 3803471871, +STORE, 3803451392, 3803492351, +SNULL, 3957583872, 3957592063, +SNULL, 3806101504, 3806121983, +SNULL, 3206975487, 3206979583, +STORE, 3206971392, 3206975487, +STORE, 3206975488, 3206979583, +SNULL, 3208056832, 3208060927, +STORE, 3208060928, 3208065023, +STORE, 3208056832, 3208060927, +SNULL, 3206975488, 3208060927, +STORE, 3801845760, 3801878527, +STORE, 3806101504, 3806121983, +SNULL, 3806105599, 3806121983, +STORE, 3806101504, 3806105599, +STORE, 3806105600, 3806121983, +SNULL, 3204812799, 3205885951, +STORE, 3204808704, 3204812799, +STORE, 3204812800, 3205885951, +STORE, 1914097664, 1914109951, +STORE, 1914109952, 1969434623, +STORE, 3957583872, 3957592063, +STORE, 3206971392, 3208065023, +SNULL, 3206971392, 3206979583, +STORE, 3206979584, 3208065023, +STORE, 3206971392, 3206979583, +SNULL, 3208056831, 3208065023, +STORE, 3206979584, 3208056831, +STORE, 3208056832, 3208065023, +STORE, 3801825280, 3801845759, +SNULL, 3801829375, 3801845759, +STORE, 3801825280, 3801829375, +STORE, 3801829376, 3801845759, +SNULL, 3206983679, 3208056831, +STORE, 3206979584, 3206983679, +STORE, 3206983680, 3208056831, +STORE, 3202707456, 3204804607, +SNULL, 3202707456, 3204804607, +STORE, 3202707456, 3204804607, +STORE, 3200610304, 3202707455, +SNULL, 3202707456, 3204804607, +SNULL, 3200610304, 3202707455, +STORE, 3202707456, 3204804607, +SNULL, 3202707456, 3204804607, +STORE, 3202707456, 3204804607, +SNULL, 3202707456, 3204804607, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3527647232, 3527778303, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +STORE, 3487059968, 3487584255, +SNULL, 3487059968, 3487301631, +STORE, 3487301632, 3487584255, +STORE, 3487059968, 3487301631, +SNULL, 3487059968, 3487301631, +SNULL, 3487563775, 3487584255, +STORE, 3487301632, 3487563775, +STORE, 3487563776, 3487584255, +SNULL, 3487563776, 3487584255, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3524046848, 3524177919, +STORE, 3487170560, 3487301631, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3487039488, 3487170559, +STORE, 3487039488, 3487301631, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3204280320, 3204804607, +SNULL, 3204280320, 3204448255, +STORE, 3204448256, 3204804607, +STORE, 3204280320, 3204448255, +SNULL, 3204280320, 3204448255, +SNULL, 3204710399, 3204804607, +STORE, 3204448256, 3204710399, +STORE, 3204710400, 3204804607, +SNULL, 3204710400, 3204804607, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3996295168, 3996299263, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +SNULL, 3996295168, 3996299263, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3486908416, 3487039487, +STORE, 3486908416, 3487301631, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3223326720, 3290435583, +SNULL, 3223326720, 3256881151, +STORE, 3256881152, 3290435583, +STORE, 3223326720, 3256881151, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +STORE, 3201826816, 3202351103, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +STORE, 3202351104, 3204448255, +SNULL, 3202351104, 3204448255, +SNULL, 3803471871, 3803492351, +STORE, 3803451392, 3803471871, +STORE, 3803471872, 3803492351, +SNULL, 3803471872, 3803492351, +SNULL, 3803451392, 3803471871, +STORE, 3798999040, 3799101439, +SNULL, 3798999040, 3799101439, +STORE, 3952644096, 3952652287, +STORE, 3203362816, 3204448255, +SNULL, 3203362816, 3203366911, +STORE, 3203366912, 3204448255, +STORE, 3203362816, 3203366911, +SNULL, 3204444159, 3204448255, +STORE, 3203366912, 3204444159, +STORE, 3204444160, 3204448255, +STORE, 3803471872, 3803492351, +SNULL, 3803475967, 3803492351, +STORE, 3803471872, 3803475967, +STORE, 3803475968, 3803492351, +SNULL, 3203371007, 3204444159, +STORE, 3203366912, 3203371007, +STORE, 3203371008, 3204444159, +STORE, 3199729664, 3201826815, +SNULL, 3199729664, 3201826815, +STORE, 3199729664, 3201826815, +SNULL, 3199729664, 3201826815, +STORE, 3199729664, 3201826815, +SNULL, 3199729664, 3201826815, +STORE, 3199729664, 3201826815, +SNULL, 3199729664, 3201826815, +STORE, 3199729664, 3201826815, +SNULL, 3199729664, 3201826815, +STORE, 3200774144, 3201826815, +SNULL, 3200774144, 3200778239, +STORE, 3200778240, 3201826815, +STORE, 3200774144, 3200778239, +SNULL, 3201822719, 3201826815, +STORE, 3200778240, 3201822719, +STORE, 3201822720, 3201826815, +STORE, 3803451392, 3803471871, +SNULL, 3803455487, 3803471871, +STORE, 3803451392, 3803455487, +STORE, 3803455488, 3803471871, +SNULL, 3200782335, 3201822719, +STORE, 3200778240, 3200782335, +STORE, 3200782336, 3201822719, +STORE, 3949666304, 3949674495, +STORE, 3949408256, 3949416447, +STORE, 3199688704, 3200778239, +SNULL, 3199688704, 3199692799, +STORE, 3199692800, 3200778239, +STORE, 3199688704, 3199692799, +SNULL, 3200770047, 3200778239, +STORE, 3199692800, 3200770047, +STORE, 3200770048, 3200778239, +STORE, 3799306240, 3799326719, +SNULL, 3799310335, 3799326719, +STORE, 3799306240, 3799310335, +STORE, 3799310336, 3799326719, +SNULL, 3199696895, 3200770047, +STORE, 3199692800, 3199696895, +STORE, 3199696896, 3200770047, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +STORE, 3799277568, 3799306239, +SNULL, 3799277568, 3799306239, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +SNULL, 4041162751, 4041170943, +STORE, 4041154560, 4041162751, +STORE, 4041162752, 4041170943, +SNULL, 4041162752, 4041170943, +SNULL, 4041154560, 4041162751, +SNULL, 4041191424, 4041211903, +SNULL, 4041170944, 4041191423, +SNULL, 3626471423, 3626475519, +STORE, 3626467328, 3626471423, +STORE, 3626471424, 3626475519, +SNULL, 3626471424, 3627524095, +SNULL, 3625418751, 3625422847, +STORE, 3625414656, 3625418751, +STORE, 3625418752, 3625422847, +SNULL, 3625418752, 3626471423, +STORE, 3627393024, 3627524095, +STORE, 3627261952, 3627393023, +STORE, 3627261952, 3627524095, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +STORE, 3195494400, 3197591551, +SNULL, 3197591552, 3199688703, +SNULL, 3195494400, 3197591551, +STORE, 3197591552, 3199688703, +SNULL, 3197591552, 3199688703, +STORE, 3197591552, 3199688703, +STORE, 3195494400, 3197591551, +SNULL, 3197591552, 3199688703, +SNULL, 3195494400, 3197591551, +STORE, 3798999040, 3799101439, +SNULL, 3798999040, 3799101439, +/* + * mmap: unmapped_area_topdown: ffff9a9f14ddaa80 + * Gap was found: mt 4041162752 gap_end 4041183232 + * mmap: window was 4052029440 - 4096 size 28672 + * mmap: mas.min 4041154560 max 4041191423 mas.last 4041191423 + * mmap: mas.index 4041162752 align mask 0 offset 0 + * mmap: rb_find_vma find on 4041162752 => ffff9a9f03d19678 (ffff9a9f03d19678) + */ + }; + + unsigned long set43[] = { +STORE, 140737488347136, 140737488351231, +STORE, 140734187720704, 140737488351231, +SNULL, 140734187724800, 140737488351231, +STORE, 140734187589632, 140734187724799, +STORE, 4194304, 6443007, +STORE, 4337664, 6443007, +STORE, 4194304, 4337663, +SNULL, 4337664, 6443007, +STORE, 6430720, 6443007, +STORE, 206158430208, 206160674815, +STORE, 206158569472, 206160674815, +STORE, 206158430208, 206158569471, +SNULL, 206158569472, 206160674815, +STORE, 206160662528, 206160670719, +STORE, 206160670720, 206160674815, +STORE, 140734188756992, 140734188765183, +STORE, 140734188740608, 140734188756991, +STORE, 140501948112896, 140501948116991, + }; + + int count = 0; + void *ptr = NULL; + + MA_STATE(mas, mt, 0, 0); + + mt_set_non_kernel(3); + check_erase2_testset(mt, set, ARRAY_SIZE(set)); + mt_set_non_kernel(0); + mtree_destroy(mt); + + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set2, ARRAY_SIZE(set2)); + start = 140735933894656; + MT_BUG_ON(mt, !!mt_find(mt, &start, 140735933906943UL)); + mtree_destroy(mt); + + mt_set_non_kernel(2); + mt_init_flags(mt, 0); + check_erase2_testset(mt, set3, ARRAY_SIZE(set3)); + mt_set_non_kernel(0); + mtree_destroy(mt); + + mt_init_flags(mt, 0); + check_erase2_testset(mt, set4, ARRAY_SIZE(set4)); + rcu_read_lock(); + mas_for_each(&mas, entry, ULONG_MAX) { + if (xa_is_zero(entry)) + continue; + } + rcu_read_unlock(); + rcu_barrier(); + mtree_destroy(mt); + + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + mt_set_non_kernel(100); + check_erase2_testset(mt, set5, ARRAY_SIZE(set5)); + rcu_barrier(); + mt_set_non_kernel(0); + mtree_destroy(mt); + + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set6, ARRAY_SIZE(set6)); + rcu_barrier(); + mtree_destroy(mt); + + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set7, ARRAY_SIZE(set7)); + rcu_barrier(); + mtree_destroy(mt); + + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set8, ARRAY_SIZE(set8)); + rcu_barrier(); + mtree_destroy(mt); + + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set9, ARRAY_SIZE(set9)); + rcu_barrier(); + mtree_destroy(mt); + + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set10, ARRAY_SIZE(set10)); + rcu_barrier(); + mtree_destroy(mt); + + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set11, ARRAY_SIZE(set11)); + rcu_barrier(); + mas_empty_area_rev(&mas, 12288, 140014592737280, 0x2000); + MT_BUG_ON(mt, mas.last != 140014592573439); + mtree_destroy(mt); + + mas_reset(&mas); + mas.tree = mt; + count = 0; + mas.index = 0; + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set12, ARRAY_SIZE(set12)); + rcu_barrier(); + mas_for_each(&mas, entry, ULONG_MAX) { + if (xa_is_zero(entry)) + continue; + BUG_ON(count > 12); + count++; + } + mtree_destroy(mt); + + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set13, ARRAY_SIZE(set13)); + mtree_erase(mt, 140373516443648); + rcu_read_lock(); + mas_empty_area_rev(&mas, 0, 140373518663680, 4096); + rcu_read_unlock(); + mtree_destroy(mt); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set14, ARRAY_SIZE(set14)); + rcu_barrier(); + mtree_destroy(mt); + + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set15, ARRAY_SIZE(set15)); + rcu_barrier(); + mtree_destroy(mt); + + /* set16 was to find a bug on limit updating at slot 0. */ + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set16, ARRAY_SIZE(set16)); + rcu_barrier(); + mas_empty_area_rev(&mas, 4096, 139921865637888, 0x6000); + MT_BUG_ON(mt, mas.last != 139921865547775); + mt_set_non_kernel(0); + mtree_destroy(mt); + + /* + * set17 found a bug in walking backwards and not counting nulls at + * the end. This could cause a gap to be missed if the null had any + * size. + */ + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set17, ARRAY_SIZE(set17)); + rcu_barrier(); + mas_empty_area_rev(&mas, 4096, 139953197334528, 0x1000); + MT_BUG_ON(mt, mas.last != 139953197322239); +/* MT_BUG_ON(mt, mas.index != 139953197318144); */ + mt_set_non_kernel(0); + mtree_destroy(mt); + + /* + * set18 found a bug in walking backwards and not setting the max from + * the node, but using the parent node. This was only an issue if the + * next slot in the parent had what we needed. + */ + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set18, ARRAY_SIZE(set18)); + rcu_barrier(); + mas_empty_area_rev(&mas, 4096, 140222972858368, 2215936); + MT_BUG_ON(mt, mas.last != 140222968475647); + /*MT_BUG_ON(mt, mas.index != 140222966259712); */ + mt_set_non_kernel(0); + mtree_destroy(mt); + + /* + * set19 found 2 bugs in prev. + * 1. If we hit root without finding anything, then there was an + * infinite loop. + * 2. The first ascending wasn't using the correct slot which may have + * caused missed entries. + */ + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set19, ARRAY_SIZE(set19)); + rcu_barrier(); + mas.index = 140656779083776; + entry = mas_find(&mas, ULONG_MAX); + MT_BUG_ON(mt, entry != xa_mk_value(140656779083776)); + entry = mas_prev(&mas, 0); + MT_BUG_ON(mt, entry != xa_mk_value(140656766251008)); + mt_set_non_kernel(0); + mtree_destroy(mt); + + /* + * set20 found a bug in mas_may_move_gap due to the slot being + * overwritten during the __mas_add operation and setting it to zero. + */ + mt_set_non_kernel(99); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set20, ARRAY_SIZE(set20)); + rcu_barrier(); + check_load(mt, 94849009414144, NULL); + mt_set_non_kernel(0); + mtree_destroy(mt); + + mt_set_non_kernel(99); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set21, ARRAY_SIZE(set21)); + rcu_barrier(); + mt_validate(mt); + mt_set_non_kernel(0); + mtree_destroy(mt); + + mt_set_non_kernel(999); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set22, ARRAY_SIZE(set22)); + rcu_barrier(); + mt_validate(mt); + ptr = mtree_load(mt, 140551363362816); + MT_BUG_ON(mt, ptr == mtree_load(mt, 140551363420159)); + mt_set_non_kernel(0); + mtree_destroy(mt); + + mt_set_non_kernel(99); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set23, ARRAY_SIZE(set23)); + rcu_barrier(); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + + mt_set_non_kernel(99); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set24, ARRAY_SIZE(set24)); + rcu_barrier(); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + mt_set_non_kernel(99); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set25, ARRAY_SIZE(set25)); + rcu_barrier(); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + /* Split on NULL followed by delete - causes gap issues. */ + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set26, ARRAY_SIZE(set26)); + rcu_barrier(); + mas_empty_area_rev(&mas, 4096, 140109042671616, 409600); + MT_BUG_ON(mt, mas.last != 140109040959487); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + /* Split on NULL followed by delete - causes gap issues. */ + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set27, ARRAY_SIZE(set27)); + rcu_barrier(); + MT_BUG_ON(mt, 0 != mtree_load(mt, 140415537422336)); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set28, ARRAY_SIZE(set28)); + rcu_barrier(); + mas_empty_area_rev(&mas, 4096, 139918413357056, 2097152); + /* Search for the size of gap then align it (offset 0) */ + mas.index = (mas.last + 1 - 2097152 - 0) & (~2093056); + MT_BUG_ON(mt, mas.index != 139918401601536); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + /* This test found issues with retry moving rebalanced nodes so the + * incorrect parent pivot was updated. + */ + mt_set_non_kernel(999); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set29, ARRAY_SIZE(set29)); + rcu_barrier(); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + /* This test found issues with deleting all entries in a node when + * surrounded by entries in the next nodes, then deleting the entries + * surrounding the node filled with deleted entries. + */ + mt_set_non_kernel(999); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set30, ARRAY_SIZE(set30)); + rcu_barrier(); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + /* This test found an issue with deleting all entries in a node that was + * the end node and mas_gap incorrectly set next = curr, and curr = prev + * then moved next to the left, losing data. + */ + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set31, ARRAY_SIZE(set31)); + rcu_barrier(); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set32, ARRAY_SIZE(set32)); + rcu_barrier(); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + +/* + * mmap: empty_area_topdown: ffff88821c9cb600 Gap was found: + * mt 140582827569152 gap_end 140582869532672 + * mmap: window was 140583656296448 - 4096 size 134217728 + * mmap: mas.min 94133881868288 max 140582961786879 mas.last 140582961786879 + * mmap: mas.index 140582827569152 align mask 0 offset 0 + * mmap: rb_find_vma find on + * 140582827569152 => ffff88821c5bad00 (ffff88821c5bad00) + */ + + /* move gap failed due to an entirely empty node */ + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set33, ARRAY_SIZE(set33)); + rcu_barrier(); + mas_empty_area_rev(&mas, 4096, 140583656296448, 134217728); + MT_BUG_ON(mt, mas.last != 140583003750399); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + /* + * Incorrect gap in tree caused by mas_prev not setting the limits + * correctly while walking down. + */ + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set34, ARRAY_SIZE(set34)); + rcu_barrier(); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + /* Empty leaf at the end of a parent caused incorrect gap. */ + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set35, ARRAY_SIZE(set35)); + rcu_barrier(); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + mt_set_non_kernel(99); + /* Empty leaf at the end of a parent caused incorrect gap. */ + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set36, ARRAY_SIZE(set36)); + rcu_barrier(); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set37, ARRAY_SIZE(set37)); + rcu_barrier(); + MT_BUG_ON(mt, 0 != mtree_load(mt, 94637033459712)); + mt_validate(mt); + mtree_destroy(mt); + + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set38, ARRAY_SIZE(set38)); + rcu_barrier(); + MT_BUG_ON(mt, 0 != mtree_load(mt, 94637033459712)); + mt_validate(mt); + mtree_destroy(mt); + + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set39, ARRAY_SIZE(set39)); + rcu_barrier(); + mt_validate(mt); + mtree_destroy(mt); + + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set40, ARRAY_SIZE(set40)); + rcu_barrier(); + mt_validate(mt); + mtree_destroy(mt); + + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set41, ARRAY_SIZE(set41)); + rcu_barrier(); + mt_validate(mt); + mtree_destroy(mt); + + /* move gap failed due to an entirely empty node. */ + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set42, ARRAY_SIZE(set42)); + rcu_barrier(); + mas_empty_area_rev(&mas, 4096, 4052029440, 28672); + MT_BUG_ON(mt, mas.last != 4041211903); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); + + /* gap calc off by one */ + mt_set_non_kernel(99); + mas_reset(&mas); + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + check_erase2_testset(mt, set43, ARRAY_SIZE(set43)); + rcu_barrier(); + mt_set_non_kernel(0); + mt_validate(mt); + mtree_destroy(mt); +} +#endif + +/* End of VM testcases */ + +/* RCU stress testing */ + +/* RCU reader helper function */ +static void rcu_reader_register(struct rcu_test_struct2 *test) +{ + rcu_register_thread(); + uatomic_inc(&test->thread_count); + + while (!test->start) + usleep(test->pause * 100); +} + +static void rcu_reader_setup(struct rcu_reader_struct *reader, + unsigned int id, struct rcu_test_struct2 *test) +{ + reader->id = id; + reader->test = test; + reader->mod = reader->id % 10; + reader->del = (reader->mod + 1) % 10; + reader->flip = (reader->mod + 2) % 10; + reader->add = (reader->mod + 3) % 10; + reader->next = (reader->mod + 4) % 10; +} +/* RCU reader in increasing index */ +static void *rcu_reader_fwd(void *ptr) + +{ + struct rcu_reader_struct *reader = (struct rcu_reader_struct *)ptr; + struct rcu_test_struct2 *test = reader->test; + unsigned long index = reader->id; + bool toggled, modified, deleted, added; + int i; + void *entry, *prev = NULL; + MA_STATE(mas, test->mt, 0, 0); + + rcu_reader_register(test); + toggled = modified = deleted = added = false; + + while (!test->stop) { + i = 0; + /* mas_for_each ?*/ + rcu_read_lock(); + mas_set(&mas, test->index[index]); + mas_for_each(&mas, entry, test->last[index + 9]) { + unsigned long r_start, r_end, alt_start; + void *expected, *alt; + + r_start = test->index[index + i]; + r_end = test->last[index + i]; + expected = xa_mk_value(r_start); + + if (i == reader->del) { + if (!deleted) { + alt_start = test->index[index + reader->flip]; + /* delete occurred. */ + if (mas.index == alt_start) { + uatomic_inc(&test->seen_deleted); + deleted = true; + } + } + if (deleted) { + i = reader->flip; + r_start = test->index[index + i]; + r_end = test->last[index + i]; + expected = xa_mk_value(r_start); + } + } + + if (!added && (i == reader->add)) { + alt_start = test->index[index + reader->next]; + if (mas.index == r_start) { + uatomic_inc(&test->seen_added); + added = true; + } else if (mas.index == alt_start) { + i = reader->next; + r_start = test->index[index + i]; + r_end = test->last[index + i]; + expected = xa_mk_value(r_start); + } + } + + RCU_MT_BUG_ON(test, mas.index != r_start); + RCU_MT_BUG_ON(test, mas.last != r_end); + + if (i == reader->flip) { + alt = xa_mk_value(index + i + RCU_RANGE_COUNT); + if (prev) { + if (toggled && entry == expected) + uatomic_inc(&test->seen_toggle); + else if (!toggled && entry == alt) + uatomic_inc(&test->seen_toggle); + } + + if (entry == expected) + toggled = false; + else if (entry == alt) + toggled = true; + else { + printk("!!%lu-%lu -> %p not %p or %p\n", mas.index, mas.last, entry, expected, alt); + RCU_MT_BUG_ON(test, 1); + } + + prev = entry; + } else if (i == reader->mod) { + alt = xa_mk_value(index + i * 2 + 1 + + RCU_RANGE_COUNT); + if (entry != expected) { + if (!modified) + uatomic_inc(&test->seen_modified); + modified = true; + } else { + if (modified) + uatomic_inc(&test->seen_modified); + modified = false; + } + + if (modified) + RCU_MT_BUG_ON(test, entry != alt); + + } else { + if (entry != expected) + printk("!!%lu-%lu -> %p not %p\n", mas.index, mas.last, entry, expected); + RCU_MT_BUG_ON(test, entry != expected); + } + + i++; + } + rcu_read_unlock(); + usleep(test->pause); + } + + rcu_unregister_thread(); + return NULL; +} +/* RCU reader in decreasing index */ +static void *rcu_reader_rev(void *ptr) +{ + struct rcu_reader_struct *reader = (struct rcu_reader_struct *)ptr; + struct rcu_test_struct2 *test = reader->test; + unsigned long index = reader->id; + bool toggled, modified, deleted, added; + int i; + void *prev = NULL; + MA_STATE(mas, test->mt, 0, 0); + + rcu_reader_register(test); + toggled = modified = deleted = added = false; + + + while (!test->stop) { + void *entry; + + i = 9; + mas_set(&mas, test->index[index + i]); + + rcu_read_lock(); + while (i--) { + unsigned long r_start, r_end, alt_start; + void *expected, *alt; + int line = __LINE__; + + entry = mas_prev(&mas, test->index[index]); + r_start = test->index[index + i]; + r_end = test->last[index + i]; + expected = xa_mk_value(r_start); + + if (i == reader->del) { + alt_start = test->index[index + reader->mod]; + if (mas.index == alt_start) { + line = __LINE__; + if (!deleted) + uatomic_inc(&test->seen_deleted); + deleted = true; + } + if (deleted) { + line = __LINE__; + i = reader->mod; + r_start = test->index[index + i]; + r_end = test->last[index + i]; + expected = xa_mk_value(r_start); + } + } + if (!added && (i == reader->add)) { + alt_start = test->index[index + reader->flip]; + if (mas.index == r_start) { + line = __LINE__; + uatomic_inc(&test->seen_added); + added = true; + } else if (mas.index == alt_start) { + line = __LINE__; + i = reader->flip; + r_start = test->index[index + i]; + r_end = test->last[index + i]; + expected = xa_mk_value(r_start); + } + } + + if (i == reader->mod) + line = __LINE__; + else if (i == reader->flip) + line = __LINE__; + + if (mas.index != r_start) { + alt = xa_mk_value(index + i * 2 + 1 + + RCU_RANGE_COUNT); + mt_dump(test->mt); + printk("Error: %lu-%lu %p != %lu-%lu %p %p line %d i %d\n", + mas.index, mas.last, entry, + r_start, r_end, expected, alt, + line, i); + } + RCU_MT_BUG_ON(test, mas.index != r_start); + RCU_MT_BUG_ON(test, mas.last != r_end); + + if (i == reader->mod) { + alt = xa_mk_value(index + i * 2 + 1 + + RCU_RANGE_COUNT); + + if (entry != expected) { + if (!modified) + uatomic_inc(&test->seen_modified); + modified = true; + } else { + if (modified) + uatomic_inc(&test->seen_modified); + modified = false; + } + if (modified) + RCU_MT_BUG_ON(test, entry != alt); + + + } else if (i == reader->flip) { + alt = xa_mk_value(index + i + + RCU_RANGE_COUNT); + if (prev) { + if (toggled && entry == expected) + uatomic_inc(&test->seen_toggle); + else if (!toggled && entry == alt) + uatomic_inc(&test->seen_toggle); + } + + if (entry == expected) + toggled = false; + else if (entry == alt) + toggled = true; + else { + printk("%lu-%lu %p != %p or %p\n", + mas.index, mas.last, entry, + expected, alt); + RCU_MT_BUG_ON(test, 1); + } + + prev = entry; + } else { + if (entry != expected) + printk("%lu-%lu %p != %p\n", mas.index, + mas.last, entry, expected); + RCU_MT_BUG_ON(test, entry != expected); + } + } + rcu_read_unlock(); + usleep(test->pause); + } + + rcu_unregister_thread(); + return NULL; +} + +static void rcu_stress_rev(struct maple_tree *mt, struct rcu_test_struct2 *test, + int count, struct rcu_reader_struct *test_reader) +{ + int i, j = 10000; + bool toggle = true; + + test->start = true; /* Release the hounds! */ + usleep(5); + + while (j--) { + toggle = !toggle; + i = count; + while (i--) { + unsigned long start, end; + struct rcu_reader_struct *this = &test_reader[i]; + + /* Mod offset */ + if (j == 600) { + start = test->index[this->id + this->mod]; + end = test->last[this->id + this->mod]; + mtree_store_range(mt, start, end, + xa_mk_value(this->id + this->mod * 2 + + 1 + RCU_RANGE_COUNT), + GFP_KERNEL); + } + + /* Toggle */ + if (!(j % 5)) { + start = test->index[this->id + this->flip]; + end = test->last[this->id + this->flip]; + mtree_store_range(mt, start, end, + xa_mk_value((toggle ? start : + this->id + this->flip + + RCU_RANGE_COUNT)), + GFP_KERNEL); + } + + /* delete */ + if (j == 400) { + start = test->index[this->id + this->del]; + end = test->last[this->id + this->del]; + mtree_store_range(mt, start, end, NULL, GFP_KERNEL); + } + + /* add */ + if (j == 500) { + start = test->index[this->id + this->add]; + end = test->last[this->id + this->add]; + mtree_store_range(mt, start, end, + xa_mk_value(start), GFP_KERNEL); + } + } + usleep(test->pause); + /* If a test fails, don't flood the console */ + if (test->stop) + break; + } +} + +static void rcu_stress_fwd(struct maple_tree *mt, struct rcu_test_struct2 *test, + int count, struct rcu_reader_struct *test_reader) +{ + int j, i; + bool toggle = true; + + test->start = true; /* Release the hounds! */ + usleep(5); + for (j = 0; j < 10000; j++) { + toggle = !toggle; + for (i = 0; i < count; i++) { + unsigned long start, end; + struct rcu_reader_struct *this = &test_reader[i]; + + /* Mod offset */ + if (j == 600) { + start = test->index[this->id + this->mod]; + end = test->last[this->id + this->mod]; + mtree_store_range(mt, start, end, + xa_mk_value(this->id + this->mod * 2 + + 1 + RCU_RANGE_COUNT), + GFP_KERNEL); + } + + /* Toggle */ + if (!(j % 5)) { + start = test->index[this->id + this->flip]; + end = test->last[this->id + this->flip]; + mtree_store_range(mt, start, end, + xa_mk_value((toggle ? start : + this->id + this->flip + + RCU_RANGE_COUNT)), + GFP_KERNEL); + } + + /* delete */ + if (j == 400) { + start = test->index[this->id + this->del]; + end = test->last[this->id + this->del]; + mtree_store_range(mt, start, end, NULL, GFP_KERNEL); + } + + /* add */ + if (j == 500) { + start = test->index[this->id + this->add]; + end = test->last[this->id + this->add]; + mtree_store_range(mt, start, end, + xa_mk_value(start), GFP_KERNEL); + } + } + usleep(test->pause); + /* If a test fails, don't flood the console */ + if (test->stop) + break; + } +} + +/* + * This is to check: + * 1. Range that is not ever present + * 2. Range that is always present + * 3. Things being added but not removed. + * 4. Things being removed but not added. + * 5. Things are being added and removed, searches my succeed or fail + * + * This sets up two readers for every 10 entries; one forward and one reverse + * reading. + */ +static void rcu_stress(struct maple_tree *mt, bool forward) +{ + unsigned int count, i; + unsigned long r, seed; + pthread_t readers[RCU_RANGE_COUNT / 5]; + struct rcu_test_struct2 test; + struct rcu_reader_struct test_reader[RCU_RANGE_COUNT / 5]; + void *(*function)(void *); + + /* Test setup */ + test.mt = mt; + test.pause = 5; + test.seen_toggle = 0; + test.seen_deleted = 0; + test.seen_added = 0; + test.seen_modified = 0; + test.thread_count = 0; + test.start = test.stop = false; + seed = time(NULL); + srand(seed); + for (i = 0; i < RCU_RANGE_COUNT; i++) { + r = seed + rand(); + mtree_store_range(mt, seed, r, + xa_mk_value(seed), GFP_KERNEL); + + /* Record start and end of entry */ + test.index[i] = seed; + test.last[i] = r; + seed = 1 + r + rand() % 10; + } + + i = count = ARRAY_SIZE(readers); + while (i--) { + unsigned long id; + + id = i / 2 * 10; + if (i % 2) + function = rcu_reader_fwd; + else + function = rcu_reader_rev; + + rcu_reader_setup(&test_reader[i], id, &test); + if (pthread_create(&readers[i], NULL, *function, + &test_reader[i])) { + perror("creating reader thread"); + exit(1); + } + } + + for (i = 0; i < ARRAY_SIZE(readers); i++) { + struct rcu_reader_struct *this = &test_reader[i]; + int add = this->id + this->add; + + /* Remove add entries from the tree for later addition */ + mtree_store_range(mt, test.index[add], test.last[add], + NULL, GFP_KERNEL); + } + + mt_set_in_rcu(mt); + do { + usleep(5); + } while (test.thread_count > ARRAY_SIZE(readers)); + + if (forward) + rcu_stress_fwd(mt, &test, count, test_reader); + else + rcu_stress_rev(mt, &test, count, test_reader); + + test.stop = true; + while (count--) + pthread_join(readers[count], NULL); + + mt_validate(mt); +} + + +struct rcu_test_struct { + struct maple_tree *mt; /* the maple tree */ + int count; /* Number of times to check value(s) */ + unsigned long index; /* The first index to check */ + void *entry1; /* The first entry value */ + void *entry2; /* The second entry value */ + void *entry3; /* The third entry value */ + + bool update_2; + bool update_3; + unsigned long range_start; + unsigned long range_end; + unsigned int loop_sleep; + unsigned int val_sleep; + + unsigned int failed; /* failed detection for other threads */ + unsigned int seen_entry2; /* Number of threads that have seen the new value */ + unsigned int seen_entry3; /* Number of threads that have seen the new value */ + unsigned int seen_both; /* Number of threads that have seen both new values */ + unsigned int seen_toggle; + unsigned int seen_added; + unsigned int seen_removed; + unsigned long last; /* The end of the range to write. */ + + unsigned long removed; /* The index of the removed entry */ + unsigned long added; /* The index of the removed entry */ + unsigned long toggle; /* The index of the removed entry */ +}; + +static inline +int eval_rcu_entry(struct rcu_test_struct *test, void *entry, bool *update_2, + bool *update_3) +{ + if (entry == test->entry1) + return 0; + + if (entry == test->entry2) { + if (!(*update_2)) { + uatomic_inc(&test->seen_entry2); + *update_2 = true; + if (update_3) + uatomic_inc(&test->seen_both); + } + return 0; + } + + if (entry == test->entry3) { + if (!(*update_3)) { + uatomic_inc(&test->seen_entry3); + *update_3 = true; + if (update_2) + uatomic_inc(&test->seen_both); + } + return 0; + } + + return 1; +} + +/* + * rcu_val() - Read a given value in the tree test->count times using the + * regular API + * + * @ptr: The pointer to the rcu_test_struct + */ +static void *rcu_val(void *ptr) +{ + struct rcu_test_struct *test = (struct rcu_test_struct *)ptr; + unsigned long count = test->count; + bool update_2 = false; + bool update_3 = false; + void *entry; + + rcu_register_thread(); + while (count--) { + usleep(test->val_sleep); + /* + * No locking required, regular API locking is handled in the + * maple tree code + */ + entry = mtree_load(test->mt, test->index); + MT_BUG_ON(test->mt, eval_rcu_entry(test, entry, &update_2, + &update_3)); + } + rcu_unregister_thread(); + return NULL; +} + +/* + * rcu_loop() - Loop over a section of the maple tree, checking for an expected + * value using the advanced API + * + * @ptr - The pointer to the rcu_test_struct + */ +static void *rcu_loop(void *ptr) +{ + struct rcu_test_struct *test = (struct rcu_test_struct *)ptr; + unsigned long count = test->count; + void *entry, *expected; + bool update_2 = false; + bool update_3 = false; + MA_STATE(mas, test->mt, test->range_start, test->range_start); + + rcu_register_thread(); + + /* + * Loop through the test->range_start - test->range_end test->count + * times + */ + while (count--) { + usleep(test->loop_sleep); + rcu_read_lock(); + mas_for_each(&mas, entry, test->range_end) { + /* The expected value is based on the start range. */ + expected = xa_mk_value(mas.index ? mas.index / 10 : 0); + + /* Out of the interesting range */ + if (mas.index < test->index || mas.index > test->last) { + if (entry != expected) { + printk("%lx - %lx = %p not %p\n", + mas.index, mas.last, entry, expected); + } + MT_BUG_ON(test->mt, entry != expected); + continue; + } + + if (entry == expected) + continue; /* Not seen. */ + + /* In the interesting range */ + MT_BUG_ON(test->mt, eval_rcu_entry(test, entry, + &update_2, + &update_3)); + } + rcu_read_unlock(); + mas_set(&mas, test->range_start); + } + + rcu_unregister_thread(); + return NULL; +} + +static noinline +void run_check_rcu(struct maple_tree *mt, struct rcu_test_struct *vals) +{ + + int i; + void *(*function)(void *); + pthread_t readers[20]; + + mt_set_in_rcu(mt); + MT_BUG_ON(mt, !mt_in_rcu(mt)); + + for (i = 0; i < ARRAY_SIZE(readers); i++) { + if (i % 2) + function = rcu_loop; + else + function = rcu_val; + + if (pthread_create(&readers[i], NULL, *function, vals)) { + perror("creating reader thread"); + exit(1); + } + } + + usleep(5); /* small yield to ensure all threads are at least started. */ + mtree_store_range(mt, vals->index, vals->last, vals->entry2, + GFP_KERNEL); + while (i--) + pthread_join(readers[i], NULL); + + /* Make sure the test caught at least one update. */ + MT_BUG_ON(mt, !vals->seen_entry2); +} + +static noinline +void run_check_rcu_slowread(struct maple_tree *mt, struct rcu_test_struct *vals) +{ + + int i; + void *(*function)(void *); + pthread_t readers[20]; + unsigned int index = vals->index; + + mt_set_in_rcu(mt); + MT_BUG_ON(mt, !mt_in_rcu(mt)); + + for (i = 0; i < ARRAY_SIZE(readers); i++) { + if (i % 2) + function = rcu_loop; + else + function = rcu_val; + + if (pthread_create(&readers[i], NULL, *function, vals)) { + perror("creating reader thread"); + exit(1); + } + } + + usleep(5); /* small yield to ensure all threads are at least started. */ + + while (index <= vals->last) { + mtree_store(mt, index, + (index % 2 ? vals->entry2 : vals->entry3), + GFP_KERNEL); + index++; + usleep(5); + } + + while (i--) + pthread_join(readers[i], NULL); + + /* Make sure the test caught at least one update. */ + MT_BUG_ON(mt, !vals->seen_entry2); + MT_BUG_ON(mt, !vals->seen_entry3); + MT_BUG_ON(mt, !vals->seen_both); +} +static noinline void check_rcu_simulated(struct maple_tree *mt) +{ + unsigned long i, nr_entries = 1000; + unsigned long target = 4320; + unsigned long val = 0xDEAD; + + MA_STATE(mas_writer, mt, 0, 0); + MA_STATE(mas_reader, mt, target, target); + + rcu_register_thread(); + + mt_set_in_rcu(mt); + mas_lock(&mas_writer); + for (i = 0; i <= nr_entries; i++) { + mas_writer.index = i * 10; + mas_writer.last = i * 10 + 5; + mas_store_gfp(&mas_writer, xa_mk_value(i), GFP_KERNEL); + } + mas_unlock(&mas_writer); + + /* Overwrite one entry with a new value. */ + mas_set_range(&mas_writer, target, target + 5); + rcu_read_lock(); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); + mas_unlock(&mas_writer); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(val)); + rcu_read_unlock(); + + /* Restore value. */ + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(target/10), GFP_KERNEL); + mas_unlock(&mas_writer); + mas_reset(&mas_reader); + + + /* Overwrite 1/2 the entry */ + mas_set_range(&mas_writer, target, target + 2); + rcu_read_lock(); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); + mas_unlock(&mas_writer); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(val)); + rcu_read_unlock(); + + + /* Restore value. */ + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(target/10), GFP_KERNEL); + mas_unlock(&mas_writer); + mas_reset(&mas_reader); + + /* Overwrite last 1/2 the entry */ + mas_set_range(&mas_writer, target + 2, target + 5); + rcu_read_lock(); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); + mas_unlock(&mas_writer); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); + rcu_read_unlock(); + + + /* Restore value. */ + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(target/10), GFP_KERNEL); + mas_unlock(&mas_writer); + mas_reset(&mas_reader); + + /* Overwrite more than the entry */ + mas_set_range(&mas_writer, target - 5, target + 15); + rcu_read_lock(); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); + mas_unlock(&mas_writer); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(val)); + rcu_read_unlock(); + + /* Restore value. */ + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(target/10), GFP_KERNEL); + mas_unlock(&mas_writer); + mas_reset(&mas_reader); + + /* Overwrite more than the node. */ + mas_set_range(&mas_writer, target - 400, target + 400); + rcu_read_lock(); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); + mas_unlock(&mas_writer); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(val)); + rcu_read_unlock(); + + /* Restore value. */ + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(target/10), GFP_KERNEL); + mas_unlock(&mas_writer); + mas_reset(&mas_reader); + + /* Overwrite the tree */ + mas_set_range(&mas_writer, 0, ULONG_MAX); + rcu_read_lock(); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); + mas_unlock(&mas_writer); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(val)); + rcu_read_unlock(); + + /* Clear out tree & recreate it */ + mas_lock(&mas_writer); + mas_set_range(&mas_writer, 0, ULONG_MAX); + mas_store_gfp(&mas_writer, NULL, GFP_KERNEL); + mas_set_range(&mas_writer, 0, 0); + for (i = 0; i <= nr_entries; i++) { + mas_writer.index = i * 10; + mas_writer.last = i * 10 + 5; + mas_store_gfp(&mas_writer, xa_mk_value(i), GFP_KERNEL); + } + mas_unlock(&mas_writer); + + /* next check */ + /* Overwrite one entry with a new value. */ + mas_reset(&mas_reader); + mas_set_range(&mas_writer, target, target + 5); + mas_set_range(&mas_reader, target, target); + rcu_read_lock(); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); + mas_prev(&mas_reader, 0); + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); + mas_unlock(&mas_writer); + MT_BUG_ON(mt, mas_next(&mas_reader, ULONG_MAX) != xa_mk_value(val)); + rcu_read_unlock(); + + /* Restore value. */ + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(target/10), GFP_KERNEL); + mas_unlock(&mas_writer); + + /* prev check */ + /* Overwrite one entry with a new value. */ + mas_reset(&mas_reader); + mas_set_range(&mas_writer, target, target + 5); + mas_set_range(&mas_reader, target, target); + rcu_read_lock(); + MT_BUG_ON(mt, mas_walk(&mas_reader) != xa_mk_value(target/10)); + mas_next(&mas_reader, ULONG_MAX); + mas_lock(&mas_writer); + mas_store_gfp(&mas_writer, xa_mk_value(val), GFP_KERNEL); + mas_unlock(&mas_writer); + MT_BUG_ON(mt, mas_prev(&mas_reader, 0) != xa_mk_value(val)); + rcu_read_unlock(); + + rcu_unregister_thread(); +} + +static noinline void check_rcu_threaded(struct maple_tree *mt) +{ + unsigned long i, nr_entries = 1000; + struct rcu_test_struct vals; + + vals.val_sleep = 200; + vals.loop_sleep = 110; + + rcu_register_thread(); + for (i = 0; i <= nr_entries; i++) + mtree_store_range(mt, i*10, i*10 + 5, + xa_mk_value(i), GFP_KERNEL); + /* Store across several slots. */ + vals.count = 1000; + vals.mt = mt; + vals.index = 8650; + vals.last = 8666; + vals.entry1 = xa_mk_value(865); + vals.entry2 = xa_mk_value(8650); + vals.entry3 = xa_mk_value(8650); + vals.range_start = 0; + vals.range_end = ULONG_MAX; + vals.seen_entry2 = 0; + vals.seen_entry3 = 0; + + run_check_rcu(mt, &vals); + mtree_destroy(mt); + + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + for (i = 0; i <= nr_entries; i++) + mtree_store_range(mt, i*10, i*10 + 5, + xa_mk_value(i), GFP_KERNEL); + + /* 4390-4395: value 439 (0x1b7) [0x36f] */ + /* Store across several slots. */ + /* Spanning store. */ + vals.count = 10000; + vals.mt = mt; + vals.index = 4390; + vals.last = 4398; + vals.entry1 = xa_mk_value(4390); + vals.entry2 = xa_mk_value(439); + vals.entry3 = xa_mk_value(439); + vals.seen_entry2 = 0; + vals.range_start = 4316; + vals.range_end = 5035; + run_check_rcu(mt, &vals); + mtree_destroy(mt); + + + /* Forward writer for rcu stress */ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + rcu_stress(mt, true); + mtree_destroy(mt); + + /* Reverse writer for rcu stress */ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + rcu_stress(mt, false); + mtree_destroy(mt); + + /* Slow reader test with spanning store. */ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + for (i = 0; i <= nr_entries; i++) + mtree_store_range(mt, i*10, i*10 + 5, + xa_mk_value(i), GFP_KERNEL); + + /* 4390-4395: value 439 (0x1b7) [0x36f] */ + /* Store across several slots. */ + /* Spanning store. */ + vals.count = 15000; + vals.mt = mt; + vals.index = 4390; + vals.last = 4398; + vals.entry1 = xa_mk_value(4390); + vals.entry2 = xa_mk_value(439); + vals.entry3 = xa_mk_value(4391); + vals.seen_toggle = 0; + vals.seen_added = 0; + vals.seen_removed = 0; + vals.range_start = 4316; + vals.range_end = 5035; + vals.removed = 4360; + vals.added = 4396; + vals.toggle = 4347; + vals.val_sleep = 400; + vals.loop_sleep = 200; + vals.seen_entry2 = 0; + vals.seen_entry3 = 0; + vals.seen_both = 0; + vals.entry3 = xa_mk_value(438); + + run_check_rcu_slowread(mt, &vals); + rcu_unregister_thread(); +} +/* End of RCU stress testing */ + +/* Check tree structure by depth first searching */ +static void mas_dfs_preorder(struct ma_state *mas) +{ + + struct maple_enode *prev; + unsigned char end, slot = 0; + + if (mas->node == MAS_START) { + mas_start(mas); + return; + } + + if (mte_is_leaf(mas->node) && mte_is_root(mas->node)) + goto done; + +walk_up: + end = mas_data_end(mas); + if (mte_is_leaf(mas->node) || + (slot > end)) { + if (mte_is_root(mas->node)) + goto done; + + slot = mte_parent_slot(mas->node) + 1; + mas_ascend(mas); + goto walk_up; + } + + prev = mas->node; + mas->node = mas_get_slot(mas, slot); + if (!mas->node || slot > end) { + if (mte_is_root(prev)) + goto done; + + mas->node = prev; + slot = mte_parent_slot(mas->node) + 1; + mas_ascend(mas); + goto walk_up; + } + + return; +done: + mas->node = MAS_NONE; +} + + +static void check_dfs_preorder(struct maple_tree *mt) +{ + unsigned long e, count = 0, max = 1000; + + MA_STATE(mas, mt, 0, 0); + + if (MAPLE_32BIT) + e = 37; + else + e = 74; + + check_seq(mt, max, false); + do { + count++; + mas_dfs_preorder(&mas); + } while (!mas_is_none(&mas)); + MT_BUG_ON(mt, count != e); + mtree_destroy(mt); + + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + mas_reset(&mas); + count = 0; + if (!MAPLE_32BIT) + e = 77; + + check_seq(mt, max, false); + do { + count++; + mas_dfs_preorder(&mas); + } while (!mas_is_none(&mas)); + /*printk("count %lu\n", count); */ + MT_BUG_ON(mt, count != e); + mtree_destroy(mt); + + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + mas_reset(&mas); + count = 0; + check_rev_seq(mt, max, false); + do { + count++; + mas_dfs_preorder(&mas); + } while (!mas_is_none(&mas)); + /*printk("count %lu\n", count); */ + MT_BUG_ON(mt, count != e); + mtree_destroy(mt); + + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + mas_reset(&mas); + mt_zero_nr_tallocated(); + mt_set_non_kernel(200); + mas_expected_entries(&mas, max); + for (count = 0; count <= max; count++) { + mas.index = mas.last = count; + mas_store(&mas, xa_mk_value(count)); + MT_BUG_ON(mt, mas_is_err(&mas)); + } + mas_destroy(&mas); + rcu_barrier(); + /* + * pr_info(" ->seq test of 0-%lu %luK in %d active (%d total)\n", + * max, mt_get_alloc_size()/1024, mt_nr_allocated(), + * mt_nr_tallocated()); + */ + +} +/* End of depth first search tests */ + +/* Preallocation testing */ +static noinline void check_prealloc(struct maple_tree *mt) +{ + unsigned long i, max = 100; + unsigned long allocated; + unsigned char height; + struct maple_node *mn; + void *ptr = check_prealloc; + MA_STATE(mas, mt, 10, 20); + + mt_set_non_kernel(1000); + for (i = 0; i <= max; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + allocated = mas_allocated(&mas); + height = mas_mt_height(&mas); + MT_BUG_ON(mt, allocated == 0); + MT_BUG_ON(mt, allocated != 1 + height * 3); + mas_destroy(&mas); + allocated = mas_allocated(&mas); + MT_BUG_ON(mt, allocated != 0); + + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + allocated = mas_allocated(&mas); + height = mas_mt_height(&mas); + MT_BUG_ON(mt, allocated == 0); + MT_BUG_ON(mt, allocated != 1 + height * 3); + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + mas_destroy(&mas); + allocated = mas_allocated(&mas); + MT_BUG_ON(mt, allocated != 0); + + + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + allocated = mas_allocated(&mas); + height = mas_mt_height(&mas); + MT_BUG_ON(mt, allocated == 0); + MT_BUG_ON(mt, allocated != 1 + height * 3); + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, mas_allocated(&mas) != allocated - 1); + ma_free_rcu(mn); + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + mas_destroy(&mas); + allocated = mas_allocated(&mas); + MT_BUG_ON(mt, allocated != 0); + + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + allocated = mas_allocated(&mas); + height = mas_mt_height(&mas); + MT_BUG_ON(mt, allocated == 0); + MT_BUG_ON(mt, allocated != 1 + height * 3); + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, mas_allocated(&mas) != allocated - 1); + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + mas_destroy(&mas); + allocated = mas_allocated(&mas); + MT_BUG_ON(mt, allocated != 0); + ma_free_rcu(mn); + + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + allocated = mas_allocated(&mas); + height = mas_mt_height(&mas); + MT_BUG_ON(mt, allocated == 0); + MT_BUG_ON(mt, allocated != 1 + height * 3); + mn = mas_pop_node(&mas); + MT_BUG_ON(mt, mas_allocated(&mas) != allocated - 1); + mas_push_node(&mas, mn); + MT_BUG_ON(mt, mas_allocated(&mas) != allocated); + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + mas_destroy(&mas); + allocated = mas_allocated(&mas); + MT_BUG_ON(mt, allocated != 0); + + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + allocated = mas_allocated(&mas); + height = mas_mt_height(&mas); + MT_BUG_ON(mt, allocated == 0); + MT_BUG_ON(mt, allocated != 1 + height * 3); + mas_store_prealloc(&mas, ptr); + MT_BUG_ON(mt, mas_allocated(&mas) != 0); + + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + allocated = mas_allocated(&mas); + height = mas_mt_height(&mas); + MT_BUG_ON(mt, allocated == 0); + MT_BUG_ON(mt, allocated != 1 + height * 3); + mas_store_prealloc(&mas, ptr); + MT_BUG_ON(mt, mas_allocated(&mas) != 0); + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + allocated = mas_allocated(&mas); + height = mas_mt_height(&mas); + MT_BUG_ON(mt, allocated == 0); + MT_BUG_ON(mt, allocated != 1 + height * 3); + mas_store_prealloc(&mas, ptr); + + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + allocated = mas_allocated(&mas); + height = mas_mt_height(&mas); + MT_BUG_ON(mt, allocated == 0); + MT_BUG_ON(mt, allocated != 1 + height * 3); + mas_store_prealloc(&mas, ptr); + MT_BUG_ON(mt, mas_allocated(&mas) != 0); + mt_set_non_kernel(1); + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL & GFP_NOWAIT) == 0); + allocated = mas_allocated(&mas); + height = mas_mt_height(&mas); + MT_BUG_ON(mt, allocated != 0); + mas_destroy(&mas); + + + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL) != 0); + allocated = mas_allocated(&mas); + height = mas_mt_height(&mas); + MT_BUG_ON(mt, allocated == 0); + MT_BUG_ON(mt, allocated != 1 + height * 3); + mas_store_prealloc(&mas, ptr); + MT_BUG_ON(mt, mas_allocated(&mas) != 0); + mt_set_non_kernel(1); + MT_BUG_ON(mt, mas_preallocate(&mas, ptr, GFP_KERNEL & GFP_NOWAIT) == 0); + allocated = mas_allocated(&mas); + height = mas_mt_height(&mas); + MT_BUG_ON(mt, allocated != 0); +} +/* End of preallocation testing */ + +/* Spanning writes, writes that span nodes and layers of the tree */ +static noinline void check_spanning_write(struct maple_tree *mt) +{ + unsigned long i, max = 5000; + MA_STATE(mas, mt, 1200, 2380); + + for (i = 0; i <= max; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + + mtree_lock(mt); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + mas_set(&mas, 1205); + MT_BUG_ON(mt, mas_walk(&mas) != NULL); + mtree_unlock(mt); + mtree_destroy(mt); + + for (i = 1; i <= max; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + + mtree_lock(mt); + mas_set_range(&mas, 9, 50006); /* Will expand to 0 - ULONG_MAX */ + mas_store_gfp(&mas, NULL, GFP_KERNEL); + mas_set(&mas, 1205); + MT_BUG_ON(mt, mas_walk(&mas) != NULL); + mtree_unlock(mt); + mt_validate(mt); + mtree_destroy(mt); + + /* Test spanning store that requires a right cousin rebalance */ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + for (i = 0; i <= max; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + + mas_set_range(&mas, 0, 12900); /* Spans more than 2 levels */ + mtree_lock(mt); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + mas_set(&mas, 1205); + MT_BUG_ON(mt, mas_walk(&mas) != NULL); + mtree_unlock(mt); + mtree_destroy(mt); + + /* Test non-alloc tree spanning store */ + mt_init_flags(mt, 0); + for (i = 0; i <= max; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + + mas_set_range(&mas, 0, 300); + mtree_lock(mt); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + mas_set(&mas, 15); + MT_BUG_ON(mt, mas_walk(&mas) != NULL); + mtree_unlock(mt); + mtree_destroy(mt); + + /* Test spanning store that requires a right sibling rebalance */ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + for (i = 0; i <= max; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + + mas_set_range(&mas, 0, 12865); + mtree_lock(mt); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + mas_set(&mas, 15); + MT_BUG_ON(mt, mas_walk(&mas) != NULL); + mtree_unlock(mt); + mtree_destroy(mt); + + /* Test spanning store that requires a left sibling rebalance */ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + for (i = 0; i <= max; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + + mas_set_range(&mas, 90, 13665); + mtree_lock(mt); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + mas_set(&mas, 95); + MT_BUG_ON(mt, mas_walk(&mas) != NULL); + mtree_unlock(mt); + mtree_destroy(mt); + + /* Test spanning store that requires a left cousin rebalance */ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + for (i = 0; i <= max; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + + mas_set_range(&mas, 46805, 49995); + mtree_lock(mt); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + mas_set(&mas, 46815); + MT_BUG_ON(mt, mas_walk(&mas) != NULL); + mtree_unlock(mt); + mtree_destroy(mt); + + /* + * Test spanning store that requires a left cousin rebalance all the way + * to root + */ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + for (i = 0; i <= max; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + + mas_set_range(&mas, 32395, 49995); + mtree_lock(mt); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + mas_set(&mas, 46815); + MT_BUG_ON(mt, mas_walk(&mas) != NULL); + mtree_unlock(mt); + mtree_destroy(mt); + + /* + * Test spanning store that requires a right cousin rebalance all the + * way to root + */ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + for (i = 0; i <= max; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + mas_set_range(&mas, 38875, 43190); + mtree_lock(mt); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + mas_set(&mas, 38900); + MT_BUG_ON(mt, mas_walk(&mas) != NULL); + mtree_unlock(mt); + mtree_destroy(mt); + + /* Test spanning store ending at full node (depth 2)*/ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + for (i = 0; i <= max; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + mtree_lock(mt); + mas_set(&mas, 47606); + mas_store_gfp(&mas, check_spanning_write, GFP_KERNEL); + mas_set(&mas, 47607); + mas_store_gfp(&mas, check_spanning_write, GFP_KERNEL); + mas_set(&mas, 47608); + mas_store_gfp(&mas, check_spanning_write, GFP_KERNEL); + mas_set(&mas, 47609); + mas_store_gfp(&mas, check_spanning_write, GFP_KERNEL); + /* Ensure the parent node is full */ + mas_ascend(&mas); + MT_BUG_ON(mt, (mas_data_end(&mas)) != mt_slot_count(mas.node) - 1); + mas_set_range(&mas, 11516, 48940); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + mtree_unlock(mt); + mtree_destroy(mt); + + /* Test spanning write with many levels of no siblings */ + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + for (i = 0; i <= max; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + mas_set_range(&mas, 43200, 49999); + mtree_lock(mt); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + mas_set(&mas, 43200); + MT_BUG_ON(mt, mas_walk(&mas) != NULL); + mtree_unlock(mt); + mtree_destroy(mt); + + mt_init_flags(mt, MT_FLAGS_ALLOC_RANGE); + for (i = 0; i <= 100; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + + mtree_lock(mt); + mas_set_range(&mas, 76, 875); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + mtree_unlock(mt); +} +/* End of spanning write testing */ + +/* Writes to a NULL area that are adjacent to other NULLs */ +static noinline void check_null_expand(struct maple_tree *mt) +{ + unsigned long i, max = 100; + unsigned char data_end; + MA_STATE(mas, mt, 959, 959); + + for (i = 0; i <= max; i++) + mtree_test_store_range(mt, i * 10, i * 10 + 5, &i); + /* Test expanding null at start. */ + mas_lock(&mas); + mas_walk(&mas); + data_end = mas_data_end(&mas); + mas_set_range(&mas, 959, 963); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + MT_BUG_ON(mt, mtree_load(mt, 963) != NULL); + MT_BUG_ON(mt, data_end != mas_data_end(&mas)); + + /* Test expanding null at end. */ + mas_set(&mas, 880); + mas_walk(&mas); + data_end = mas_data_end(&mas); + mas_set_range(&mas, 884, 887); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + MT_BUG_ON(mt, mtree_load(mt, 884) != NULL); + MT_BUG_ON(mt, mtree_load(mt, 889) != NULL); +#if CONFIG_64BIT + MT_BUG_ON(mt, data_end != mas_data_end(&mas)); +#endif + + /* Test expanding null at start and end. */ + mas_set(&mas, 890); + mas_walk(&mas); + data_end = mas_data_end(&mas); + mas_set_range(&mas, 900, 905); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + MT_BUG_ON(mt, mtree_load(mt, 899) != NULL); + MT_BUG_ON(mt, mtree_load(mt, 900) != NULL); + MT_BUG_ON(mt, mtree_load(mt, 905) != NULL); + MT_BUG_ON(mt, mtree_load(mt, 906) != NULL); +#if CONFIG_64BIT + MT_BUG_ON(mt, data_end - 2 != mas_data_end(&mas)); +#endif + + /* Test expanding null across multiple slots. */ + mas_set(&mas, 800); + mas_walk(&mas); + data_end = mas_data_end(&mas); + mas_set_range(&mas, 810, 825); + mas_store_gfp(&mas, NULL, GFP_KERNEL); + MT_BUG_ON(mt, mtree_load(mt, 809) != NULL); + MT_BUG_ON(mt, mtree_load(mt, 810) != NULL); + MT_BUG_ON(mt, mtree_load(mt, 825) != NULL); + MT_BUG_ON(mt, mtree_load(mt, 826) != NULL); +#if CONFIG_64BIT + MT_BUG_ON(mt, data_end - 4 != mas_data_end(&mas)); +#endif + mas_unlock(&mas); +} +/* End of NULL area expansions */ + +/* Checking for no memory is best done outside the kernel */ +static noinline void check_nomem(struct maple_tree *mt) +{ + MA_STATE(ms, mt, 1, 1); + + MT_BUG_ON(mt, !mtree_empty(mt)); + /* Ensure no bypassing of allocation failures */ + mt_set_non_kernel(0); + + /* Storing something at 1 requires memory allocation */ + MT_BUG_ON(mt, mtree_insert(mt, 1, &ms, GFP_ATOMIC) != -ENOMEM); + /* Storing something at 0 does not */ + MT_BUG_ON(mt, mtree_insert(mt, 0, &ms, GFP_ATOMIC) != 0); + + /* + * Simulate two threads racing; the first one fails to allocate + * memory to insert an entry at 1, then the second one succeeds + * in allocating memory to insert an entry at 2. The first one + * then needs to free the node it allocated. LeakSanitizer will + * notice this, as will the 'nr_allocated' debugging aid in the + * userspace test suite. + */ + mtree_lock(mt); + mas_store(&ms, &ms); /* insert 1 -> &ms, fails. */ + MT_BUG_ON(mt, ms.node != MA_ERROR(-ENOMEM)); + mas_nomem(&ms, GFP_KERNEL); /* Node allocated in here. */ + MT_BUG_ON(mt, ms.node != MAS_START); + mtree_unlock(mt); + MT_BUG_ON(mt, mtree_insert(mt, 2, mt, GFP_KERNEL) != 0); + mtree_lock(mt); + mas_store(&ms, &ms); /* insert 1 -> &ms */ + mas_nomem(&ms, GFP_KERNEL); /* Node allocated in here. */ + mtree_unlock(mt); + mtree_destroy(mt); +} + +static noinline void check_locky(struct maple_tree *mt) +{ + MA_STATE(ms, mt, 2, 2); + MA_STATE(reader, mt, 2, 2); + + mt_set_non_kernel(2); + mt_set_in_rcu(mt); + mas_lock(&ms); + mas_store(&ms, &ms); + mas_set_range(&ms, 1, 3); + mas_store(&ms, &reader); + mas_unlock(&ms); + mt_clear_in_rcu(mt); +} + +extern void test_kmem_cache_bulk(void); + void farmer_tests(void) { struct maple_node *node; @@ -39,6 +35756,59 @@ void farmer_tests(void) mt_dump(&tree); ma_free_rcu(node); + + /* Check things that will make lockdep angry */ + mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); + check_locky(&tree); + mtree_destroy(&tree); + test_kmem_cache_bulk(); + + mt_init_flags(&tree, 0); + check_dfs_preorder(&tree); + mtree_destroy(&tree); + + mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); + check_prealloc(&tree); + mtree_destroy(&tree); + + mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); + check_spanning_write(&tree); + mtree_destroy(&tree); + + mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); + check_null_expand(&tree); + mtree_destroy(&tree); + + /* RCU testing */ + mt_init_flags(&tree, 0); + check_erase_testset(&tree); + mtree_destroy(&tree); + + mt_init_flags(&tree, 0); + check_new_node(&tree); + mtree_destroy(&tree); + + if (!MAPLE_32BIT) { + mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); + check_rcu_simulated(&tree); + mtree_destroy(&tree); + + mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE); + check_rcu_threaded(&tree); + mtree_destroy(&tree); + } + + +#if defined(CONFIG_64BIT) + /* Captures from VMs that found previous errors */ + mt_init_flags(&tree, 0); + check_erase2_sets(&tree); + mtree_destroy(&tree); +#endif + + + /* No memory handling */ + check_nomem(&tree); } void maple_tree_tests(void) diff --git a/tools/testing/selftests/bpf/map_tests/sk_storage_map.c b/tools/testing/selftests/bpf/map_tests/sk_storage_map.c index 099eb4dfd4f7d00848508966b20906cdf20ee6cd..18405c3b7cee9aead4c1965cd259dc6326cf80b3 100644 --- a/tools/testing/selftests/bpf/map_tests/sk_storage_map.c +++ b/tools/testing/selftests/bpf/map_tests/sk_storage_map.c @@ -458,7 +458,7 @@ static void test_sk_storage_map_basic(void) struct { int cnt; int lock; - } value = { .cnt = 0xeB9f, .lock = 0, }, lookup_value; + } value = { .cnt = 0xeB9f, .lock = 1, }, lookup_value; struct bpf_map_create_opts bad_xattr; int btf_fd, map_fd, sk_fd, err; @@ -483,38 +483,41 @@ static void test_sk_storage_map_basic(void) "err:%d errno:%d\n", err, errno); err = bpf_map_lookup_elem_flags(map_fd, &sk_fd, &lookup_value, BPF_F_LOCK); - CHECK(err || lookup_value.cnt != value.cnt, + CHECK(err || lookup_value.lock || lookup_value.cnt != value.cnt, "bpf_map_lookup_elem_flags(BPF_F_LOCK)", - "err:%d errno:%d cnt:%x(%x)\n", - err, errno, lookup_value.cnt, value.cnt); + "err:%d errno:%d lock:%x cnt:%x(%x)\n", + err, errno, lookup_value.lock, lookup_value.cnt, value.cnt); /* Bump the cnt and update with BPF_EXIST | BPF_F_LOCK */ value.cnt += 1; + value.lock = 2; err = bpf_map_update_elem(map_fd, &sk_fd, &value, BPF_EXIST | BPF_F_LOCK); CHECK(err, "bpf_map_update_elem(BPF_EXIST|BPF_F_LOCK)", "err:%d errno:%d\n", err, errno); err = bpf_map_lookup_elem_flags(map_fd, &sk_fd, &lookup_value, BPF_F_LOCK); - CHECK(err || lookup_value.cnt != value.cnt, + CHECK(err || lookup_value.lock || lookup_value.cnt != value.cnt, "bpf_map_lookup_elem_flags(BPF_F_LOCK)", - "err:%d errno:%d cnt:%x(%x)\n", - err, errno, lookup_value.cnt, value.cnt); + "err:%d errno:%d lock:%x cnt:%x(%x)\n", + err, errno, lookup_value.lock, lookup_value.cnt, value.cnt); /* Bump the cnt and update with BPF_EXIST */ value.cnt += 1; + value.lock = 2; err = bpf_map_update_elem(map_fd, &sk_fd, &value, BPF_EXIST); CHECK(err, "bpf_map_update_elem(BPF_EXIST)", "err:%d errno:%d\n", err, errno); err = bpf_map_lookup_elem_flags(map_fd, &sk_fd, &lookup_value, BPF_F_LOCK); - CHECK(err || lookup_value.cnt != value.cnt, + CHECK(err || lookup_value.lock || lookup_value.cnt != value.cnt, "bpf_map_lookup_elem_flags(BPF_F_LOCK)", - "err:%d errno:%d cnt:%x(%x)\n", - err, errno, lookup_value.cnt, value.cnt); + "err:%d errno:%d lock:%x cnt:%x(%x)\n", + err, errno, lookup_value.lock, lookup_value.cnt, value.cnt); /* Update with BPF_NOEXIST */ value.cnt += 1; + value.lock = 2; err = bpf_map_update_elem(map_fd, &sk_fd, &value, BPF_NOEXIST | BPF_F_LOCK); CHECK(!err || errno != EEXIST, @@ -526,22 +529,23 @@ static void test_sk_storage_map_basic(void) value.cnt -= 1; err = bpf_map_lookup_elem_flags(map_fd, &sk_fd, &lookup_value, BPF_F_LOCK); - CHECK(err || lookup_value.cnt != value.cnt, + CHECK(err || lookup_value.lock || lookup_value.cnt != value.cnt, "bpf_map_lookup_elem_flags(BPF_F_LOCK)", - "err:%d errno:%d cnt:%x(%x)\n", - err, errno, lookup_value.cnt, value.cnt); + "err:%d errno:%d lock:%x cnt:%x(%x)\n", + err, errno, lookup_value.lock, lookup_value.cnt, value.cnt); /* Bump the cnt again and update with map_flags == 0 */ value.cnt += 1; + value.lock = 2; err = bpf_map_update_elem(map_fd, &sk_fd, &value, 0); CHECK(err, "bpf_map_update_elem()", "err:%d errno:%d\n", err, errno); err = bpf_map_lookup_elem_flags(map_fd, &sk_fd, &lookup_value, BPF_F_LOCK); - CHECK(err || lookup_value.cnt != value.cnt, + CHECK(err || lookup_value.lock || lookup_value.cnt != value.cnt, "bpf_map_lookup_elem_flags(BPF_F_LOCK)", - "err:%d errno:%d cnt:%x(%x)\n", - err, errno, lookup_value.cnt, value.cnt); + "err:%d errno:%d lock:%x cnt:%x(%x)\n", + err, errno, lookup_value.lock, lookup_value.cnt, value.cnt); /* Test delete elem */ err = bpf_map_delete_elem(map_fd, &sk_fd); diff --git a/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c b/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c index d457a55ff408e24e18275962ebaa847bd9e2b189..a4b4133d39e9596b7f089944325fa642ad5ea204 100644 --- a/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c +++ b/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c @@ -358,10 +358,12 @@ static int get_syms(char ***symsp, size_t *cntp) * We attach to almost all kernel functions and some of them * will cause 'suspicious RCU usage' when fprobe is attached * to them. Filter out the current culprits - arch_cpu_idle - * and rcu_* functions. + * default_idle and rcu_* functions. */ if (!strcmp(name, "arch_cpu_idle")) continue; + if (!strcmp(name, "default_idle")) + continue; if (!strncmp(name, "rcu_", 4)) continue; if (!strcmp(name, "bpf_dispatcher_xdp_func")) @@ -400,7 +402,7 @@ static int get_syms(char ***symsp, size_t *cntp) return err; } -static void test_bench_attach(void) +void serial_test_kprobe_multi_bench_attach(void) { LIBBPF_OPTS(bpf_kprobe_multi_opts, opts); struct kprobe_multi_empty *skel = NULL; @@ -468,6 +470,4 @@ void test_kprobe_multi_test(void) test_attach_api_syms(); if (test__start_subtest("attach_api_fails")) test_attach_api_fails(); - if (test__start_subtest("bench_attach")) - test_bench_attach(); } diff --git a/tools/testing/selftests/bpf/prog_tests/varlen.c b/tools/testing/selftests/bpf/prog_tests/varlen.c index dd324b4933db48639388196ceadb22379d7f1f04..4d7056f8f177bb95c95d40f165776715881866c3 100644 --- a/tools/testing/selftests/bpf/prog_tests/varlen.c +++ b/tools/testing/selftests/bpf/prog_tests/varlen.c @@ -63,6 +63,13 @@ void test_varlen(void) CHECK_VAL(data->total4, size1 + size2); CHECK(memcmp(data->payload4, exp_str, size1 + size2), "content_check", "doesn't match!\n"); + + CHECK_VAL(bss->ret_bad_read, -EFAULT); + CHECK_VAL(data->payload_bad[0], 0x42); + CHECK_VAL(data->payload_bad[1], 0x42); + CHECK_VAL(data->payload_bad[2], 0); + CHECK_VAL(data->payload_bad[3], 0x42); + CHECK_VAL(data->payload_bad[4], 0x42); cleanup: test_varlen__destroy(skel); } diff --git a/tools/testing/selftests/bpf/progs/test_varlen.c b/tools/testing/selftests/bpf/progs/test_varlen.c index 3987ff174f1f563883ecf0b7785df10825443423..20eb7d422c4119b546752a016d6cebf1f1813fac 100644 --- a/tools/testing/selftests/bpf/progs/test_varlen.c +++ b/tools/testing/selftests/bpf/progs/test_varlen.c @@ -19,6 +19,7 @@ __u64 payload1_len1 = 0; __u64 payload1_len2 = 0; __u64 total1 = 0; char payload1[MAX_LEN + MAX_LEN] = {}; +__u64 ret_bad_read = 0; /* .data */ int payload2_len1 = -1; @@ -36,6 +37,8 @@ int payload4_len2 = -1; int total4= -1; char payload4[MAX_LEN + MAX_LEN] = { 1 }; +char payload_bad[5] = { 0x42, 0x42, 0x42, 0x42, 0x42 }; + SEC("raw_tp/sys_enter") int handler64_unsigned(void *regs) { @@ -61,6 +64,8 @@ int handler64_unsigned(void *regs) total1 = payload - (void *)payload1; + ret_bad_read = bpf_probe_read_kernel_str(payload_bad + 2, 1, (void *) -1); + return 0; } diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c index 0e9a47f978908d5fef7f79aa3f9ec5be53aa6b64..3fef451d88313ff91496ba3dccda5b88345575cb 100644 --- a/tools/testing/selftests/bpf/test_progs.c +++ b/tools/testing/selftests/bpf/test_progs.c @@ -1010,7 +1010,7 @@ static inline const char *str_msg(const struct msg *msg, char *buf) msg->subtest_done.have_log); break; case MSG_TEST_LOG: - sprintf(buf, "MSG_TEST_LOG (cnt: %ld, last: %d)", + sprintf(buf, "MSG_TEST_LOG (cnt: %zu, last: %d)", strlen(msg->test_log.log_buf), msg->test_log.is_last); break; diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c index 2dbcbf363c181af18aa08fc064e820ff36c94dbb..b605a70d4f6babfadfae005ed15ebb09d8af221a 100644 --- a/tools/testing/selftests/bpf/test_verifier.c +++ b/tools/testing/selftests/bpf/test_verifier.c @@ -1260,7 +1260,7 @@ static int get_xlated_program(int fd_prog, struct bpf_insn **buf, int *cnt) bzero(&info, sizeof(info)); info.xlated_prog_len = xlated_prog_len; - info.xlated_prog_insns = (__u64)*buf; + info.xlated_prog_insns = (__u64)(unsigned long)*buf; if (bpf_obj_get_info_by_fd(fd_prog, &info, &info_len)) { perror("second bpf_obj_get_info_by_fd failed"); goto out_free_buf; diff --git a/tools/testing/selftests/bpf/verifier/ref_tracking.c b/tools/testing/selftests/bpf/verifier/ref_tracking.c index f18ce867271fc03cec84f4ed3732be8ae2d98925..fd683a32a2766ac0d01939383437b9e3dc26e311 100644 --- a/tools/testing/selftests/bpf/verifier/ref_tracking.c +++ b/tools/testing/selftests/bpf/verifier/ref_tracking.c @@ -1044,3 +1044,39 @@ .result_unpriv = REJECT, .errstr_unpriv = "unknown func", }, +{ + "reference tracking: try to leak released ptr reg", + .insns = { + BPF_MOV64_IMM(BPF_REG_0, 0), + BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4), + BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), + BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), + BPF_LD_MAP_FD(BPF_REG_1, 0), + BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), + BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), + BPF_EXIT_INSN(), + BPF_MOV64_REG(BPF_REG_9, BPF_REG_0), + + BPF_MOV64_IMM(BPF_REG_0, 0), + BPF_LD_MAP_FD(BPF_REG_1, 0), + BPF_MOV64_IMM(BPF_REG_2, 8), + BPF_MOV64_IMM(BPF_REG_3, 0), + BPF_EMIT_CALL(BPF_FUNC_ringbuf_reserve), + BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), + BPF_EXIT_INSN(), + BPF_MOV64_REG(BPF_REG_8, BPF_REG_0), + + BPF_MOV64_REG(BPF_REG_1, BPF_REG_8), + BPF_MOV64_IMM(BPF_REG_2, 0), + BPF_EMIT_CALL(BPF_FUNC_ringbuf_discard), + BPF_MOV64_IMM(BPF_REG_0, 0), + + BPF_STX_MEM(BPF_DW, BPF_REG_9, BPF_REG_8, 0), + BPF_EXIT_INSN() + }, + .fixup_map_array_48b = { 4 }, + .fixup_map_ringbuf = { 11 }, + .result = ACCEPT, + .result_unpriv = REJECT, + .errstr_unpriv = "R8 !read_ok" +}, diff --git a/tools/testing/selftests/kvm/.gitignore b/tools/testing/selftests/kvm/.gitignore index 2f0d705db9dba5ad0d9923658908d934f4024a93..05d980fb083d1758cf021689d984681ba132724d 100644 --- a/tools/testing/selftests/kvm/.gitignore +++ b/tools/testing/selftests/kvm/.gitignore @@ -41,6 +41,7 @@ /x86_64/svm_vmcall_test /x86_64/svm_int_ctl_test /x86_64/svm_nested_soft_inject_test +/x86_64/svm_nested_shutdown_test /x86_64/sync_regs_test /x86_64/tsc_msrs_test /x86_64/tsc_scaling_sync diff --git a/tools/testing/selftests/kvm/Makefile b/tools/testing/selftests/kvm/Makefile index 0172eb6cb6eee228cd2b3bea864abdb561f4346c..4a2caef2c9396f14e3a9098a13cdab0ca0b4a735 100644 --- a/tools/testing/selftests/kvm/Makefile +++ b/tools/testing/selftests/kvm/Makefile @@ -101,6 +101,7 @@ TEST_GEN_PROGS_x86_64 += x86_64/state_test TEST_GEN_PROGS_x86_64 += x86_64/vmx_preemption_timer_test TEST_GEN_PROGS_x86_64 += x86_64/svm_vmcall_test TEST_GEN_PROGS_x86_64 += x86_64/svm_int_ctl_test +TEST_GEN_PROGS_x86_64 += x86_64/svm_nested_shutdown_test TEST_GEN_PROGS_x86_64 += x86_64/svm_nested_soft_inject_test TEST_GEN_PROGS_x86_64 += x86_64/tsc_scaling_sync TEST_GEN_PROGS_x86_64 += x86_64/sync_regs_test diff --git a/tools/testing/selftests/kvm/include/x86_64/processor.h b/tools/testing/selftests/kvm/include/x86_64/processor.h index e8ca0d8a6a7e0a06d190bbceba030ffa95dae420..5da0c5e2a7afc40c8c078b3cfcc2a648f4de16ae 100644 --- a/tools/testing/selftests/kvm/include/x86_64/processor.h +++ b/tools/testing/selftests/kvm/include/x86_64/processor.h @@ -748,6 +748,19 @@ struct ex_regs { uint64_t rflags; }; +struct idt_entry { + uint16_t offset0; + uint16_t selector; + uint16_t ist : 3; + uint16_t : 5; + uint16_t type : 4; + uint16_t : 1; + uint16_t dpl : 2; + uint16_t p : 1; + uint16_t offset1; + uint32_t offset2; uint32_t reserved; +}; + void vm_init_descriptor_tables(struct kvm_vm *vm); void vcpu_init_descriptor_tables(struct kvm_vcpu *vcpu); void vm_install_exception_handler(struct kvm_vm *vm, int vector, diff --git a/tools/testing/selftests/kvm/lib/x86_64/processor.c b/tools/testing/selftests/kvm/lib/x86_64/processor.c index 39c4409ef56a6a95a2c16dfab2fbaa003a9e2f2b..41c1c73c464d4847f7cb4aba97ae19535f9839b7 100644 --- a/tools/testing/selftests/kvm/lib/x86_64/processor.c +++ b/tools/testing/selftests/kvm/lib/x86_64/processor.c @@ -1074,19 +1074,6 @@ void kvm_get_cpu_address_width(unsigned int *pa_bits, unsigned int *va_bits) } } -struct idt_entry { - uint16_t offset0; - uint16_t selector; - uint16_t ist : 3; - uint16_t : 5; - uint16_t type : 4; - uint16_t : 1; - uint16_t dpl : 2; - uint16_t p : 1; - uint16_t offset1; - uint32_t offset2; uint32_t reserved; -}; - static void set_idt_entry(struct kvm_vm *vm, int vector, unsigned long addr, int dpl, unsigned short selector) { diff --git a/tools/testing/selftests/kvm/x86_64/svm_nested_shutdown_test.c b/tools/testing/selftests/kvm/x86_64/svm_nested_shutdown_test.c new file mode 100644 index 0000000000000000000000000000000000000000..e73fcdef47bbe910a4643a33404c17c28635097d --- /dev/null +++ b/tools/testing/selftests/kvm/x86_64/svm_nested_shutdown_test.c @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * svm_nested_shutdown_test + * + * Copyright (C) 2022, Red Hat, Inc. + * + * Nested SVM testing: test that unintercepted shutdown in L2 doesn't crash the host + */ + +#include "test_util.h" +#include "kvm_util.h" +#include "processor.h" +#include "svm_util.h" + +static void l2_guest_code(struct svm_test_data *svm) +{ + __asm__ __volatile__("ud2"); +} + +static void l1_guest_code(struct svm_test_data *svm, struct idt_entry *idt) +{ + #define L2_GUEST_STACK_SIZE 64 + unsigned long l2_guest_stack[L2_GUEST_STACK_SIZE]; + struct vmcb *vmcb = svm->vmcb; + + generic_svm_setup(svm, l2_guest_code, + &l2_guest_stack[L2_GUEST_STACK_SIZE]); + + vmcb->control.intercept &= ~(BIT(INTERCEPT_SHUTDOWN)); + + idt[6].p = 0; // #UD is intercepted but its injection will cause #NP + idt[11].p = 0; // #NP is not intercepted and will cause another + // #NP that will be converted to #DF + idt[8].p = 0; // #DF will cause #NP which will cause SHUTDOWN + + run_guest(vmcb, svm->vmcb_gpa); + + /* should not reach here */ + GUEST_ASSERT(0); +} + +int main(int argc, char *argv[]) +{ + struct kvm_vcpu *vcpu; + struct kvm_run *run; + vm_vaddr_t svm_gva; + struct kvm_vm *vm; + + TEST_REQUIRE(kvm_cpu_has(X86_FEATURE_SVM)); + + vm = vm_create_with_one_vcpu(&vcpu, l1_guest_code); + vm_init_descriptor_tables(vm); + vcpu_init_descriptor_tables(vcpu); + + vcpu_alloc_svm(vm, &svm_gva); + + vcpu_args_set(vcpu, 2, svm_gva, vm->idt); + run = vcpu->run; + + vcpu_run(vcpu); + TEST_ASSERT(run->exit_reason == KVM_EXIT_SHUTDOWN, + "Got exit_reason other than KVM_EXIT_SHUTDOWN: %u (%s)\n", + run->exit_reason, + exit_reason_str(run->exit_reason)); + + kvm_vm_free(vm); +} diff --git a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c b/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c index 70b44f0b52fef2273c5dbb7d5a14858aa24dcf53..ead5d878a71c458348d9e86100016bc8bd2a72b4 100644 --- a/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c +++ b/tools/testing/selftests/kvm/x86_64/triple_fault_event_test.c @@ -3,6 +3,7 @@ #include "kvm_util.h" #include "processor.h" #include "vmx.h" +#include "svm_util.h" #include #include @@ -20,10 +21,11 @@ static void l2_guest_code(void) : : [port] "d" (ARBITRARY_IO_PORT) : "rax"); } -void l1_guest_code(struct vmx_pages *vmx) -{ #define L2_GUEST_STACK_SIZE 64 - unsigned long l2_guest_stack[L2_GUEST_STACK_SIZE]; +unsigned long l2_guest_stack[L2_GUEST_STACK_SIZE]; + +void l1_guest_code_vmx(struct vmx_pages *vmx) +{ GUEST_ASSERT(vmx->vmcs_gpa); GUEST_ASSERT(prepare_for_vmx_operation(vmx)); @@ -38,24 +40,53 @@ void l1_guest_code(struct vmx_pages *vmx) GUEST_DONE(); } +void l1_guest_code_svm(struct svm_test_data *svm) +{ + struct vmcb *vmcb = svm->vmcb; + + generic_svm_setup(svm, l2_guest_code, + &l2_guest_stack[L2_GUEST_STACK_SIZE]); + + /* don't intercept shutdown to test the case of SVM allowing to do so */ + vmcb->control.intercept &= ~(BIT(INTERCEPT_SHUTDOWN)); + + run_guest(vmcb, svm->vmcb_gpa); + + /* should not reach here, L1 should crash */ + GUEST_ASSERT(0); +} + int main(void) { struct kvm_vcpu *vcpu; struct kvm_run *run; struct kvm_vcpu_events events; - vm_vaddr_t vmx_pages_gva; struct ucall uc; - TEST_REQUIRE(kvm_cpu_has(X86_FEATURE_VMX)); + bool has_vmx = kvm_cpu_has(X86_FEATURE_VMX); + bool has_svm = kvm_cpu_has(X86_FEATURE_SVM); + + TEST_REQUIRE(has_vmx || has_svm); TEST_REQUIRE(kvm_has_cap(KVM_CAP_X86_TRIPLE_FAULT_EVENT)); - vm = vm_create_with_one_vcpu(&vcpu, l1_guest_code); - vm_enable_cap(vm, KVM_CAP_X86_TRIPLE_FAULT_EVENT, 1); + if (has_vmx) { + vm_vaddr_t vmx_pages_gva; + + vm = vm_create_with_one_vcpu(&vcpu, l1_guest_code_vmx); + vcpu_alloc_vmx(vm, &vmx_pages_gva); + vcpu_args_set(vcpu, 1, vmx_pages_gva); + } else { + vm_vaddr_t svm_gva; + + vm = vm_create_with_one_vcpu(&vcpu, l1_guest_code_svm); + vcpu_alloc_svm(vm, &svm_gva); + vcpu_args_set(vcpu, 1, svm_gva); + } + + vm_enable_cap(vm, KVM_CAP_X86_TRIPLE_FAULT_EVENT, 1); run = vcpu->run; - vcpu_alloc_vmx(vm, &vmx_pages_gva); - vcpu_args_set(vcpu, 1, vmx_pages_gva); vcpu_run(vcpu); TEST_ASSERT(run->exit_reason == KVM_EXIT_IO, @@ -78,13 +109,21 @@ int main(void) "No triple fault pending"); vcpu_run(vcpu); - switch (get_ucall(vcpu, &uc)) { - case UCALL_DONE: - break; - case UCALL_ABORT: - REPORT_GUEST_ASSERT(uc); - default: - TEST_FAIL("Unexpected ucall: %lu", uc.cmd); - } + if (has_svm) { + TEST_ASSERT(run->exit_reason == KVM_EXIT_SHUTDOWN, + "Got exit_reason other than KVM_EXIT_SHUTDOWN: %u (%s)\n", + run->exit_reason, + exit_reason_str(run->exit_reason)); + } else { + switch (get_ucall(vcpu, &uc)) { + case UCALL_DONE: + break; + case UCALL_ABORT: + REPORT_GUEST_ASSERT(uc); + default: + TEST_FAIL("Unexpected ucall: %lu", uc.cmd); + } + } + return 0; } diff --git a/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c b/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c index 8a5cb800f50ed4ffa7fc0b6497361a5e27c29d1c..2a5727188c8d30419f7a646cf645f1cf17af175b 100644 --- a/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c +++ b/tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c @@ -15,9 +15,13 @@ #include #include #include +#include #include +/* Defined in include/linux/kvm_types.h */ +#define GPA_INVALID (~(ulong)0) + #define SHINFO_REGION_GVA 0xc0000000ULL #define SHINFO_REGION_GPA 0xc0000000ULL #define SHINFO_REGION_SLOT 10 @@ -44,6 +48,8 @@ #define MIN_STEAL_TIME 50000 +#define SHINFO_RACE_TIMEOUT 2 /* seconds */ + #define __HYPERVISOR_set_timer_op 15 #define __HYPERVISOR_sched_op 29 #define __HYPERVISOR_event_channel_op 32 @@ -126,7 +132,7 @@ struct { struct kvm_irq_routing_entry entries[2]; } irq_routes; -bool guest_saw_irq; +static volatile bool guest_saw_irq; static void evtchn_handler(struct ex_regs *regs) { @@ -148,6 +154,7 @@ static void guest_wait_for_irq(void) static void guest_code(void) { struct vcpu_runstate_info *rs = (void *)RUNSTATE_VADDR; + int i; __asm__ __volatile__( "sti\n" @@ -325,6 +332,49 @@ static void guest_code(void) guest_wait_for_irq(); GUEST_SYNC(21); + /* Racing host ioctls */ + + guest_wait_for_irq(); + + GUEST_SYNC(22); + /* Racing vmcall against host ioctl */ + + ports[0] = 0; + + p = (struct sched_poll) { + .ports = ports, + .nr_ports = 1, + .timeout = 0 + }; + +wait_for_timer: + /* + * Poll for a timer wake event while the worker thread is mucking with + * the shared info. KVM XEN drops timer IRQs if the shared info is + * invalid when the timer expires. Arbitrarily poll 100 times before + * giving up and asking the VMM to re-arm the timer. 100 polls should + * consume enough time to beat on KVM without taking too long if the + * timer IRQ is dropped due to an invalid event channel. + */ + for (i = 0; i < 100 && !guest_saw_irq; i++) + asm volatile("vmcall" + : "=a" (rax) + : "a" (__HYPERVISOR_sched_op), + "D" (SCHEDOP_poll), + "S" (&p) + : "memory"); + + /* + * Re-send the timer IRQ if it was (likely) dropped due to the timer + * expiring while the event channel was invalid. + */ + if (!guest_saw_irq) { + GUEST_SYNC(23); + goto wait_for_timer; + } + guest_saw_irq = false; + + GUEST_SYNC(24); } static int cmp_timespec(struct timespec *a, struct timespec *b) @@ -352,11 +402,36 @@ static void handle_alrm(int sig) TEST_FAIL("IRQ delivery timed out"); } +static void *juggle_shinfo_state(void *arg) +{ + struct kvm_vm *vm = (struct kvm_vm *)arg; + + struct kvm_xen_hvm_attr cache_init = { + .type = KVM_XEN_ATTR_TYPE_SHARED_INFO, + .u.shared_info.gfn = SHINFO_REGION_GPA / PAGE_SIZE + }; + + struct kvm_xen_hvm_attr cache_destroy = { + .type = KVM_XEN_ATTR_TYPE_SHARED_INFO, + .u.shared_info.gfn = GPA_INVALID + }; + + for (;;) { + __vm_ioctl(vm, KVM_XEN_HVM_SET_ATTR, &cache_init); + __vm_ioctl(vm, KVM_XEN_HVM_SET_ATTR, &cache_destroy); + pthread_testcancel(); + }; + + return NULL; +} + int main(int argc, char *argv[]) { struct timespec min_ts, max_ts, vm_ts; struct kvm_vm *vm; + pthread_t thread; bool verbose; + int ret; verbose = argc > 1 && (!strncmp(argv[1], "-v", 3) || !strncmp(argv[1], "--verbose", 10)); @@ -785,6 +860,71 @@ int main(int argc, char *argv[]) case 21: TEST_ASSERT(!evtchn_irq_expected, "Expected event channel IRQ but it didn't happen"); + alarm(0); + + if (verbose) + printf("Testing shinfo lock corruption (KVM_XEN_HVM_EVTCHN_SEND)\n"); + + ret = pthread_create(&thread, NULL, &juggle_shinfo_state, (void *)vm); + TEST_ASSERT(ret == 0, "pthread_create() failed: %s", strerror(ret)); + + struct kvm_irq_routing_xen_evtchn uxe = { + .port = 1, + .vcpu = vcpu->id, + .priority = KVM_IRQ_ROUTING_XEN_EVTCHN_PRIO_2LEVEL + }; + + evtchn_irq_expected = true; + for (time_t t = time(NULL) + SHINFO_RACE_TIMEOUT; time(NULL) < t;) + __vm_ioctl(vm, KVM_XEN_HVM_EVTCHN_SEND, &uxe); + break; + + case 22: + TEST_ASSERT(!evtchn_irq_expected, + "Expected event channel IRQ but it didn't happen"); + + if (verbose) + printf("Testing shinfo lock corruption (SCHEDOP_poll)\n"); + + shinfo->evtchn_pending[0] = 1; + + evtchn_irq_expected = true; + tmr.u.timer.expires_ns = rs->state_entry_time + + SHINFO_RACE_TIMEOUT * 1000000000ULL; + vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &tmr); + break; + + case 23: + /* + * Optional and possibly repeated sync point. + * Injecting the timer IRQ may fail if the + * shinfo is invalid when the timer expires. + * If the timer has expired but the IRQ hasn't + * been delivered, rearm the timer and retry. + */ + vcpu_ioctl(vcpu, KVM_XEN_VCPU_GET_ATTR, &tmr); + + /* Resume the guest if the timer is still pending. */ + if (tmr.u.timer.expires_ns) + break; + + /* All done if the IRQ was delivered. */ + if (!evtchn_irq_expected) + break; + + tmr.u.timer.expires_ns = rs->state_entry_time + + SHINFO_RACE_TIMEOUT * 1000000000ULL; + vcpu_ioctl(vcpu, KVM_XEN_VCPU_SET_ATTR, &tmr); + break; + case 24: + TEST_ASSERT(!evtchn_irq_expected, + "Expected event channel IRQ but it didn't happen"); + + ret = pthread_cancel(thread); + TEST_ASSERT(ret == 0, "pthread_cancel() failed: %s", strerror(ret)); + + ret = pthread_join(thread, 0); + TEST_ASSERT(ret == 0, "pthread_join() failed: %s", strerror(ret)); goto done; case 0x20: diff --git a/tools/testing/selftests/landlock/Makefile b/tools/testing/selftests/landlock/Makefile index 6632bfff486b8a187e8e42a7f4b8d8f835e115ca..348e2dbdb4e0b96865f4465c5e7deaccf0639ffb 100644 --- a/tools/testing/selftests/landlock/Makefile +++ b/tools/testing/selftests/landlock/Makefile @@ -3,7 +3,6 @@ # First run: make -C ../../../.. headers_install CFLAGS += -Wall -O2 $(KHDR_INCLUDES) -LDLIBS += -lcap LOCAL_HDRS += common.h @@ -13,10 +12,12 @@ TEST_GEN_PROGS := $(src_test:.c=) TEST_GEN_PROGS_EXTENDED := true -# Static linking for short targets: +# Short targets: +$(TEST_GEN_PROGS): LDLIBS += -lcap $(TEST_GEN_PROGS_EXTENDED): LDFLAGS += -static include ../lib.mk -# Static linking for targets with $(OUTPUT)/ prefix: +# Targets with $(OUTPUT)/ prefix: +$(TEST_GEN_PROGS): LDLIBS += -lcap $(TEST_GEN_PROGS_EXTENDED): LDFLAGS += -static diff --git a/tools/testing/selftests/net/fcnal-test.sh b/tools/testing/selftests/net/fcnal-test.sh index 31c3b6ebd388bf31e5ee33c81faa805d54cd0512..21ca91473c0955dc3e3455729861af8d5f84dd64 100755 --- a/tools/testing/selftests/net/fcnal-test.sh +++ b/tools/testing/selftests/net/fcnal-test.sh @@ -4196,10 +4196,13 @@ elif [ "$TESTS" = "ipv6" ]; then TESTS="$TESTS_IPV6" fi -which nettest >/dev/null -if [ $? -ne 0 ]; then - echo "'nettest' command not found; skipping tests" - exit $ksft_skip +# nettest can be run from PATH or from same directory as this selftest +if ! which nettest >/dev/null; then + PATH=$PWD:$PATH + if ! which nettest >/dev/null; then + echo "'nettest' command not found; skipping tests" + exit $ksft_skip + fi fi declare -i nfail=0 diff --git a/tools/testing/selftests/net/fib_nexthops.sh b/tools/testing/selftests/net/fib_nexthops.sh index ee5e98204d3d2edbb2533744c7a829b45d132d6f..a47b26ab48f23b0ace3e247bb61cb8bcd9701db0 100755 --- a/tools/testing/selftests/net/fib_nexthops.sh +++ b/tools/testing/selftests/net/fib_nexthops.sh @@ -1228,6 +1228,17 @@ ipv4_fcnal() run_cmd "$IP ro add 172.16.101.0/24 nhid 21" run_cmd "$IP ro del 172.16.101.0/24 nexthop via 172.16.1.7 dev veth1 nexthop via 172.16.1.8 dev veth1" log_test $? 2 "Delete multipath route with only nh id based entry" + + run_cmd "$IP nexthop add id 22 via 172.16.1.6 dev veth1" + run_cmd "$IP ro add 172.16.102.0/24 nhid 22" + run_cmd "$IP ro del 172.16.102.0/24 dev veth1" + log_test $? 2 "Delete route when specifying only nexthop device" + + run_cmd "$IP ro del 172.16.102.0/24 via 172.16.1.6" + log_test $? 2 "Delete route when specifying only gateway" + + run_cmd "$IP ro del 172.16.102.0/24" + log_test $? 0 "Delete route when not specifying nexthop attributes" } ipv4_grp_fcnal() diff --git a/tools/testing/selftests/net/io_uring_zerocopy_tx.sh b/tools/testing/selftests/net/io_uring_zerocopy_tx.sh index 32aa6e9dacc26d943480114a02903007f506326e..9ac4456d48fcc6c3517ea7055c757102ff38d0a5 100755 --- a/tools/testing/selftests/net/io_uring_zerocopy_tx.sh +++ b/tools/testing/selftests/net/io_uring_zerocopy_tx.sh @@ -29,7 +29,7 @@ if [[ "$#" -eq "0" ]]; then for IP in "${IPs[@]}"; do for mode in $(seq 1 3); do $0 "$IP" udp -m "$mode" -t 1 -n 32 - $0 "$IP" tcp -m "$mode" -t 1 -n 32 + $0 "$IP" tcp -m "$mode" -t 1 -n 1 done done diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh index f3dd5f2a0272cbba80226ac915cbcd9e1927a9de..2eeaf4aca644deccd995a074c0bbd3fe5ba660a5 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -2152,7 +2152,7 @@ remove_tests() pm_nl_set_limits $ns2 1 3 pm_nl_add_endpoint $ns2 10.0.3.2 flags subflow pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow - run_tests $ns1 $ns2 10.0.1.1 0 -1 -2 slow + run_tests $ns1 $ns2 10.0.1.1 0 -1 -2 speed_10 chk_join_nr 3 3 3 chk_add_nr 1 1 chk_rm_nr 2 2 @@ -2165,7 +2165,7 @@ remove_tests() pm_nl_add_endpoint $ns1 10.0.3.1 flags signal pm_nl_add_endpoint $ns1 10.0.4.1 flags signal pm_nl_set_limits $ns2 3 3 - run_tests $ns1 $ns2 10.0.1.1 0 -3 0 slow + run_tests $ns1 $ns2 10.0.1.1 0 -3 0 speed_10 chk_join_nr 3 3 3 chk_add_nr 3 3 chk_rm_nr 3 3 invert @@ -2178,7 +2178,7 @@ remove_tests() pm_nl_add_endpoint $ns1 10.0.3.1 flags signal pm_nl_add_endpoint $ns1 10.0.14.1 flags signal pm_nl_set_limits $ns2 3 3 - run_tests $ns1 $ns2 10.0.1.1 0 -3 0 slow + run_tests $ns1 $ns2 10.0.1.1 0 -3 0 speed_10 chk_join_nr 1 1 1 chk_add_nr 3 3 chk_rm_nr 3 1 invert diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh index 0879da915014ffa62d2f6de93f18904f04b8feb2..80d36f7cfee8a9f09de93582c0634e087d869fdd 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -35,8 +35,9 @@ init() ns1="ns1-$rndh" ns2="ns2-$rndh" + ns_sbox="ns_sbox-$rndh" - for netns in "$ns1" "$ns2";do + for netns in "$ns1" "$ns2" "$ns_sbox";do ip netns add $netns || exit $ksft_skip ip -net $netns link set lo up ip netns exec $netns sysctl -q net.mptcp.enabled=1 @@ -73,7 +74,7 @@ init() cleanup() { - for netns in "$ns1" "$ns2"; do + for netns in "$ns1" "$ns2" "$ns_sbox"; do ip netns del $netns done rm -f "$cin" "$cout" @@ -243,7 +244,7 @@ do_mptcp_sockopt_tests() { local lret=0 - ./mptcp_sockopt + ip netns exec "$ns_sbox" ./mptcp_sockopt lret=$? if [ $lret -ne 0 ]; then @@ -252,7 +253,7 @@ do_mptcp_sockopt_tests() return fi - ./mptcp_sockopt -6 + ip netns exec "$ns_sbox" ./mptcp_sockopt -6 lret=$? if [ $lret -ne 0 ]; then diff --git a/tools/testing/selftests/net/mptcp/simult_flows.sh b/tools/testing/selftests/net/mptcp/simult_flows.sh index ffa13a957a363c45c8996af0bf8287a2a954ec07..40aeb5a71a2a6037ab5009e0b783f83956fc8ab7 100755 --- a/tools/testing/selftests/net/mptcp/simult_flows.sh +++ b/tools/testing/selftests/net/mptcp/simult_flows.sh @@ -247,9 +247,10 @@ run_test() tc -n $ns2 qdisc add dev ns2eth1 root netem rate ${rate1}mbit $delay1 tc -n $ns2 qdisc add dev ns2eth2 root netem rate ${rate2}mbit $delay2 - # time is measured in ms, account for transfer size, affegated link speed + # time is measured in ms, account for transfer size, aggregated link speed # and header overhead (10%) - local time=$((size * 8 * 1000 * 10 / (( $rate1 + $rate2) * 1024 *1024 * 9) )) + # ms byte -> bit 10% mbit -> kbit -> bit 10% + local time=$((1000 * size * 8 * 10 / ((rate1 + rate2) * 1000 * 1000 * 9) )) # mptcp_connect will do some sleeps to allow the mp_join handshake # completion (see mptcp_connect): 200ms on each side, add some slack diff --git a/tools/testing/selftests/net/pmtu.sh b/tools/testing/selftests/net/pmtu.sh index 736e358dc549d1b3621be9ce17705b8cc94fae6b..dfe3d287f01d24cdb9a1b538ff900e11b06e7d18 100755 --- a/tools/testing/selftests/net/pmtu.sh +++ b/tools/testing/selftests/net/pmtu.sh @@ -686,10 +686,12 @@ setup_xfrm() { } setup_nettest_xfrm() { - which nettest >/dev/null - if [ $? -ne 0 ]; then - echo "'nettest' command not found; skipping tests" - return 1 + if ! which nettest >/dev/null; then + PATH=$PWD:$PATH + if ! which nettest >/dev/null; then + echo "'nettest' command not found; skipping tests" + return 1 + fi fi [ ${1} -eq 6 ] && proto="-6" || proto="" diff --git a/tools/testing/selftests/net/udpgro.sh b/tools/testing/selftests/net/udpgro.sh index ebbd0b282432721f8b5265dab7b22bead3803304..0c743752669af704b8aaf4d2f02faccefae5d10f 100755 --- a/tools/testing/selftests/net/udpgro.sh +++ b/tools/testing/selftests/net/udpgro.sh @@ -5,6 +5,8 @@ readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)" +BPF_FILE="../bpf/xdp_dummy.bpf.o" + # set global exit status, but never reset nonzero one. check_err() { @@ -34,7 +36,7 @@ cfg_veth() { ip -netns "${PEER_NS}" addr add dev veth1 192.168.1.1/24 ip -netns "${PEER_NS}" addr add dev veth1 2001:db8::1/64 nodad ip -netns "${PEER_NS}" link set dev veth1 up - ip -n "${PEER_NS}" link set veth1 xdp object ../bpf/xdp_dummy.o section xdp + ip -n "${PEER_NS}" link set veth1 xdp object ${BPF_FILE} section xdp } run_one() { @@ -50,7 +52,7 @@ run_one() { echo "failed" & # Hack: let bg programs complete the startup - sleep 0.1 + sleep 0.2 ./udpgso_bench_tx ${tx_args} ret=$? wait $(jobs -p) @@ -117,7 +119,7 @@ run_one_2sock() { echo "failed" & # Hack: let bg programs complete the startup - sleep 0.1 + sleep 0.2 ./udpgso_bench_tx ${tx_args} -p 12345 sleep 0.1 # first UDP GSO socket should be closed at this point @@ -195,8 +197,8 @@ run_all() { return $ret } -if [ ! -f ../bpf/xdp_dummy.o ]; then - echo "Missing xdp_dummy helper. Build bpf selftest first" +if [ ! -f ${BPF_FILE} ]; then + echo "Missing ${BPF_FILE}. Build bpf selftest first" exit -1 fi diff --git a/tools/testing/selftests/net/udpgro_bench.sh b/tools/testing/selftests/net/udpgro_bench.sh index fad2d1a71cac36a996b03f2bcce615212f4fa6ac..894972877e8b0a445c29fc57ff5469af413241f3 100755 --- a/tools/testing/selftests/net/udpgro_bench.sh +++ b/tools/testing/selftests/net/udpgro_bench.sh @@ -5,6 +5,8 @@ readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)" +BPF_FILE="../bpf/xdp_dummy.bpf.o" + cleanup() { local -r jobs="$(jobs -p)" local -r ns="$(ip netns list|grep $PEER_NS)" @@ -34,12 +36,12 @@ run_one() { ip -netns "${PEER_NS}" addr add dev veth1 2001:db8::1/64 nodad ip -netns "${PEER_NS}" link set dev veth1 up - ip -n "${PEER_NS}" link set veth1 xdp object ../bpf/xdp_dummy.o section xdp + ip -n "${PEER_NS}" link set veth1 xdp object ${BPF_FILE} section xdp ip netns exec "${PEER_NS}" ./udpgso_bench_rx ${rx_args} -r & ip netns exec "${PEER_NS}" ./udpgso_bench_rx -t ${rx_args} -r & # Hack: let bg programs complete the startup - sleep 0.1 + sleep 0.2 ./udpgso_bench_tx ${tx_args} } @@ -80,8 +82,8 @@ run_all() { run_udp "${ipv6_args}" } -if [ ! -f ../bpf/xdp_dummy.o ]; then - echo "Missing xdp_dummy helper. Build bpf selftest first" +if [ ! -f ${BPF_FILE} ]; then + echo "Missing ${BPF_FILE}. Build bpf selftest first" exit -1 fi diff --git a/tools/testing/selftests/net/udpgro_frglist.sh b/tools/testing/selftests/net/udpgro_frglist.sh index 832c738cc3c299357146e1084a4741a57a640670..c9c4b9d65839016ae1834f3029f64e1fa11efe01 100755 --- a/tools/testing/selftests/net/udpgro_frglist.sh +++ b/tools/testing/selftests/net/udpgro_frglist.sh @@ -5,6 +5,8 @@ readonly PEER_NS="ns-peer-$(mktemp -u XXXXXX)" +BPF_FILE="../bpf/xdp_dummy.bpf.o" + cleanup() { local -r jobs="$(jobs -p)" local -r ns="$(ip netns list|grep $PEER_NS)" @@ -36,7 +38,7 @@ run_one() { ip netns exec "${PEER_NS}" ethtool -K veth1 rx-gro-list on - ip -n "${PEER_NS}" link set veth1 xdp object ../bpf/xdp_dummy.o section xdp + ip -n "${PEER_NS}" link set veth1 xdp object ${BPF_FILE} section xdp tc -n "${PEER_NS}" qdisc add dev veth1 clsact tc -n "${PEER_NS}" filter add dev veth1 ingress prio 4 protocol ipv6 bpf object-file ../bpf/nat6to4.o section schedcls/ingress6/nat_6 direct-action tc -n "${PEER_NS}" filter add dev veth1 egress prio 4 protocol ip bpf object-file ../bpf/nat6to4.o section schedcls/egress4/snat4 direct-action @@ -44,7 +46,7 @@ run_one() { ip netns exec "${PEER_NS}" ./udpgso_bench_rx ${rx_args} -r & # Hack: let bg programs complete the startup - sleep 0.1 + sleep 0.2 ./udpgso_bench_tx ${tx_args} } @@ -81,8 +83,8 @@ run_all() { run_udp "${ipv6_args}" } -if [ ! -f ../bpf/xdp_dummy.o ]; then - echo "Missing xdp_dummy helper. Build bpf selftest first" +if [ ! -f ${BPF_FILE} ]; then + echo "Missing ${BPF_FILE}. Build bpf selftest first" exit -1 fi diff --git a/tools/testing/selftests/net/udpgro_fwd.sh b/tools/testing/selftests/net/udpgro_fwd.sh index 1bcd82e1f662eea57b0c604187bbe865caca82bc..c079565add39224eb99e011f941b6f0a11c1648c 100755 --- a/tools/testing/selftests/net/udpgro_fwd.sh +++ b/tools/testing/selftests/net/udpgro_fwd.sh @@ -1,6 +1,7 @@ #!/bin/bash # SPDX-License-Identifier: GPL-2.0 +BPF_FILE="../bpf/xdp_dummy.bpf.o" readonly BASE="ns-$(mktemp -u XXXXXX)" readonly SRC=2 readonly DST=1 @@ -46,7 +47,7 @@ create_ns() { ip -n $BASE$ns addr add dev veth$ns $BM_NET_V4$ns/24 ip -n $BASE$ns addr add dev veth$ns $BM_NET_V6$ns/64 nodad done - ip -n $NS_DST link set veth$DST xdp object ../bpf/xdp_dummy.o section xdp 2>/dev/null + ip -n $NS_DST link set veth$DST xdp object ${BPF_FILE} section xdp 2>/dev/null } create_vxlan_endpoint() { diff --git a/tools/testing/selftests/net/veth.sh b/tools/testing/selftests/net/veth.sh index 430895d1a2b63e2748fc6a4f776051f79d13cdde..2d073595c620210254bc372bc428b05121e9b26b 100755 --- a/tools/testing/selftests/net/veth.sh +++ b/tools/testing/selftests/net/veth.sh @@ -1,6 +1,7 @@ #!/bin/sh # SPDX-License-Identifier: GPL-2.0 +BPF_FILE="../bpf/xdp_dummy.bpf.o" readonly STATS="$(mktemp -p /tmp ns-XXXXXX)" readonly BASE=`basename $STATS` readonly SRC=2 @@ -216,8 +217,8 @@ while getopts "hs:" option; do esac done -if [ ! -f ../bpf/xdp_dummy.o ]; then - echo "Missing xdp_dummy helper. Build bpf selftest first" +if [ ! -f ${BPF_FILE} ]; then + echo "Missing ${BPF_FILE}. Build bpf selftest first" exit 1 fi @@ -288,14 +289,14 @@ if [ $CPUS -gt 1 ]; then ip netns exec $NS_DST ethtool -L veth$DST rx 1 tx 2 2>/dev/null ip netns exec $NS_SRC ethtool -L veth$SRC rx 1 tx 2 2>/dev/null printf "%-60s" "bad setting: XDP with RX nr less than TX" - ip -n $NS_DST link set dev veth$DST xdp object ../bpf/xdp_dummy.o \ + ip -n $NS_DST link set dev veth$DST xdp object ${BPF_FILE} \ section xdp 2>/dev/null &&\ echo "fail - set operation successful ?!?" || echo " ok " # the following tests will run with multiple channels active ip netns exec $NS_SRC ethtool -L veth$SRC rx 2 ip netns exec $NS_DST ethtool -L veth$DST rx 2 - ip -n $NS_DST link set dev veth$DST xdp object ../bpf/xdp_dummy.o \ + ip -n $NS_DST link set dev veth$DST xdp object ${BPF_FILE} \ section xdp 2>/dev/null printf "%-60s" "bad setting: reducing RX nr below peer TX with XDP set" ip netns exec $NS_DST ethtool -L veth$DST rx 1 2>/dev/null &&\ @@ -311,7 +312,7 @@ if [ $CPUS -gt 2 ]; then chk_channels "setting invalid channels nr" $DST 2 2 fi -ip -n $NS_DST link set dev veth$DST xdp object ../bpf/xdp_dummy.o section xdp 2>/dev/null +ip -n $NS_DST link set dev veth$DST xdp object ${BPF_FILE} section xdp 2>/dev/null chk_gro_flag "with xdp attached - gro flag" $DST on chk_gro_flag " - peer gro flag" $SRC off chk_tso_flag " - tso flag" $SRC off diff --git a/tools/testing/selftests/netfilter/rpath.sh b/tools/testing/selftests/netfilter/rpath.sh index 2d8da7bd8ab7472af75eafe315e9843abc3199a6..f7311e66d2193d6654801d47296d3fe3cf338d8a 100755 --- a/tools/testing/selftests/netfilter/rpath.sh +++ b/tools/testing/selftests/netfilter/rpath.sh @@ -15,7 +15,7 @@ fi if ip6tables-legacy --version >/dev/null 2>&1; then ip6tables='ip6tables-legacy' -elif ! ip6tables --version >/dev/null 2>&1; then +elif ip6tables --version >/dev/null 2>&1; then ip6tables='ip6tables' else ip6tables='' @@ -62,9 +62,11 @@ ip -net "$ns1" a a fec0:42::2/64 dev v0 nodad ip -net "$ns2" a a fec0:42::1/64 dev d0 nodad # firewall matches to test -ip netns exec "$ns2" "$iptables" -t raw -A PREROUTING -s 192.168.0.0/16 -m rpfilter -ip netns exec "$ns2" "$ip6tables" -t raw -A PREROUTING -s fec0::/16 -m rpfilter -ip netns exec "$ns2" nft -f - < "$out"` if [ $? -eq 0 ]; then do_slabs_plotting "$out" @@ -159,7 +159,7 @@ do_preprocess() let lines=3 out=`basename "$in"`"-slabs-by-size" `cat "$in" | grep -A "$lines" 'Slabs sorted by size' |\ - egrep -iv '\-\-|Name|Slabs'\ + grep -E -iv '\-\-|Name|Slabs'\ | awk '{print $1" "$4" "$4-$2*$3}' > "$out"` if [ $? -eq 0 ]; then do_slabs_plotting "$out" diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 1376a47fedeedbd902db2f0b8ecfdd44cd87d9a0..fab4d379057853d5c44e2865799dc74efaf6c74e 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -1198,8 +1198,6 @@ static struct kvm *kvm_create_vm(unsigned long type, const char *fdname) goto out_err_no_arch_destroy_vm; } - kvm->max_halt_poll_ns = halt_poll_ns; - r = kvm_arch_init_vm(kvm, type); if (r) goto out_err_no_arch_destroy_vm; @@ -3377,9 +3375,6 @@ static void grow_halt_poll_ns(struct kvm_vcpu *vcpu) if (val < grow_start) val = grow_start; - if (val > vcpu->kvm->max_halt_poll_ns) - val = vcpu->kvm->max_halt_poll_ns; - vcpu->halt_poll_ns = val; out: trace_kvm_halt_poll_ns_grow(vcpu->vcpu_id, val, old); @@ -3483,6 +3478,24 @@ static inline void update_halt_poll_stats(struct kvm_vcpu *vcpu, ktime_t start, } } +static unsigned int kvm_vcpu_max_halt_poll_ns(struct kvm_vcpu *vcpu) +{ + struct kvm *kvm = vcpu->kvm; + + if (kvm->override_halt_poll_ns) { + /* + * Ensure kvm->max_halt_poll_ns is not read before + * kvm->override_halt_poll_ns. + * + * Pairs with the smp_wmb() when enabling KVM_CAP_HALT_POLL. + */ + smp_rmb(); + return READ_ONCE(kvm->max_halt_poll_ns); + } + + return READ_ONCE(halt_poll_ns); +} + /* * Emulate a vCPU halt condition, e.g. HLT on x86, WFI on arm, etc... If halt * polling is enabled, busy wait for a short time before blocking to avoid the @@ -3491,12 +3504,18 @@ static inline void update_halt_poll_stats(struct kvm_vcpu *vcpu, ktime_t start, */ void kvm_vcpu_halt(struct kvm_vcpu *vcpu) { + unsigned int max_halt_poll_ns = kvm_vcpu_max_halt_poll_ns(vcpu); bool halt_poll_allowed = !kvm_arch_no_poll(vcpu); - bool do_halt_poll = halt_poll_allowed && vcpu->halt_poll_ns; ktime_t start, cur, poll_end; bool waited = false; + bool do_halt_poll; u64 halt_ns; + if (vcpu->halt_poll_ns > max_halt_poll_ns) + vcpu->halt_poll_ns = max_halt_poll_ns; + + do_halt_poll = halt_poll_allowed && vcpu->halt_poll_ns; + start = cur = poll_end = ktime_get(); if (do_halt_poll) { ktime_t stop = ktime_add_ns(start, vcpu->halt_poll_ns); @@ -3535,18 +3554,21 @@ void kvm_vcpu_halt(struct kvm_vcpu *vcpu) update_halt_poll_stats(vcpu, start, poll_end, !waited); if (halt_poll_allowed) { + /* Recompute the max halt poll time in case it changed. */ + max_halt_poll_ns = kvm_vcpu_max_halt_poll_ns(vcpu); + if (!vcpu_valid_wakeup(vcpu)) { shrink_halt_poll_ns(vcpu); - } else if (vcpu->kvm->max_halt_poll_ns) { + } else if (max_halt_poll_ns) { if (halt_ns <= vcpu->halt_poll_ns) ; /* we had a long block, shrink polling */ else if (vcpu->halt_poll_ns && - halt_ns > vcpu->kvm->max_halt_poll_ns) + halt_ns > max_halt_poll_ns) shrink_halt_poll_ns(vcpu); /* we had a short halt and our poll time is too small */ - else if (vcpu->halt_poll_ns < vcpu->kvm->max_halt_poll_ns && - halt_ns < vcpu->kvm->max_halt_poll_ns) + else if (vcpu->halt_poll_ns < max_halt_poll_ns && + halt_ns < max_halt_poll_ns) grow_halt_poll_ns(vcpu); } else { vcpu->halt_poll_ns = 0; @@ -4581,10 +4603,23 @@ static int kvm_vm_ioctl_enable_cap_generic(struct kvm *kvm, return -EINVAL; kvm->max_halt_poll_ns = cap->args[0]; + + /* + * Ensure kvm->override_halt_poll_ns does not become visible + * before kvm->max_halt_poll_ns. + * + * Pairs with the smp_rmb() in kvm_vcpu_max_halt_poll_ns(). + */ + smp_wmb(); + kvm->override_halt_poll_ns = true; + return 0; } case KVM_CAP_DIRTY_LOG_RING: case KVM_CAP_DIRTY_LOG_RING_ACQ_REL: + if (!kvm_vm_ioctl_check_extension_generic(kvm, cap->cap)) + return -EINVAL; + return kvm_vm_ioctl_enable_dirty_log_ring(kvm, cap->args[0]); default: return kvm_vm_ioctl_enable_cap(kvm, cap); @@ -5409,6 +5444,7 @@ static int kvm_debugfs_open(struct inode *inode, struct file *file, int (*get)(void *, u64 *), int (*set)(void *, u64), const char *fmt) { + int ret; struct kvm_stat_data *stat_data = (struct kvm_stat_data *) inode->i_private; @@ -5420,15 +5456,13 @@ static int kvm_debugfs_open(struct inode *inode, struct file *file, if (!kvm_get_kvm_safe(stat_data->kvm)) return -ENOENT; - if (simple_attr_open(inode, file, get, - kvm_stats_debugfs_mode(stat_data->desc) & 0222 - ? set : NULL, - fmt)) { + ret = simple_attr_open(inode, file, get, + kvm_stats_debugfs_mode(stat_data->desc) & 0222 + ? set : NULL, fmt); + if (ret) kvm_put_kvm(stat_data->kvm); - return -ENOMEM; - } - return 0; + return ret; } static int kvm_debugfs_release(struct inode *inode, struct file *file) diff --git a/virt/kvm/pfncache.c b/virt/kvm/pfncache.c index 68ff41d39545277c5f8b7143fbeea50d77743e0c..7c248193ca26e2c3b3f14947b4514a5171897866 100644 --- a/virt/kvm/pfncache.c +++ b/virt/kvm/pfncache.c @@ -81,6 +81,9 @@ bool kvm_gfn_to_pfn_cache_check(struct kvm *kvm, struct gfn_to_pfn_cache *gpc, { struct kvm_memslots *slots = kvm_memslots(kvm); + if (!gpc->active) + return false; + if ((gpa & ~PAGE_MASK) + len > PAGE_SIZE) return false; @@ -240,10 +243,11 @@ int kvm_gfn_to_pfn_cache_refresh(struct kvm *kvm, struct gfn_to_pfn_cache *gpc, { struct kvm_memslots *slots = kvm_memslots(kvm); unsigned long page_offset = gpa & ~PAGE_MASK; - kvm_pfn_t old_pfn, new_pfn; + bool unmap_old = false; unsigned long old_uhva; + kvm_pfn_t old_pfn; void *old_khva; - int ret = 0; + int ret; /* * If must fit within a single page. The 'len' argument is @@ -261,6 +265,11 @@ int kvm_gfn_to_pfn_cache_refresh(struct kvm *kvm, struct gfn_to_pfn_cache *gpc, write_lock_irq(&gpc->lock); + if (!gpc->active) { + ret = -EINVAL; + goto out_unlock; + } + old_pfn = gpc->pfn; old_khva = gpc->khva - offset_in_page(gpc->khva); old_uhva = gpc->uhva; @@ -288,9 +297,15 @@ int kvm_gfn_to_pfn_cache_refresh(struct kvm *kvm, struct gfn_to_pfn_cache *gpc, if (!gpc->valid || old_uhva != gpc->uhva) { ret = hva_to_pfn_retry(kvm, gpc); } else { - /* If the HVA→PFN mapping was already valid, don't unmap it. */ + /* + * If the HVA→PFN mapping was already valid, don't unmap it. + * But do update gpc->khva because the offset within the page + * may have changed. + */ + gpc->khva = old_khva + page_offset; old_pfn = KVM_PFN_ERR_FAULT; old_khva = NULL; + ret = 0; } out: @@ -305,14 +320,15 @@ int kvm_gfn_to_pfn_cache_refresh(struct kvm *kvm, struct gfn_to_pfn_cache *gpc, gpc->khva = NULL; } - /* Snapshot the new pfn before dropping the lock! */ - new_pfn = gpc->pfn; + /* Detect a pfn change before dropping the lock! */ + unmap_old = (old_pfn != gpc->pfn); +out_unlock: write_unlock_irq(&gpc->lock); mutex_unlock(&gpc->refresh_lock); - if (old_pfn != new_pfn) + if (unmap_old) gpc_unmap_khva(kvm, old_pfn, old_khva); return ret; @@ -346,42 +362,61 @@ void kvm_gfn_to_pfn_cache_unmap(struct kvm *kvm, struct gfn_to_pfn_cache *gpc) } EXPORT_SYMBOL_GPL(kvm_gfn_to_pfn_cache_unmap); +void kvm_gpc_init(struct gfn_to_pfn_cache *gpc) +{ + rwlock_init(&gpc->lock); + mutex_init(&gpc->refresh_lock); +} +EXPORT_SYMBOL_GPL(kvm_gpc_init); -int kvm_gfn_to_pfn_cache_init(struct kvm *kvm, struct gfn_to_pfn_cache *gpc, - struct kvm_vcpu *vcpu, enum pfn_cache_usage usage, - gpa_t gpa, unsigned long len) +int kvm_gpc_activate(struct kvm *kvm, struct gfn_to_pfn_cache *gpc, + struct kvm_vcpu *vcpu, enum pfn_cache_usage usage, + gpa_t gpa, unsigned long len) { WARN_ON_ONCE(!usage || (usage & KVM_GUEST_AND_HOST_USE_PFN) != usage); if (!gpc->active) { - rwlock_init(&gpc->lock); - mutex_init(&gpc->refresh_lock); - gpc->khva = NULL; gpc->pfn = KVM_PFN_ERR_FAULT; gpc->uhva = KVM_HVA_ERR_BAD; gpc->vcpu = vcpu; gpc->usage = usage; gpc->valid = false; - gpc->active = true; spin_lock(&kvm->gpc_lock); list_add(&gpc->list, &kvm->gpc_list); spin_unlock(&kvm->gpc_lock); + + /* + * Activate the cache after adding it to the list, a concurrent + * refresh must not establish a mapping until the cache is + * reachable by mmu_notifier events. + */ + write_lock_irq(&gpc->lock); + gpc->active = true; + write_unlock_irq(&gpc->lock); } return kvm_gfn_to_pfn_cache_refresh(kvm, gpc, gpa, len); } -EXPORT_SYMBOL_GPL(kvm_gfn_to_pfn_cache_init); +EXPORT_SYMBOL_GPL(kvm_gpc_activate); -void kvm_gfn_to_pfn_cache_destroy(struct kvm *kvm, struct gfn_to_pfn_cache *gpc) +void kvm_gpc_deactivate(struct kvm *kvm, struct gfn_to_pfn_cache *gpc) { if (gpc->active) { + /* + * Deactivate the cache before removing it from the list, KVM + * must stall mmu_notifier events until all users go away, i.e. + * until gpc->lock is dropped and refresh is guaranteed to fail. + */ + write_lock_irq(&gpc->lock); + gpc->active = false; + write_unlock_irq(&gpc->lock); + spin_lock(&kvm->gpc_lock); list_del(&gpc->list); spin_unlock(&kvm->gpc_lock); kvm_gfn_to_pfn_cache_unmap(kvm, gpc); - gpc->active = false; } } -EXPORT_SYMBOL_GPL(kvm_gfn_to_pfn_cache_destroy); +EXPORT_SYMBOL_GPL(kvm_gpc_deactivate);